[PATCH STABLE V2] largefiles: prevent committing a missing largefile

Matt Harbison mharbison72 at gmail.com
Wed Jan 27 01:11:09 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 70f7e55f661904541966e115843e6753524a7664
# 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.

Aside from the second invocation of this in lfutil.updatestandinsbymatch()
(which is what triggers this test case), the three other uses are guarded by
dirstate checks for added or modified, or an existence check in the filesystem.
So aborting in lfutil.updatestandins() should be safe, and will avoid silent
skips in the future if this is used elsewhere.

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,8 @@
         hash = hashfile(file)
         executable = getexecutable(file)
         writestandin(repo, standin, hash, executable)
+    else:
+        raise error.Abort(_('%s: file not found!') % splitstandin(standin))
 
 def readstandin(repo, filename, node=None):
     '''read hex hash from standin for filename at given node, or working
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
+  abort: large: file not found!
+  [255]
+  $ hg up -Cqr 0
   $ cd ..
 
 Discard all cached largefiles in USERCACHE


More information about the Mercurial-devel mailing list