Mercurial > hg-stable
changeset 41954:e1ceefab9bca
rebase: fix crash with in-memory rebase and copies
When using regular on-disk rebase, filectx.markcopies() calls to
dirstate.copy(), which happily records the copy. Then it's simply
ignored if it doesn't matter for the commit (as in the test case I
added in the previous patch). Let's do the same for overlayworkingctx.
Differential Revision: https://phab.mercurial-scm.org/D6133
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Thu, 14 Mar 2019 14:46:29 -0700 |
parents | dd1ab72be983 |
children | e7b84ffb06d9 |
files | mercurial/context.py tests/test-rebase-inmemory.t |
diffstat | 2 files changed, 9 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/context.py Thu Mar 14 13:53:20 2019 -0700 +++ b/mercurial/context.py Thu Mar 14 14:46:29 2019 -0700 @@ -1891,10 +1891,8 @@ return self._wrappedctx[path].date() def markcopied(self, path, origin): - if self.isdirty(path): - self._cache[path]['copied'] = origin - else: - raise error.ProgrammingError('markcopied() called on clean context') + self._markdirty(path, exists=True, date=self.filedate(path), + flags=self.flags(path), copied=origin) def copydata(self, path): if self.isdirty(path): @@ -2098,7 +2096,8 @@ del self._cache[path] return keys - def _markdirty(self, path, exists, data=None, date=None, flags=''): + def _markdirty(self, path, exists, data=None, date=None, flags='', + copied=None): # data not provided, let's see if we already have some; if not, let's # grab it from our underlying context, so that we always have data if # the file is marked as existing. @@ -2111,7 +2110,7 @@ 'data': data, 'date': date, 'flags': flags, - 'copied': None, + 'copied': copied, } def filectx(self, path, filelog=None):
--- a/tests/test-rebase-inmemory.t Thu Mar 14 13:53:20 2019 -0700 +++ b/tests/test-rebase-inmemory.t Thu Mar 14 14:46:29 2019 -0700 @@ -756,5 +756,7 @@ | o 0: b173517d0057 'a' - $ hg rebase -b 5 -d tip 2>&1 | grep '** ProgrammingError' - ** ProgrammingError: markcopied() called on clean context + $ hg rebase -b 5 -d tip + rebasing 3:ca58782ad1e4 "b" + rebasing 5:71cb43376053 "merge" + note: not rebasing 5:71cb43376053 "merge", its destination already has all its changes