# HG changeset patch # User Martin von Zweigbergk # Date 1580368471 28800 # Node ID d0c3eead515af8c70c1f699585c88bc37737ba2d # Parent ae4d729eb3c8f7e3c24ed3faaeba181b48bdf049 copies: fix crash when copy source is not in graft base Differential Revision: https://phab.mercurial-scm.org/D8046 diff -r ae4d729eb3c8 -r d0c3eead515a mercurial/copies.py --- a/mercurial/copies.py Wed Jan 29 23:05:02 2020 -0800 +++ b/mercurial/copies.py Wed Jan 29 23:14:31 2020 -0800 @@ -527,6 +527,11 @@ if src not in m1: # renamed on side 1, deleted on side 2 renamedelete[src] = dsts1 + elif src not in mb: + # Work around the "short-circuit to avoid issues with merge states" + # thing in pathcopies(): pathcopies(x, y) can return a copy where the + # destination doesn't exist in y. + pass elif m2[src] != mb[src]: if not _related(c2[src], base[src]): return diff -r ae4d729eb3c8 -r d0c3eead515a tests/test-shelve.t --- a/tests/test-shelve.t Wed Jan 29 23:05:02 2020 -0800 +++ b/tests/test-shelve.t Wed Jan 29 23:14:31 2020 -0800 @@ -186,14 +186,9 @@ the common case - no options or filenames - $ hg shelve 2>&1 | grep KeyError - KeyError: 'No such manifest entry.' (no-pure !) - raise KeyError (pure !) - KeyError (pure !) -# Get out of the broken state so later tests work - $ hg forget b.rename/b c.copy ghost - $ hg revert a/a b/b d - $ rm a/a.orig b.rename/b c.copy + $ hg shelve + shelved as default-01 + 3 files updated, 0 files merged, 2 files removed, 0 files unresolved $ hg status -C ensure that our shelved changes exist @@ -396,10 +391,10 @@ #if phasebased $ hg heads -q --template '{rev}\n' 8 - 6 + 5 $ hg parents -q --template '{rev}\n' 8 - 6 + 5 #endif #if stripbased