# HG changeset patch # User Boris Feld # Date 1499096336 -7200 # Node ID 98fa777cd7a107b7f4d70eef930bc41ca0691da5 # Parent c35c0f54f4201bb4f97cb7e1815406c84a4def4e template: better prune support in obsfate successorssets don't returns good results for pruned commit, add a workaround for simple cases. A proper fix would require a large rework of successorssets algorithm, I will send a separate series for this refactoring. diff -r c35c0f54f420 -r 98fa777cd7a1 mercurial/obsutil.py --- a/mercurial/obsutil.py Mon Jul 03 15:34:10 2017 +0200 +++ b/mercurial/obsutil.py Mon Jul 03 17:38:56 2017 +0200 @@ -585,8 +585,40 @@ ssets = successorssets(repo, ctx.node(), closest=True) + # closestsuccessors returns an empty list for pruned revisions, remap it + # into a list containing an empty list for future processing + if ssets == []: + ssets = [[]] + + # Try to recover pruned markers + succsmap = repo.obsstore.successors + fullsuccessorsets = [] # successor set + markers + for sset in ssets: + if sset: + fullsuccessorsets.append(sset) + else: + # successorsset return an empty set() when ctx or one of its + # successors is pruned. + # In this case, walk the obs-markers tree again starting with ctx + # and find the relevant pruning obs-makers, the ones without + # successors. + # Having these markers allow us to compute some information about + # its fate, like who pruned this changeset and when. + + # XXX we do not catch all prune markers (eg rewritten then pruned) + # (fix me later) + foundany = False + for mark in succsmap.get(ctx.node(), ()): + if not mark[1]: + foundany = True + sset = _succs() + sset.markers.add(mark) + fullsuccessorsets.append(sset) + if not foundany: + fullsuccessorsets.append(_succs()) + values = [] - for sset in ssets: + for sset in fullsuccessorsets: values.append({'successors': sset, 'markers': sset.markers}) return values diff -r c35c0f54f420 -r 98fa777cd7a1 tests/test-obsmarker-template.t --- a/tests/test-obsmarker-template.t Mon Jul 03 15:34:10 2017 +0200 +++ b/tests/test-obsmarker-template.t Mon Jul 03 17:38:56 2017 +0200 @@ -12,7 +12,7 @@ > [experimental] > stabilization=all > [templates] - > obsfatesuccessors = " as {join(successors, ", ")}" + > obsfatesuccessors = "{if(successors, " as ")}{join(successors, ", ")}" > obsfateverb = "{obsfateverb(successors)}" > obsfateusers = "{if(obsfateusers(markers), " by {join(obsfateusers(markers), ", ")}")}" > obsfatedate = "{if(obsfatedate(markers), "{ifeq(min(obsfatedate(markers)), max(obsfatedate(markers)), " (at {min(obsfatedate(markers))|isodate})", " (between {min(obsfatedate(markers))|isodate} and {max(obsfatedate(markers))|isodate})")}")}" @@ -165,7 +165,7 @@ | @ a468dc9b3633 |/ Obsfate: rewritten as 4:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000); | x f137d23bb3e1 - | | + | | Obsfate: pruned by test1 (at 2009-02-13 23:31 +0000); | x 471f378eab4c |/ Obsfate: rewritten as 3:a468dc9b3633 by test1 (at 2009-02-13 23:31 +0000); o ea207398892e @@ -214,7 +214,7 @@ | x a468dc9b3633 |/ Obsfate: rewritten as 4:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000); | x f137d23bb3e1 - | | + | | Obsfate: pruned by test1 (at 2009-02-13 23:31 +0000); | x 471f378eab4c |/ Obsfate: rewritten as 3:a468dc9b3633 by test1 (at 2009-02-13 23:31 +0000); o ea207398892e @@ -225,7 +225,7 @@ | x a468dc9b3633 |/ Obsfate: [{"markers": [["a468dc9b36338b14fdb7825f55ce3df4e71517ad", ["d004c8f274b9ec480a47a93c10dac5eee63adb78"], 0, [["user", "test2"]], [987654321.0, 0], null]], "successors": ["d004c8f274b9ec480a47a93c10dac5eee63adb78"]}] | x f137d23bb3e1 - | | + | | Obsfate: [{"markers": [["f137d23bb3e11dc1daeb6264fac9cb2433782e15", [], 0, [["user", "test1"]], [1234567890.0, 0], ["471f378eab4c5e25f6c77f785b27c936efb22874"]]], "successors": []}] | x 471f378eab4c |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"], 0, [["user", "test1"]], [1234567890.0, 0], null]], "successors": ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]}] o ea207398892e @@ -1218,7 +1218,7 @@ o f897c6137566 | | @ 471f378eab4c - |/ + |/ Obsfate: pruned; o ea207398892e @@ -1635,11 +1635,11 @@ $ hg fatelog @ 471f378eab4c - | + | Obsfate: pruned by test (at 1970-01-01 00:00 +0000); o ea207398892e $ hg fatelog -v @ 471f378eab4c - | + | Obsfate: pruned by test (at 1970-01-01 00:00 +0000); o ea207398892e