Mercurial > hg
view tests/test-obsolete.t @ 42044:bb271ec2fbfb
compression: introduce a `storage.revlog.zstd.level` configuration
This option control the zstd compression level used when compressing revlog
chunk. The usage of zstd for revlog compression has not graduated from
experimental yet, but we intend to fix that soon.
The option name for the compression level is more straight forward to pick, so
this changesets comes first. Having a dedicated option for each compression
engine is useful because they don't support the same range of values.
I ran the same measurement as for the zlib compression level (in the parent
changesets). The variation in repository size is stay mostly in the same (small)
range. The "read/write" performance see smallish variation, but are overall much
better than zlib. Write performance show the same tend of having better write
performance for when reaching high-end compression.
Again, we don't intend to change the default zstd compression level (currently:
3) in this series. However this is worth investigating in the future.
The Performance comparison of zlib vs zstd is quite impressive. The repository
size stay in the same range, but the performance are much better in all
situations.
Comparison summary
==================
We are looking at:
- performance range for zlib
- performance range for zstd
- comparison of default zstd (level-3) to default zlib (level 6)
- comparison of the slowest zstd time to the fastest zlib time
Read performance:
-----------------
| zlib | zstd | cmp | f2s
mercurial | 0.170159 - 0.189219 | 0.144127 - 0.149624 | 80% | 88%
pypy | 2.679217 - 2.768691 | 1.532317 - 1.705044 | 60% | 63%
netbeans | 122.477027 - 141.620281 | 72.996346 - 89.731560 | 58% | 73%
mozilla | 147.867662 - 170.572118 | 91.700995 - 105.853099 | 56% | 71%
Write performance:
------------------
| zlib | zstd | cmp | f2s
mercurial | 53.250304 - 56.2936129 | 40.877025 - 45.677286 | 75% | 86%
pypy | 460.721984 - 476.589918 | 270.545409 - 301.002219 | 63% | 65%
netbeans | 520.560316 - 715.930400 | 370.356311 - 428.329652 | 55% | 82%
mozilla | 739.803002 - 987.056093 | 505.152906 - 591.930683 | 57% | 80%
Raw data
--------
repo alg lvl .hg/store size 00manifest.d read write
mercurial zlib 1 49,402,813 5,963,475 0.170159 53.250304
mercurial zlib 6 47,197,397 5,875,730 0.182820 56.264320
mercurial zlib 9 47,121,596 5,849,781 0.189219 56.293612
mercurial zstd 1 49,737,084 5,966,355 0.144127 40.877025
mercurial zstd 3 48,961,867 5,895,208 0.146376 42.268142
mercurial zstd 5 48,200,592 5,938,676 0.149624 43.162875
mercurial zstd 10 47,833,520 5,913,353 0.145185 44.012489
mercurial zstd 15 47,314,604 5,728,679 0.147686 45.677286
mercurial zstd 20 47,330,502 5,830,539 0.145789 45.025407
mercurial zstd 22 47,330,076 5,830,539 0.143996 44.690460
pypy zlib 1 370,830,572 28,462,425 2.679217 460.721984
pypy zlib 6 340,112,317 27,648,747 2.768691 467.537158
pypy zlib 9 338,360,736 27,639,003 2.763495 476.589918
pypy zstd 1 362,377,479 27,916,214 1.532317 270.545409
pypy zstd 3 354,137,693 27,905,988 1.686718 294.951509
pypy zstd 5 342,640,043 27,655,774 1.705044 301.002219
pypy zstd 10 334,224,327 27,164,493 1.567287 285.186239
pypy zstd 15 329,000,363 26,645,965 1.637729 299.561332
pypy zstd 20 324,534,039 26,199,547 1.526813 302.149827
pypy zstd 22 324,530,595 26,198,932 1.525718 307.821218
netbeans zlib 1 1,281,847,810 165,495,457 122.477027 520.560316
netbeans zlib 6 1,205,284,353 159,161,207 139.876147 715.930400
netbeans zlib 9 1,197,135,671 155,034,586 141.620281 678.297064
netbeans zstd 1 1,259,581,737 160,840,613 72.996346 370.356311
netbeans zstd 3 1,232,978,122 157,691,551 81.622317 396.733087
netbeans zstd 5 1,208,034,075 160,246,880 83.080549 364.342626
netbeans zstd 10 1,188,624,176 156,083,417 79.323935 403.594602
netbeans zstd 15 1,176,973,589 153,859,477 89.731560 428.329652
netbeans zstd 20 1,162,958,258 151,147,535 82.842667 392.335349
netbeans zstd 22 1,162,707,029 151,150,220 82.565695 402.840655
mozilla zlib 1 2,775,497,186 298,527,987 147.867662 751.263721
mozilla zlib 6 2,596,856,420 286,597,671 170.572118 987.056093
mozilla zlib 9 2,587,542,494 287,018,264 163.622338 739.803002
mozilla zstd 1 2,723,159,348 286,617,532 91.700995 570.042751
mozilla zstd 3 2,665,055,001 286,152,013 95.240155 561.412805
mozilla zstd 5 2,607,819,817 288,060,030 101.978048 505.152906
mozilla zstd 10 2,558,761,085 283,967,648 104.113481 497.771202
mozilla zstd 15 2,526,216,060 275,581,300 105.853099 591.930683
mozilla zstd 20 2,485,114,806 266,478,859 95.268795 576.515389
mozilla zstd 22 2,484,869,080 266,456,505 94.429282 572.785537
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 27 Mar 2019 18:35:59 +0100 |
parents | 191fac9ff9d3 |
children | 34a46d48d24e |
line wrap: on
line source
$ cat >> $HGRCPATH << EOF > [phases] > # public changeset are not obsolete > publish=false > [ui] > logtemplate="{rev}:{node|short} ({phase}{if(obsolete, ' *{obsolete}*')}{if(instabilities, ' {instabilities}')}) [{tags} {bookmarks}] {desc|firstline}{if(obsfate, " [{join(obsfate, "; ")}]")}\n" > EOF $ mkcommit() { > echo "$1" > "$1" > hg add "$1" > hg ci -m "add $1" > } $ getid() { > hg log -T "{node}\n" --hidden -r "desc('$1')" > } $ cat > debugkeys.py <<EOF > def reposetup(ui, repo): > class debugkeysrepo(repo.__class__): > def listkeys(self, namespace): > ui.write(b'listkeys %s\n' % (namespace,)) > return super(debugkeysrepo, self).listkeys(namespace) > > if repo.local(): > repo.__class__ = debugkeysrepo > EOF $ hg init tmpa $ cd tmpa $ mkcommit kill_me Checking that the feature is properly disabled $ hg debugobsolete -d '0 0' `getid kill_me` -u babar abort: creating obsolete markers is not enabled on this repo [255] Enabling it $ cat >> $HGRCPATH << EOF > [experimental] > evolution=exchange > evolution.createmarkers=True > EOF Killing a single changeset without replacement $ hg debugobsolete 0 abort: changeset references must be full hexadecimal node identifiers [255] $ hg debugobsolete '00' abort: changeset references must be full hexadecimal node identifiers [255] $ hg debugobsolete -d '0 0' `getid kill_me` -u babar obsoleted 1 changesets $ hg debugobsolete 97b7c2d76b1845ed3eb988cd612611e72406cef0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'babar'} (test that mercurial is not confused) $ hg up null --quiet # having 0 as parent prevents it to be hidden $ hg tip -1:000000000000 (public) [tip ] $ hg up --hidden tip --quiet updated to hidden changeset 97b7c2d76b18 (hidden revision '97b7c2d76b18' is pruned) Killing a single changeset with itself should fail (simple local safeguard) $ hg debugobsolete `getid kill_me` `getid kill_me` abort: bad obsmarker input: in-marker cycle with 97b7c2d76b1845ed3eb988cd612611e72406cef0 [255] $ cd .. Killing a single changeset with replacement (and testing the format option) $ hg init tmpb $ cd tmpb $ mkcommit a $ mkcommit b $ mkcommit original_c $ hg up "desc('b')" 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ mkcommit new_c created new head $ hg log -r 'hidden()' --template '{rev}:{node|short} {desc}\n' --hidden $ hg debugobsolete --config format.obsstore-version=0 --flag 12 `getid original_c` `getid new_c` -d '121 120' obsoleted 1 changesets $ hg log -r 'hidden()' --template '{rev}:{node|short} {desc}\n' --hidden 2:245bde4270cd add original_c $ hg debugrevlog -cd # rev p1rev p2rev start end deltastart base p1 p2 rawsize totalsize compression heads chainlen 0 -1 -1 0 59 0 0 0 0 58 58 0 1 0 1 0 -1 59 118 59 59 0 0 58 116 0 1 0 2 1 -1 118 193 118 118 59 0 76 192 0 1 0 3 1 -1 193 260 193 193 59 0 66 258 0 2 0 $ hg debugobsolete 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'} (check for version number of the obsstore) $ dd bs=1 count=1 if=.hg/store/obsstore 2>/dev/null \x00 (no-eol) (esc) do it again (it read the obsstore before adding new changeset) $ hg up '.^' 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ mkcommit new_2_c created new head $ hg debugobsolete -d '1337 0' `getid new_c` `getid new_2_c` obsoleted 1 changesets $ hg debugobsolete 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'} cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'} Register two markers with a missing node $ hg up '.^' 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ mkcommit new_3_c created new head $ hg debugobsolete -d '1338 0' `getid new_2_c` 1337133713371337133713371337133713371337 obsoleted 1 changesets $ hg debugobsolete -d '1339 0' 1337133713371337133713371337133713371337 `getid new_3_c` $ hg debugobsolete 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'} cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'} ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} Test the --index option of debugobsolete command $ hg debugobsolete --index 0 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'} 1 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'} 2 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} 3 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} Refuse pathological nullid successors $ hg debugobsolete -d '9001 0' 1337133713371337133713371337133713371337 0000000000000000000000000000000000000000 transaction abort! rollback completed abort: bad obsolescence marker detected: invalid successors nullid [255] Check that graphlog detect that a changeset is obsolete: $ hg log -G @ 5:5601fb93a350 (draft) [tip ] add new_3_c | o 1:7c3bad9141dc (draft) [ ] add b | o 0:1f0dee641bb7 (draft) [ ] add a check that heads does not report them $ hg heads 5:5601fb93a350 (draft) [tip ] add new_3_c $ hg heads --hidden 5:5601fb93a350 (draft) [tip ] add new_3_c 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350] 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9] 2:245bde4270cd (draft *obsolete*) [ ] add original_c [rewritten as 3:cdbce2fbb163] check that summary does not report them $ hg init ../sink $ echo '[paths]' >> .hg/hgrc $ echo 'default=../sink' >> .hg/hgrc $ hg summary --remote parent: 5:5601fb93a350 tip add new_3_c branch: default commit: (clean) update: (current) phases: 3 draft remote: 3 outgoing $ hg summary --remote --hidden parent: 5:5601fb93a350 tip add new_3_c branch: default commit: (clean) update: 3 new changesets, 4 branch heads (merge) phases: 6 draft remote: 3 outgoing check that various commands work well with filtering $ hg tip 5:5601fb93a350 (draft) [tip ] add new_3_c $ hg log -r 6 abort: unknown revision '6'! [255] $ hg log -r 4 abort: hidden revision '4' was rewritten as: 5601fb93a350! (use --hidden to access hidden revisions) [255] $ hg debugrevspec 'rev(6)' $ hg debugrevspec 'rev(4)' $ hg debugrevspec 'null' -1 Check that public changeset are not accounted as obsolete: $ hg --hidden phase --public 2 1 new phase-divergent changesets $ hg log -G @ 5:5601fb93a350 (draft phase-divergent) [tip ] add new_3_c | | o 2:245bde4270cd (public) [ ] add original_c |/ o 1:7c3bad9141dc (public) [ ] add b | o 0:1f0dee641bb7 (public) [ ] add a And that bumped changeset are detected -------------------------------------- If we didn't filtered obsolete changesets out, 3 and 4 would show up too. Also note that the bumped changeset (5:5601fb93a350) is not a direct successor of the public changeset $ hg log --hidden -r 'phasedivergent()' 5:5601fb93a350 (draft phase-divergent) [tip ] add new_3_c And that we can't push bumped changeset $ hg push ../tmpa -r 0 --force #(make repo related) pushing to ../tmpa searching for changes warning: repository is unrelated adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) $ hg push ../tmpa pushing to ../tmpa searching for changes abort: push includes phase-divergent changeset: 5601fb93a350! [255] Fixing "bumped" situation We need to create a clone of 5 and add a special marker with a flag $ hg summary parent: 5:5601fb93a350 tip (phase-divergent) add new_3_c branch: default commit: (clean) update: 1 new changesets, 2 branch heads (merge) phases: 1 draft phase-divergent: 1 changesets $ hg up '5^' 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg revert -ar 5 adding new_3_c $ hg ci -m 'add n3w_3_c' created new head $ hg debugobsolete -d '1338 0' --flags 1 `getid new_3_c` `getid n3w_3_c` obsoleted 1 changesets $ hg log -r 'phasedivergent()' $ hg log -G @ 6:6f9641995072 (draft) [tip ] add n3w_3_c | | o 2:245bde4270cd (public) [ ] add original_c |/ o 1:7c3bad9141dc (public) [ ] add b | o 0:1f0dee641bb7 (public) [ ] add a Basic exclusive testing $ hg log -G --hidden @ 6:6f9641995072 (draft) [tip ] add n3w_3_c | | x 5:5601fb93a350 (draft *obsolete*) [ ] add new_3_c [rewritten as 6:6f9641995072] |/ | x 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350] |/ | x 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9] |/ | o 2:245bde4270cd (public) [ ] add original_c |/ o 1:7c3bad9141dc (public) [ ] add b | o 0:1f0dee641bb7 (public) [ ] add a $ hg debugobsolete --rev 6f9641995072 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'} 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'} $ hg debugobsolete --rev 6f9641995072 --exclusive 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} $ hg debugobsolete --rev 5601fb93a350 --hidden 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'} ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'} $ hg debugobsolete --rev 5601fb93a350 --hidden --exclusive $ hg debugobsolete --rev 5601fb93a350+6f9641995072 --hidden --exclusive 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} $ cd .. Revision 0 is hidden -------------------- $ hg init rev0hidden $ cd rev0hidden $ mkcommit kill0 $ hg up -q null $ hg debugobsolete `getid kill0` obsoleted 1 changesets $ mkcommit a $ mkcommit b Should pick the first visible revision as "repo" node $ hg archive ../archive-null $ cat ../archive-null/.hg_archival.txt repo: 1f0dee641bb7258c56bd60e93edfa2405381c41e node: 7c3bad9141dcb46ff89abf5f61856facd56e476c branch: default latesttag: null latesttagdistance: 2 changessincelatesttag: 2 $ cd .. Can disable transaction summary report $ hg init transaction-summary $ cd transaction-summary $ mkcommit a $ mkcommit b $ hg up -q null $ hg --config experimental.evolution.report-instabilities=false debugobsolete `getid a` obsoleted 1 changesets $ cd .. Exchange Test ============================ Destination repo does not have any data --------------------------------------- Simple incoming test $ hg init tmpc $ cd tmpc $ hg incoming ../tmpb comparing with ../tmpb 0:1f0dee641bb7 (public) [ ] add a 1:7c3bad9141dc (public) [ ] add b 2:245bde4270cd (public) [ ] add original_c 6:6f9641995072 (draft) [tip ] add n3w_3_c Try to pull markers (extinct changeset are excluded but marker are pushed) $ hg pull ../tmpb pulling from ../tmpb requesting all changes adding changesets adding manifests adding file changes added 4 changesets with 4 changes to 4 files (+1 heads) 5 new obsolescence markers new changesets 1f0dee641bb7:6f9641995072 (1 drafts) (run 'hg heads' to see heads, 'hg merge' to merge) $ hg debugobsolete 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'} 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'} Rollback//Transaction support $ hg debugobsolete -d '1340 0' aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb $ hg debugobsolete 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'} 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'} aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 0 (Thu Jan 01 00:22:20 1970 +0000) {'user': 'test'} $ hg rollback -n repository tip rolled back to revision 3 (undo debugobsolete) $ hg rollback repository tip rolled back to revision 3 (undo debugobsolete) $ hg debugobsolete 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'} 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'} $ cd .. Try to push markers $ hg init tmpd $ hg -R tmpb push tmpd pushing to tmpd searching for changes adding changesets adding manifests adding file changes added 4 changesets with 4 changes to 4 files (+1 heads) 5 new obsolescence markers $ hg -R tmpd debugobsolete | sort 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'} 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'} Check obsolete keys are exchanged only if source has an obsolete store $ hg init empty $ hg --config extensions.debugkeys=debugkeys.py -R empty push tmpd pushing to tmpd listkeys phases listkeys bookmarks no changes found listkeys phases [1] clone support (markers are copied and extinct changesets are included to allow hardlinks) $ hg clone tmpb clone-dest updating to branch default 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg -R clone-dest log -G --hidden @ 6:6f9641995072 (draft) [tip ] add n3w_3_c | | x 5:5601fb93a350 (draft *obsolete*) [ ] add new_3_c [rewritten as 6:6f9641995072] |/ | x 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350] |/ | x 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9] |/ | o 2:245bde4270cd (public) [ ] add original_c |/ o 1:7c3bad9141dc (public) [ ] add b | o 0:1f0dee641bb7 (public) [ ] add a $ hg -R clone-dest debugobsolete 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'} cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'} ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} Destination repo have existing data --------------------------------------- On pull $ hg init tmpe $ cd tmpe $ hg debugobsolete -d '1339 0' 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 $ hg pull ../tmpb pulling from ../tmpb requesting all changes adding changesets adding manifests adding file changes added 4 changesets with 4 changes to 4 files (+1 heads) 5 new obsolescence markers new changesets 1f0dee641bb7:6f9641995072 (1 drafts) (run 'hg heads' to see heads, 'hg merge' to merge) $ hg debugobsolete 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'} 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'} On push $ hg push ../tmpc pushing to ../tmpc searching for changes no changes found 1 new obsolescence markers [1] $ hg -R ../tmpc debugobsolete 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'} 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'} 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} detect outgoing obsolete and unstable --------------------------------------- $ hg log -G o 3:6f9641995072 (draft) [tip ] add n3w_3_c | | o 2:245bde4270cd (public) [ ] add original_c |/ o 1:7c3bad9141dc (public) [ ] add b | o 0:1f0dee641bb7 (public) [ ] add a $ hg up 'desc("n3w_3_c")' 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ mkcommit original_d $ mkcommit original_e $ hg debugobsolete --record-parents `getid original_d` -d '0 0' obsoleted 1 changesets 1 new orphan changesets $ hg debugobsolete | grep `getid original_d` 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} $ hg log -r 'obsolete()' 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned] $ hg summary parent: 5:cda648ca50f5 tip (orphan) add original_e branch: default commit: (clean) update: 1 new changesets, 2 branch heads (merge) phases: 3 draft orphan: 1 changesets $ hg log -G -r '::orphan()' @ 5:cda648ca50f5 (draft orphan) [tip ] add original_e | x 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned] | o 3:6f9641995072 (draft) [ ] add n3w_3_c | o 1:7c3bad9141dc (public) [ ] add b | o 0:1f0dee641bb7 (public) [ ] add a refuse to push obsolete changeset $ hg push ../tmpc/ -r 'desc("original_d")' pushing to ../tmpc/ searching for changes abort: push includes obsolete changeset: 94b33453f93b! [255] refuse to push unstable changeset $ hg push ../tmpc/ pushing to ../tmpc/ searching for changes abort: push includes orphan changeset: cda648ca50f5! [255] Test that extinct changeset are properly detected $ hg log -r 'extinct()' Don't try to push extinct changeset $ hg init ../tmpf $ hg out ../tmpf comparing with ../tmpf searching for changes 0:1f0dee641bb7 (public) [ ] add a 1:7c3bad9141dc (public) [ ] add b 2:245bde4270cd (public) [ ] add original_c 3:6f9641995072 (draft) [ ] add n3w_3_c 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned] 5:cda648ca50f5 (draft orphan) [tip ] add original_e $ hg push ../tmpf -f # -f because be push unstable too pushing to ../tmpf searching for changes adding changesets adding manifests adding file changes added 6 changesets with 6 changes to 6 files (+1 heads) 7 new obsolescence markers 1 new orphan changesets no warning displayed $ hg push ../tmpf pushing to ../tmpf searching for changes no changes found [1] Do not warn about new head when the new head is a successors of a remote one $ hg log -G @ 5:cda648ca50f5 (draft orphan) [tip ] add original_e | x 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned] | o 3:6f9641995072 (draft) [ ] add n3w_3_c | | o 2:245bde4270cd (public) [ ] add original_c |/ o 1:7c3bad9141dc (public) [ ] add b | o 0:1f0dee641bb7 (public) [ ] add a $ hg up -q 'desc(n3w_3_c)' $ mkcommit obsolete_e created new head $ hg debugobsolete `getid 'original_e'` `getid 'obsolete_e'` \ > -u 'test <test@example.net>' obsoleted 1 changesets $ hg outgoing ../tmpf # parasite hg outgoing testin comparing with ../tmpf searching for changes 6:3de5eca88c00 (draft) [tip ] add obsolete_e $ hg push ../tmpf pushing to ../tmpf searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 1 new obsolescence markers obsoleted 1 changesets test relevance computation --------------------------------------- Checking simple case of "marker relevance". Reminder of the repo situation $ hg log --hidden --graph @ 6:3de5eca88c00 (draft) [tip ] add obsolete_e | | x 5:cda648ca50f5 (draft *obsolete*) [ ] add original_e [rewritten as 6:3de5eca88c00 by test <test@example.net>] | | | x 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned] |/ o 3:6f9641995072 (draft) [ ] add n3w_3_c | | o 2:245bde4270cd (public) [ ] add original_c |/ o 1:7c3bad9141dc (public) [ ] add b | o 0:1f0dee641bb7 (public) [ ] add a List of all markers $ hg debugobsolete 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'} 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'} 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test <test@example.net>'} (glob) List of changesets with no chain $ hg debugobsolete --hidden --rev ::2 List of changesets that are included on marker chain $ hg debugobsolete --hidden --rev 6 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test <test@example.net>'} (glob) List of changesets with a longer chain, (including a pruned children) $ hg debugobsolete --hidden --rev 3 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'} 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'} List of both $ hg debugobsolete --hidden --rev 3::6 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'} 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'} 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'} cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test <test@example.net>'} (glob) cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'} List of all markers in JSON $ hg debugobsolete -Tjson [ { "date": [1339, 0], "flag": 0, "metadata": {"user": "test"}, "prednode": "1339133913391339133913391339133913391339", "succnodes": ["ca819180edb99ed25ceafb3e9584ac287e240b00"] }, { "date": [1339, 0], "flag": 0, "metadata": {"user": "test"}, "prednode": "1337133713371337133713371337133713371337", "succnodes": ["5601fb93a350734d935195fee37f4054c529ff39"] }, { "date": [121, 120], "flag": 12, "metadata": {"user": "test"}, "prednode": "245bde4270cd1072a27757984f9cda8ba26f08ca", "succnodes": ["cdbce2fbb16313928851e97e0d85413f3f7eb77f"] }, { "date": [1338, 0], "flag": 1, "metadata": {"user": "test"}, "prednode": "5601fb93a350734d935195fee37f4054c529ff39", "succnodes": ["6f96419950729f3671185b847352890f074f7557"] }, { "date": [1338, 0], "flag": 0, "metadata": {"user": "test"}, "prednode": "ca819180edb99ed25ceafb3e9584ac287e240b00", "succnodes": ["1337133713371337133713371337133713371337"] }, { "date": [1337, 0], "flag": 0, "metadata": {"user": "test"}, "prednode": "cdbce2fbb16313928851e97e0d85413f3f7eb77f", "succnodes": ["ca819180edb99ed25ceafb3e9584ac287e240b00"] }, { "date": [0, 0], "flag": 0, "metadata": {"user": "test"}, "parentnodes": ["6f96419950729f3671185b847352890f074f7557"], "prednode": "94b33453f93bdb8d457ef9b770851a618bf413e1", "succnodes": [] }, { "date": *, (glob) "flag": 0, "metadata": {"user": "test <test@example.net>"}, "prednode": "cda648ca50f50482b7055c0b0c4c117bba6733d9", "succnodes": ["3de5eca88c00aa039da7399a220f4a5221faa585"] } ] Template keywords $ hg debugobsolete -r6 -T '{succnodes % "{node|short}"} {date|shortdate}\n' 3de5eca88c00 ????-??-?? (glob) $ hg debugobsolete -r6 -T '{join(metadata % "{key}={value}", " ")}\n' user=test <test@example.net> $ hg debugobsolete -r6 -T '{metadata}\n{metadata}\n' 'user': 'test <test@example.net>' 'user': 'test <test@example.net>' $ hg debugobsolete -r6 -T '{succnodes}\n{succnodes}\n' 3de5eca88c00aa039da7399a220f4a5221faa585 3de5eca88c00aa039da7399a220f4a5221faa585 $ hg debugobsolete -r6 -T '{flag} {get(metadata, "user")}\n' 0 test <test@example.net> Test the debug output for exchange ---------------------------------- $ hg pull ../tmpb --config 'experimental.obsmarkers-exchange-debug=True' # bundle2 pulling from ../tmpb searching for changes no changes found obsmarker-exchange: 346 bytes received check hgweb does not explode ==================================== $ hg unbundle $TESTDIR/bundles/hgweb+obs.hg adding changesets adding manifests adding file changes added 62 changesets with 63 changes to 9 files (+60 heads) new changesets 50c51b361e60:c15e9edfca13 (62 drafts) (2 other changesets obsolete on arrival) (run 'hg heads .' to see heads, 'hg merge' to merge) $ for node in `hg log -r 'desc(babar_)' --template '{node}\n'`; > do > hg debugobsolete $node > done obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets obsoleted 1 changesets $ hg up tip 2 files updated, 0 files merged, 0 files removed, 0 files unresolved #if serve $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log $ cat hg.pid >> $DAEMON_PIDS check changelog view $ get-with-headers.py --headeronly localhost:$HGPORT 'shortlog/' 200 Script output follows check graph view $ get-with-headers.py --headeronly localhost:$HGPORT 'graph' 200 Script output follows check filelog view $ get-with-headers.py --headeronly localhost:$HGPORT 'log/'`hg log -r . -T "{node}"`/'babar' 200 Script output follows check filelog view for hidden commits (obsolete ones are hidden here) $ get-with-headers.py localhost:$HGPORT 'log/'`hg log -r . -T "{node}"`/'babar' | grep obsolete [1] $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/68' 200 Script output follows $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67' 404 Not Found [1] check that web.view config option: $ killdaemons.py hg.pid $ cat >> .hg/hgrc << EOF > [web] > view=all > EOF $ wait $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67' 200 Script output follows $ killdaemons.py hg.pid Checking _enable=False warning if obsolete marker exists $ echo '[experimental]' >> $HGRCPATH $ echo "evolution=" >> $HGRCPATH $ hg log -r tip 68:c15e9edfca13 (draft) [tip ] add celestine reenable for later test $ echo '[experimental]' >> $HGRCPATH $ echo "evolution.exchange=True" >> $HGRCPATH $ echo "evolution.createmarkers=True" >> $HGRCPATH $ rm access.log errors.log #endif Several troubles on the same changeset (create an unstable and bumped and content-divergent changeset) $ hg debugobsolete `getid obsolete_e` obsoleted 1 changesets 2 new orphan changesets $ hg debugobsolete `getid original_c` `getid babar` 1 new phase-divergent changesets 2 new content-divergent changesets $ hg log --config ui.logtemplate= -r 'phasedivergent() and orphan() and contentdivergent()' changeset: 7:50c51b361e60 user: test date: Thu Jan 01 00:00:00 1970 +0000 instability: orphan, phase-divergent, content-divergent summary: add babar test the "obsolete" templatekw $ hg log -r 'obsolete()' 6:3de5eca88c00 (draft *obsolete*) [ ] add obsolete_e [pruned] test the "troubles" templatekw $ hg log -r 'phasedivergent() and orphan()' 7:50c51b361e60 (draft orphan phase-divergent content-divergent) [ ] add babar test the default cmdline template $ hg log -T default -r 'phasedivergent()' changeset: 7:50c51b361e60 user: test date: Thu Jan 01 00:00:00 1970 +0000 instability: orphan, phase-divergent, content-divergent summary: add babar $ hg log -T default -r 'obsolete()' changeset: 6:3de5eca88c00 parent: 3:6f9641995072 user: test date: Thu Jan 01 00:00:00 1970 +0000 obsolete: pruned summary: add obsolete_e test the obsolete labels $ hg log --config ui.logtemplate= --color=debug -r 'phasedivergent()' [log.changeset changeset.draft changeset.unstable instability.orphan instability.phase-divergent instability.content-divergent|changeset: 7:50c51b361e60] [log.user|user: test] [log.date|date: Thu Jan 01 00:00:00 1970 +0000] [log.instability|instability: orphan, phase-divergent, content-divergent] [log.summary|summary: add babar] $ hg log -T default -r 'phasedivergent()' --color=debug [log.changeset changeset.draft changeset.unstable instability.orphan instability.phase-divergent instability.content-divergent|changeset: 7:50c51b361e60] [log.user|user: test] [log.date|date: Thu Jan 01 00:00:00 1970 +0000] [log.instability|instability: orphan, phase-divergent, content-divergent] [log.summary|summary: add babar] $ hg log --config ui.logtemplate= --color=debug -r "obsolete()" [log.changeset changeset.draft changeset.obsolete|changeset: 6:3de5eca88c00] [log.parent changeset.draft|parent: 3:6f9641995072] [log.user|user: test] [log.date|date: Thu Jan 01 00:00:00 1970 +0000] [log.obsfate|obsolete: pruned] [log.summary|summary: add obsolete_e] $ hg log -T default -r 'obsolete()' --color=debug [log.changeset changeset.draft changeset.obsolete|changeset: 6:3de5eca88c00] [log.parent changeset.draft|parent: 3:6f9641995072] [log.user|user: test] [log.date|date: Thu Jan 01 00:00:00 1970 +0000] [log.obsfate|obsolete: pruned] [log.summary|summary: add obsolete_e] test summary output $ hg up -r 'phasedivergent() and orphan()' 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg summary parent: 7:50c51b361e60 (orphan, phase-divergent, content-divergent) add babar branch: default commit: (clean) update: 2 new changesets (update) phases: 4 draft orphan: 2 changesets content-divergent: 2 changesets phase-divergent: 1 changesets $ hg up -r 'obsolete()' 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg summary parent: 6:3de5eca88c00 (obsolete) add obsolete_e branch: default commit: (clean) update: 3 new changesets (update) phases: 4 draft orphan: 2 changesets content-divergent: 2 changesets phase-divergent: 1 changesets test debugwhyunstable output $ hg debugwhyunstable 50c51b361e60 orphan: obsolete parent 3de5eca88c00aa039da7399a220f4a5221faa585 phase-divergent: immutable predecessor 245bde4270cd1072a27757984f9cda8ba26f08ca content-divergent: 6f96419950729f3671185b847352890f074f7557 (draft) predecessor 245bde4270cd1072a27757984f9cda8ba26f08ca test whyunstable template keyword $ hg log -r 50c51b361e60 -T '{whyunstable}\n' orphan: obsolete parent 3de5eca88c00 phase-divergent: immutable predecessor 245bde4270cd content-divergent: 3:6f9641995072 (draft) predecessor 245bde4270cd $ hg log -r 50c51b361e60 -T '{whyunstable % "{instability}: {reason} {node|shortest}\n"}' orphan: obsolete parent 3de5 phase-divergent: immutable predecessor 245b content-divergent: predecessor 245b #if serve $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log $ cat hg.pid >> $DAEMON_PIDS check obsolete changeset $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=paper' | grep '<span class="obsolete">' <span class="phase">draft</span> <span class="obsolete">obsolete</span> $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=coal' | grep '<span class="obsolete">' <span class="phase">draft</span> <span class="obsolete">obsolete</span> $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=gitweb' | grep '<span class="logtags">' <span class="logtags"><span class="phasetag" title="draft">draft</span> <span class="obsoletetag" title="obsolete">obsolete</span> </span> $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=monoblue' | grep '<span class="logtags">' <span class="logtags"><span class="phasetag" title="draft">draft</span> <span class="obsoletetag" title="obsolete">obsolete</span> </span> $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=spartan' | grep 'class="obsolete"' <th class="obsolete">obsolete:</th> <td class="obsolete">pruned by test <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td> check changeset with instabilities $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=paper' | grep '<span class="instability">' <span class="phase">draft</span> <span class="instability">orphan</span> <span class="instability">phase-divergent</span> <span class="instability">content-divergent</span> $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=coal' | grep '<span class="instability">' <span class="phase">draft</span> <span class="instability">orphan</span> <span class="instability">phase-divergent</span> <span class="instability">content-divergent</span> $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=gitweb' | grep '<span class="logtags">' <span class="logtags"><span class="phasetag" title="draft">draft</span> <span class="instabilitytag" title="orphan">orphan</span> <span class="instabilitytag" title="phase-divergent">phase-divergent</span> <span class="instabilitytag" title="content-divergent">content-divergent</span> </span> $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=monoblue' | grep '<span class="logtags">' <span class="logtags"><span class="phasetag" title="draft">draft</span> <span class="instabilitytag" title="orphan">orphan</span> <span class="instabilitytag" title="phase-divergent">phase-divergent</span> <span class="instabilitytag" title="content-divergent">content-divergent</span> </span> $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=spartan' | grep 'class="unstable"' <th class="unstable">unstable:</th> <td class="unstable">orphan: obsolete parent <a href="/rev/3de5eca88c00?style=spartan">3de5eca88c00</a></td> <th class="unstable">unstable:</th> <td class="unstable">phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=spartan">245bde4270cd</a></td> <th class="unstable">unstable:</th> <td class="unstable">content-divergent: <a href="/rev/6f9641995072?style=spartan">6f9641995072</a> (draft) predecessor <a href="/rev/245bde4270cd?style=spartan">245bde4270cd</a></td> check explanation for an orphan, phase-divergent and content-divergent changeset $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=paper' | egrep '(orphan|phase-divergent|content-divergent):' <td>orphan: obsolete parent <a href="/rev/3de5eca88c00?style=paper">3de5eca88c00</a><br> phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=paper">245bde4270cd</a><br> content-divergent: <a href="/rev/6f9641995072?style=paper">6f9641995072</a> (draft) predecessor <a href="/rev/245bde4270cd?style=paper">245bde4270cd</a></td> $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=coal' | egrep '(orphan|phase-divergent|content-divergent):' <td>orphan: obsolete parent <a href="/rev/3de5eca88c00?style=coal">3de5eca88c00</a><br> phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=coal">245bde4270cd</a><br> content-divergent: <a href="/rev/6f9641995072?style=coal">6f9641995072</a> (draft) predecessor <a href="/rev/245bde4270cd?style=coal">245bde4270cd</a></td> $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=gitweb' | egrep '(orphan|phase-divergent|content-divergent):' <td>orphan: obsolete parent <a class="list" href="/rev/3de5eca88c00?style=gitweb">3de5eca88c00</a></td> <td>phase-divergent: immutable predecessor <a class="list" href="/rev/245bde4270cd?style=gitweb">245bde4270cd</a></td> <td>content-divergent: <a class="list" href="/rev/6f9641995072?style=gitweb">6f9641995072</a> (draft) predecessor <a class="list" href="/rev/245bde4270cd?style=gitweb">245bde4270cd</a></td> $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=monoblue' | egrep '(orphan|phase-divergent|content-divergent):' <dd>orphan: obsolete parent <a href="/rev/3de5eca88c00?style=monoblue">3de5eca88c00</a></dd> <dd>phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=monoblue">245bde4270cd</a></dd> <dd>content-divergent: <a href="/rev/6f9641995072?style=monoblue">6f9641995072</a> (draft) predecessor <a href="/rev/245bde4270cd?style=monoblue">245bde4270cd</a></dd> $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=spartan' | egrep '(orphan|phase-divergent|content-divergent):' <td class="unstable">orphan: obsolete parent <a href="/rev/3de5eca88c00?style=spartan">3de5eca88c00</a></td> <td class="unstable">phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=spartan">245bde4270cd</a></td> <td class="unstable">content-divergent: <a href="/rev/6f9641995072?style=spartan">6f9641995072</a> (draft) predecessor <a href="/rev/245bde4270cd?style=spartan">245bde4270cd</a></td> $ killdaemons.py $ rm hg.pid access.log errors.log #endif Test incoming/outcoming with changesets obsoleted remotely, known locally =============================================================================== This test issue 3805 $ hg init repo-issue3805 $ cd repo-issue3805 $ echo "base" > base $ hg ci -Am "base" adding base $ echo "foo" > foo $ hg ci -Am "A" adding foo $ hg clone . ../other-issue3805 updating to branch default 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo "bar" >> foo $ hg ci --amend $ cd ../other-issue3805 $ hg log -G @ 1:29f0c6921ddd (draft) [tip ] A | o 0:d20a80d4def3 (draft) [ ] base $ hg log -G -R ../repo-issue3805 @ 2:323a9c3ddd91 (draft) [tip ] A | o 0:d20a80d4def3 (draft) [ ] base $ hg incoming comparing with $TESTTMP/tmpe/repo-issue3805 searching for changes 2:323a9c3ddd91 (draft) [tip ] A $ hg incoming --bundle ../issue3805.hg comparing with $TESTTMP/tmpe/repo-issue3805 searching for changes 2:323a9c3ddd91 (draft) [tip ] A $ hg outgoing comparing with $TESTTMP/tmpe/repo-issue3805 searching for changes 1:29f0c6921ddd (draft) [tip ] A #if serve $ hg serve -R ../repo-issue3805 -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log $ cat hg.pid >> $DAEMON_PIDS $ hg incoming http://localhost:$HGPORT comparing with http://localhost:$HGPORT/ searching for changes 2:323a9c3ddd91 (draft) [tip ] A $ hg outgoing http://localhost:$HGPORT comparing with http://localhost:$HGPORT/ searching for changes 1:29f0c6921ddd (draft) [tip ] A $ killdaemons.py #endif This test issue 3814 (nothing to push but locally hidden changeset) $ cd .. $ hg init repo-issue3814 $ cd repo-issue3805 $ hg push -r 323a9c3ddd91 ../repo-issue3814 pushing to ../repo-issue3814 searching for changes adding changesets adding manifests adding file changes added 2 changesets with 2 changes to 2 files 1 new obsolescence markers $ hg out ../repo-issue3814 comparing with ../repo-issue3814 searching for changes no changes found [1] Test that a local tag blocks a changeset from being hidden $ hg tag -l visible -r 1 --hidden $ hg log -G @ 2:323a9c3ddd91 (draft) [tip ] A | | x 1:29f0c6921ddd (draft *obsolete*) [visible ] A [rewritten using amend as 2:323a9c3ddd91] |/ o 0:d20a80d4def3 (draft) [ ] base Test that removing a local tag does not cause some commands to fail $ hg tag -l -r tip tiptag $ hg tags tiptag 2:323a9c3ddd91 tip 2:323a9c3ddd91 visible 1:29f0c6921ddd $ hg --config extensions.strip= strip -r tip --no-backup 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg tags visible 1:29f0c6921ddd tip 1:29f0c6921ddd Test bundle overlay onto hidden revision $ cd .. $ hg init repo-bundleoverlay $ cd repo-bundleoverlay $ echo "A" > foo $ hg ci -Am "A" adding foo $ echo "B" >> foo $ hg ci -m "B" $ hg up 0 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo "C" >> foo $ hg ci -m "C" created new head $ hg log -G @ 2:c186d7714947 (draft) [tip ] C | | o 1:44526ebb0f98 (draft) [ ] B |/ o 0:4b34ecfb0d56 (draft) [ ] A $ hg clone -r1 . ../other-bundleoverlay adding changesets adding manifests adding file changes added 2 changesets with 2 changes to 1 files new changesets 4b34ecfb0d56:44526ebb0f98 (2 drafts) updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd ../other-bundleoverlay $ echo "B+" >> foo $ hg ci --amend -m "B+" $ hg log -G --hidden @ 2:b7d587542d40 (draft) [tip ] B+ | | x 1:44526ebb0f98 (draft *obsolete*) [ ] B [rewritten using amend as 2:b7d587542d40] |/ o 0:4b34ecfb0d56 (draft) [ ] A #if repobundlerepo $ hg incoming ../repo-bundleoverlay --bundle ../bundleoverlay.hg comparing with ../repo-bundleoverlay searching for changes 1:44526ebb0f98 (draft) [ ] B 2:c186d7714947 (draft) [tip ] C $ hg log -G -R ../bundleoverlay.hg o 3:c186d7714947 (draft) [tip ] C | | @ 2:b7d587542d40 (draft) [ ] B+ |/ o 0:4b34ecfb0d56 (draft) [ ] A #endif #if serve Test issue 4506 $ cd .. $ hg init repo-issue4506 $ cd repo-issue4506 $ echo "0" > foo $ hg add foo $ hg ci -m "content-0" $ hg up null 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ echo "1" > bar $ hg add bar $ hg ci -m "content-1" created new head $ hg up 0 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg graft 1 grafting 1:1c9eddb02162 "content-1" (tip) $ hg debugobsolete `hg log -r1 -T'{node}'` `hg log -r2 -T'{node}'` obsoleted 1 changesets $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log $ cat hg.pid >> $DAEMON_PIDS $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/1' 404 Not Found [1] $ get-with-headers.py --headeronly localhost:$HGPORT 'file/tip/bar' 200 Script output follows $ get-with-headers.py --headeronly localhost:$HGPORT 'annotate/tip/bar' 200 Script output follows $ killdaemons.py #endif Test heads computation on pending index changes with obsolescence markers $ cd .. $ cat >$TESTTMP/test_extension.py << EOF > from __future__ import absolute_import > from mercurial.i18n import _ > from mercurial import cmdutil, pycompat, registrar > from mercurial.utils import stringutil > > cmdtable = {} > command = registrar.command(cmdtable) > @command(b"amendtransient",[], _(b'hg amendtransient [rev]')) > def amend(ui, repo, *pats, **opts): > opts = pycompat.byteskwargs(opts) > opts[b'message'] = b'Test' > opts[b'logfile'] = None > cmdutil.amend(ui, repo, repo[b'.'], {}, pats, opts) > ui.write(b'%s\n' % stringutil.pprint(repo.changelog.headrevs())) > EOF $ cat >> $HGRCPATH << EOF > [extensions] > testextension=$TESTTMP/test_extension.py > EOF $ hg init repo-issue-nativerevs-pending-changes $ cd repo-issue-nativerevs-pending-changes $ mkcommit a $ mkcommit b $ hg up ".^" 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ echo aa > a $ hg amendtransient 1 new orphan changesets [1, 2] Test cache consistency for the visible filter 1) We want to make sure that the cached filtered revs are invalidated when bookmarks change $ cd .. $ cat >$TESTTMP/test_extension.py << EOF > from __future__ import absolute_import, print_function > import weakref > from mercurial import ( > bookmarks, > cmdutil, > extensions, > repoview, > ) > def _bookmarkchanged(orig, bkmstoreinst, *args, **kwargs): > reporef = weakref.ref(bkmstoreinst._repo) > def trhook(tr): > repo = reporef() > hidden1 = repoview.computehidden(repo) > hidden = repoview.filterrevs(repo, b'visible') > if sorted(hidden1) != sorted(hidden): > print("cache inconsistency") > bkmstoreinst._repo.currenttransaction().addpostclose(b'test_extension', trhook) > orig(bkmstoreinst, *args, **kwargs) > def extsetup(ui): > extensions.wrapfunction(bookmarks.bmstore, '_recordchange', > _bookmarkchanged) > EOF $ hg init repo-cache-inconsistency $ cd repo-issue-nativerevs-pending-changes $ mkcommit a a already tracked! $ mkcommit b $ hg id 13bedc178fce tip $ echo "hello" > b $ hg commit --amend -m "message" $ hg book bookb -r 13bedc178fce --hidden bookmarking hidden changeset 13bedc178fce (hidden revision '13bedc178fce' was rewritten as: a9b1f8652753) $ hg log -r 13bedc178fce 4:13bedc178fce (draft *obsolete*) [ bookb] add b [rewritten using amend as 5:a9b1f8652753] $ hg book -d bookb $ hg log -r 13bedc178fce abort: hidden revision '13bedc178fce' was rewritten as: a9b1f8652753! (use --hidden to access hidden revisions) [255] Empty out the test extension, as it isn't compatible with later parts of the test. $ echo > $TESTTMP/test_extension.py Test ability to pull changeset with locally applying obsolescence markers (issue4945) $ cd .. $ hg init issue4845 $ cd issue4845 $ echo foo > f0 $ hg add f0 $ hg ci -m '0' $ echo foo > f1 $ hg add f1 $ hg ci -m '1' $ echo foo > f2 $ hg add f2 $ hg ci -m '2' $ echo bar > f2 $ hg commit --amend --config experimental.evolution.createmarkers=True $ hg log -G @ 3:b0551702f918 (draft) [tip ] 2 | o 1:e016b03fd86f (draft) [ ] 1 | o 0:a78f55e5508c (draft) [ ] 0 $ hg log -G --hidden @ 3:b0551702f918 (draft) [tip ] 2 | | x 2:e008cf283490 (draft *obsolete*) [ ] 2 [rewritten using amend as 3:b0551702f918] |/ o 1:e016b03fd86f (draft) [ ] 1 | o 0:a78f55e5508c (draft) [ ] 0 $ hg strip --hidden -r 2 --config extensions.strip= --config devel.strip-obsmarkers=no saved backup bundle to $TESTTMP/tmpe/issue4845/.hg/strip-backup/e008cf283490-ede36964-backup.hg $ hg debugobsolete e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} $ hg log -G @ 2:b0551702f918 (draft) [tip ] 2 | o 1:e016b03fd86f (draft) [ ] 1 | o 0:a78f55e5508c (draft) [ ] 0 $ hg log -G --hidden @ 2:b0551702f918 (draft) [tip ] 2 | o 1:e016b03fd86f (draft) [ ] 1 | o 0:a78f55e5508c (draft) [ ] 0 $ hg debugbundle .hg/strip-backup/e008cf283490-*-backup.hg Stream params: {Compression: BZ} changegroup -- {nbchanges: 1, version: 02} (mandatory: True) e008cf2834908e5d6b0f792a9d4b0e2272260fb8 cache:rev-branch-cache -- {} (mandatory: False) phase-heads -- {} (mandatory: True) e008cf2834908e5d6b0f792a9d4b0e2272260fb8 draft #if repobundlerepo $ hg pull .hg/strip-backup/e008cf283490-*-backup.hg pulling from .hg/strip-backup/e008cf283490-ede36964-backup.hg searching for changes no changes found #endif $ hg debugobsolete e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} $ hg log -G @ 2:b0551702f918 (draft) [tip ] 2 | o 1:e016b03fd86f (draft) [ ] 1 | o 0:a78f55e5508c (draft) [ ] 0 $ hg log -G --hidden @ 2:b0551702f918 (draft) [tip ] 2 | o 1:e016b03fd86f (draft) [ ] 1 | o 0:a78f55e5508c (draft) [ ] 0 Testing that strip remove markers: $ hg strip -r 1 --config extensions.strip= 0 files updated, 0 files merged, 2 files removed, 0 files unresolved saved backup bundle to $TESTTMP/tmpe/issue4845/.hg/strip-backup/e016b03fd86f-65ede734-backup.hg $ hg debugobsolete $ hg log -G @ 0:a78f55e5508c (draft) [tip ] 0 $ hg log -G --hidden @ 0:a78f55e5508c (draft) [tip ] 0 $ hg debugbundle .hg/strip-backup/e016b03fd86f-*-backup.hg Stream params: {Compression: BZ} changegroup -- {nbchanges: 2, version: 02} (mandatory: True) e016b03fd86fcccc54817d120b90b751aaf367d6 b0551702f918510f01ae838ab03a463054c67b46 cache:rev-branch-cache -- {} (mandatory: False) obsmarkers -- {} (mandatory: True) version: 1 (92 bytes) e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} phase-heads -- {} (mandatory: True) b0551702f918510f01ae838ab03a463054c67b46 draft $ hg unbundle .hg/strip-backup/e016b03fd86f-*-backup.hg adding changesets adding manifests adding file changes added 2 changesets with 2 changes to 2 files 1 new obsolescence markers new changesets e016b03fd86f:b0551702f918 (2 drafts) (run 'hg update' to get a working copy) $ hg debugobsolete | sort e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} $ hg log -G o 2:b0551702f918 (draft) [tip ] 2 | o 1:e016b03fd86f (draft) [ ] 1 | @ 0:a78f55e5508c (draft) [ ] 0 $ hg log -G --hidden o 2:b0551702f918 (draft) [tip ] 2 | o 1:e016b03fd86f (draft) [ ] 1 | @ 0:a78f55e5508c (draft) [ ] 0 Test that 'hg debugobsolete --index --rev' can show indices of obsmarkers when only a subset of those are displayed (because of --rev option) $ hg init doindexrev $ cd doindexrev $ echo a > a $ hg ci -Am a adding a $ hg ci --amend -m aa $ echo b > b $ hg ci -Am b adding b $ hg ci --amend -m bb $ echo c > c $ hg ci -Am c adding c $ hg ci --amend -m cc $ echo d > d $ hg ci -Am d adding d $ hg ci --amend -m dd --config experimental.evolution.track-operation=1 $ hg debugobsolete --index --rev "3+7" 1 6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1 d27fb9b066076fd921277a4b9e8b9cb48c95bc6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'} 3 4715cf767440ed891755448016c2b8cf70760c30 7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'} $ hg debugobsolete --index --rev "3+7" -Tjson [ { "date": [0, 0], "flag": 0, "index": 1, "metadata": {"ef1": "1", "operation": "amend", "user": "test"}, "prednode": "6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1", "succnodes": ["d27fb9b066076fd921277a4b9e8b9cb48c95bc6a"] }, { "date": [0, 0], "flag": 0, "index": 3, "metadata": {"ef1": "1", "operation": "amend", "user": "test"}, "prednode": "4715cf767440ed891755448016c2b8cf70760c30", "succnodes": ["7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d"] } ] Test the --delete option of debugobsolete command $ hg debugobsolete --index 0 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b f9bd49731b0b175e42992a3c8fa6c678b2bc11f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'} 1 6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1 d27fb9b066076fd921277a4b9e8b9cb48c95bc6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'} 2 1ab51af8f9b41ef8c7f6f3312d4706d870b1fb74 29346082e4a9e27042b62d2da0e2de211c027621 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'} 3 4715cf767440ed891755448016c2b8cf70760c30 7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'} $ hg debugobsolete --delete 1 --delete 3 deleted 2 obsolescence markers $ hg debugobsolete cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b f9bd49731b0b175e42992a3c8fa6c678b2bc11f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'} 1ab51af8f9b41ef8c7f6f3312d4706d870b1fb74 29346082e4a9e27042b62d2da0e2de211c027621 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'} Test adding changeset after obsmarkers affecting it (eg: during pull, or unbundle) $ mkcommit e $ hg bundle -r . --base .~1 ../bundle-2.hg 1 changesets found $ getid . $ hg --config extensions.strip= strip -r . 0 files updated, 0 files merged, 1 files removed, 0 files unresolved saved backup bundle to $TESTTMP/tmpe/issue4845/doindexrev/.hg/strip-backup/9bc153528424-ee80edd4-backup.hg $ hg debugobsolete 9bc153528424ea266d13e57f9ff0d799dfe61e4b $ hg unbundle ../bundle-2.hg adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files (1 other changesets obsolete on arrival) (run 'hg update' to get a working copy) $ hg log -G @ 7:7ae79c5d60f0 (draft) [tip ] dd | | o 6:4715cf767440 (draft) [ ] d |/ o 5:29346082e4a9 (draft) [ ] cc | o 3:d27fb9b06607 (draft) [ ] bb | | o 2:6fdef60fcbab (draft) [ ] b |/ o 1:f9bd49731b0b (draft) [ ] aa $ cd .. Test issue 5783 $ hg init issue-5783 --config format.obsstore-version=0 $ cd issue-5783 $ touch a.cpp $ hg add a.cpp $ hg commit -m 'Add a.cpp' $ echo 'Hello' > a.cpp $ hg amend -n 'Testing::Obsstore' --config format.obsstore-version=0 --config extensions.amend= $ touch b.cpp $ hg add b.cpp $ hg commit -m 'Add b.cpp' $ echo 'Hello' > b.cpp $ hg amend -n 'Testing::Obsstore2' --config extensions.amend= $ hg debugobsolete d1b09fe3ad2b2a03e23a72f0c582e29a49570145 1a1a11184d2588af24e767e5335d5d9d07e8c550 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'note': 'Testing::Obsstore', 'operation': 'amend', 'user': 'test'} 1bfd8e3868f641e048b6667cd672c68932f26d00 79959ca316d5b27ac6be1dd0cfd0843a5b5412eb 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'note': 'Testing::Obsstore2', 'operation': 'amend', 'user': 'test'} $ cd ..