From patchwork Wed Feb 7 04:58:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [STABLE] fileset: don't abort when running copied() on a revision with a removed file From: Matt Harbison X-Patchwork-Id: 27403 Message-Id: <7b2b82f891bf6355ed87.1517979506@Envy> To: mercurial-devel@mercurial-scm.org Date: Tue, 06 Feb 2018 23:58:26 -0500 # HG changeset patch # User Matt Harbison # 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