Mercurial > hg
annotate tests/test-remotefilelog-strip.t @ 46846:2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
### Background
Every time a commit is modified, remotefilelog updates the metadata for the file
object to point to the new commit (I believe that this is different from
non-remotefilelog hg, which leaves the linkrevs pointing to the obsolete
commits; doing otherwise would involve changing data in the middle of revlogs).
With `hg strip` (or other things that use repair.strip()), when you strip a
commit that's not the tip of the revlog, there may be commits after it in revnum
order that aren't descended from it and don't need to be (and shouldn't be)
stripped. These are "saved" by strip in a bundle, and that bundle is reapplied
after truncating the relevant revlogs.
### The problem
Remotefilelog generally avoids being involved at all in strip. Currently, that
includes even providing file contents to this backup bundle. This can cause the
linknode to point to a changeset that is no longer in the repository.
Example:
```
@ 3 df91f74b871e
|
| x 2 70494d7ec5ef
|/
| x 1 1e423846dde0
|/
o 0 b292c1e3311f
```
Commits 1, 2, and 3 are related via obsolescence, and are description-only
changes. The linknode for the file in these commits changed each time we updated
the description, so it's currently df91f7. If I strip commits 1 and 3, however,
the linknode *remains* df91f7, which no longer exists in the repository. Commit
70494d was "saved", stripped, and then reapplied, so it is in the repository (as
revision 1 instead of 2 now), and was unobsoleted since the obsmarker was
stripped as well. The linknode for the file should point to 70494d, the most
recent commit that is in the repository that modified the file.
Remotefilelog has some logic to handle broken linknodes, but it can be slow. We
have actually disabled it internally because it's too slow for our purposes.
Differential Revision: https://phab.mercurial-scm.org/D10319
author | Kyle Lippincott <spectral@google.com> |
---|---|
date | Tue, 06 Apr 2021 15:38:33 -0700 |
parents | |
children | 47a9527731c3 |
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 |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
63 FIXME: This should point to a commit that actually exists in the repo. Otherwise |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
64 remotefilelog has to search every commit in the repository looking for a valid |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
65 linkrev every time it's queried, such as during push. |
2819df466cae
tests: add test-remotefilelog-strip.t to demonstrate an issue with linknodes
Kyle Lippincott <spectral@google.com>
parents:
diff
changeset
|
66 $ 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
|
67 df91f74b871e064c89afa1fe9e2f66afa2c125df |