Skip to content

fs: preserve directory timestamps in cp - #65540

Open
abhi128nandan wants to merge 1 commit into
nodejs:mainfrom
abhi128nandan:fix-cp-directory-timestamps
Open

fs: preserve directory timestamps in cp#65540
abhi128nandan wants to merge 1 commit into
nodejs:mainfrom
abhi128nandan:fix-cp-directory-timestamps

Conversation

@abhi128nandan

@abhi128nandan abhi128nandan commented Aug 25, 2026

Copy link
Copy Markdown

fs: preserve directory timestamps in cp

This fixes an issue where fs.cp and fs.cpSync (when a filter is
provided) correctly restore mtime and atime on copied files when
preserveTimestamps: true is passed, but skip restoring them for
directories.

The fix applies the existing setDestTimestamps helper to directories,
ensuring it is called after directory creation/copying but before any
modes are restored (since restoring a read-only mode would prevent
timestamp modification).

Note: This fix covers fs.cp() (async, all cases) and fs.cpSync()
when a filter is provided. The native fast path used by cpSync()
without a filter (CpSyncCopyDir in src/node_file.cc) has the
identical gap and is left for a separate follow-up contribution, since
it requires native code changes and a different review path.

@nodejs-github-bot nodejs-github-bot added fs Issues and PRs related to the fs subsystem / file system. needs-ci PRs that need a full CI run. labels Aug 25, 2026
This fixes an issue where fs.cp and fs.cpSync (when a filter is
provided) correctly restore mtime and atime on copied files when
preserveTimestamps: true is passed, but skip restoring them for
directories.

The fix applies the existing setDestTimestamps helper to directories,
ensuring it is called after directory creation/copying but before any
modes are restored (since restoring a read-only mode would prevent
timestamp modification).

Note: This fix covers fs.cp() (async, all cases) and fs.cpSync()
when a filter is provided. The native fast path used by cpSync()
without a filter (CpSyncCopyDir in src/node_file.cc) has the
identical gap and is left for a separate follow-up contribution, since
it requires native code changes and a different review path.

Signed-off-by: Abhinandan Kumar <abhi128618@gmail.com>
@abhi128nandan
abhi128nandan force-pushed the fix-cp-directory-timestamps branch from 70b223c to 321146b Compare August 25, 2026 11:46
Comment thread lib/internal/fs/cp/cp-sync.js
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fs Issues and PRs related to the fs subsystem / file system. needs-ci PRs that need a full CI run.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants