Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BREAKING] copy*(): use ino to check identical paths #582

Merged
merged 2 commits into from
Jul 17, 2018
Merged

Conversation

manidlou
Copy link
Collaborator

...copy*() and long journey of dealing with lots of edge cases and trying to find a proper and yet simple approach to catch as many of those 🐛s as we can!

fix #565. Also possibly fix #546 as we don't use fs.readlink anymore to check the paths.

I guess it's breaking as for the case of symlinks, we throw error with descriptive message instead of silently return.

  • use ino to check if src and dest are the same (Thanks to @TanninOne for bringing that idea). This is beyond checking just paths. Since fs.lstat stats the link itself not the actual file that it points to, we have to do an extra fs.stat to get the actual ino of both src and dest. This essentially relies on node's internal api to give us correct inos! This also catches the cases like when dest parent is a symlink that points to the parent of src! some 😲 stuff! (we used to only check src and dest themselves not their parents!)

  • check isSrcSubdir when checking paths before start copying (achieved the same results with shorter code!)

@coveralls
Copy link

coveralls commented May 16, 2018

Coverage Status

Coverage decreased (-0.6%) to 86.228% when pulling 456241a on copy-same-path into 3eceb91 on master.

Copy link
Collaborator

@RyanZim RyanZim left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@RyanZim RyanZim added this to the 7.0.0 milestone Jul 17, 2018
@RyanZim RyanZim changed the base branch from master to v7-dev July 17, 2018 00:52
@RyanZim RyanZim merged commit e340861 into v7-dev Jul 17, 2018
@manidlou manidlou deleted the copy-same-path branch July 17, 2018 04:27
facebook-github-bot pushed a commit to facebook/flipper that referenced this pull request Nov 14, 2018
Summary:
Changes are mostly bug fixes, that shouldn't affect us. From the change log:

7.0.1 / 2018-11-07
------------------

- Fix `removeSync()` on Windows, in some cases, it would error out with `ENOTEMPTY` ([#646](jprichardson/node-fs-extra#646))
- Document `mode` option for `ensureDir*()` ([#587](jprichardson/node-fs-extra#587))
- Don't include documentation files in npm package tarball ([#642](jprichardson/node-fs-extra#642), [#643](jprichardson/node-fs-extra#643))

7.0.0 / 2018-07-16
------------------

- **BREAKING:** Refine `copy*()` handling of symlinks to properly detect symlinks that point to the same file. ([#582](jprichardson/node-fs-extra#582))
- Fix bug with copying write-protected directories ([#600](jprichardson/node-fs-extra#600))
- Universalify `fs.lchmod()` ([#596](jprichardson/node-fs-extra#596))
- Add `engines` field to `package.json` ([#580](jprichardson/node-fs-extra#580))

6.0.1 / 2018-05-09
------------------

- Fix `fs.promises` `ExperimentalWarning` on Node v10.1.0 ([#578](jprichardson/node-fs-extra#578))

6.0.0 / 2018-05-01
------------------

- Drop support for Node.js versions 4, 5, & 7 ([#564](jprichardson/node-fs-extra#564))
- Rewrite `move` to use `fs.rename` where possible ([#549](jprichardson/node-fs-extra#549))
- Don't convert relative paths to absolute paths for `filter` ([#554](jprichardson/node-fs-extra#554))
- `copy*`'s behavior when `preserveTimestamps` is `false` has been OS-dependent since 5.0.0, but that's now explicitly noted in the docs ([#563](jprichardson/node-fs-extra#563))
- Fix subdirectory detection for `copy*` & `move*` ([#541](jprichardson/node-fs-extra#541))
- Handle case-insensitive paths correctly in `copy*` ([#568](jprichardson/node-fs-extra#568))

Reviewed By: jknoxville

Differential Revision: D13023753

fbshipit-source-id: 1ecc6f40be4c8146f92dd29ede846b5ab56765ea
larry-x-yu pushed a commit to larry-x-yu/ember-try that referenced this pull request Feb 7, 2023
fs-extra brought in a breaking change here:
jprichardson/node-fs-extra#582

where it breaks ember-try when copying node_modules/ and there's
a symlink in it. The bug would either prevent ember-try from
running or cleaning up after try-each.

@co-authored-by hjdivad
hjdivad pushed a commit to larry-x-yu/ember-try that referenced this pull request Feb 8, 2023
fs-extra brought in a breaking change here:
jprichardson/node-fs-extra#582

where it breaks ember-try when copying node_modules/ and there's
a symlink in it. The bug would either prevent ember-try from
running or cleaning up after try-each.

@co-authored-by hjdivad
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants