manifestcache: make sure the entry are ordered by access time
This is an LRU cache, let us make sure of that.
$ cat >> $HGRCPATH<<EOF
> [extensions]
> drawdag=$TESTDIR/drawdag.py
> [experimental]
> evolution=true
> EOF
$ reinit () {
> rm -rf .hg && hg init
> }
$ hg init
Test what said in drawdag.py docstring
$ hg debugdrawdag <<'EOS'
> c d
> |/
> b
> |
> a
> EOS
$ hg log -G -T '{rev} {desc} ({tags})'
o 3 d (d tip)
|
| o 2 c (c)
|/
o 1 b (b)
|
o 0 a (a)
$ hg debugdrawdag <<'EOS'
> foo bar bar foo
> | / | |
> ancestor(c,d) a baz
> EOS
$ hg log -G -T '{desc}'
o foo
|\
+---o bar
| | |
| o | baz
| /
+---o d
| |
+---o c
| |
o | b
|/
o a
$ reinit
$ hg debugdrawdag <<'EOS'
> o foo
> |\
> +---o bar
> | | |
> | o | baz
> | /
> +---o d
> | |
> +---o c
> | |
> o | b
> |/
> o a
> EOS
$ hg log -G -T '{desc}'
o foo
|\
| | o d
| |/
| | o c
| |/
| | o bar
| |/|
| o | b
| |/
o / baz
/
o a
$ reinit
$ hg debugdrawdag <<'EOS'
> o foo
> |\
> | | o d
> | |/
> | | o c
> | |/
> | | o bar
> | |/|
> | o | b
> | |/
> o / baz
> /
> o a
> EOS
$ hg log -G -T '{desc}'
o foo
|\
| | o d
| |/
| | o c
| |/
| | o bar
| |/|
| o | b
| |/
o / baz
/
o a
$ hg manifest -r a
a
$ hg manifest -r b
a
b
$ hg manifest -r bar
a
b
$ hg manifest -r foo
a
b
baz
Edges existed in repo are no-ops
$ reinit
$ hg debugdrawdag <<'EOS'
> B C C
> | | |
> A A B
> EOS
$ hg log -G -T '{desc}'
o C
|\
| o B
|/
o A
$ hg debugdrawdag <<'EOS'
> C D C
> | | |
> B B A
> EOS
$ hg log -G -T '{desc}'
o D
|
| o C
|/|
o | B
|/
o A
Node with more than 2 parents are disallowed
$ hg debugdrawdag <<'EOS'
> A
> /|\
> D B C
> EOS
abort: A: too many parents: C D B
[255]
Cycles are disallowed
$ hg debugdrawdag <<'EOS'
> A
> |
> A
> EOS
abort: the graph has cycles
[255]
$ hg debugdrawdag <<'EOS'
> A
> |
> B
> |
> A
> EOS
abort: the graph has cycles
[255]
Create obsmarkers via comments
$ reinit
$ hg debugdrawdag <<'EOS'
> G
> |
> I D C F # split: B -> E, F, G
> \ \| | # replace: C -> D -> H
> H B E # prune: F, I
> \|/
> A
> EOS
1 new orphan changesets
$ hg log -r 'sort(all(), topo)' -G --hidden -T '{desc} {node}'
* G 711f53bbef0bebd12eb6f0511d5e2e998b984846
|
x F 64a8289d249234b9886244d379f15e6b650b28e3
|
o E 7fb047a69f220c21711122dfd94305a9efb60cba
|
| x D be0ef73c17ade3fc89dc41701eb9fc3a91b58282
| |
| | x C 26805aba1e600a82e93661149f2313866a221a7b
| |/
| x B 112478962961147124edd43549aedd1a335e44bf
|/
| x I 58e6b987bf7045fcd9c54f496396ca1d1fc81047
| |
| o H 575c4b5ec114d64b681d33f8792853568bfb2b2c
|/
o A 426bada5c67598ca65036d57d9e4b64b0c1ce7a0
$ hg debugobsolete
112478962961147124edd43549aedd1a335e44bf 7fb047a69f220c21711122dfd94305a9efb60cba 64a8289d249234b9886244d379f15e6b650b28e3 711f53bbef0bebd12eb6f0511d5e2e998b984846 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'split', 'user': 'test'}
26805aba1e600a82e93661149f2313866a221a7b be0ef73c17ade3fc89dc41701eb9fc3a91b58282 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'replace', 'user': 'test'}
be0ef73c17ade3fc89dc41701eb9fc3a91b58282 575c4b5ec114d64b681d33f8792853568bfb2b2c 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'replace', 'user': 'test'}
64a8289d249234b9886244d379f15e6b650b28e3 0 {7fb047a69f220c21711122dfd94305a9efb60cba} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'test'}
58e6b987bf7045fcd9c54f496396ca1d1fc81047 0 {575c4b5ec114d64b681d33f8792853568bfb2b2c} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'test'}
Change file contents via comments
$ reinit
$ hg debugdrawdag <<'EOS'
> C # A/dir1/a = 1\n2
> |\ # B/dir2/b = 34
> A B # C/dir1/c = 5
> # C/dir2/c = 6
> # C/A = a
> # C/B = b
> EOS
$ hg log -G -T '{desc} {files}'
o C A B dir1/c dir2/c
|\
| o B B dir2/b
|
o A A dir1/a
$ for f in `hg files -r C`; do
> echo FILE "$f"
> hg cat -r C "$f"
> echo
> done
FILE A
a
FILE B
b
FILE dir1/a
1
2
FILE dir1/c
5
FILE dir2/b
34
FILE dir2/c
6