match: introduce uipath() to properly style a file path
Several methods print files relative to the repo root, unless files are named on
the command line, in which case they are printed relative to cwd. Since the
check relies on the 'pats' parameter, which needs to be replaced by a matcher
when adding subrepo support, this logic gets folded into the matcher to tidy up
the callers.
Prior to
3778884197f0, this style decision was based off of whether or not the
'pats' list was empty. That change altered the check to test match.anypats()
instead, in order to make paths printed consistent when -I/-X is specified.
That however, changed the style when a file is given to the command. So now we
test the pattern list to get the old behavior for files, as well as test -I/-X
to get the consistency for patterns.
--- a/mercurial/match.py Fri Dec 05 12:10:56 2014 -0600
+++ b/mercurial/match.py Thu Dec 04 23:04:55 2014 -0500
@@ -65,6 +65,7 @@
self._anypats = bool(include or exclude)
self._ctx = ctx
self._always = False
+ self._pathrestricted = bool(include or exclude or patterns)
matchfns = []
if include:
@@ -128,6 +129,12 @@
'''Convert repo path back to path that is relative to cwd of matcher.'''
return util.pathto(self._root, self._cwd, f)
+ def uipath(self, f):
+ '''Convert repo path to a display path. If patterns or -I/-X were used
+ to create this matcher, the display path will be relative to cwd.
+ Otherwise it is relative to the root of the repo.'''
+ return (self._pathrestricted and self.rel(f)) or f
+
def files(self):
'''Explicitly listed files or patterns or roots:
if no patterns or .always(): empty list,
@@ -191,6 +198,7 @@
self._path = path
self._matcher = matcher
self._always = matcher._always
+ self._pathrestricted = matcher._pathrestricted
self._files = [f[len(path) + 1:] for f in matcher._files
if f.startswith(path + "/")]