Mercurial > hg
annotate tests/test-remotefilelog-strip.t @ 46847:47a9527731c3
remotefilelog: include file contents in bundles produced during strip
`hg strip` and other things that use repair.strip (such as the narrow
extension's `hg tracked --removeinclude`) will "save" some commits that have a
higher revision number than the oldest commit we're stripping, but aren't
actually descended from any of the commits that we're stripping. It saves them
in a bundle, and then reapplies them to the repo.
Remotefilelog doesn't generally participate in strip, it doesn't contribute
files to either the backup bundle or the "saved" bundle, and doesn't adjust
linknodes when commits are stripped. This can break things like push, which
rely on the linknodes.
This change makes it so that remotefilelog includes files in these bundles
during strip operations. During reapplication, the files are reapplied from the
bundle, and the linknode is properly updated.
Differential Revision: https://phab.mercurial-scm.org/D10320
author | Kyle Lippincott <spectral@google.com> |
---|---|
date | Tue, 06 Apr 2021 14:21:03 -0700 |
parents | 2819df466cae |
children |
rev | line source |
---|---|
46846
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
1 #require no-windows |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
2 |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
3 $ . "$TESTDIR/remotefilelog-library.sh" |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
4 |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
5 $ hg init master |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
6 $ cd master |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
7 $ cat >> .hg/hgrc <<EOF |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
8 > [remotefilelog] |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
9 > server=True |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
10 > EOF |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
11 $ echo x > x |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
12 $ hg commit -qAm x |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
13 |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
14 $ cd .. |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
15 |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
16 $ hgcloneshallow ssh://user@dummy/master shallow -q |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
17 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob) |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
18 $ cd shallow |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
19 |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
20 $ cat >> $TESTTMP/get_file_linknode.py <<EOF |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
21 > from mercurial import node, registrar, scmutil |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
22 > cmdtable = {} |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
23 > command = registrar.command(cmdtable) |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
24 > @command(b'debug-file-linknode', [(b'r', b'rev', b'.', b'rev')], b'hg debug-file-linknode FILE') |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
25 > def debug_file_linknode(ui, repo, file, **opts): |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
26 > rflctx = scmutil.revsingle(repo.unfiltered(), opts['rev']).filectx(file) |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
27 > ui.status(b'%s\n' % node.hex(rflctx.ancestormap()[rflctx._filenode][2])) |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
28 > EOF |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
29 |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
30 $ cat >> .hg/hgrc <<EOF |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
31 > [ui] |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
32 > interactive=1 |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
33 > [extensions] |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
34 > strip= |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
35 > get_file_linknode=$TESTTMP/get_file_linknode.py |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
36 > [experimental] |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
37 > evolution=createmarkers,allowunstable |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
38 > EOF |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
39 $ echo a > a |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
40 $ hg commit -qAm msg1 |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
41 $ hg commit --amend 're:^$' -m msg2 |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
42 $ hg commit --amend 're:^$' -m msg3 |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
43 $ hg --hidden log -G -T '{rev} {node|short}' |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
44 @ 3 df91f74b871e |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
45 | |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
46 | x 2 70494d7ec5ef |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
47 |/ |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
48 | x 1 1e423846dde0 |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
49 |/ |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
50 o 0 b292c1e3311f |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
51 |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
52 $ hg debug-file-linknode -r 70494d a |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
53 df91f74b871e064c89afa1fe9e2f66afa2c125df |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
54 $ hg --hidden strip -r 1 3 |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
55 0 files updated, 0 files merged, 1 files removed, 0 files unresolved |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
56 saved backup bundle to $TESTTMP/shallow/.hg/strip-backup/df91f74b871e-c94d67be-backup.hg |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
57 |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
58 $ hg --hidden log -G -T '{rev} {node|short}' |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
59 o 1 70494d7ec5ef |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
60 | |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
61 @ 0 b292c1e3311f |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
62 |
46847
47a9527731c3
remotefilelog: include file contents in bundles produced during strip
Kyle Lippincott <spectral@google.com>
parents:
46846
diff
changeset
|
63 Demonstrate that the linknode points to a commit that is actually in the repo |
47a9527731c3
remotefilelog: include file contents in bundles produced during strip
Kyle Lippincott <spectral@google.com>
parents:
46846
diff
changeset
|
64 after the strip operation. Otherwise remotefilelog has to search every commit in |
47a9527731c3
remotefilelog: include file contents in bundles produced during strip
Kyle Lippincott <spectral@google.com>
parents:
46846
diff
changeset
|
65 the repository looking for a valid linkrev every time it's queried, such as |
47a9527731c3
remotefilelog: include file contents in bundles produced during strip
Kyle Lippincott <spectral@google.com>
parents:
46846
diff
changeset
|
66 during push. |
46846
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
67 $ hg debug-file-linknode -r 70494d a |
46847
47a9527731c3
remotefilelog: include file contents in bundles produced during strip
Kyle Lippincott <spectral@google.com>
parents:
46846
diff
changeset
|
68 70494d7ec5ef6cd3cd6939a9fd2812f9956bf553 |