diff --git a/hggit/__init__.py b/hggit/__init__.py
index d153586c28f8e639b17a049ab599917ec8a87331_aGdnaXQvX19pbml0X18ucHk=..e5b10a710036dbfcf146f9d627d860f6b05ef0e0_aGdnaXQvX19pbml0X18ucHk= 100644
--- 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,6 +169,6 @@
     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
@@ -168,6 +173,9 @@
     # 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
index d153586c28f8e639b17a049ab599917ec8a87331_aGdnaXQvZ2l0ZGlyc3RhdGUucHk=..e5b10a710036dbfcf146f9d627d860f6b05ef0e0_aGdnaXQvZ2l0ZGlyc3RhdGUucHk= 100644
--- 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,6 +67,5 @@
 
     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 = []
@@ -67,3 +71,11 @@
     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)
@@ -68,7 +80,5 @@
     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):