snapshot: bugfix - make files missing instead of removed on checkout

Summary: Due to a bug the missing files from the snapshot manifest were marked as removed after checkout.

Reviewed By: markbt

Differential Revision: D16831796

fbshipit-source-id: 200ccf34b16392a73d38294f1fcb43bfa9a94690
This commit is contained in:
Aleksei Kulikov 2019-08-21 10:34:34 -07:00 committed by Facebook Github Bot
parent 8cebfd9c65
commit 2401518de9
3 changed files with 11 additions and 10 deletions

View File

@ -366,11 +366,12 @@ def checkouttosnapshotmanifest(ui, repo, snapmanifest, force=True):
vfs.write(file.path, store.read(file.oid)) vfs.write(file.path, store.read(file.oid))
# deleting files that should be missing # deleting files that should be missing
todelete = [f.path for f in snapmanifest.deleted] for file in snapmanifest.deleted:
if todelete: try:
ui.note(_("will delete %s\n") % ",".join(todelete)) ui.note(_("will delete %s\n") % file.path)
m = scmutil.match(repo[None], todelete) util.unlink(repo.wjoin(file.path))
cmdutil.remove(ui, repo, m, "", after=False, force=False) except OSError:
ui.warn(_("%s cannot be removed\n") % file.path)
# populating the untracked files # populating the untracked files
for file in snapmanifest.unknown: for file in snapmanifest.unknown:
checkaddfile(repo.svfs.lfslocalblobstore, file, repo.wvfs, force) checkaddfile(repo.svfs.lfslocalblobstore, file, repo.wvfs, force)

View File

@ -179,7 +179,7 @@
$ hg status --verbose $ hg status --verbose
M bar/file M bar/file
M mergefile M mergefile
R foofile ! foofile
? bar/untracked ? bar/untracked
? mergefile.orig ? mergefile.orig
? untrackedfile ? untrackedfile
@ -202,7 +202,7 @@
.hg/merge/state .hg/merge/state
.hg/merge/state2 .hg/merge/state2
$ hg debugsnapshot --clean $ hg debugsnapshot --clean
snapshot e203bc3b0e5140c52ec5ba01fcb7071af5ea40de created snapshot ccdff83036b6b05c657a1eebff7dc523b865f6ce created
3 files updated, 0 files merged, 0 files removed, 0 files unresolved 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg status --verbose $ hg status --verbose
$ test -d .hg/merge $ test -d .hg/merge
@ -215,6 +215,7 @@
# Finally, resolve the conflict # Finally, resolve the conflict
$ hg resolve --mark mergefile $ hg resolve --mark mergefile
(no more unresolved files) (no more unresolved files)
$ hg remove foofile
$ hg status --verbose $ hg status --verbose
M bar/file M bar/file
M mergefile M mergefile

View File

@ -87,7 +87,6 @@
$ hg debugcheckoutsnapshotmanifest --verbose "$OID" $ hg debugcheckoutsnapshotmanifest --verbose "$OID"
will delete existingfile will delete existingfile
removing existingfile
will add untrackedfile will add untrackedfile
snapshot checkout complete snapshot checkout complete
@ -139,7 +138,7 @@
$ hg update $ hg update
0 files updated, 0 files merged, 0 files removed, 0 files unresolved 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg status $ hg status
R existingfile ! existingfile
? untrackedfile ? untrackedfile
$ hg debugcheckoutsnapshotmanifest --verbose "$MERGEOID" $ hg debugcheckoutsnapshotmanifest --verbose "$MERGEOID"
will add new.orig will add new.orig
@ -150,7 +149,7 @@
will add rebasestate will add rebasestate
snapshot checkout complete snapshot checkout complete
$ hg status --verbose $ hg status --verbose
R existingfile ! existingfile
? new.orig ? new.orig
? untrackedfile ? untrackedfile
# The repository is in an unfinished *rebase* state. # The repository is in an unfinished *rebase* state.