Mercurial > hg
changeset 22302:9472284df4eb stable
graft: fix collision detection with origin revisions that are missing
When grafting something with a matching origin, it would normally be skipped:
skipping already grafted revision 123 (23 also has origin 12)
But after stripping a graft origin, graft could fail with a reference to the
origin that no longer exists:
abort: unknown revision '5c095ad7e90f871700f02dd1fa5012cb4498a2d4'!
Instead, detect that the origin is unknown and skip it anyway, like:
skipping already grafted revision 8 (2 also has unknown origin 5c095ad7e90f871700f02dd1fa5012cb4498a2d4)
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Wed, 27 Aug 2014 15:30:09 +0200 |
parents | f6371cc62d2a |
children | 0c838e7459a5 |
files | mercurial/commands.py tests/test-graft.t |
diffstat | 2 files changed, 24 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/commands.py Sat Aug 23 17:03:08 2014 -0500 +++ b/mercurial/commands.py Wed Aug 27 15:30:09 2014 +0200 @@ -3183,14 +3183,23 @@ ctx = repo[rev] n = ctx.extra().get('source') if n in ids: - r = repo[n].rev() + try: + r = repo[n].rev() + except error.RepoLookupError: + r = None if r in revs: ui.warn(_('skipping revision %s (already grafted to %s)\n') % (r, rev)) revs.remove(r) elif ids[n] in revs: - ui.warn(_('skipping already grafted revision %s ' - '(%s also has origin %d)\n') % (ids[n], rev, r)) + if r is None: + ui.warn(_('skipping already grafted revision %s ' + '(%s also has unknown origin %s)\n') + % (ids[n], rev, n)) + else: + ui.warn(_('skipping already grafted revision %s ' + '(%s also has origin %d)\n') + % (ids[n], rev, r)) revs.remove(ids[n]) elif ctx.hex() in ids: r = ids[ctx.hex()]
--- a/tests/test-graft.t Sat Aug 23 17:03:08 2014 -0500 +++ b/tests/test-graft.t Wed Aug 27 15:30:09 2014 +0200 @@ -631,3 +631,15 @@ grafting revision 13 grafting revision 19 merging b + + +Continue testing same origin policy, using revision numbers from test above +but do some destructive editing of the repo: + + $ hg up -qC 7 + $ hg tag -l -r 13 tmp + $ hg --config extensions.mq= strip 2 + saved backup bundle to $TESTTMP/a/.hg/strip-backup/5c095ad7e90f-backup.hg (glob) + $ hg graft tmp + skipping already grafted revision 8 (2 also has unknown origin 5c095ad7e90f871700f02dd1fa5012cb4498a2d4) + [255]