hgext/largefiles/overrides.py
changeset 23741 f2893cd8d1e5
parent 23733 86810cd85eb8
child 23766 ce0731e58ac9
--- a/hgext/largefiles/overrides.py	Sat Jan 03 17:50:21 2015 +0800
+++ b/hgext/largefiles/overrides.py	Fri Nov 28 19:50:52 2014 -0500
@@ -152,13 +152,12 @@
         wlock.release()
     return bad
 
-def removelargefiles(ui, repo, isaddremove, *pats, **opts):
+def removelargefiles(ui, repo, isaddremove, matcher, **opts):
     after = opts.get('after')
-    m = composelargefilematcher(scmutil.match(repo[None], pats, opts),
-                                repo[None].manifest())
+    m = composelargefilematcher(matcher, repo[None].manifest())
     try:
         repo.lfstatus = True
-        s = repo.status(match=m, clean=True)
+        s = repo.status(match=m, clean=not isaddremove)
     finally:
         repo.lfstatus = False
     manifest = repo[None].manifest()
@@ -250,7 +249,8 @@
     installnormalfilesmatchfn(repo[None].manifest())
     result = orig(ui, repo, *pats, **opts)
     restorematchfn()
-    return removelargefiles(ui, repo, False, *pats, **opts) or result
+    matcher = scmutil.match(repo[None], pats, opts)
+    return removelargefiles(ui, repo, False, matcher, **opts) or result
 
 def overridestatusfn(orig, repo, rev2, **opts):
     try:
@@ -1109,8 +1109,16 @@
     # we don't remove the standin in the largefiles code, preventing a very
     # confused state later.
     if s.deleted:
-        m = [repo.wjoin(f) for f in s.deleted]
-        removelargefiles(repo.ui, repo, True, *m, **opts)
+        m = copy.copy(matcher)
+
+        # The m._files and m._map attributes are not changed to the deleted list
+        # because that affects the m.exact() test, which in turn governs whether
+        # or not the file name is printed, and how.  Simply limit the original
+        # matches to those in the deleted status list.
+        matchfn = m.matchfn
+        m.matchfn = lambda f: f in s.deleted and matchfn(f)
+
+        removelargefiles(repo.ui, repo, True, m, **opts)
     # Call into the normal add code, and any files that *should* be added as
     # largefiles will be
     addlargefiles(repo.ui, repo, matcher, **opts)