Skip to content
Snippets Groups Projects
Commit e1c56486 authored by Kostia Balytskyi's avatar Kostia Balytskyi
Browse files

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.
parent 2be0bf18
Branches
Tags
No related merge requests found
......@@ -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)
......
......@@ -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:
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment