# HG changeset patch # User Durham Goode <durham@fb.com> # Date 1432842049 25200 # Thu May 28 12:40:49 2015 -0700 # Node ID e5b10a710036dbfcf146f9d627d860f6b05ef0e0 # Parent d153586c28f8e639b17a049ab599917ec8a87331 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. diff --git a/hggit/__init__.py b/hggit/__init__.py --- 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') diff --git a/hggit/gitdirstate.py b/hggit/gitdirstate.py --- 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):