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

Yuya Nishihara yuya at tcha.org
Thu Jan 28 08:26:04 CST 2016


On Tue, 26 Jan 2016 20:11:09 -0500, Matt Harbison wrote:
> # 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.

Looks good, pushed to the clowncopter, thanks.

> --- 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!

We'll need another workaround for "hg commit" (with no filename).


More information about the Mercurial-devel mailing list