[PATCH STABLE] fileset: don't abort when running copied() on a revision with a removed file

Matt Harbison mharbison72 at gmail.com
Wed Feb 7 04:58:26 UTC 2018


# HG changeset patch
# User Matt Harbison <matt_harbison at yahoo.com>
# Date 1517979217 18000
#      Tue Feb 06 23:53:37 2018 -0500
# Branch stable
# Node ID 7b2b82f891bf6355ed87c06ed9198bfcd033fe7d
# Parent  1d60ad093792706e1dc7a52b20942593f2c19655
fileset: don't abort when running copied() on a revision with a removed file

It looks like AND with any status-y fileset would trigger this, as added() and
removed() also failed.  The 4.5-rc revision is a convenient test case, but the
merge isn't necessary.

diff --git a/mercurial/fileset.py b/mercurial/fileset.py
--- a/mercurial/fileset.py
+++ b/mercurial/fileset.py
@@ -464,9 +464,10 @@
     getargs(x, 0, 0, _("copied takes no arguments"))
     s = []
     for f in mctx.subset:
-        p = mctx.ctx[f].parents()
-        if p and p[0].path() != f:
-            s.append(f)
+        if f in mctx.ctx:
+            p = mctx.ctx[f].parents()
+            if p and p[0].path() != f:
+                s.append(f)
     return s
 
 @predicate('revs(revs, pattern)')
diff --git a/tests/test-fileset.t b/tests/test-fileset.t
--- a/tests/test-fileset.t
+++ b/tests/test-fileset.t
@@ -249,6 +249,8 @@
 Test merge states
 
   $ hg ci -m manychanges
+  $ hg file -r . 'set:copied() & modified()'
+  [1]
   $ hg up -C 0
   * files updated, 0 files merged, * files removed, 0 files unresolved (glob)
   $ echo c >> b2


More information about the Mercurial-devel mailing list