Details
Details
- Reviewers
- None
- Group Reviewers
hg-reviewers - Commits
- rHGdadbfcc63b3e: match: delete unused uipath() and _uipathrelative (API)
Diff Detail
Diff Detail
- Repository
- rHG Mercurial
- Lint
Lint Skipped - Unit
Unit Tests Skipped
| hg-reviewers |
| Lint Skipped |
| Unit Tests Skipped |
| Path | Packages | |||
|---|---|---|---|---|
| M | mercurial/match.py (21 lines) |
| Commit | Parents | Author | Summary | Date |
|---|---|---|---|---|
| Martin von Zweigbergk | Feb 8 2019, 3:00 PM |
| Status | Author | Revision | |
|---|---|---|---|
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz |
| kindpats.append((kind, pats, source)) | kindpats.append((kind, pats, source)) | ||||
| return kindpats | return kindpats | ||||
| if exact: | if exact: | ||||
| m = exactmatcher(root, cwd, patterns, badfn) | m = exactmatcher(root, cwd, patterns, badfn) | ||||
| elif patterns: | elif patterns: | ||||
| kindpats = normalize(patterns, default, root, cwd, auditor, warn) | kindpats = normalize(patterns, default, root, cwd, auditor, warn) | ||||
| if _kindpatsalwaysmatch(kindpats): | if _kindpatsalwaysmatch(kindpats): | ||||
| m = alwaysmatcher(root, cwd, badfn, relativeuipath=True) | m = alwaysmatcher(root, cwd, badfn) | ||||
| else: | else: | ||||
| m = _buildkindpatsmatcher(patternmatcher, root, cwd, kindpats, | m = _buildkindpatsmatcher(patternmatcher, root, cwd, kindpats, | ||||
| ctx=ctx, listsubrepos=listsubrepos, | ctx=ctx, listsubrepos=listsubrepos, | ||||
| badfn=badfn) | badfn=badfn) | ||||
| else: | else: | ||||
| # It's a little strange that no patterns means to match everything. | # It's a little strange that no patterns means to match everything. | ||||
| # Consider changing this to match nothing (probably using nevermatcher). | # Consider changing this to match nothing (probably using nevermatcher). | ||||
| m = alwaysmatcher(root, cwd, badfn) | m = alwaysmatcher(root, cwd, badfn) | ||||
| (pat, stringutil.forcebytestr(inst.strerror))) | (pat, stringutil.forcebytestr(inst.strerror))) | ||||
| continue | continue | ||||
| # else: re or relre - which cannot be normalized | # else: re or relre - which cannot be normalized | ||||
| kindpats.append((kind, pat, '')) | kindpats.append((kind, pat, '')) | ||||
| return kindpats | return kindpats | ||||
| class basematcher(object): | class basematcher(object): | ||||
| def __init__(self, root, cwd, badfn=None, relativeuipath=True): | def __init__(self, root, cwd, badfn=None): | ||||
| self._root = root | self._root = root | ||||
| self._cwd = cwd | self._cwd = cwd | ||||
| if badfn is not None: | if badfn is not None: | ||||
| self.bad = badfn | self.bad = badfn | ||||
| self._relativeuipath = relativeuipath | |||||
| def __call__(self, fn): | def __call__(self, fn): | ||||
| return self.matchfn(fn) | return self.matchfn(fn) | ||||
| def __iter__(self): | def __iter__(self): | ||||
| for f in self._files: | for f in self._files: | ||||
| yield f | yield f | ||||
| # Callbacks related to how the matcher is used by dirstate.walk. | # Callbacks related to how the matcher is used by dirstate.walk. | ||||
| # Subscribers to these events must monkeypatch the matcher object. | # Subscribers to these events must monkeypatch the matcher object. | ||||
| '''Convert a repo path back to path that is relative to the root of the | '''Convert a repo path back to path that is relative to the root of the | ||||
| matcher.''' | matcher.''' | ||||
| return f | return f | ||||
| def rel(self, f): | def rel(self, f): | ||||
| '''Convert repo path back to path that is relative to cwd of matcher.''' | '''Convert repo path back to path that is relative to cwd of matcher.''' | ||||
| return util.pathto(self._root, self._cwd, f) | 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._relativeuipath and self.rel(f)) or self.abs(f) | |||||
| @propertycache | @propertycache | ||||
| def _files(self): | def _files(self): | ||||
| return [] | return [] | ||||
| def files(self): | def files(self): | ||||
| '''Explicitly listed files or patterns or roots: | '''Explicitly listed files or patterns or roots: | ||||
| if no patterns or .always(): empty list, | if no patterns or .always(): empty list, | ||||
| if exact: list exact files, | if exact: list exact files, | ||||
| def anypats(self): | def anypats(self): | ||||
| '''None of .always(), .isexact(), and .prefix() is true -- | '''None of .always(), .isexact(), and .prefix() is true -- | ||||
| optimizations will be difficult.''' | optimizations will be difficult.''' | ||||
| return not self.always() and not self.isexact() and not self.prefix() | return not self.always() and not self.isexact() and not self.prefix() | ||||
| class alwaysmatcher(basematcher): | class alwaysmatcher(basematcher): | ||||
| '''Matches everything.''' | '''Matches everything.''' | ||||
| def __init__(self, root, cwd, badfn=None, relativeuipath=False): | def __init__(self, root, cwd, badfn=None): | ||||
| super(alwaysmatcher, self).__init__(root, cwd, badfn, | super(alwaysmatcher, self).__init__(root, cwd, badfn) | ||||
| relativeuipath=relativeuipath) | |||||
| def always(self): | def always(self): | ||||
| return True | return True | ||||
| def matchfn(self, f): | def matchfn(self, f): | ||||
| return True | return True | ||||
| def visitdir(self, dir): | def visitdir(self, dir): | ||||
| m = copy.copy(m2) | m = copy.copy(m2) | ||||
| # TODO: Consider encapsulating these things in a class so there's only | # TODO: Consider encapsulating these things in a class so there's only | ||||
| # one thing to copy from m1. | # one thing to copy from m1. | ||||
| m.bad = m1.bad | m.bad = m1.bad | ||||
| m.explicitdir = m1.explicitdir | m.explicitdir = m1.explicitdir | ||||
| m.traversedir = m1.traversedir | m.traversedir = m1.traversedir | ||||
| m.abs = m1.abs | m.abs = m1.abs | ||||
| m.rel = m1.rel | m.rel = m1.rel | ||||
| m._relativeuipath |= m1._relativeuipath | |||||
| return m | return m | ||||
| if m2.always(): | if m2.always(): | ||||
| m = copy.copy(m1) | m = copy.copy(m1) | ||||
| m._relativeuipath |= m2._relativeuipath | |||||
| return m | return m | ||||
| return intersectionmatcher(m1, m2) | return intersectionmatcher(m1, m2) | ||||
| class intersectionmatcher(basematcher): | class intersectionmatcher(basematcher): | ||||
| def __init__(self, m1, m2): | def __init__(self, m1, m2): | ||||
| super(intersectionmatcher, self).__init__(m1._root, m1._cwd) | super(intersectionmatcher, self).__init__(m1._root, m1._cwd) | ||||
| self._m1 = m1 | self._m1 = m1 | ||||
| self._m2 = m2 | self._m2 = m2 | ||||
| self._matcher.bad(self._path + "/" + f, msg) | self._matcher.bad(self._path + "/" + f, msg) | ||||
| def abs(self, f): | def abs(self, f): | ||||
| return self._matcher.abs(self._path + "/" + f) | return self._matcher.abs(self._path + "/" + f) | ||||
| def rel(self, f): | def rel(self, f): | ||||
| return self._matcher.rel(self._path + "/" + f) | return self._matcher.rel(self._path + "/" + f) | ||||
| def uipath(self, f): | |||||
| return self._matcher.uipath(self._path + "/" + f) | |||||
| def matchfn(self, f): | def matchfn(self, f): | ||||
| # Some information is lost in the superclass's constructor, so we | # Some information is lost in the superclass's constructor, so we | ||||
| # can not accurately create the matching function for the subdirectory | # can not accurately create the matching function for the subdirectory | ||||
| # from the inputs. Instead, we override matchfn() and visitdir() to | # from the inputs. Instead, we override matchfn() and visitdir() to | ||||
| # call the original matcher with the subdirectory path prepended. | # call the original matcher with the subdirectory path prepended. | ||||
| return self._matcher.matchfn(self._path + "/" + f) | return self._matcher.matchfn(self._path + "/" + f) | ||||
| def visitdir(self, dir): | def visitdir(self, dir): | ||||