Patchwork D3710: locate: explicitly use dirstate.matches() for working copy

login
register
mail settings
Submitter phabricator
Date June 11, 2018, 5:39 p.m.
Message ID <differential-rev-PHID-DREV-cih36aqp5sgk6rq3t3ke-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/32063/
State Superseded
Headers show

Comments

phabricator - June 11, 2018, 5:39 p.m.
martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  `hg locate` is odd in that it includes files that have been removed
  from the working copy. It relies on workingctx.matches() for that. I
  want to make workingctx.matches() not include removed files, so this
  patch makes `hg locate` handle the working copy differently instead.

REPOSITORY
  rHG Mercurial

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

AFFECTED FILES
  mercurial/commands.py

CHANGE DETAILS




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

Patch

diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -3333,7 +3333,13 @@ 
                       badfn=lambda x, y: False)
 
     ui.pager('locate')
-    for abs in ctx.matches(m):
+    if ctx.rev() is None:
+        # When run on the working copy, "locate" includes removed files, so
+        # we get the list of files from the dirstate.
+        filesgen = sorted(repo.dirstate.matches(m))
+    else:
+        filesgen = ctx.matches(m)
+    for abs in filesgen:
         if opts.get('fullpath'):
             ui.write(repo.wjoin(abs), end)
         else: