.gitignore parse crash breaks getdirstate
Hallow! my project have entry `\.directory` in `.gitignore`, that lead to crash on windows platform: ``` #!python ** Mercurial version (5.6.1). TortoiseHg version (5.7rc0+5-a627b2be721a) ** Command: --nofork ** CWD: D:\projects\hg\thg\thg.work ** Encoding: cp1251 ** Extensions loaded: convert, strip, mq, rebase, record, transplant, highlight, show, commitextras, fix, share, hggit, censor, histedit, closehead, remotenames, schemes, eol, extdiff, patchbomb, amend, evolve, topic, absorb, split, uncommit, tortoisehg.util.configitems ** Python version: 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:37:02) [MSC v.1924 64 bit (AMD64)] ** Windows version: sys.getwindowsversion(major=6, minor=3, build=9600, platform=2, service_pack='') ** Processor architecture: x64 ** Qt-5.13.2 PyQt-5.13.2 QScintilla-2.10.8 Traceback (most recent call last): File "D:/projects/hg/hg-git\hggit\gitdirstate.py", line 77, in gignore ignorefunc = matchmod.match(root, b'', [], allpats) File "D:\projects\hg\thg\thg.work\venv.py38\lib\site-packages\mercurial\match.py", line 276, in match kindpats = normalize(include, b'glob', root, cwd, auditor, warn) File "D:\projects\hg\thg\thg.work\venv.py38\lib\site-packages\mercurial\match.py", line 329, in _donormalize pat = pathutil.canonpath(root, cwd, pat, auditor=auditor) File "D:\projects\hg\thg\thg.work\venv.py38\lib\site-packages\mercurial\pathutil.py", line 263, in canonpath raise error.Abort( mercurial.error.Abort: \.directory not under root 'D:\projects\askon\spodes\DLMS.meterkit\cosemlib' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:/projects/hg/hg-git\hggit\gitdirstate.py", line 83, in gignore matchmod.match(root, b'', [], extrapatterns) File "D:\projects\hg\thg\thg.work\venv.py38\lib\site-packages\mercurial\match.py", line 276, in match kindpats = normalize(include, b'glob', root, cwd, auditor, warn) File "D:\projects\hg\thg\thg.work\venv.py38\lib\site-packages\mercurial\match.py", line 329, in _donormalize pat = pathutil.canonpath(root, cwd, pat, auditor=auditor) File "D:\projects\hg\thg\thg.work\venv.py38\lib\site-packages\mercurial\pathutil.py", line 263, in canonpath raise error.Abort( mercurial.error.Abort: \.directory not under root 'D:\projects\askon\spodes\DLMS.meterkit\cosemlib' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\eclipse\plugins\org.python.pydev.core_8.1.0.202012051215\pysrc\_pydev_bundle\pydev_monkey_qt.py", line 205, in _new_run return self._original_run() File "D:\projects\hg\thg\thg.work\tortoisehg\hgqt\status.py", line 760, in run status = self.repo.status(**stopts) File "D:\projects\hg\thg\thg.work\venv.py38\lib\site-packages\mercurial\localrepo.py", line 3014, in status return self[node1].status( File "D:\projects\hg\thg\thg.work\venv.py38\lib\site-packages\mercurial\context.py", line 427, in status r = ctx2._buildstatus( File "D:\projects\hg\thg\thg.work\venv.py38\lib\site-packages\mercurial\context.py", line 1961, in _buildstatus s = self._dirstatestatus(match, listignored, listclean, listunknown) File "D:\projects\hg\thg\thg.work\venv.py38\lib\site-packages\mercurial\context.py", line 1870, in _dirstatestatus cmp, s = self._repo.dirstate.status( File "D:\projects\hg\thg\thg.work\venv.py38\lib\site-packages\mercurial\dirstate.py", line 1247, in status self.walk(match, subrepos, listunknown, listignored, full=full) File "D:\projects\hg\thg\thg.work\venv.py38\lib\site-packages\mercurial\dirstate.py", line 925, in walk ignore = self._ignore File "D:\projects\hg\thg\thg.work\venv.py38\lib\site-packages\mercurial\scmutil.py", line 1702, in __get__ entry.obj = self.func(obj) File "D:/projects/hg/hg-git\hggit\gitdirstate.py", line 113, in _ignore return gignore(self._root, files, self._ui.warn, File "D:/projects/hg/hg-git\hggit\gitdirstate.py", line 85, in gignore raise error.Abort(b'%s: %s' % (b'extra patterns', inst[0])) TypeError: 'Abort' object is not subscriptable ``` inho: such crash should not breaks `gitdirstate` - `gignore` could skip failure entrues, and warn user about failure.
issue