Mercurial > hg-stable
changeset 15508:00276525e2b7 stable
graft: disallow grafting grafted csets in specific situations (issue3091)
In particular, we do not allow:
- grafting an already grafted cset onto its original branch
- grafting already grafted csets with the same origin onto each other
author | Stefano Tortarolo <stefano.tortarolo@gmail.com> |
---|---|
date | Sat, 12 Nov 2011 14:00:25 +0100 |
parents | 7186b54b07c6 |
children | 3774e1453ef4 |
files | mercurial/commands.py tests/test-graft.t |
diffstat | 2 files changed, 40 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/commands.py Sat Nov 12 11:23:52 2011 +0100 +++ b/mercurial/commands.py Sat Nov 12 14:00:25 2011 +0100 @@ -2547,15 +2547,32 @@ if not revs: return -1 + # analyze revs for earlier grafts + ids = {} + for ctx in repo.set("%ld", revs): + ids[ctx.hex()] = ctx.rev() + n = ctx.extra().get('source') + if n: + ids[n] = ctx.rev() + # check ancestors for earlier grafts ui.debug('scanning for duplicate grafts\n') for ctx in repo.set("::. - ::%ld", revs): n = ctx.extra().get('source') - if n and n in repo: + if n in ids: r = repo[n].rev() if r in revs: ui.warn(_('skipping already grafted revision %s\n') % r) revs.remove(r) + elif ids[n] in revs: + ui.warn(_('skipping already grafted revision %s ' + '(same origin %d)\n') % (ids[n], r)) + revs.remove(ids[n]) + elif ctx.hex() in ids: + r = ids[ctx.hex()] + ui.warn(_('skipping already grafted revision %s ' + '(was grafted from %d)\n') % (r, ctx.rev())) + revs.remove(r) if not revs: return -1
--- a/tests/test-graft.t Sat Nov 12 11:23:52 2011 +0100 +++ b/tests/test-graft.t Sat Nov 12 14:00:25 2011 +0100 @@ -255,3 +255,25 @@ 2 +Disallow grafting an already grafted cset onto its original branch + $ hg up -q 6 + $ hg graft 7 + skipping already grafted revision 7 (was grafted from 2) + [255] + +Disallow grafting already grafted csets with the same origin onto each other + $ hg up -q 13 + $ hg graft 2 + skipping already grafted revision 2 + [255] + $ hg graft 7 + skipping already grafted revision 7 (same origin 2) + [255] + + $ hg up -q 7 + $ hg graft 2 + skipping already grafted revision 2 + [255] + $ hg graft tip + skipping already grafted revision 13 (same origin 2) + [255]