[PATCH 2 of 5] ignore: _parsefiles() returns the pattern and line number

Patrick Mezard pmezard at gmail.com
Sat Sep 15 14:29:50 CDT 2007


# HG changeset patch
# User Patrick Mezard <pmezard at gmail.com>
# Date 1189882147 -7200
# Node ID ac83580a203978458fb36336816de772ef2c2d0a
# Parent  3f5c1f4a9ac4135e1e81a71ee9aff485927f6e9d
ignore: _parsefiles() returns the pattern and line number

diff --git a/mercurial/ignore.py b/mercurial/ignore.py
--- a/mercurial/ignore.py
+++ b/mercurial/ignore.py
@@ -9,7 +9,7 @@ import util
 import util
 
 def _parselines(fp):
-    for line in fp:
+    for linenum, line in enumerate(fp):
         if not line.endswith('\n'):
             line += '\n'
         escape = False
@@ -19,7 +19,7 @@ def _parselines(fp):
             elif line[i] == '#': break
         line = line[:i].rstrip()
         if line:
-            yield line
+            yield linenum + 1, line
 
 def _parsefiles(files, warn):
     syntaxes = {'re': 'relre:', 'regexp': 'relre:', 'glob': 'relglob:'}
@@ -29,7 +29,7 @@ def _parsefiles(files, warn):
             pats[f] = []
             fp = open(f)
             syntax = 'relre:'
-            for line in _parselines(fp):
+            for linenum, line in _parselines(fp):
                 if line.startswith('syntax:'):
                     s = line[7:].strip()
                     try:
@@ -45,7 +45,7 @@ def _parsefiles(files, warn):
                     elif line.startswith(s+':'):
                         pat = rels + line[len(s)+1:]
                         break
-                pats[f].append(pat)
+                pats[f].append((linenum, pat))
         except IOError, inst:
             if f != files[0]:
                 warn(_("skipping unreadable ignore file '%s': %s\n") %
@@ -78,6 +78,7 @@ def ignore(root, files, warn):
     [allpats.extend(patlist) for patlist in pats.values()]
     if not allpats:
         return util.never
+    allpats = [pat for (linenum, pat) in allpats]
 
     try:
         files, ignorefunc, anypats = (
@@ -85,6 +86,7 @@ def ignore(root, files, warn):
     except util.Abort:
         # Re-raise an exception where the src is the right file
         for f, patlist in pats.items():
+            patlist = [pat for (linenum, pat) in patlist]
             files, ignorefunc, anypats = (
                 util.matcher(root, inc=patlist, src=f))
 


More information about the Mercurial-devel mailing list