Mercurial > hg > hg-git
changeset 908:e5b10a710036
ignore: update ignore logic to match upstream
Upstream mercurial has dropped the ignore module and replaced it with 'include:'
patterns. Let's do the same in hggit.
Ran tests against Mercurial latest (6ac860f700b5) and Mercurial 3.4.
author | Durham Goode <durham@fb.com> |
---|---|
date | Thu, 28 May 2015 12:40:49 -0700 |
parents | d153586c28f8 |
children | b022478ae3d1 |
files | hggit/__init__.py hggit/gitdirstate.py |
diffstat | 2 files changed, 27 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/hggit/__init__.py +++ b/hggit/__init__.py @@ -34,7 +34,12 @@ from mercurial import extensions from mercurial import help from mercurial import hg -from mercurial import ignore +try: + from mercurial import ignore + ignoremod = True +except ImportError: + # The ignore module disappeared in Mercurial 3.5 + ignoremod = False from mercurial import localrepo from mercurial import manifest from mercurial.node import hex @@ -164,10 +169,13 @@ return verify.verify(ui, repo, ctx) if (getattr(dirstate, 'rootcache', False) and - getattr(ignore, 'readpats', False)): + (not ignoremod or getattr(ignore, 'readpats', False))): # only install our dirstate wrapper if it has a hope of working import gitdirstate - extensions.wrapfunction(ignore, 'ignore', gitdirstate.gignore) + if ignoremod: + def ignorewrap(orig, *args, **kwargs): + return gitdirstate.gignore(*args, **kwargs) + extensions.wrapfunction(ignore, 'ignore', ignorewrap) dirstate.dirstate = gitdirstate.gitdirstate @command('git-cleanup')
--- a/hggit/gitdirstate.py +++ b/hggit/gitdirstate.py @@ -4,7 +4,12 @@ import errno from mercurial import dirstate -from mercurial import ignore +try: + from mercurial import ignore + ignoremod = True +except: + # ignore module was removed in Mercurial 3.5 + ignoremod = False from mercurial import match as matchmod from mercurial import osutil from mercurial import scmutil @@ -62,13 +67,18 @@ return patterns, warnings -def gignore(orig, root, files, warn, extrapatterns=None): - pats = ignore.readpats(root, files, warn) +def gignore(root, files, warn, extrapatterns=None): allpats = [] + pats = [] + if ignoremod: + pats = ignore.readpats(root, files, warn) + for f, patlist in pats: + allpats.extend(patlist) + else: + allpats.extend(['include:%s' % f for f in files]) + if extrapatterns: allpats.extend(extrapatterns) - for f, patlist in pats: - allpats.extend(patlist) if not allpats: return util.never try: @@ -110,7 +120,7 @@ for warning in warnings: self._ui.warn("%s: %s\n" % (fn, warning)) patterns.extend(pats) - return ignore.ignore(self._root, files, self._ui.warn, + return gignore(self._root, files, self._ui.warn, extrapatterns=patterns) def _finddotgitignores(self):