diff options
| author | Carlos Fernandez <carlosfsanz@meta.com> | 2026-05-07 09:00:33 -0700 |
|---|---|---|
| committer | gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com <gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2026-05-12 11:10:43 -0700 |
| commit | 5534f164d6aff567f7ea0b5b41e2e5bb35a0212c (patch) | |
| tree | c5cfaedb059c82a61bf0972b743cd5470fdc7fb9 /release | |
| parent | 67e52a120b210f70b7a5de06996d9036f9f68011 (diff) | |
| download | git-repo-5534f164d6aff567f7ea0b5b41e2e5bb35a0212c.tar.gz | |
linkfile: Handle directory-to-symlink transitions safely
When a manifest changes from individual linkfiles inside a directory
(e.g. dest=".llms/rules", dest=".llms/skills") to a single linkfile
for the whole directory (e.g. dest=".llms", src="dot-llms"), two
things need to happen:
1. __linkIt must replace a real directory with a symlink. Use
os.rmdir() instead of platform_utils.remove() for real directories.
rmdir only removes empty directories, so user-created content is
never deleted.
2. UpdateCopyLinkfileList must handle the cleanup correctly:
- Use os.rmdir() for directories (safe for non-empty)
- Remove empty parent directories after cleaning old dests
- Retry _CopyAndLinkFiles for all projects, since in interleaved
sync mode _CopyAndLinkFiles runs before cleanup and may have
failed because the directory was not yet empty
Change-Id: I0437b80beab98bce064cea81c11c47d699be91aa
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/569243
Tested-by: Carlos Fernandez <carlosfsanz@meta.com>
Reviewed-by: Mike Frysinger <vapier@google.com>
Reviewed-by: Gavin Mak <gavinmak@google.com>
Commit-Queue: Carlos Fernandez <carlosfsanz@meta.com>
Diffstat (limited to 'release')
0 files changed, 0 insertions, 0 deletions
