[PATCH 3 of 3 STABLE] largefiles: prevent committing a missing largefile
Matt Harbison
mharbison72 at gmail.com
Sun Jan 24 06:25:46 UTC 2016
# HG changeset patch
# User Matt Harbison <matt_harbison at yahoo.com>
# Date 1453612219 18000
# Sun Jan 24 00:10:19 2016 -0500
# Branch stable
# Node ID 7df484912e12acea1fcb1fbe6bcf4efddead779c
# Parent f20852b3f6c8f9ef04cdfb902dafb3e8923a4a20
largefiles: prevent committing a missing largefile
Previously, if the largefile was deleted at the time of a commit, the standin
was silently not updated and its current state (possibly garbage) was recorded.
The test makes it look like this is somewhat of an edge case, but the same thing
happens when an `hg revert` followed by `rm` changes the standin.
diff --git a/hgext/largefiles/lfutil.py b/hgext/largefiles/lfutil.py
--- a/hgext/largefiles/lfutil.py
+++ b/hgext/largefiles/lfutil.py
@@ -319,6 +319,9 @@
hash = hashfile(file)
executable = getexecutable(file)
writestandin(repo, standin, hash, executable)
+ return True
+
+ return False
def readstandin(repo, filename, node=None):
'''read hex hash from standin for filename at given node, or working
@@ -552,11 +555,15 @@
# stay refreshed. No harm done: the user modified them and
# asked to commit them, so sooner or later we're going to
# refresh the standins. Might as well leave them refreshed.
+ missing = set()
lfdirstate = openlfdirstate(ui, repo)
for fstandin in standins:
lfile = splitstandin(fstandin)
if lfdirstate[lfile] != 'r':
- updatestandin(repo, fstandin)
+ if not updatestandin(repo, fstandin):
+ missing.add(fstandin)
+
+ standins = [s for s in standins if s not in missing]
# Cook up a new matcher that only matches regular files or
# standins corresponding to the big files requested by the
diff --git a/tests/test-largefiles-cache.t b/tests/test-largefiles-cache.t
--- a/tests/test-largefiles-cache.t
+++ b/tests/test-largefiles-cache.t
@@ -19,6 +19,12 @@
$ hg rm large
$ hg commit -m 'branchhead without largefile' large
$ hg up -qr 0
+ $ rm large
+ $ echo "0000000000000000000000000000000000000000" > .hglf/large
+ $ hg commit -m 'commit missing file with corrupt standin' large
+ nothing changed (1 missing files, see 'hg status')
+ [1]
+ $ hg up -Cqr 0
$ cd ..
Discard all cached largefiles in USERCACHE
More information about the Mercurial-devel
mailing list