[PATCH 5 of 7 V2] obsolete: add a flag that allows fix for "bumped" changeset

Augie Fackler raf at durin42.com
Fri Oct 5 22:26:03 CDT 2012


On Oct 3, 2012, at 4:21 PM, Pierre-Yves David <pierre-yves.david at ens-lyon.org> wrote:

> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at logilab.fr>
> # Date 1349298229 -7200
> # Node ID 6f36fcc8f5315fa54d6104348c8d175838f15825
> # Parent  d3d9bf88c71542eb5f34e4c9970a66adc536fa83
> obsolete: add a flag that allows fix for "bumped" changeset
> 
> The first obsolescence marker is introduce to allows for fixing the "bumped"
> changeset situation.  For allow fixing this situation, the first flag for
> obsolescence marker is introduced.
> 
>    bumpedfix == 1.

What's the intent of this flag's meaning? To convey that the bumped changeset was succeeded by something which is the interdiff between it and its public predecessor?

(Just making sure I understand concepts.)

> 
> Creator of new changesets intended to fix "bumped" situation should not forget
> to add this flag to the marker. Otherwise the newly created changeset will be
> bumped too.
> 
> diff --git a/mercurial/obsolete.py b/mercurial/obsolete.py
> --- a/mercurial/obsolete.py
> +++ b/mercurial/obsolete.py
> @@ -71,6 +71,9 @@
> _fmfsize = struct.calcsize(_fmfixed)
> _fnodesize = struct.calcsize(_fmnode)
> 
> +# obsolescence marker flag
> +bumpedfix = 1
> +
> def _readmarkers(data):
>     """Read and enumerate markers from raw data"""
>     off = 0
> @@ -403,13 +406,16 @@
> def _computebumpedset(repo):
>     """the set of rev trying to obsolete public revision"""
>     # get all possible bumped changeset
> -    candidates = _anysuccessors(repo, repo.revs('public()'))
> +    candidates = _anysuccessors(repo, repo.revs('public()'),
> +                                ignoreflags=bumpedfix)
>     # revision public or already obsolete don't account as bumped
>     query = '%ld - obsolete() - public()'
>     return set(repo.revs(query, candidates))
> 
> -def _anysuccessors(repo, revs):
> +def _anysuccessors(repo, revs, ignoreflags=0):
>     """return revid of all successors of a set of revs
> +
> +    Marker with any flags present in the `ignoreflags` bitfield are ignored.
>     """
>     toproceed = [repo[r].node() for r in revs]
>     # prevent extra processing and cycle
> @@ -422,6 +428,9 @@
>         nc = toproceed.pop()
>         # for all markers that make this node obsolete
>         for mark in markersfor.get(nc, ()):
> +            # ignore marker with flaged with specified flag
> +            if mark[2] & ignoreflags:
> +                continue
>             # for all successors
>             for suc in mark[1]:
>                 # record this as a successors
> diff --git a/tests/test-obsolete.t b/tests/test-obsolete.t
> --- a/tests/test-obsolete.t
> +++ b/tests/test-obsolete.t
> @@ -166,6 +166,43 @@
>   summary:     add new_3_c
> 
> 
> +Fixing "bumped" situation
> +We need to create a clone of 5 and add a special marker with a flag
> +
> +  $ 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`
> +  $ hg log -r 'bumped()'
> +  $ hg log -G
> +  @  changeset:   6:6f9641995072
> +  |  tag:         tip
> +  |  parent:      1:7c3bad9141dc
> +  |  user:        test
> +  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  summary:     add n3w_3_c
> +  |
> +  | o  changeset:   2:245bde4270cd
> +  |/   user:        test
> +  |    date:        Thu Jan 01 00:00:00 1970 +0000
> +  |    summary:     add original_c
> +  |
> +  o  changeset:   1:7c3bad9141dc
> +  |  user:        test
> +  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  summary:     add b
> +  |
> +  o  changeset:   0:1f0dee641bb7
> +     user:        test
> +     date:        Thu Jan 01 00:00:00 1970 +0000
> +     summary:     add a
> +  
> +
> +
> +
>   $ cd ..
> 
> Exchange Test
> @@ -192,6 +229,7 @@
>   cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 {'date': '1337 0', 'user': 'test'}
>   ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 {'date': '1338 0', 'user': 'test'}
>   1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 {'date': '1339 0', 'user': 'test'}
> +  5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 {'date': '1338 0', 'user': 'test'}
> 
> Rollback//Transaction support
> 
> @@ -201,6 +239,7 @@
>   cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 {'date': '1337 0', 'user': 'test'}
>   ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 {'date': '1338 0', 'user': 'test'}
>   1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 {'date': '1339 0', 'user': 'test'}
> +  5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 {'date': '1338 0', 'user': 'test'}
>   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 0 {'date': '1340 0', 'user': 'test'}
>   $ hg rollback -n
>   repository tip rolled back to revision 3 (undo debugobsolete)
> @@ -211,6 +250,7 @@
>   cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 {'date': '1337 0', 'user': 'test'}
>   ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 {'date': '1338 0', 'user': 'test'}
>   1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 {'date': '1339 0', 'user': 'test'}
> +  5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 {'date': '1338 0', 'user': 'test'}
> 
>   $ cd ..
> 
> @@ -229,6 +269,7 @@
>   cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 {'date': '1337 0', 'user': 'test'}
>   ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 {'date': '1338 0', 'user': 'test'}
>   1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 {'date': '1339 0', 'user': 'test'}
> +  5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 {'date': '1338 0', 'user': 'test'}
> 
> Check obsolete keys are exchanged only if source has an obsolete store
> 
> @@ -247,12 +288,18 @@
>   updating to branch default
>   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   $ hg -R clone-dest log -G --hidden
> -  @  changeset:   5:5601fb93a350
> +  @  changeset:   6:6f9641995072
>   |  tag:         tip
>   |  parent:      1:7c3bad9141dc
>   |  user:        test
>   |  date:        Thu Jan 01 00:00:00 1970 +0000
> -  |  summary:     add new_3_c
> +  |  summary:     add n3w_3_c
> +  |
> +  | x  changeset:   5:5601fb93a350
> +  |/   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
> @@ -286,6 +333,7 @@
>   cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 {'date': '1337 0', 'user': 'test'}
>   ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 {'date': '1338 0', 'user': 'test'}
>   1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 {'date': '1339 0', 'user': 'test'}
> +  5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 {'date': '1338 0', 'user': 'test'}
> 
> 
> Destination repo have existing data
> @@ -310,6 +358,7 @@
>   cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 {'date': '1337 0', 'user': 'test'}
>   ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 {'date': '1338 0', 'user': 'test'}
>   1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 {'date': '1339 0', 'user': 'test'}
> +  5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 {'date': '1338 0', 'user': 'test'}
> 
> 
> On push
> @@ -324,6 +373,7 @@
>   cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 {'date': '1337 0', 'user': 'test'}
>   ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 {'date': '1338 0', 'user': 'test'}
>   1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 {'date': '1339 0', 'user': 'test'}
> +  5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 {'date': '1338 0', 'user': 'test'}
>   2448244824482448244824482448244824482448 1339133913391339133913391339133913391339 0 {'date': '1339 0', 'user': 'test'}
> 
> detect outgoing obsolete and unstable
> @@ -331,12 +381,12 @@
> 
> 
>   $ hg glog
> -  o  changeset:   3:5601fb93a350
> +  o  changeset:   3:6f9641995072
>   |  tag:         tip
>   |  parent:      1:7c3bad9141dc
>   |  user:        test
>   |  date:        Thu Jan 01 00:00:00 1970 +0000
> -  |  summary:     add new_3_c
> +  |  summary:     add n3w_3_c
>   |
>   | o  changeset:   2:245bde4270cd
>   |/   user:        test
> @@ -353,34 +403,34 @@
>      date:        Thu Jan 01 00:00:00 1970 +0000
>      summary:     add a
> 
> -  $ hg up 'desc("new_3_c")'
> +  $ 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 `getid original_d` -d '0 0'
>   $ hg log -r 'obsolete()'
> -  changeset:   4:7c694bff0650
> +  changeset:   4:94b33453f93b
>   user:        test
>   date:        Thu Jan 01 00:00:00 1970 +0000
>   summary:     add original_d
> 
>   $ hg glog -r '::unstable()'
> -  @  changeset:   5:6e572121998e
> +  @  changeset:   5:cda648ca50f5
>   |  tag:         tip
>   |  user:        test
>   |  date:        Thu Jan 01 00:00:00 1970 +0000
>   |  summary:     add original_e
>   |
> -  x  changeset:   4:7c694bff0650
> +  x  changeset:   4:94b33453f93b
>   |  user:        test
>   |  date:        Thu Jan 01 00:00:00 1970 +0000
>   |  summary:     add original_d
>   |
> -  o  changeset:   3:5601fb93a350
> +  o  changeset:   3:6f9641995072
>   |  parent:      1:7c3bad9141dc
>   |  user:        test
>   |  date:        Thu Jan 01 00:00:00 1970 +0000
> -  |  summary:     add new_3_c
> +  |  summary:     add n3w_3_c
>   |
>   o  changeset:   1:7c3bad9141dc
>   |  user:        test
> @@ -398,7 +448,7 @@
>   $ hg push ../tmpc/ -r 'desc("original_d")'
>   pushing to ../tmpc/
>   searching for changes
> -  abort: push includes an obsolete changeset: 7c694bff0650!
> +  abort: push includes an obsolete changeset: 94b33453f93b!
>   [255]
> 
> refuse to push unstable changeset
> @@ -406,7 +456,7 @@
>   $ hg push ../tmpc/
>   pushing to ../tmpc/
>   searching for changes
> -  abort: push includes an unstable changeset: 6e572121998e!
> +  abort: push includes an unstable changeset: cda648ca50f5!
>   [255]
> 
> Test that extinct changeset are properly detected
> @@ -434,18 +484,18 @@
>   date:        Thu Jan 01 00:00:00 1970 +0000
>   summary:     add original_c
> 
> -  changeset:   3:5601fb93a350
> +  changeset:   3:6f9641995072
>   parent:      1:7c3bad9141dc
>   user:        test
>   date:        Thu Jan 01 00:00:00 1970 +0000
> -  summary:     add new_3_c
> +  summary:     add n3w_3_c
> 
> -  changeset:   4:7c694bff0650
> +  changeset:   4:94b33453f93b
>   user:        test
>   date:        Thu Jan 01 00:00:00 1970 +0000
>   summary:     add original_d
> 
> -  changeset:   5:6e572121998e
> +  changeset:   5:cda648ca50f5
>   tag:         tip
>   user:        test
>   date:        Thu Jan 01 00:00:00 1970 +0000
> @@ -470,22 +520,22 @@
> Do not warn about new head when the new head is a successors of a remote one
> 
>   $ hg glog
> -  @  changeset:   5:6e572121998e
> +  @  changeset:   5:cda648ca50f5
>   |  tag:         tip
>   |  user:        test
>   |  date:        Thu Jan 01 00:00:00 1970 +0000
>   |  summary:     add original_e
>   |
> -  x  changeset:   4:7c694bff0650
> +  x  changeset:   4:94b33453f93b
>   |  user:        test
>   |  date:        Thu Jan 01 00:00:00 1970 +0000
>   |  summary:     add original_d
>   |
> -  o  changeset:   3:5601fb93a350
> +  o  changeset:   3:6f9641995072
>   |  parent:      1:7c3bad9141dc
>   |  user:        test
>   |  date:        Thu Jan 01 00:00:00 1970 +0000
> -  |  summary:     add new_3_c
> +  |  summary:     add n3w_3_c
>   |
>   | o  changeset:   2:245bde4270cd
>   |/   user:        test
> @@ -502,7 +552,7 @@
>      date:        Thu Jan 01 00:00:00 1970 +0000
>      summary:     add a
> 
> -  $ hg up -q 'desc(new_3_c)'
> +  $ hg up -q 'desc(n3w_3_c)'
>   $ mkcommit obsolete_e
>   created new head
>   $ hg debugobsolete `getid 'original_e'` `getid 'obsolete_e'`
> @@ -519,10 +569,10 @@
>   $ echo '[extensions]' >> $HGRCPATH
>   $ echo "obs=!" >> $HGRCPATH
>   $ hg log -r tip
> -  obsolete feature not enabled but 7 markers found!
> -  changeset:   6:d6a026544050
> +  obsolete feature not enabled but 8 markers found!
> +  changeset:   6:3de5eca88c00
>   tag:         tip
> -  parent:      3:5601fb93a350
> +  parent:      3:6f9641995072
>   user:        test
>   date:        Thu Jan 01 00:00:00 1970 +0000
>   summary:     add obsolete_e
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel



More information about the Mercurial-devel mailing list