test-fix-metadata.t
86 lines
| 2.8 KiB
| text/troff
|
Tads3Lexer
/ tests / test-fix-metadata.t
Danny Hooper
|
r42372 | A python hook for "hg fix" that prints out the number of files and revisions | ||
that were affected, along with which fixer tools were applied. Also checks how | ||||
many times it sees a specific key generated by one of the fixer tools defined | ||||
below. | ||||
$ cat >> $TESTTMP/postfixhook.py <<EOF | ||||
> import collections | ||||
Pulkit Goyal
|
r42622 | > def file(ui, repo, rev=None, path=b'', metadata=None, **kwargs): | ||
> ui.status(b'fixed %s in revision %d using %s\n' % | ||||
> (path, rev, b', '.join(metadata.keys()))) | ||||
Danny Hooper
|
r42372 | > def summarize(ui, repo, replacements=None, wdirwritten=False, | ||
> metadata=None, **kwargs): | ||||
> counts = collections.defaultdict(int) | ||||
> keys = 0 | ||||
> for fixername, metadatalist in metadata.items(): | ||||
> for metadata in metadatalist: | ||||
> if metadata is None: | ||||
> continue | ||||
> counts[fixername] += 1 | ||||
> if 'key' in metadata: | ||||
> keys += 1 | ||||
Pulkit Goyal
|
r42622 | > ui.status(b'saw "key" %d times\n' % (keys,)) | ||
Danny Hooper
|
r42372 | > for name, count in sorted(counts.items()): | ||
Pulkit Goyal
|
r42622 | > ui.status(b'fixed %d files with %s\n' % (count, name)) | ||
Danny Hooper
|
r42372 | > if replacements: | ||
Pulkit Goyal
|
r42622 | > ui.status(b'fixed %d revisions\n' % (len(replacements),)) | ||
Danny Hooper
|
r42372 | > if wdirwritten: | ||
Pulkit Goyal
|
r42622 | > ui.status(b'fixed the working copy\n') | ||
Danny Hooper
|
r42372 | > EOF | ||
Some mock output for fixer tools that demonstrate what could go wrong with | ||||
expecting the metadata output format. | ||||
$ printf 'new content\n' > $TESTTMP/missing | ||||
$ printf 'not valid json\0new content\n' > $TESTTMP/invalid | ||||
$ printf '{"key": "value"}\0new content\n' > $TESTTMP/valid | ||||
Configure some fixer tools based on the output defined above, and enable the | ||||
hooks defined above. Disable parallelism to make output of the parallel file | ||||
processing phase stable. | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [extensions] | ||||
> fix = | ||||
> [fix] | ||||
> missing:command=cat $TESTTMP/missing | ||||
> missing:pattern=missing | ||||
> missing:metadata=true | ||||
> invalid:command=cat $TESTTMP/invalid | ||||
> invalid:pattern=invalid | ||||
> invalid:metadata=true | ||||
> valid:command=cat $TESTTMP/valid | ||||
> valid:pattern=valid | ||||
> valid:metadata=true | ||||
> [hooks] | ||||
> postfixfile = python:$TESTTMP/postfixhook.py:file | ||||
> postfix = python:$TESTTMP/postfixhook.py:summarize | ||||
> [worker] | ||||
> enabled=false | ||||
> EOF | ||||
See what happens when we execute each of the fixer tools. Some print warnings, | ||||
some write back to the file. | ||||
$ hg init repo | ||||
$ cd repo | ||||
$ printf "old content\n" > invalid | ||||
$ printf "old content\n" > missing | ||||
$ printf "old content\n" > valid | ||||
$ hg add -q | ||||
$ hg fix -w | ||||
ignored invalid output from fixer tool: invalid | ||||
ignored invalid output from fixer tool: missing | ||||
fixed valid in revision 2147483647 using valid | ||||
saw "key" 1 times | ||||
fixed 1 files with valid | ||||
fixed the working copy | ||||
$ cat missing invalid valid | ||||
old content | ||||
old content | ||||
new content | ||||
$ cd .. | ||||