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))
# deleting files that should be missing
todelete = [f.path for f in snapmanifest.deleted]
if todelete:
ui.note(_("will delete %s\n") % ",".join(todelete))
m = scmutil.match(repo[None], todelete)
cmdutil.remove(ui, repo, m, "", after=False, force=False)
for file in snapmanifest.deleted:
try:
ui.note(_("will delete %s\n") % file.path)
util.unlink(repo.wjoin(file.path))
except OSError:
ui.warn(_("%s cannot be removed\n") % file.path)
# populating the untracked files
for file in snapmanifest.unknown:
checkaddfile(repo.svfs.lfslocalblobstore, file, repo.wvfs, force)

View File

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

View File

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