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):