# HG changeset patch # User Siddharth Agarwal # Date 2013-04-10 19:34:42 # Node ID ed676ed67a5c94d20c33175823df48cd5d7c1d65 # Parent ed46c2b98b0ddf8003d3de3344245984bc4c766c manifestmerge: handle workdir removed, remote removed with flags This can happen when a file with flags is removed or deleted in the working directory and also not present in m2. The obvious solution is to add a __delitem__ override to manifestdict that removes the file from flags if necessary, but that has a significant performance cost in some cases, e.g. hg status --rev rev1 --rev rev2 . diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -246,7 +246,13 @@ def manifestmerge(repo, wctx, p2, pa, br if n12: n1, n2 = n12 else: # file contents didn't change, but flags did - n1 = n2 = m1[f] + n1 = n2 = m1.get(f, None) + if n1 is None: + # Since n1 == n2, the file isn't present in m2 either. This + # means that the file was removed or deleted locally and + # removed remotely, but that residual entries remain in flags. + # This can happen in manifests generated by workingctx. + continue if fl12: fl1, fl2 = fl12 else: # flags didn't change, file contents did diff --git a/tests/test-update-issue1456.t b/tests/test-update-issue1456.t --- a/tests/test-update-issue1456.t +++ b/tests/test-update-issue1456.t @@ -6,9 +6,16 @@ $ echo foo > foo $ hg ci -qAm0 - $ chmod +x foo - $ hg ci -m1 + $ echo toremove > toremove + $ echo todelete > todelete + $ chmod +x foo toremove todelete + $ hg ci -qAm1 + +Test that local removed/deleted, remote removed works with flags + $ hg rm toremove + $ rm todelete $ hg co -q 0 + $ echo dirty > foo $ hg up -c abort: uncommitted local changes @@ -18,11 +25,13 @@ dirty $ hg st -A M foo + C todelete + C toremove Validate update of standalone execute bit change: $ hg up -C 0 - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + 1 files updated, 0 files merged, 2 files removed, 0 files unresolved $ chmod -x foo $ hg ci -m removeexec nothing changed @@ -30,7 +39,7 @@ Validate update of standalone execute bi $ hg up -C 0 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg up - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg st $ cd ..