Mercurial > hg
annotate tests/test-fix-metadata.t @ 45761:341e014fe0fb stable
repoview: only pin obsolete wdir parents while there are unresolved conflicts
I noticed after doing an update from an obsolete revision with a dirty wdir that
the obsolete commit stayed visible for no obvious reason. It was decided in
85b03b1e4715 not to clear mergestate once all of the conflicts were resolved, in
order to allow re-resolving. Since the point of pinning the obsolete parents
was to allow resolving in the first place (aaeccdb6e654), it makes sense to also
gate it on whether or not there are any remaining files to resolve. This might
result in pinning again if files are marked unresolved again, but that seems
reasonable, given that it still solves the original issue.
Note that this isn't purely cosmetic- pushing with a pinned obsolete revision is
likely to cause complaints about pushing multiple heads or other unexpected
errors. So the faster it comes out of that state, the better.
Differential Revision: https://phab.mercurial-scm.org/D9248
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Fri, 23 Oct 2020 22:20:08 -0400 |
parents | 2d70b1118af2 |
children |
rev | line source |
---|---|
42194
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
1 A python hook for "hg fix" that prints out the number of files and revisions |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
2 that were affected, along with which fixer tools were applied. Also checks how |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
3 many times it sees a specific key generated by one of the fixer tools defined |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
4 below. |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
5 |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
6 $ cat >> $TESTTMP/postfixhook.py <<EOF |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
7 > import collections |
42429
6ed04139ed37
py3: fix test-fix-metadata.t
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42194
diff
changeset
|
8 > def file(ui, repo, rev=None, path=b'', metadata=None, **kwargs): |
6ed04139ed37
py3: fix test-fix-metadata.t
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42194
diff
changeset
|
9 > ui.status(b'fixed %s in revision %d using %s\n' % |
6ed04139ed37
py3: fix test-fix-metadata.t
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42194
diff
changeset
|
10 > (path, rev, b', '.join(metadata.keys()))) |
42194
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
11 > def summarize(ui, repo, replacements=None, wdirwritten=False, |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
12 > metadata=None, **kwargs): |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
13 > counts = collections.defaultdict(int) |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
14 > keys = 0 |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
15 > for fixername, metadatalist in metadata.items(): |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
16 > for metadata in metadatalist: |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
17 > if metadata is None: |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
18 > continue |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
19 > counts[fixername] += 1 |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
20 > if 'key' in metadata: |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
21 > keys += 1 |
42429
6ed04139ed37
py3: fix test-fix-metadata.t
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42194
diff
changeset
|
22 > ui.status(b'saw "key" %d times\n' % (keys,)) |
42194
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
23 > for name, count in sorted(counts.items()): |
42429
6ed04139ed37
py3: fix test-fix-metadata.t
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42194
diff
changeset
|
24 > ui.status(b'fixed %d files with %s\n' % (count, name)) |
42194
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
25 > if replacements: |
42429
6ed04139ed37
py3: fix test-fix-metadata.t
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42194
diff
changeset
|
26 > ui.status(b'fixed %d revisions\n' % (len(replacements),)) |
42194
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
27 > if wdirwritten: |
42429
6ed04139ed37
py3: fix test-fix-metadata.t
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42194
diff
changeset
|
28 > ui.status(b'fixed the working copy\n') |
42194
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
29 > EOF |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
30 |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
31 Some mock output for fixer tools that demonstrate what could go wrong with |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
32 expecting the metadata output format. |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
33 |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
34 $ printf 'new content\n' > $TESTTMP/missing |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
35 $ printf 'not valid json\0new content\n' > $TESTTMP/invalid |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
36 $ printf '{"key": "value"}\0new content\n' > $TESTTMP/valid |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
37 |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
38 Configure some fixer tools based on the output defined above, and enable the |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
39 hooks defined above. Disable parallelism to make output of the parallel file |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
40 processing phase stable. |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
41 |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
42 $ cat >> $HGRCPATH <<EOF |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
43 > [extensions] |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
44 > fix = |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
45 > [fix] |
42757
2d70b1118af2
fix: correctly parse the :metadata subconfig
Danny Hooper <hooper@google.com>
parents:
42429
diff
changeset
|
46 > metadatafalse:command=cat $TESTTMP/missing |
2d70b1118af2
fix: correctly parse the :metadata subconfig
Danny Hooper <hooper@google.com>
parents:
42429
diff
changeset
|
47 > metadatafalse:pattern=metadatafalse |
2d70b1118af2
fix: correctly parse the :metadata subconfig
Danny Hooper <hooper@google.com>
parents:
42429
diff
changeset
|
48 > metadatafalse:metadata=false |
42194
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
49 > missing:command=cat $TESTTMP/missing |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
50 > missing:pattern=missing |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
51 > missing:metadata=true |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
52 > invalid:command=cat $TESTTMP/invalid |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
53 > invalid:pattern=invalid |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
54 > invalid:metadata=true |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
55 > valid:command=cat $TESTTMP/valid |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
56 > valid:pattern=valid |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
57 > valid:metadata=true |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
58 > [hooks] |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
59 > postfixfile = python:$TESTTMP/postfixhook.py:file |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
60 > postfix = python:$TESTTMP/postfixhook.py:summarize |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
61 > [worker] |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
62 > enabled=false |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
63 > EOF |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
64 |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
65 See what happens when we execute each of the fixer tools. Some print warnings, |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
66 some write back to the file. |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
67 |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
68 $ hg init repo |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
69 $ cd repo |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
70 |
42757
2d70b1118af2
fix: correctly parse the :metadata subconfig
Danny Hooper <hooper@google.com>
parents:
42429
diff
changeset
|
71 $ printf "old content\n" > metadatafalse |
42194
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
72 $ printf "old content\n" > invalid |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
73 $ printf "old content\n" > missing |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
74 $ printf "old content\n" > valid |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
75 $ hg add -q |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
76 |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
77 $ hg fix -w |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
78 ignored invalid output from fixer tool: invalid |
42757
2d70b1118af2
fix: correctly parse the :metadata subconfig
Danny Hooper <hooper@google.com>
parents:
42429
diff
changeset
|
79 fixed metadatafalse in revision 2147483647 using metadatafalse |
42194
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
80 ignored invalid output from fixer tool: missing |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
81 fixed valid in revision 2147483647 using valid |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
82 saw "key" 1 times |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
83 fixed 1 files with valid |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
84 fixed the working copy |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
85 |
42757
2d70b1118af2
fix: correctly parse the :metadata subconfig
Danny Hooper <hooper@google.com>
parents:
42429
diff
changeset
|
86 $ cat metadatafalse |
2d70b1118af2
fix: correctly parse the :metadata subconfig
Danny Hooper <hooper@google.com>
parents:
42429
diff
changeset
|
87 new content |
2d70b1118af2
fix: correctly parse the :metadata subconfig
Danny Hooper <hooper@google.com>
parents:
42429
diff
changeset
|
88 $ cat missing |
42194
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
89 old content |
42757
2d70b1118af2
fix: correctly parse the :metadata subconfig
Danny Hooper <hooper@google.com>
parents:
42429
diff
changeset
|
90 $ cat invalid |
42194
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
91 old content |
42757
2d70b1118af2
fix: correctly parse the :metadata subconfig
Danny Hooper <hooper@google.com>
parents:
42429
diff
changeset
|
92 $ cat valid |
42194
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
93 new content |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
94 |
0da689a60163
fix: allow fixer tools to return metadata in addition to the file content
Danny Hooper <hooper@google.com>
parents:
diff
changeset
|
95 $ cd .. |