Mercurial > public > mercurial-scm > evolve
comparison hgext/evolve.py @ 699:dba3ed9f2c4f stable
amend: prune replacement commit without sucessors
This align with the core behavior of `commit --amend`.
All user of rewrite are not responsible for creating their own marker.
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Fri, 08 Feb 2013 21:43:00 +0000 |
parents | 121e2d265e85 |
children | f752089479ce |
comparison
equal
deleted
inserted
replaced
698:b21437d19ea2 | 699:dba3ed9f2c4f |
---|---|
751 new._text = cmdutil.commitforceeditor(repo, new, []) | 751 new._text = cmdutil.commitforceeditor(repo, new, []) |
752 revcount = len(repo) | 752 revcount = len(repo) |
753 newid = repo.commitctx(new) | 753 newid = repo.commitctx(new) |
754 new = repo[newid] | 754 new = repo[newid] |
755 created = len(repo) != revcount | 755 created = len(repo) != revcount |
756 if created: | 756 updatebookmarks(newid) |
757 updatebookmarks(newid) | |
758 # add evolution metadata | |
759 markers = [(u, (new,)) for u in updates] | |
760 markers.append((old, (new,))) | |
761 createmarkers(repo, markers) | |
762 else: | |
763 # newid is an existing revision. It could make sense to | |
764 # replace revisions with existing ones but probably not by | |
765 # default. | |
766 pass | |
767 finally: | 757 finally: |
768 wlock.release() | 758 wlock.release() |
769 | 759 |
770 return newid, created | 760 return newid, created |
771 | 761 |
1385 # perform amend | 1375 # perform amend |
1386 if opts.get('edit'): | 1376 if opts.get('edit'): |
1387 opts['force_editor'] = True | 1377 opts['force_editor'] = True |
1388 newid, created = rewrite(repo, old, updates, head, | 1378 newid, created = rewrite(repo, old, updates, head, |
1389 [old.p1().node(), old.p2().node()], opts) | 1379 [old.p1().node(), old.p2().node()], opts) |
1380 | |
1381 if newid != old.node(): | |
1382 createmarkers(repo, [(old, (repo[newid],))]) | |
1383 if tempid is not None: | |
1384 createmarkers(repo, [(repo[tempid], ())]) | |
1390 if created: | 1385 if created: |
1391 # reroute the working copy parent to the new changeset | 1386 # reroute the working copy parent to the new changeset |
1392 phases.retractboundary(repo, oldphase, [newid]) | 1387 phases.retractboundary(repo, oldphase, [newid]) |
1393 repo.dirstate.setparents(newid, node.nullid) | 1388 repo.dirstate.setparents(newid, node.nullid) |
1394 else: | 1389 else: |
1395 # rewrite() recreated an existing revision, discard | 1390 # rewrite() recreated an existing revision, discard |
1396 # the intermediate revision if any. No need to update | 1391 # the intermediate revision if any. No need to update |
1397 # phases or parents. | 1392 # phases or parents. |
1398 if tempid is not None: | |
1399 createmarkers(repo, [(repo[tempid], ())]) | |
1400 # XXX: need another message in collapse case. | 1393 # XXX: need another message in collapse case. |
1401 tr.close() | 1394 tr.close() |
1402 raise error.Abort(_('no updates found')) | 1395 raise error.Abort(_('no updates found')) |
1403 tr.close() | 1396 tr.close() |
1404 finally: | 1397 finally: |