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: