# HG changeset patch # User Matt Harbison # Date 2014-12-05 04:04:55 # Node ID 88d2d77eb981331c94daee970c18346fb4d300e1 # Parent 406dfc63a1ad71213dccc1a45de99a3c5d5ac460 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. diff --git a/mercurial/match.py b/mercurial/match.py --- a/mercurial/match.py +++ b/mercurial/match.py @@ -65,6 +65,7 @@ class match(object): 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 @@ class match(object): '''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 @@ class narrowmatcher(match): 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 + "/")]