Newer
Older
$ cat >> $HGRCPATH << EOF
> [phases]
> # public changeset are not obsolete
> publish=false
> logtemplate="{rev}:{node|short} ({phase}{if(obsolete, ' *{obsolete}*')}{if(instabilities, ' {instabilities}')}) [{tags} {bookmarks}] {desc|firstline}{if(obsfate, " [{join(obsfate, "; ")}]")}\n"
$ mkcommit() {
> echo "$1" > "$1"
> hg add "$1"
> hg ci -m "add $1"
> }
$ getid() {
Matt Harbison
committed
> 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
Pierre-Yves David
committed
$ 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
Pierre-Yves David
committed
[255]
Enabling it
$ cat >> $HGRCPATH << EOF
> [experimental]
> evolution=exchange
> evolution.createmarkers=True
Pierre-Yves David
committed
> EOF
Killing a single changeset without replacement
$ hg debugobsolete 0
abort: changeset references must be full hexadecimal node identifiers
$ hg debugobsolete '00'
abort: changeset references must be full hexadecimal node identifiers
$ hg debugobsolete -d '0 0' `getid kill_me` -u babar
1 new obsolescence markers
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 ]
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

Katsunori FUJIWARA
committed
$ hg debugobsolete --config format.obsstore-version=0 --flag 12 `getid original_c` `getid new_c` -d '121 120'
1 new obsolescence markers
obsoleted 1 changesets
$ hg log -r 'hidden()' --template '{rev}:{node|short} {desc}\n' --hidden
2:245bde4270cd add original_c
# 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 (no-zstd !)
3 1 -1 193 260 193 193 59 0 66 258 0 2 0 (no-zstd !)
2 1 -1 118 195 118 118 59 0 76 192 0 1 0 (zstd !)
3 1 -1 195 262 195 195 59 0 66 258 0 2 0 (zstd !)
$ hg debugobsolete

Katsunori FUJIWARA
committed
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`
1 new obsolescence markers
obsoleted 1 changesets
$ hg debugobsolete

Katsunori FUJIWARA
committed
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
1 new obsolescence markers
obsoleted 1 changesets
$ hg debugobsolete -d '1339 0' 1337133713371337133713371337133713371337 `getid new_3_c`
1 new obsolescence markers
$ hg debugobsolete

Katsunori FUJIWARA
committed
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:
@ 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
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: (current)
phases: 6 draft
remote: 3 outgoing
Pierre-Yves David
committed
check that various commands work well with filtering
$ hg tip
5:5601fb93a350 (draft) [tip ] add new_3_c
Pierre-Yves David
committed
$ hg log -r 6

Martin von Zweigbergk
committed
abort: unknown revision '6'

Martin von Zweigbergk
committed
[10]
Pierre-Yves David
committed
$ hg log -r 4

Martin von Zweigbergk
committed
abort: hidden revision '4' was rewritten as: 5601fb93a350
(use --hidden to access hidden revisions)

Martin von Zweigbergk
committed
[10]

Yuya Nishihara
committed
$ hg debugrevspec 'rev(6)'
$ hg debugrevspec 'rev(4)'

Yuya Nishihara
committed
$ hg debugrevspec 'null'
-1
Pierre-Yves David
committed
Check that public changeset are not accounted as obsolete:
$ hg --hidden phase --public 2
1 new phase-divergent changesets
@ 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
$ hg log -r 'unstable()'
5:5601fb93a350 (draft phase-divergent) [tip ] add new_3_c
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!
Fixing "bumped" situation
We need to create a clone of 5 and add a special marker with a flag
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
$ 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`
1 new obsolescence markers
obsoleted 1 changesets
$ 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

Pierre-Yves David
committed
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]

Pierre-Yves David
committed
|/
| x 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350]

Pierre-Yves David
committed
|/
| x 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9]

Pierre-Yves David
committed
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
|/
| 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'}

Yuya Nishihara
committed
$ cd ..
Revision 0 is hidden
--------------------
$ hg init rev0hidden
$ cd rev0hidden
$ mkcommit kill0
$ hg up -q null
$ hg debugobsolete `getid kill0`
1 new obsolescence markers
obsoleted 1 changesets

Yuya Nishihara
committed
$ 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
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`
1 new obsolescence markers
obsoleted 1 changesets
$ cd ..
Exchange Test
============================
Destination repo does not have any data
---------------------------------------
Pierre-Yves David
committed
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
Pierre-Yves David
committed
Try to pull markers while testing pull --confirm
(extinct changeset are excluded but marker are pushed)
$ hg pull ../tmpb --confirm --config ui.interactive=true <<EOF
> n
> EOF
pulling from ../tmpb
requesting all changes
adding changesets
adding manifests
adding file changes
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
adding 4 changesets with 4 changes to 4 files (+1 heads)
5 new obsolescence markers
new changesets 1f0dee641bb7:6f9641995072 (1 drafts)
accept incoming changes (yn)? n
transaction abort!
rollback completed
abort: user aborted
[255]
$ HGPLAIN=1 hg pull ../tmpb --confirm --config ui.interactive=true <<EOF
> n
> EOF
pulling from ../tmpb
requesting all changes
adding changesets
adding manifests
adding file changes
adding 4 changesets with 4 changes to 4 files (+1 heads)
5 new obsolescence markers
new changesets 1f0dee641bb7:6f9641995072 (1 drafts)
accept incoming changes (yn)? n
transaction abort!
rollback completed
abort: user aborted
[255]
$ hg pull ../tmpb --confirm --config ui.interactive=true <<EOF
> y
> EOF
pulling from ../tmpb
requesting all changes
adding changesets
adding manifests
adding file changes
adding 4 changesets with 4 changes to 4 files (+1 heads)
5 new obsolescence markers
new changesets 1f0dee641bb7:6f9641995072 (1 drafts)
accept incoming changes (yn)? y
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'}

Katsunori FUJIWARA
committed
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
1 new obsolescence markers
$ hg debugobsolete
1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}

Katsunori FUJIWARA
committed
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)
repository tip rolled back to revision 3 (undo debugobsolete)
$ hg debugobsolete
1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}

Katsunori FUJIWARA
committed
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 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'}

Katsunori FUJIWARA
committed
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 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

Katsunori FUJIWARA
committed
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
1 new obsolescence markers
$ 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'}

Katsunori FUJIWARA
committed
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'}

Katsunori FUJIWARA
committed
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
---------------------------------------
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
$ hg debugobsolete --record-parents `getid original_d` -d '0 0'
1 new obsolescence markers
obsoleted 1 changesets
1 new orphan changesets
$ hg log -r 'unstable()'
5:cda648ca50f5 (draft orphan) [tip ] add original_e
$ 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]
add original_e
branch: default
commit: (clean)
update: 1 new changesets, 2 branch heads (merge)
phases: 3 draft
@ 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!

Manuel Jacob
committed
with --force it will work anyway
$ hg push ../tmpc/ --force
pushing to ../tmpc/
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files
1 new obsolescence markers
1 new orphan changesets
if the orphan changeset is already on the server, pushing should work
$ hg push ../tmpc/
pushing to ../tmpc/
searching for changes
no changes found
[1]
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
@ 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>'
1 new obsolescence markers
obsoleted 1 changesets
Pierre-Yves David
committed
$ 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

Pierre-Yves David
committed
obsoleted 1 changesets
Pierre-Yves David
committed
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'}

Katsunori FUJIWARA
committed
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'}

Katsunori FUJIWARA
committed
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'}

Katsunori FUJIWARA
committed
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
[
{
"flag": 0,
"metadata": {"user": "test"},
"prednode": "1339133913391339133913391339133913391339",
"succnodes": ["ca819180edb99ed25ceafb3e9584ac287e240b00"]
},
{
"flag": 0,
"metadata": {"user": "test"},
"prednode": "1337133713371337133713371337133713371337",
"succnodes": ["5601fb93a350734d935195fee37f4054c529ff39"]
},
{
"flag": 12,
"metadata": {"user": "test"},
"prednode": "245bde4270cd1072a27757984f9cda8ba26f08ca",
"succnodes": ["cdbce2fbb16313928851e97e0d85413f3f7eb77f"]
},
{
"flag": 1,
"metadata": {"user": "test"},
"prednode": "5601fb93a350734d935195fee37f4054c529ff39",
"succnodes": ["6f96419950729f3671185b847352890f074f7557"]
},
{
"flag": 0,
"metadata": {"user": "test"},
"prednode": "ca819180edb99ed25ceafb3e9584ac287e240b00",
"succnodes": ["1337133713371337133713371337133713371337"]
},
{
"flag": 0,
"metadata": {"user": "test"},
"prednode": "cdbce2fbb16313928851e97e0d85413f3f7eb77f",
"succnodes": ["ca819180edb99ed25ceafb3e9584ac287e240b00"]
},
{
"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
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers
obsoleted 1 changesets
1 new obsolescence markers