Patchwork D8031: copy: rewrite walkpat() to depend less on dirstate

login
register
mail settings
Submitter phabricator
Date Feb. 13, 2020, 8:28 p.m.
Message ID <226c535119ce3e776512545a491847cf@localhost.localdomain>
Download mbox | patch
Permalink /patch/45211/
State Not Applicable
Headers show

Comments

phabricator - Feb. 13, 2020, 8:28 p.m.
Closed by commit rHG2bd3b95fdce0: copy: rewrite walkpat() to depend less on dirstate (authored by martinvonz).
This revision was automatically updated to reflect the committed changes.
This revision was not accepted when it landed; it landed in state "Needs Review".

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D8031?vs=20171&id=20196

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D8031/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D8031

AFFECTED FILES
  mercurial/cmdutil.py

CHANGE DETAILS




To: martinvonz, #hg-reviewers, marmoute
Cc: marmoute, mercurial-devel

Patch

diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -1419,32 +1419,35 @@ 
     after = opts.get(b"after")
     dryrun = opts.get(b"dry_run")
     wctx = repo[None]
+    pctx = wctx.p1()
 
     uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True)
 
     def walkpat(pat):
         srcs = []
-        if after:
-            badstates = b'?'
-        else:
-            badstates = b'?r'
         m = scmutil.match(wctx, [pat], opts, globbed=True)
         for abs in wctx.walk(m):
-            state = repo.dirstate[abs]
             rel = uipathfn(abs)
             exact = m.exact(abs)
-            if state in badstates:
-                if exact and state == b'?':
-                    ui.warn(_(b'%s: not copying - file is not managed\n') % rel)
-                if exact and state == b'r':
-                    ui.warn(
-                        _(
-                            b'%s: not copying - file has been marked for'
-                            b' remove\n'
+            if abs not in wctx:
+                if abs in pctx:
+                    if not after:
+                        if exact:
+                            ui.warn(
+                                _(
+                                    b'%s: not copying - file has been marked '
+                                    b'for remove\n'
+                                )
+                                % rel
+                            )
+                        continue
+                else:
+                    if exact:
+                        ui.warn(
+                            _(b'%s: not copying - file is not managed\n') % rel
                         )
-                        % rel
-                    )
-                continue
+                    continue
+
             # abs: hgsep
             # rel: ossep
             srcs.append((abs, rel, exact))