cmdutil: warnings not issued in remove if subrepopath overlaps stable
authorHannes Oldenburg <hannes.christian.oldenburg@gmail.com>
Fri, 22 Jul 2016 11:29:42 +0000
branchstable
changeset 29622 9c2cc107547f
parent 29621 d3df009ab117
child 29623 33bf8bd8c5b9
cmdutil: warnings not issued in remove if subrepopath overlaps Previously a subrepository "sub" would cause no warnings to be issued for a file "subnot/a" if it is not removed when calling: hg remove -S "subnot/a"
mercurial/cmdutil.py
tests/test-subrepo.t
--- a/mercurial/cmdutil.py	Wed Jul 20 14:12:45 2016 -0500
+++ b/mercurial/cmdutil.py	Fri Jul 22 11:29:42 2016 +0000
@@ -2481,14 +2481,15 @@
     for f in files:
         def insubrepo():
             for subpath in wctx.substate:
-                if f.startswith(subpath):
+                if f.startswith(subpath + '/'):
                     return True
             return False
 
         count += 1
         ui.progress(_('deleting'), count, total=total, unit=_('files'))
         isdir = f in deleteddirs or wctx.hasdir(f)
-        if f in repo.dirstate or isdir or f == '.' or insubrepo():
+        if (f in repo.dirstate or isdir or f == '.'
+            or insubrepo() or f in subs):
             continue
 
         if repo.wvfs.exists(f):
--- a/tests/test-subrepo.t	Wed Jul 20 14:12:45 2016 -0500
+++ b/tests/test-subrepo.t	Fri Jul 22 11:29:42 2016 +0000
@@ -53,6 +53,15 @@
   7cf8cfea66e410e8e3336508dfeec07b3192de51
   .hgsub .hgsubstate
 
+Subrepopath which overlaps with filepath, does not change warnings in remove()
+
+  $ mkdir snot
+  $ touch snot/file
+  $ hg remove -S snot/file
+  not removing snot/file: file is untracked
+  [1]
+  $ rm -r snot
+
 Revert subrepo and test subrepo fileset keyword:
 
   $ echo b > s/a