# HG changeset patch # User Pierre-Yves David # Date 1342183129 -7200 # Node ID 70ebb4bd8083598e7b0f64d580b4395b01ef6e8b # Parent 97eff00046de2f04c4c7477f0f4462daed5a1fdd obsolete: do not exchange extinct changesets Extinct changesets are excluded from all exchange operations. This is a silent exclusion because the user should not need to be aware of them. There is no reason to strongly enforce this exclusion except implementation simplicity. User should be able to explicitly request an extinct changeset in the future. diff -r 97eff00046de -r 70ebb4bd8083 mercurial/discovery.py --- a/mercurial/discovery.py Tue Jul 17 01:22:31 2012 +0200 +++ b/mercurial/discovery.py Fri Jul 13 14:38:49 2012 +0200 @@ -109,11 +109,13 @@ og.commonheads, _any, _hds = commoninc # compute outgoing - if not repo._phasecache.phaseroots[phases.secret]: + mayexclude = (repo._phasecache.phaseroots[phases.secret] or repo.obsstore) + if not mayexclude: og.missingheads = onlyheads or repo.heads() elif onlyheads is None: # use visible heads as it should be cached og.missingheads = visibleheads(repo) + # extinct changesets are silently ignored og.excluded = [ctx.node() for ctx in repo.set('secret()')] else: # compute common, missing and exclude secret stuff @@ -122,17 +124,18 @@ og._missing = missing = [] og.excluded = excluded = [] for node in allmissing: - if repo[node].phase() >= phases.secret: - excluded.append(node) - else: - missing.append(node) - if excluded: - # update missing heads + ctx = repo[node] + if not ctx.extinct(): + # extinct changesets are silently ignored + if ctx.phase() >= phases.secret: + excluded.append(node) + else: + missing.append(node) + if len(missing) == len(allmissing): + missingheads = onlyheads + else: # update missing heads missingheads = phases.newheads(repo, onlyheads, excluded) - else: - missingheads = onlyheads og.missingheads = missingheads - if portable: # recompute common and missingheads as if -r had been given for # each head of missing, and --base for each head of the proper @@ -266,9 +269,10 @@ """return the set of visible head of this repo""" # XXX we want a cache on this sroots = repo._phasecache.phaseroots[phases.secret] - if sroots: - # XXX very slow revset. storing heads or secret "boundary" would help. - revset = repo.set('heads(not (%ln::))', sroots) + if sroots or repo.obsstore: + # XXX very slow revset. storing heads or secret "boundary" + # would help. + revset = repo.set('heads(not (%ln:: + extinct()))', sroots) vheads = [ctx.node() for ctx in revset] if not vheads: @@ -277,12 +281,13 @@ vheads = repo.heads() return vheads + def visiblebranchmap(repo): """return a branchmap for the visible set""" # XXX Recomputing this data on the fly is very slow. We should build a # XXX cached version while computin the standard branchmap version. sroots = repo._phasecache.phaseroots[phases.secret] - if sroots: + if sroots or repo.obsstore: vbranchmap = {} for branch, nodes in repo.branchmap().iteritems(): # search for secret heads. @@ -290,12 +295,12 @@ if repo[n].phase() >= phases.secret: nodes = None break - # if secreat heads where found we must compute them again + # if secret heads were found we must compute them again if nodes is None: - s = repo.set('heads(branch(%s) - secret())', branch) + s = repo.set('heads(branch(%s) - secret() - extinct())', + branch) nodes = [c.node() for c in s] vbranchmap[branch] = nodes else: vbranchmap = repo.branchmap() return vbranchmap - diff -r 97eff00046de -r 70ebb4bd8083 tests/test-obsolete.t --- a/tests/test-obsolete.t Tue Jul 17 01:22:31 2012 +0200 +++ b/tests/test-obsolete.t Fri Jul 13 14:38:49 2012 +0200 @@ -152,6 +152,7 @@ --------------------------------------- Try to pull markers +(extinct changeset are excluded but marker are pushed) $ hg init tmpc $ cd tmpc @@ -161,7 +162,7 @@ adding changesets adding manifests adding file changes - added 6 changesets with 6 changes to 6 files (+3 heads) + added 4 changesets with 4 changes to 4 files (+1 heads) (run 'hg heads' to see heads, 'hg merge' to merge) $ hg debugobsolete 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f 0 {'date': '56 12', 'user': 'test'} @@ -179,9 +180,9 @@ 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 {'date': '1339 0', 'user': 'test'} aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 0 {'date': '1340 0', 'user': 'test'} $ hg rollback -n - repository tip rolled back to revision 5 (undo debugobsolete) + repository tip rolled back to revision 3 (undo debugobsolete) $ hg rollback - repository tip rolled back to revision 5 (undo debugobsolete) + repository tip rolled back to revision 3 (undo debugobsolete) $ hg debugobsolete 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f 0 {'date': '56 12', 'user': 'test'} cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 {'date': '1337 0', 'user': 'test'} @@ -196,12 +197,6 @@ $ hg -R tmpb push tmpd pushing to tmpd searching for changes - abort: push includes an obsolete changeset: ca819180edb9! - [255] - $ hg -R tmpd debugobsolete - $ hg -R tmpb push tmpd --rev 'not obsolete()' - pushing to tmpd - searching for changes adding changesets adding manifests adding file changes @@ -227,7 +222,7 @@ adding changesets adding manifests adding file changes - added 6 changesets with 6 changes to 6 files (+3 heads) + added 4 changesets with 4 changes to 4 files (+1 heads) (run 'hg heads' to see heads, 'hg merge' to merge) $ hg debugobsolete 2448244824482448244824482448244824482448 1339133913391339133913391339133913391339 0 {'date': '1339 0', 'user': 'test'} @@ -254,26 +249,15 @@ detect outgoing obsolete and unstable --------------------------------------- + $ hg glog - o changeset: 5:5601fb93a350 + o changeset: 3:5601fb93a350 | tag: tip | parent: 1:7c3bad9141dc | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: add new_3_c | - | x changeset: 4:ca819180edb9 - |/ parent: 1:7c3bad9141dc - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: add new_2_c - | - | x changeset: 3:cdbce2fbb163 - |/ parent: 1:7c3bad9141dc - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: add new_c - | | o changeset: 2:245bde4270cd |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 @@ -289,21 +273,34 @@ date: Thu Jan 01 00:00:00 1970 +0000 summary: add a - $ hg up -q 'desc("new_2_c")' + $ hg up 'desc("new_3_c")' + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ mkcommit original_d + $ mkcommit original_e + $ hg debugobsolete `getid original_d` -d '0 0' + $ hg log -r 'obsolete()' + changeset: 4:7c694bff0650 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: add original_d + $ hg glog -r '::unstable()' - @ changeset: 6:7878242aeece + @ changeset: 5:6e572121998e | tag: tip - | parent: 4:ca819180edb9 + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: add original_e + | + x changeset: 4:7c694bff0650 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: add original_d | - x changeset: 4:ca819180edb9 + o changeset: 3:5601fb93a350 | parent: 1:7c3bad9141dc | user: test | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: add new_2_c + | summary: add new_3_c | o changeset: 1:7c3bad9141dc | user: test @@ -315,18 +312,77 @@ date: Thu Jan 01 00:00:00 1970 +0000 summary: add a + +refuse to push obsolete changeset + + $ hg push ../tmpc/ -r 'desc("original_d")' + pushing to ../tmpc/ + searching for changes + abort: push includes an obsolete changeset: 7c694bff0650! + [255] + +refuse to push unstable changeset + $ hg push ../tmpc/ pushing to ../tmpc/ searching for changes - abort: push includes an unstable changeset: 7878242aeece! + abort: push includes an unstable changeset: 6e572121998e! [255] Test that extinct changeset are properly detected $ hg log -r 'extinct()' - changeset: 3:cdbce2fbb163 + +Don't try to push extinct changeset + + $ hg init ../tmpf + $ hg out ../tmpf + comparing with ../tmpf + searching for changes + changeset: 0:1f0dee641bb7 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: add a + + changeset: 1:7c3bad9141dc + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: add b + + changeset: 2:245bde4270cd + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: add original_c + + changeset: 3:5601fb93a350 parent: 1:7c3bad9141dc user: test date: Thu Jan 01 00:00:00 1970 +0000 - summary: add new_c + summary: add new_3_c + + changeset: 4:7c694bff0650 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: add original_d + + changeset: 5:6e572121998e + tag: tip + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: 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) + +no warning displayed + + $ hg push ../tmpf + pushing to ../tmpf + searching for changes + no changes found + [1]