Mercurial > hg
changeset 33685:e1c56486d1aa
sparse: treat paths as cwd-relative
This commit makes it so sparse treats passed paths as CWD-relative,
not repo-root-realive. This is a more intuitive behavior in my (and some
other FB people's) opinion.
This is breaking change however. My hope here is that since sparse is
experimental, it's ok to introduce BCs.
The reason (glob)s are needed in the test is this: in these two cases we
do not supply path together with slashes, but `os.path.join` adds them, which
means that under Windows they can be backslashes. To demonstrate this behavior,
one could remove the (glob)s and run `./run-tests.py test-sparse.t` from
MinGW's terminal on Windows.
author | Kostia Balytskyi <ikostia@fb.com> |
---|---|
date | Fri, 04 Aug 2017 05:38:22 -0700 |
parents | 2be0bf186950 |
children | 5aac617a028d |
files | hgext/sparse.py mercurial/sparse.py tests/test-sparse.t |
diffstat | 3 files changed, 43 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/sparse.py Wed Aug 02 15:48:57 2017 -0700 +++ b/hgext/sparse.py Fri Aug 04 05:38:22 2017 -0700 @@ -155,7 +155,8 @@ if include or exclude or enableprofile: def clonesparse(orig, self, node, overwrite, *args, **kwargs): sparse.updateconfig(self.unfiltered(), pat, {}, include=include, - exclude=exclude, enableprofile=enableprofile) + exclude=exclude, enableprofile=enableprofile, + usereporootpaths=True) return orig(self, node, overwrite, *args, **kwargs) extensions.wrapfunction(hg, 'updaterepo', clonesparse) return orig(ui, repo, *args, **opts)
--- a/mercurial/sparse.py Wed Aug 02 15:48:57 2017 -0700 +++ b/mercurial/sparse.py Fri Aug 04 05:38:22 2017 -0700 @@ -17,6 +17,7 @@ error, match as matchmod, merge as mergemod, + pathutil, pycompat, scmutil, util, @@ -616,7 +617,7 @@ def updateconfig(repo, pats, opts, include=False, exclude=False, reset=False, delete=False, enableprofile=False, disableprofile=False, - force=False): + force=False, usereporootpaths=False): """Perform a sparse config update. Only one of the actions may be performed. @@ -639,6 +640,20 @@ if any(os.path.isabs(pat) for pat in pats): raise error.Abort(_('paths cannot be absolute')) + if not usereporootpaths: + # let's treat paths as relative to cwd + root, cwd = repo.root, repo.getcwd() + abspats = [] + for kindpat in pats: + kind, pat = matchmod._patsplit(kindpat, None) + if kind in matchmod.cwdrelativepatternkinds or kind is None: + ap = (kind + ':' if kind else '') +\ + pathutil.canonpath(root, cwd, pat) + abspats.append(ap) + else: + abspats.append(kindpat) + pats = abspats + if include: newinclude.update(pats) elif exclude:
--- a/tests/test-sparse.t Wed Aug 02 15:48:57 2017 -0700 +++ b/tests/test-sparse.t Fri Aug 04 05:38:22 2017 -0700 @@ -48,6 +48,31 @@ [255] #endif +Paths should be treated as cwd-relative, not repo-root-relative + $ mkdir subdir && cd subdir + $ hg debugsparse --include path + $ hg debugsparse + [include] + $TESTTMP/myrepo/hide + hide + subdir/path (glob) + + $ cd .. + $ echo hello > subdir/file2.ext + $ cd subdir + $ hg debugsparse --include '**.ext' # let us test globs + $ hg debugsparse --include 'path:abspath' # and a path: pattern + $ cd .. + $ hg debugsparse + [include] + $TESTTMP/myrepo/hide + hide + path:abspath + subdir/**.ext + subdir/path (glob) + + $ rm -rf subdir + Verify commiting while sparse includes other files $ echo z > hide