##// END OF EJS Templates
errors: stop passing non-strings to Abort's constructor...
errors: stop passing non-strings to Abort's constructor The next patch will change `Abort`'s constructor and `__bytes__` functions and they will start assuming that the first argument is the messages as `bytes`. Differential Revision: https://phab.mercurial-scm.org/D9178

File last commit:

r46014:037e88d4 default
r46273:a736ab68 default
Show More
test-annotate.t
1202 lines | 22.8 KiB | text/troff | Tads3Lexer
Martin von Zweigbergk
tests: make merge conflicts explicit in `hg annotate` tests...
r42327 $ cat >> "$HGRCPATH" << EOF
> [ui]
> merge = :merge3
> EOF
Martin Geisler
tests: unify test-annotate
r11852
init
Patrick Mezard
annotate: support diff whitespace filtering flags (issue3030)...
r15528 $ hg init repo
$ cd repo
Martin Geisler
tests: unify test-annotate
r11852
commit
$ echo 'a' > a
$ hg ci -A -m test -u nobody -d '1 0'
adding a
annotate -c
$ hg annotate -c a
8435f90966e4: a
annotate -cl
$ hg annotate -cl a
8435f90966e4:1: a
annotate -d
$ hg annotate -d a
Thu Jan 01 00:00:01 1970 +0000: a
annotate -n
$ hg annotate -n a
0: a
annotate -nl
$ hg annotate -nl a
0:1: a
annotate -u
$ hg annotate -u a
nobody: a
annotate -cdnu
$ hg annotate -cdnu a
nobody 0 8435f90966e4 Thu Jan 01 00:00:01 1970 +0000: a
annotate -cdnul
$ hg annotate -cdnul a
nobody 0 8435f90966e4 Thu Jan 01 00:00:01 1970 +0000:1: a
Yuya Nishihara
annotate: port to generic templater enabled by hidden -T option...
r22480 annotate (JSON)
$ hg annotate -Tjson a
[
{
Yuya Nishihara
annotate: restructure formatter output to be nested list (BC)...
r32649 "lines": [{"line": "a\n", "rev": 0}],
"path": "a"
Yuya Nishihara
annotate: port to generic templater enabled by hidden -T option...
r22480 }
]
$ hg annotate -Tjson -cdfnul a
[
{
Yuya Nishihara
annotate: rename {line_number} to {lineno} (BC)...
r39965 "lines": [{"date": [1.0, 0], "line": "a\n", "lineno": 1, "node": "8435f90966e442695d2ded29fdade2bac5ad8065", "path": "a", "rev": 0, "user": "nobody"}],
Yuya Nishihara
annotate: restructure formatter output to be nested list (BC)...
r32649 "path": "a"
Yuya Nishihara
annotate: port to generic templater enabled by hidden -T option...
r22480 }
]
Yuya Nishihara
annotate: add support for template keywords and functions depending on ctx
r37000 log-like templating
$ hg annotate -T'{lines % "{rev} {node|shortest}: {line}"}' a
0 8435: a
Yuya Nishihara
annotate: rename {line_number} to {lineno} (BC)...
r39965 '{lineno}' field should be populated as necessary
Yuya Nishihara
annotate: automatically populate fields referenced from template...
r38377
Yuya Nishihara
annotate: rename {line_number} to {lineno} (BC)...
r39965 $ hg annotate -T'{lines % "{rev}:{lineno}: {line}"}' a
Yuya Nishihara
annotate: automatically populate fields referenced from template...
r38377 0:1: a
Yuya Nishihara
formatter: look for template symbols from the associated name...
r38465 $ hg annotate -Ta a \
Yuya Nishihara
annotate: rename {line_number} to {lineno} (BC)...
r39965 > --config templates.a='"{lines % "{rev}:{lineno}: {line}"}"'
Yuya Nishihara
formatter: look for template symbols from the associated name...
r38465 0:1: a
Yuya Nishihara
annotate: automatically populate fields referenced from template...
r38377
Martin Geisler
tests: unify test-annotate
r11852 $ cat <<EOF >>a
> a
> a
> EOF
$ hg ci -ma1 -d '1 0'
$ hg cp a b
$ hg ci -mb -d '1 0'
$ cat <<EOF >> b
> b4
> b5
> b6
> EOF
$ hg ci -mb2 -d '2 0'
Yuya Nishihara
formatter: make nested items somewhat readable in template output
r37518 default output of '{lines}' should be readable
$ hg annotate -T'{lines}' a
0: a
1: a
1: a
$ hg annotate -T'{join(lines, "\n")}' a
0: a
1: a
1: a
several filters can be applied to '{lines}'
Yuya Nishihara
formatter: remove template resources from nested items before generating JSON
r37520 $ hg annotate -T'{lines|json}\n' a
[{"line": "a\n", "rev": 0}, {"line": "a\n", "rev": 1}, {"line": "a\n", "rev": 1}]
Yuya Nishihara
formatter: make nested items somewhat readable in template output
r37518 $ hg annotate -T'{lines|stringify}' a
0: a
1: a
1: a
$ hg annotate -T'{lines|count}\n' a
3
Yuya Nishihara
annotate: restructure formatter output to be nested list (BC)...
r32649 annotate multiple files (JSON)
$ hg annotate -Tjson a b
[
{
"lines": [{"line": "a\n", "rev": 0}, {"line": "a\n", "rev": 1}, {"line": "a\n", "rev": 1}],
"path": "a"
},
{
"lines": [{"line": "a\n", "rev": 0}, {"line": "a\n", "rev": 1}, {"line": "a\n", "rev": 1}, {"line": "b4\n", "rev": 3}, {"line": "b5\n", "rev": 3}, {"line": "b6\n", "rev": 3}],
"path": "b"
}
]
annotate multiple files (template)
Yuya Nishihara
formatter: rename {abspath}/{file} to {path}, and drop relative {path} (BC)...
r39405 $ hg annotate -T'== {path} ==\n{lines % "{rev}: {line}"}' a b
Yuya Nishihara
annotate: restructure formatter output to be nested list (BC)...
r32649 == a ==
0: a
1: a
1: a
== b ==
0: a
1: a
1: a
3: b4
3: b5
3: b6
Martin Geisler
tests: unify test-annotate
r11852 annotate -n b
$ hg annotate -n b
Mads Kiilerich
bdiff: give slight preference to appending lines...
r30432 0: a
Mads Kiilerich
bdiff: give slight preference to longest matches in the middle of the B side...
r30431 1: a
Martin Geisler
tests: unify test-annotate
r11852 1: a
3: b4
3: b5
3: b6
annotate --no-follow b
$ hg annotate --no-follow b
2: a
2: a
2: a
3: b4
3: b5
3: b6
annotate -nl b
$ hg annotate -nl b
0:1: a
Mads Kiilerich
bdiff: give slight preference to appending lines...
r30432 1:2: a
Martin Geisler
tests: unify test-annotate
r11852 1:3: a
3:4: b4
3:5: b5
3:6: b6
annotate -nf b
$ hg annotate -nf b
Mads Kiilerich
bdiff: give slight preference to appending lines...
r30432 0 a: a
Mads Kiilerich
bdiff: give slight preference to longest matches in the middle of the B side...
r30431 1 a: a
Martin Geisler
tests: unify test-annotate
r11852 1 a: a
3 b: b4
3 b: b5
3 b: b6
annotate -nlf b
$ hg annotate -nlf b
0 a:1: a
Mads Kiilerich
bdiff: give slight preference to appending lines...
r30432 1 a:2: a
Martin Geisler
tests: unify test-annotate
r11852 1 a:3: a
3 b:4: b4
3 b:5: b5
3 b:6: b6
$ hg up -C 2
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat <<EOF >> b
> b4
> c
> b5
> EOF
$ hg ci -mb2.1 -d '2 0'
created new head
$ hg merge
merging b
Martin von Zweigbergk
tests: make merge conflicts explicit in `hg annotate` tests...
r42327 warning: conflicts while merging b! (edit, then use 'hg resolve --mark')
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
[1]
$ cat b
a
a
a
<<<<<<< working copy: 5fbdc1152d97 - test: b2.1
b4
c
b5
||||||| base
=======
b4
b5
b6
>>>>>>> merge rev: 37ec9f5c3d1f - test: b2
$ cat <<EOF > b
> a
> a
> a
> b4
> c
> b5
> EOF
$ hg resolve --mark -q
$ rm b.orig
Martin Geisler
tests: unify test-annotate
r11852 $ hg ci -mmergeb -d '3 0'
annotate after merge
$ hg annotate -nf b
Mads Kiilerich
bdiff: give slight preference to appending lines...
r30432 0 a: a
Mads Kiilerich
bdiff: give slight preference to longest matches in the middle of the B side...
r30431 1 a: a
Martin Geisler
tests: unify test-annotate
r11852 1 a: a
3 b: b4
4 b: c
3 b: b5
annotate after merge with -l
$ hg annotate -nlf b
0 a:1: a
Mads Kiilerich
bdiff: give slight preference to appending lines...
r30432 1 a:2: a
Martin Geisler
tests: unify test-annotate
r11852 1 a:3: a
3 b:4: b4
4 b:5: c
3 b:5: b5
$ hg up -C 1
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg cp a b
$ cat <<EOF > b
> a
> z
> a
> EOF
$ hg ci -mc -d '3 0'
created new head
Martin von Zweigbergk
tests: update annotate tests to work around simplemerge bug...
r42446 Work around the pure version not resolving the conflict like native code
#if pure
$ hg merge
merging b
warning: conflicts while merging b! (edit, then use 'hg resolve --mark')
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
[1]
$ cat <<EOF > b
> a
> z
> a
> b4
> c
> b5
> EOF
$ hg resolve -m b
(no more unresolved files)
$ rm b.orig
#else
Martin Geisler
tests: unify test-annotate
r11852 $ hg merge
merging b
Martin von Zweigbergk
copies: calculate mergecopies() based on pathcopies()...
r42408 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
Martin von Zweigbergk
tests: update annotate tests to work around simplemerge bug...
r42446 #endif
Martin Geisler
tests: unify test-annotate
r11852 $ echo d >> b
$ hg ci -mmerge2 -d '4 0'
annotate after rename merge
$ hg annotate -nf b
Mads Kiilerich
bdiff: give slight preference to appending lines...
r30432 0 a: a
Martin Geisler
tests: unify test-annotate
r11852 6 b: z
1 a: a
3 b: b4
4 b: c
3 b: b5
7 b: d
annotate after rename merge with -l
$ hg annotate -nlf b
Mads Kiilerich
bdiff: give slight preference to appending lines...
r30432 0 a:1: a
Martin Geisler
tests: unify test-annotate
r11852 6 b:2: z
1 a:3: a
3 b:4: b4
4 b:5: c
3 b:5: b5
7 b:7: d
Siddharth Agarwal
annotate: add a new experimental --skip option to skip revs...
r32486 --skip nothing (should be the same as no --skip at all)
$ hg annotate -nlf b --skip '1::0'
0 a:1: a
6 b:2: z
1 a:3: a
3 b:4: b4
4 b:5: c
3 b:5: b5
7 b:7: d
Augie Fackler
tests: handle variation between pure and normal output in annotate --skip...
r32767 --skip a modified line. Note a slight behavior difference in pure - this is
because the pure code comes up with slightly different deltas internally.
Siddharth Agarwal
annotate: add a new experimental --skip option to skip revs...
r32486
$ hg annotate -nlf b --skip 6
0 a:1: a
Augie Fackler
test-annotate: fix up expected output for pure...
r34488 1 a:2* z (no-pure !)
0 a:1* z (pure !)
Siddharth Agarwal
annotate: add a new experimental --skip option to skip revs...
r32486 1 a:3: a
3 b:4: b4
4 b:5: c
3 b:5: b5
7 b:7: d
--skip added lines (and test multiple skip)
$ hg annotate -nlf b --skip 3
0 a:1: a
6 b:2: z
1 a:3: a
Siddharth Agarwal
annotate: mark lines affected by skip-annotate with *...
r34435 1 a:3* b4
Siddharth Agarwal
annotate: add a new experimental --skip option to skip revs...
r32486 4 b:5: c
Siddharth Agarwal
annotate: mark lines affected by skip-annotate with *...
r34435 1 a:3* b5
Siddharth Agarwal
annotate: add a new experimental --skip option to skip revs...
r32486 7 b:7: d
$ hg annotate -nlf b --skip 4
0 a:1: a
6 b:2: z
1 a:3: a
3 b:4: b4
Siddharth Agarwal
annotate: mark lines affected by skip-annotate with *...
r34435 1 a:3* c
Siddharth Agarwal
annotate: add a new experimental --skip option to skip revs...
r32486 3 b:5: b5
7 b:7: d
$ hg annotate -nlf b --skip 3 --skip 4
0 a:1: a
6 b:2: z
1 a:3: a
Siddharth Agarwal
annotate: mark lines affected by skip-annotate with *...
r34435 1 a:3* b4
1 a:3* c
1 a:3* b5
Siddharth Agarwal
annotate: add a new experimental --skip option to skip revs...
r32486 7 b:7: d
$ hg annotate -nlf b --skip 'merge()'
0 a:1: a
6 b:2: z
1 a:3: a
3 b:4: b4
4 b:5: c
3 b:5: b5
Siddharth Agarwal
annotate: mark lines affected by skip-annotate with *...
r34435 3 b:5* d
Siddharth Agarwal
annotate: add a new experimental --skip option to skip revs...
r32486
--skip everything -- use the revision the file was introduced in
$ hg annotate -nlf b --skip 'all()'
0 a:1: a
Siddharth Agarwal
annotate: mark lines affected by skip-annotate with *...
r34435 0 a:1* z
0 a:1* a
0 a:1* b4
0 a:1* c
0 a:1* b5
0 a:1* d
Siddharth Agarwal
annotate: add a new experimental --skip option to skip revs...
r32486
Thomas Arendsen Hein
annotate: fix alignment of columns in front of line numbers (issue2807)
r14358 Issue2807: alignment of line numbers with -l
$ echo more >> b
$ hg ci -mmore -d '5 0'
$ echo more >> b
$ hg ci -mmore -d '6 0'
$ echo more >> b
$ hg ci -mmore -d '7 0'
$ hg annotate -nlf b
Mads Kiilerich
bdiff: give slight preference to appending lines...
r30432 0 a: 1: a
Thomas Arendsen Hein
annotate: fix alignment of columns in front of line numbers (issue2807)
r14358 6 b: 2: z
1 a: 3: a
3 b: 4: b4
4 b: 5: c
3 b: 5: b5
7 b: 7: d
8 b: 8: more
9 b: 9: more
10 b:10: more
Martin Geisler
tests: unify test-annotate
r11852 linkrev vs rev
$ hg annotate -r tip -n a
Mads Kiilerich
bdiff: give slight preference to appending lines...
r30432 0: a
Mads Kiilerich
bdiff: give slight preference to longest matches in the middle of the B side...
r30431 1: a
Martin Geisler
tests: unify test-annotate
r11852 1: a
linkrev vs rev with -l
$ hg annotate -r tip -nl a
0:1: a
Mads Kiilerich
bdiff: give slight preference to appending lines...
r30432 1:2: a
Martin Geisler
tests: unify test-annotate
r11852 1:3: a
Martin Geisler
tests: added a short description to issue numbers...
r12399 Issue589: "undelete" sequence leads to crash
Martin Geisler
tests: unify test-annotate
r11852
annotate was crashing when trying to --follow something
like A -> B -> A
generate ABA rename configuration
$ echo foo > foo
$ hg add foo
$ hg ci -m addfoo
$ hg rename foo bar
$ hg ci -m renamefoo
$ hg rename bar foo
$ hg ci -m renamebar
annotate after ABA with follow
$ hg annotate --follow foo
foo: foo
Matt Mackall
annotate: catch nonexistent files using match.bad callback (issue1590)
r13697 missing file
$ hg ann nosuchfile
Thomas Arendsen Hein
annotate: fix alignment of columns in front of line numbers (issue2807)
r14358 abort: nosuchfile: no such file in rev e9e6b4fa872f
Matt Mackall
annotate: catch nonexistent files using match.bad callback (issue1590)
r13697 [255]
Patrick Mezard
annotate: support diff whitespace filtering flags (issue3030)...
r15528
Ion Savin
annotate: append newline after non newline-terminated file listings...
r15829 annotate file without '\n' on last line
$ printf "" > c
$ hg ci -A -m test -u nobody -d '1 0'
adding c
$ hg annotate c
$ printf "a\nb" > c
$ hg ci -m test
$ hg annotate c
[0-9]+: a (re)
[0-9]+: b (re)
FUJIWARA Katsunori
annotate: increase refcount of each revisions correctly (issue3841)...
r18993 Issue3841: check annotation of the file of which filelog includes
merging between the revision and its ancestor
to reproduce the situation with recent Mercurial, this script uses (1)
"hg debugsetparents" to merge without ancestor check by "hg merge",
and (2) the extension to allow filelog merging between the revision
and its ancestor by overriding "repo._filecommit".
$ cat > ../legacyrepo.py <<EOF
Augie Fackler
tests: update test-annotate to pass our module import checker
r33945 > from __future__ import absolute_import
commitctx: extract _filecommit too...
r45760 > from mercurial import commit, error, extensions, node
> def _filecommit(orig, repo, fctx, manifest1, manifest2,
Pulkit Goyal
commit: pass mergestate into _filecommit() instead of re-reading it...
r46014 > linkrev, tr, includecopymeta, ms):
commitctx: extract _filecommit too...
r45760 > fname = fctx.path()
> text = fctx.data()
> flog = repo.file(fname)
> fparent1 = manifest1.get(fname, node.nullid)
> fparent2 = manifest2.get(fname, node.nullid)
> meta = {}
> copy = fctx.copysource()
> if copy and copy != fname:
> raise error.Abort('copying is not supported')
> if fparent2 != node.nullid:
> return flog.add(text, meta, tr, linkrev,
> fparent1, fparent2), 'modified'
> raise error.Abort('only merging is supported')
> def uisetup(ui):
> extensions.wrapfunction(commit, '_filecommit', _filecommit)
FUJIWARA Katsunori
annotate: increase refcount of each revisions correctly (issue3841)...
r18993 > EOF
$ cat > baz <<EOF
> 1
> 2
> 3
> 4
> 5
> EOF
$ hg add baz
$ hg commit -m "baz:0"
$ cat > baz <<EOF
> 1 baz:1
> 2
> 3
> 4
> 5
> EOF
$ hg commit -m "baz:1"
$ cat > baz <<EOF
> 1 baz:1
> 2 baz:2
> 3
> 4
> 5
> EOF
$ hg debugsetparents 17 17
$ hg --config extensions.legacyrepo=../legacyrepo.py commit -m "baz:2"
Gregory Szorc
tests: don't use revlog paths in tests...
r37298 $ hg debugindexdot baz
FUJIWARA Katsunori
annotate: increase refcount of each revisions correctly (issue3841)...
r18993 digraph G {
-1 -> 0
0 -> 1
1 -> 2
1 -> 2
}
$ hg annotate baz
17: 1 baz:1
18: 2 baz:2
16: 3
16: 4
16: 5
$ cat > baz <<EOF
> 1 baz:1
> 2 baz:2
> 3 baz:3
> 4
> 5
> EOF
$ hg commit -m "baz:3"
$ cat > baz <<EOF
> 1 baz:1
> 2 baz:2
> 3 baz:3
> 4 baz:4
> 5
> EOF
$ hg debugsetparents 19 18
$ hg --config extensions.legacyrepo=../legacyrepo.py commit -m "baz:4"
Gregory Szorc
tests: don't use revlog paths in tests...
r37298 $ hg debugindexdot baz
FUJIWARA Katsunori
annotate: increase refcount of each revisions correctly (issue3841)...
r18993 digraph G {
-1 -> 0
0 -> 1
1 -> 2
1 -> 2
2 -> 3
3 -> 4
2 -> 4
}
$ hg annotate baz
17: 1 baz:1
18: 2 baz:2
19: 3 baz:3
20: 4 baz:4
16: 5
Yuya Nishihara
annotate: add option to annotate working-directory files...
r24421 annotate clean file
$ hg annotate -ncr "wdir()" foo
11 472b18db256d : foo
annotate modified file
$ echo foofoo >> foo
$ hg annotate -r "wdir()" foo
11 : foo
20+: foofoo
$ hg annotate -cr "wdir()" foo
472b18db256d : foo
b6bedd5477e7+: foofoo
$ hg annotate -ncr "wdir()" foo
11 472b18db256d : foo
20 b6bedd5477e7+: foofoo
$ hg annotate --debug -ncr "wdir()" foo
11 472b18db256d1e8282064eab4bfdaf48cbfe83cd : foo
20 b6bedd5477e797f25e568a6402d4697f3f895a72+: foofoo
$ hg annotate -udr "wdir()" foo
test Thu Jan 01 00:00:00 1970 +0000: foo
test [A-Za-z0-9:+ ]+: foofoo (re)
$ hg annotate -ncr "wdir()" -Tjson foo
[
{
Yuya Nishihara
annotate: pass in wdir rev and node to formatter (BC)...
r39834 "lines": [{"line": "foo\n", "node": "472b18db256d1e8282064eab4bfdaf48cbfe83cd", "rev": 11}, {"line": "foofoo\n", "node": "ffffffffffffffffffffffffffffffffffffffff", "rev": 2147483647}],
Yuya Nishihara
annotate: restructure formatter output to be nested list (BC)...
r32649 "path": "foo"
Yuya Nishihara
annotate: add option to annotate working-directory files...
r24421 }
]
annotate added file
$ echo bar > bar
$ hg add bar
$ hg annotate -ncr "wdir()" bar
20 b6bedd5477e7+: bar
annotate renamed file
$ hg rename foo renamefoo2
$ hg annotate -ncr "wdir()" renamefoo2
11 472b18db256d : foo
20 b6bedd5477e7+: foofoo
annotate missing file
$ rm baz
Matt Harbison
test-annotate: conditionalize output instead of tests
r33341
Matt Harbison
test-annotate: conditionalize error output for Windows...
r24498 $ hg annotate -ncr "wdir()" baz
Matt Harbison
tests: add a substitution for ENOENT/ERROR_FILE_NOT_FOUND messages...
r35230 abort: $TESTTMP\repo\baz: $ENOENT$ (windows !)
Yuya Nishihara
dispatch: quote filename in IOError as well...
r41465 abort: $ENOENT$: '$TESTTMP/repo/baz' (no-windows !)
Matt Harbison
test-annotate: conditionalize error output for Windows...
r24498 [255]
Yuya Nishihara
annotate: add option to annotate working-directory files...
r24421
annotate removed file
$ hg rm baz
Matt Harbison
test-annotate: conditionalize output instead of tests
r33341
Matt Harbison
test-annotate: conditionalize error output for Windows...
r24498 $ hg annotate -ncr "wdir()" baz
Matt Harbison
tests: add a substitution for ENOENT/ERROR_FILE_NOT_FOUND messages...
r35230 abort: $TESTTMP\repo\baz: $ENOENT$ (windows !)
Yuya Nishihara
dispatch: quote filename in IOError as well...
r41465 abort: $ENOENT$: '$TESTTMP/repo/baz' (no-windows !)
Matt Harbison
test-annotate: conditionalize error output for Windows...
r24498 [255]
Yuya Nishihara
annotate: add option to annotate working-directory files...
r24421
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 $ hg revert --all --no-backup --quiet
$ hg id -n
20
Denis Laxalde
revset: add a 'descend' argument to followlines to return descendants...
r31938 Test followlines() revset; we usually check both followlines(pat, range) and
followlines(pat, range, descend=True) to make sure both give the same result
when they should.
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719
Denis Laxalde
context: start walking from "introrev" in blockancestors()...
r32063 $ echo a >> foo
$ hg ci -m 'foo: add a'
Yuya Nishihara
revset: abuse x:y syntax to specify line range of followlines()...
r30804 $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5)'
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 16: baz:0
19: baz:3
20: baz:4
Yuya Nishihara
revset: abuse x:y syntax to specify line range of followlines()...
r30804 $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5, startrev=20)'
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 16: baz:0
19: baz:3
20: baz:4
Denis Laxalde
revset: add a 'descend' argument to followlines to return descendants...
r31938 $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5, startrev=19)'
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 16: baz:0
19: baz:3
Denis Laxalde
revset: add a 'descend' argument to followlines to return descendants...
r31938 $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5, startrev=19, descend=True)'
Denis Laxalde
context: possibly yield initial fctx in blockdescendants()...
r31992 19: baz:3
Denis Laxalde
revset: add a 'descend' argument to followlines to return descendants...
r31938 20: baz:4
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 $ printf "0\n0\n" | cat - baz > baz1
$ mv baz1 baz
$ hg ci -m 'added two lines with 0'
Yuya Nishihara
revset: abuse x:y syntax to specify line range of followlines()...
r30804 $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 5:7)'
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 16: baz:0
19: baz:3
20: baz:4
Denis Laxalde
revset: properly parse "descend" argument of followlines()...
r31998 $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5, descend=true, startrev=19)'
Denis Laxalde
context: possibly yield initial fctx in blockdescendants()...
r31992 19: baz:3
Denis Laxalde
revset: add a 'descend' argument to followlines to return descendants...
r31938 20: baz:4
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 $ echo 6 >> baz
$ hg ci -m 'added line 8'
Yuya Nishihara
revset: abuse x:y syntax to specify line range of followlines()...
r30804 $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 5:7)'
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 16: baz:0
19: baz:3
20: baz:4
Denis Laxalde
revset: properly parse "descend" argument of followlines()...
r31998 $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5, startrev=19, descend=1)'
Denis Laxalde
context: possibly yield initial fctx in blockdescendants()...
r31992 19: baz:3
Denis Laxalde
revset: add a 'descend' argument to followlines to return descendants...
r31938 20: baz:4
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 $ sed 's/3/3+/' baz > baz.new
$ mv baz.new baz
$ hg ci -m 'baz:3->3+'
Denis Laxalde
revset: properly parse "descend" argument of followlines()...
r31998 $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 5:7, descend=0)'
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 16: baz:0
19: baz:3
20: baz:4
Denis Laxalde
context: start walking from "introrev" in blockancestors()...
r32063 24: baz:3->3+
Denis Laxalde
context: possibly yield initial fctx in blockdescendants()...
r31992 $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5, startrev=17, descend=True)'
19: baz:3
Denis Laxalde
revset: add a 'descend' argument to followlines to return descendants...
r31938 20: baz:4
Denis Laxalde
context: start walking from "introrev" in blockancestors()...
r32063 24: baz:3->3+
Denis Laxalde
revset: properly parse "descend" argument of followlines()...
r31998 $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 1:2, descend=false)'
Denis Laxalde
context: start walking from "introrev" in blockancestors()...
r32063 22: added two lines with 0
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719
file patterns are okay
Yuya Nishihara
revset: abuse x:y syntax to specify line range of followlines()...
r30804 $ hg log -T '{rev}: {desc}\n' -r 'followlines("path:baz", 1:2)'
Denis Laxalde
context: start walking from "introrev" in blockancestors()...
r32063 22: added two lines with 0
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719
renames are followed
$ hg mv baz qux
$ sed 's/4/4+/' qux > qux.new
$ mv qux.new qux
$ hg ci -m 'qux:4->4+'
Yuya Nishihara
revset: abuse x:y syntax to specify line range of followlines()...
r30804 $ hg log -T '{rev}: {desc}\n' -r 'followlines(qux, 5:7)'
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 16: baz:0
19: baz:3
20: baz:4
Denis Laxalde
context: start walking from "introrev" in blockancestors()...
r32063 24: baz:3->3+
25: qux:4->4+
Denis Laxalde
revset: add a 'descend' argument to followlines to return descendants...
r31938
but are missed when following children
$ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 5:7, startrev=22, descend=True)'
Denis Laxalde
context: start walking from "introrev" in blockancestors()...
r32063 24: baz:3->3+
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719
merge
Denis Laxalde
context: start walking from "introrev" in blockancestors()...
r32063 $ hg up 24 --quiet
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 $ echo 7 >> baz
$ hg ci -m 'one more line, out of line range'
created new head
$ sed 's/3+/3-/' baz > baz.new
$ mv baz.new baz
$ hg ci -m 'baz:3+->3-'
Yuya Nishihara
revset: abuse x:y syntax to specify line range of followlines()...
r30804 $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 5:7)'
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 16: baz:0
19: baz:3
20: baz:4
Denis Laxalde
context: start walking from "introrev" in blockancestors()...
r32063 24: baz:3->3+
27: baz:3+->3-
$ hg merge 25
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 merging baz and qux to qux
Martin von Zweigbergk
tests: make merge conflicts explicit in `hg annotate` tests...
r42327 warning: conflicts while merging qux! (edit, then use 'hg resolve --mark')
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
[1]
$ cat qux
0
0
1 baz:1
2 baz:2
<<<<<<< working copy: 863de62655ef - test: baz:3+->3-
3- baz:3
4 baz:4
||||||| base
3+ baz:3
4 baz:4
=======
3+ baz:3
4+ baz:4
>>>>>>> merge rev: cb8df70ae185 - test: qux:4->4+
5
6
7
$ cat > qux <<EOF
> 0
> 0
> 1 baz:1
> 2 baz:2
> 3- baz:3
> 4 baz:4
> 5
> 6
> 7
> EOF
$ hg resolve --mark -q
$ rm qux.orig
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 $ hg ci -m merge
Yuya Nishihara
revset: abuse x:y syntax to specify line range of followlines()...
r30804 $ hg log -T '{rev}: {desc}\n' -r 'followlines(qux, 5:7)'
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 16: baz:0
19: baz:3
20: baz:4
Denis Laxalde
context: start walking from "introrev" in blockancestors()...
r32063 24: baz:3->3+
25: qux:4->4+
27: baz:3+->3-
28: merge
$ hg up 25 --quiet
$ hg merge 27
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 merging qux and baz to qux
Martin von Zweigbergk
tests: make merge conflicts explicit in `hg annotate` tests...
r42327 warning: conflicts while merging qux! (edit, then use 'hg resolve --mark')
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
[1]
$ cat qux
0
0
1 baz:1
2 baz:2
<<<<<<< working copy: cb8df70ae185 - test: qux:4->4+
3+ baz:3
4+ baz:4
||||||| base
3+ baz:3
4 baz:4
=======
3- baz:3
4 baz:4
>>>>>>> merge rev: 863de62655ef - test: baz:3+->3-
5
6
7
$ cat > qux <<EOF
> 0
> 0
> 1 baz:1
> 2 baz:2
> 3+ baz:3
> 4+ baz:4
> 5
> 6
> EOF
$ hg resolve --mark -q
$ rm qux.orig
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 $ hg ci -m 'merge from other side'
created new head
Yuya Nishihara
revset: abuse x:y syntax to specify line range of followlines()...
r30804 $ hg log -T '{rev}: {desc}\n' -r 'followlines(qux, 5:7)'
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 16: baz:0
19: baz:3
20: baz:4
Denis Laxalde
context: start walking from "introrev" in blockancestors()...
r32063 24: baz:3->3+
25: qux:4->4+
27: baz:3+->3-
29: merge from other side
$ hg up 24 --quiet
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719
Denis Laxalde
revset: add a 'descend' argument to followlines to return descendants...
r31938 we are missing the branch with rename when following children
Denis Laxalde
context: start walking from "introrev" in blockancestors()...
r32063 $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 5:7, startrev=26, descend=True)'
27: baz:3+->3-
Denis Laxalde
revset: add a 'descend' argument to followlines to return descendants...
r31938
Denis Laxalde
context: follow all branches in blockdescendants()...
r31955 we follow all branches in descending direction
Denis Laxalde
context: start walking from "introrev" in blockancestors()...
r32063 $ hg up 23 --quiet
Denis Laxalde
context: follow all branches in blockdescendants()...
r31955 $ sed 's/3/+3/' baz > baz.new
$ mv baz.new baz
$ hg ci -m 'baz:3->+3'
created new head
Denis Laxalde
context: add an assertion checking linerange consistency in blockdescendants()...
r31991 $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 2:5, startrev=16, descend=True)' --graph
Denis Laxalde
context: start walking from "introrev" in blockancestors()...
r32063 @ 30: baz:3->+3
Denis Laxalde
context: follow all branches in blockdescendants()...
r31955 :
Denis Laxalde
context: start walking from "introrev" in blockancestors()...
r32063 : o 27: baz:3+->3-
Denis Laxalde
context: follow all branches in blockdescendants()...
r31955 : :
Denis Laxalde
context: start walking from "introrev" in blockancestors()...
r32063 : o 24: baz:3->3+
Denis Laxalde
context: follow all branches in blockdescendants()...
r31955 :/
o 20: baz:4
|\
Denis Laxalde
context: add an assertion checking linerange consistency in blockdescendants()...
r31991 | o 19: baz:3
|/
Denis Laxalde
context: possibly yield initial fctx in blockdescendants()...
r31992 o 18: baz:2
:
o 16: baz:0
|
~
Denis Laxalde
context: follow all branches in blockdescendants()...
r31955
Denis Laxalde
followlines: join merge parents line ranges in blockdescendants() (issue5595)...
r33284 Issue5595: on a merge changeset with different line ranges depending on
parent, be conservative and use the surrounding interval to avoid loosing
track of possible further descendants in specified range.
$ hg up 23 --quiet
$ hg cat baz -r 24
0
0
1 baz:1
2 baz:2
3+ baz:3
4 baz:4
5
6
$ cat > baz << EOF
> 0
> 0
> a
> b
> 3+ baz:3
> 4 baz:4
> y
> z
> EOF
$ hg ci -m 'baz: mostly rewrite with some content from 24'
created new head
$ hg merge --tool :merge-other 24
merging baz
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg ci -m 'merge forgetting about baz rewrite'
$ cat > baz << EOF
> 0
> 0
> 1 baz:1
> 2+ baz:2
> 3+ baz:3
> 4 baz:4
> 5
> 6
> EOF
$ hg ci -m 'baz: narrow change (2->2+)'
$ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:4, startrev=20, descend=True)' --graph
@ 33: baz: narrow change (2->2+)
|
o 32: merge forgetting about baz rewrite
|\
| o 31: baz: mostly rewrite with some content from 24
| :
| : o 30: baz:3->+3
| :/
+---o 27: baz:3+->3-
| :
o : 24: baz:3->3+
:/
o 20: baz:4
|\
~ ~
Yuya Nishihara
revset: allow to parse single integer as a range...
r41703 An integer as a line range, which is parsed as '1:1'
$ hg log -r 'followlines(baz, 1)'
changeset: 22:2174d0bf352a
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: added two lines with 0
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 check error cases
Denis Laxalde
context: start walking from "introrev" in blockancestors()...
r32063 $ hg up 24 --quiet
Yuya Nishihara
revset: parse variable-length arguments of followlines() by getargsdict()
r30754 $ hg log -r 'followlines()'
hg: parse error: followlines takes at least 1 positional arguments
[255]
$ hg log -r 'followlines(baz)'
Yuya Nishihara
revset: abuse x:y syntax to specify line range of followlines()...
r30804 hg: parse error: followlines requires a line range
Yuya Nishihara
revset: parse variable-length arguments of followlines() by getargsdict()
r30754 [255]
Yuya Nishihara
revset: allow to parse single integer as a range...
r41703 $ hg log -r 'followlines(baz, x)'
hg: parse error: followlines expects a line number or a range
Yuya Nishihara
revset: parse variable-length arguments of followlines() by getargsdict()
r30754 [255]
Yuya Nishihara
revset: abuse x:y syntax to specify line range of followlines()...
r30804 $ hg log -r 'followlines(baz, 1:2, startrev=desc("b"))'
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 hg: parse error: followlines expects exactly one revision
[255]
Yuya Nishihara
revset: abuse x:y syntax to specify line range of followlines()...
r30804 $ hg log -r 'followlines("glob:*", 1:2)'
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 hg: parse error: followlines expects exactly one file
[255]
Yuya Nishihara
revset: abuse x:y syntax to specify line range of followlines()...
r30804 $ hg log -r 'followlines(baz, 1:)'
hg: parse error: line range bounds must be integers
[255]
$ hg log -r 'followlines(baz, :1)'
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 hg: parse error: line range bounds must be integers
[255]
Yuya Nishihara
revset: abuse x:y syntax to specify line range of followlines()...
r30804 $ hg log -r 'followlines(baz, x:4)'
hg: parse error: line range bounds must be integers
[255]
$ hg log -r 'followlines(baz, 5:4)'
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 hg: parse error: line range must be positive
[255]
Yuya Nishihara
revset: abuse x:y syntax to specify line range of followlines()...
r30804 $ hg log -r 'followlines(baz, 0:4)'
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 hg: parse error: fromline must be strictly positive
[255]
Yuya Nishihara
revset: abuse x:y syntax to specify line range of followlines()...
r30804 $ hg log -r 'followlines(baz, 2:40)'
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719 abort: line range exceeds file size
[255]
Denis Laxalde
revset: properly parse "descend" argument of followlines()...
r31998 $ hg log -r 'followlines(baz, 2:4, startrev=20, descend=[1])'
Yuya Nishihara
revset: add experimental relation and subscript operators...
r33416 hg: parse error at 43: not a prefix: [
Ryan McElroy
revsetlang: add a hint for more useful parse errors...
r36703 (followlines(baz, 2:4, startrev=20, descend=[1])
^ here)
Denis Laxalde
revset: properly parse "descend" argument of followlines()...
r31998 [255]
$ hg log -r 'followlines(baz, 2:4, startrev=20, descend=a)'
FUJIWARA Katsunori
revset: add i18n comments to error messages for followlines predicate...
r32086 hg: parse error: descend argument must be a boolean
Denis Laxalde
revset: properly parse "descend" argument of followlines()...
r31998 [255]
Denis Laxalde
revset: add a followlines(file, fromline, toline[, rev]) revset...
r30719
Yuya Nishihara
annotate: restructure formatter output to be nested list (BC)...
r32649 Test empty annotate output
$ printf '\0' > binary
$ touch empty
$ hg ci -qAm 'add binary and empty files'
$ hg annotate binary empty
binary: binary file
$ hg annotate -Tjson binary empty
[
{
"path": "binary"
},
{
"lines": [],
"path": "empty"
}
]
Patrick Mezard
annotate: support diff whitespace filtering flags (issue3030)...
r15528 Test annotate with whitespace options
$ cd ..
$ hg init repo-ws
$ cd repo-ws
$ cat > a <<EOF
> aa
>
> b b
> EOF
$ hg ci -Am "adda"
adding a
Mads Kiilerich
check-code: fix check for trailing whitespace on continued lines too...
r17347 $ sed 's/EOL$//g' > a <<EOF
Patrick Mezard
annotate: support diff whitespace filtering flags (issue3030)...
r15528 > a a
>
Mads Kiilerich
check-code: fix check for trailing whitespace on continued lines too...
r17347 > EOL
Patrick Mezard
annotate: support diff whitespace filtering flags (issue3030)...
r15528 > b b
> EOF
$ hg ci -m "changea"
Annotate with no option
$ hg annotate a
1: a a
0:
1:
1: b b
Annotate with --ignore-space-change
$ hg annotate --ignore-space-change a
1: a a
1:
0:
0: b b
Annotate with --ignore-all-space
$ hg annotate --ignore-all-space a
0: a a
0:
1:
0: b b
Annotate with --ignore-blank-lines (similar to no options case)
$ hg annotate --ignore-blank-lines a
1: a a
0:
1:
1: b b
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913 $ cd ..
Pierre-Yves David
filectx.parents: enforce changeid of parent to be in own changectx ancestors...
r23702
Yuya Nishihara
annotate: do not poorly split lines at CR (issue5798)...
r36556 Annotate with orphaned CR (issue5798)
-------------------------------------
$ hg init repo-cr
$ cd repo-cr
Yuya Nishihara
test-annotate: rewrite sed with some python...
r36723 $ cat <<'EOF' >> "$TESTTMP/substcr.py"
> import sys
Yuya Nishihara
procutil: bulk-replace function calls to point to new module
r37138 > from mercurial.utils import procutil
> procutil.setbinary(sys.stdin)
> procutil.setbinary(sys.stdout)
Yuya Nishihara
test-annotate: rewrite sed with some python...
r36723 > stdin = getattr(sys.stdin, 'buffer', sys.stdin)
> stdout = getattr(sys.stdout, 'buffer', sys.stdout)
> stdout.write(stdin.read().replace(b'\r', b'[CR]'))
> EOF
Yuya Nishihara
annotate: do not poorly split lines at CR (issue5798)...
r36556
>>> with open('a', 'wb') as f:
Yuya Nishihara
py3: silence f.write() in test-annotate.t
r36845 ... f.write(b'0a\r0b\r\n0c\r0d\r\n0e\n0f\n0g') and None
Yuya Nishihara
annotate: do not poorly split lines at CR (issue5798)...
r36556 $ hg ci -qAm0
>>> with open('a', 'wb') as f:
Yuya Nishihara
py3: silence f.write() in test-annotate.t
r36845 ... f.write(b'0a\r0b\r\n1c\r1d\r\n0e\n1f\n0g') and None
Yuya Nishihara
annotate: do not poorly split lines at CR (issue5798)...
r36556 $ hg ci -m1
Matt Harbison
tests: quote PYTHON usage...
r39743 $ hg annotate -r0 a | "$PYTHON" "$TESTTMP/substcr.py"
Yuya Nishihara
annotate: do not poorly split lines at CR (issue5798)...
r36556 0: 0a[CR]0b[CR]
0: 0c[CR]0d[CR]
0: 0e
0: 0f
0: 0g
Matt Harbison
tests: quote PYTHON usage...
r39743 $ hg annotate -r1 a | "$PYTHON" "$TESTTMP/substcr.py"
Yuya Nishihara
annotate: do not poorly split lines at CR (issue5798)...
r36556 0: 0a[CR]0b[CR]
1: 1c[CR]1d[CR]
0: 0e
1: 1f
0: 0g
$ cd ..
Pierre-Yves David
filectx.parents: enforce changeid of parent to be in own changectx ancestors...
r23702 Annotate with linkrev pointing to another branch
------------------------------------------------
create history with a filerev whose linkrev points to another branch
$ hg init branchedlinkrev
$ cd branchedlinkrev
$ echo A > a
$ hg commit -Am 'contentA'
adding a
$ echo B >> a
$ hg commit -m 'contentB'
$ hg up --rev 'desc(contentA)'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo unrelated > unrelated
$ hg commit -Am 'unrelated'
adding unrelated
created new head
$ hg graft -r 'desc(contentB)'
grafting 1:fd27c222e3e6 "contentB"
$ echo C >> a
$ hg commit -m 'contentC'
Yuya Nishihara
committablefilectx: propagate ancestry info to parent to fix annotation...
r24817 $ echo W >> a
Pierre-Yves David
filectx.parents: enforce changeid of parent to be in own changectx ancestors...
r23702 $ hg log -G
@ changeset: 4:072f1e8df249
| tag: tip
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: contentC
|
o changeset: 3:ff38df03cc4b
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: contentB
|
o changeset: 2:62aaf3f6fc06
| parent: 0:f0932f74827e
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: unrelated
|
| o changeset: 1:fd27c222e3e6
|/ user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: contentB
|
o changeset: 0:f0932f74827e
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: contentA
Annotate should list ancestor of starting revision only
$ hg annotate a
0: A
3: B
4: C
Yuya Nishihara
committablefilectx: propagate ancestry info to parent to fix annotation...
r24817 $ hg annotate a -r 'wdir()'
0 : A
3 : B
4 : C
4+: W
Pierre-Yves David
linkrev: also adjust linkrev when bootstrapping annotate (issue4305)...
r23705 Even when the starting revision is the linkrev-shadowed one:
$ hg annotate a -r 3
0: A
3: B
Pierre-Yves David
filectx.parents: enforce changeid of parent to be in own changectx ancestors...
r23702 $ cd ..
Jun Wu
annotate: pre-calculate the "needed" dictionary (issue5360)...
r29861
Issue5360: Deleted chunk in p1 of a merge changeset
$ hg init repo-5360
$ cd repo-5360
$ echo 1 > a
$ hg commit -A a -m 1
$ echo 2 >> a
$ hg commit -m 2
$ echo a > a
$ hg commit -m a
$ hg update '.^' -q
$ echo 3 >> a
$ hg commit -m 3 -q
$ hg merge 2 -q
Martin von Zweigbergk
tests: make merge conflicts explicit in `hg annotate` tests...
r42327 warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
[1]
$ cat a
<<<<<<< working copy: 0a068f0261cf - test: 3
1
2
3
||||||| base
1
2
=======
a
>>>>>>> merge rev: 9409851bc20a - test: a
Jun Wu
annotate: pre-calculate the "needed" dictionary (issue5360)...
r29861 $ cat > a << EOF
> b
> 1
> 2
> 3
> a
> EOF
$ hg resolve --mark -q
Martin von Zweigbergk
tests: make merge conflicts explicit in `hg annotate` tests...
r42327 $ rm a.orig
Jun Wu
annotate: pre-calculate the "needed" dictionary (issue5360)...
r29861 $ hg commit -m m
$ hg annotate a
4: b
0: 1
1: 2
3: 3
2: a
$ cd ..