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"
--- 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