sparse: properly error out when absolute paths are used
authorKostia Balytskyi <ikostia@fb.com>
Wed, 02 Aug 2017 15:05:21 -0700
changeset 33683 7dcb517122f9
parent 33682 1d5e497c08b3
child 33684 2be0bf186950
sparse: properly error out when absolute paths are used Current logic is misleading (it says it drops only absolute paths, but it actually drops all of them), not cross-platform (does not support Windows) and IMO just wrong (as it should just error out if absolute paths are given). This commit fixes it.
mercurial/sparse.py
tests/test-sparse.t
--- a/mercurial/sparse.py	Thu Aug 03 23:02:32 2017 +0900
+++ b/mercurial/sparse.py	Wed Aug 02 15:05:21 2017 -0700
@@ -636,10 +636,10 @@
             newexclude = set(oldexclude)
             newprofiles = set(oldprofiles)
 
-        if any(pat.startswith('/') for pat in pats):
-            repo.ui.warn(_('warning: paths cannot start with /, ignoring: %s\n')
-                         % ([pat for pat in pats if pat.startswith('/')]))
-        elif include:
+        if any(os.path.isabs(pat) for pat in pats):
+            raise error.Abort(_('paths cannot be absolute'))
+
+        if include:
             newinclude.update(pats)
         elif exclude:
             newexclude.update(pats)
--- a/tests/test-sparse.t	Thu Aug 03 23:02:32 2017 +0900
+++ b/tests/test-sparse.t	Wed Aug 02 15:05:21 2017 -0700
@@ -29,20 +29,22 @@
 
 #if no-windows
   $ hg debugsparse --include /foo/bar
-  warning: paths cannot start with /, ignoring: ['/foo/bar']
+  abort: paths cannot be absolute
+  [255]
   $ hg debugsparse --include '$TESTTMP/myrepo/hide'
 
   $ hg debugsparse --include '/root'
-  warning: paths cannot start with /, ignoring: ['/root']
+  abort: paths cannot be absolute
+  [255]
 #else
 TODO: See if this can be made to fail the same way as on Unix
   $ hg debugsparse --include /c/foo/bar
-  abort: c:/foo/bar not under root '$TESTTMP/myrepo' (glob)
+  abort: paths cannot be absolute
   [255]
   $ hg debugsparse --include '$TESTTMP/myrepo/hide'
 
   $ hg debugsparse --include '/c/root'
-  abort: c:/root not under root '$TESTTMP/myrepo' (glob)
+  abort: paths cannot be absolute
   [255]
 #endif