[PATCH RFC] changegroup: leave out all parent file revisions when creating bundles
Mads Kiilerich
mads at kiilerich.com
Mon Oct 14 12:24:15 EDT 2019
On 10/11/19 7:57 PM, Mads Kiilerich wrote:
> # HG changeset patch
> # User Mads Kiilerich <madski at unity3d.com>
> # Date 1570804632 -7200
> # Fri Oct 11 16:37:12 2019 +0200
> # Node ID 72d12ee773795edc163f73b9160e5d29022878dd
> # Parent 52781d57313d512efb7150603104bea3ca11d0eb
> changegroup: leave out all parent file revisions when creating bundles
I'm not sure the analysis nailed the root cause. It is tricky to
reproduce good test cases.
But one problem we could fix by pruning ancestors instead of using linkrevs:
Create a repo with aliasing:
$ hg init repo1
$ cd repo1
$ touch f
$ hg ci -Aqm 0
$ echo 1 > f
$ hg ci -m 1f1
$ hg up -cqr 0
$ hg branch -q b
$ echo 1 > f # linkrev aliasing to rev 1
$ hg ci -m 2f1
When bundling rev 2 for a repo that has rev 1, f will be skipped even
though it
isn't an ancestor:
$ hg bundle -v -r 2 --base 1 bundle.hg
1 changesets found
uncompressed size of bundle content:
185 (changelog)
163 (manifests)
A bundle with missing ancestor revisions would fail unbundling with "abort:
00changelog.i at d681519c3ea7: unknown parent!". But if using
fastpathlinkrev and
the ancestors are present but the file revs are not, the bundle can be
applied
but will break on use:
$ hg clone -qU . -r 0 repo2
$ hg -R repo2 pull bundle.hg
pulling from bundle.hg
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 0 changes to 0 files
new changesets 5e690c649d09 (1 drafts)
(run 'hg update' to get a working copy)
$ hg -R repo2 up -r tip
abort: data/f.i at d0c79e1d3309: no match found!
[255]
/Mads
More information about the Mercurial-devel
mailing list