Mercurial > hg
annotate tests/test-ui-verbosity.py @ 16506:fc4e0fecf403 stable
patch: fix patch hunk/metdata synchronization (issue3384)
Git patches are parsed in two phases: 1) extract metadata, 2) parse actual
deltas and merge them with the previous metadata. We do this to avoid
dependency issues like "modify a; copy a to b", where "b" must be copied from
the unmodified "a".
Issue3384 is caused by flaky code I wrote to synchronize the patch metadata
with the emitted hunk:
if (gitpatches and
(gitpatches[-1][0] == afile or gitpatches[-1][1] == bfile)):
gp = gitpatches.pop()[2]
With a patch like:
diff --git a/a b/c
copy from a
copy to c
--- a/a
+++ b/c
@@ -1,1 +1,2 @@
a
+a
@@ -2,1 +2,2 @@
a
+a
diff --git a/a b/a
--- a/a
+++ b/a
@@ -1,1 +1,2 @@
a
+b
the first hunk of the first block is matched with the metadata for the block
"diff --git a/a b/c", then the second hunk of the first block is matched with
the metadata of the second block "diff --git a/a b/a", because of the "or" in
the code paste above. Turning the "or" into an "and" is not enough as we have
to deal with /dev/null cases for each file.
We I remove this broken piece of code:
# copy/rename + modify should modify target, not source
if gp.op in ('COPY', 'DELETE', 'RENAME', 'ADD') or gp.mode:
afile = bfile
because "afile = bfile" set "afile" to stuff like "b/file" instead of "a/file",
and because this only happens for git patches, which afile/bfile are ignored
anyway by applydiff().
v2:
- Avoid a traceback on git metadata desynchronization
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Sat, 21 Apr 2012 21:40:25 +0200 |
parents | 4c50552fc9bc |
children | 870dae78234c |
rev | line source |
---|---|
3349
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
1 import os |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
2 from mercurial import ui |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
3 |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
4 hgrc = os.environ['HGRCPATH'] |
5523
5db730475d6d
tests/*: avoid losing the original settings from $HGRCPATH
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3349
diff
changeset
|
5 f = open(hgrc) |
5db730475d6d
tests/*: avoid losing the original settings from $HGRCPATH
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3349
diff
changeset
|
6 basehgrc = f.read() |
5db730475d6d
tests/*: avoid losing the original settings from $HGRCPATH
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3349
diff
changeset
|
7 f.close() |
3349
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
8 |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
9 print ' hgrc settings command line options final result ' |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
10 print ' quiet verbo debug quiet verbo debug quiet verbo debug' |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
11 |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
12 for i in xrange(64): |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
13 hgrc_quiet = bool(i & 1<<0) |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
14 hgrc_verbose = bool(i & 1<<1) |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
15 hgrc_debug = bool(i & 1<<2) |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
16 cmd_quiet = bool(i & 1<<3) |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
17 cmd_verbose = bool(i & 1<<4) |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
18 cmd_debug = bool(i & 1<<5) |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
19 |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
20 f = open(hgrc, 'w') |
5523
5db730475d6d
tests/*: avoid losing the original settings from $HGRCPATH
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3349
diff
changeset
|
21 f.write(basehgrc) |
5db730475d6d
tests/*: avoid losing the original settings from $HGRCPATH
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3349
diff
changeset
|
22 f.write('\n[ui]\n') |
3349
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
23 if hgrc_quiet: |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
24 f.write('quiet = True\n') |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
25 if hgrc_verbose: |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
26 f.write('verbose = True\n') |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
27 if hgrc_debug: |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
28 f.write('debug = True\n') |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
29 f.close() |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
30 |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
31 u = ui.ui() |
8136
6b5522cb2ad2
ui: refactor option setting
Matt Mackall <mpm@selenic.com>
parents:
5523
diff
changeset
|
32 if cmd_quiet or cmd_debug or cmd_verbose: |
6b5522cb2ad2
ui: refactor option setting
Matt Mackall <mpm@selenic.com>
parents:
5523
diff
changeset
|
33 u.setconfig('ui', 'quiet', str(bool(cmd_quiet))) |
6b5522cb2ad2
ui: refactor option setting
Matt Mackall <mpm@selenic.com>
parents:
5523
diff
changeset
|
34 u.setconfig('ui', 'verbose', str(bool(cmd_verbose))) |
6b5522cb2ad2
ui: refactor option setting
Matt Mackall <mpm@selenic.com>
parents:
5523
diff
changeset
|
35 u.setconfig('ui', 'debug', str(bool(cmd_debug))) |
3349
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
36 |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
37 check = '' |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
38 if u.debugflag: |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
39 if not u.verbose or u.quiet: |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
40 check = ' *' |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
41 elif u.verbose and u.quiet: |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
42 check = ' +' |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
43 |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
44 print ('%2d %5s %5s %5s %5s %5s %5s -> %5s %5s %5s%s' |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
45 % (i, hgrc_quiet, hgrc_verbose, hgrc_debug, |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
46 cmd_quiet, cmd_verbose, cmd_debug, |
25d270e0b27f
ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
47 u.quiet, u.verbose, u.debugflag, check)) |