32 cwd = os.getcwd() |
32 cwd = os.getcwd() |
33 if cwd == self.root: return '' |
33 if cwd == self.root: return '' |
34 return cwd[len(self.root) + 1:] |
34 return cwd[len(self.root) + 1:] |
35 |
35 |
36 def hgignore(self): |
36 def hgignore(self): |
37 '''return the contents of .hgignore as a list of patterns. |
37 '''return the contents of .hgignore files as a list of patterns. |
|
38 |
|
39 the files parsed for patterns include: |
|
40 .hgignore in the repository root |
|
41 any additional files specified in the [ui] section of ~/.hgrc |
38 |
42 |
39 trailing white space is dropped. |
43 trailing white space is dropped. |
40 the escape character is backslash. |
44 the escape character is backslash. |
41 comments start with #. |
45 comments start with #. |
42 empty lines are skipped. |
46 empty lines are skipped. |
56 if escape: escape = False |
60 if escape: escape = False |
57 elif line[i] == '\\': escape = True |
61 elif line[i] == '\\': escape = True |
58 elif line[i] == '#': break |
62 elif line[i] == '#': break |
59 line = line[:i].rstrip() |
63 line = line[:i].rstrip() |
60 if line: yield line |
64 if line: yield line |
|
65 files = [self.wjoin('.hgignore')] |
|
66 files.extend(self.ui.hgignorefiles()) |
61 pats = [] |
67 pats = [] |
62 try: |
68 for f in files: |
63 fp = open(self.wjoin('.hgignore')) |
69 try: |
64 syntax = 'relre:' |
70 fp = open(f) |
65 for line in parselines(fp): |
71 syntax = 'relre:' |
66 if line.startswith('syntax:'): |
72 for line in parselines(fp): |
67 s = line[7:].strip() |
73 if line.startswith('syntax:'): |
68 try: |
74 s = line[7:].strip() |
69 syntax = syntaxes[s] |
75 try: |
70 except KeyError: |
76 syntax = syntaxes[s] |
71 self.ui.warn(_(".hgignore: ignoring invalid " |
77 except KeyError: |
72 "syntax '%s'\n") % s) |
78 self.ui.warn(_("%s: ignoring invalid " |
73 continue |
79 "syntax '%s'\n") % (f, s)) |
74 pat = syntax + line |
80 continue |
75 for s in syntaxes.values(): |
81 pat = syntax + line |
76 if line.startswith(s): |
82 for s in syntaxes.values(): |
77 pat = line |
83 if line.startswith(s): |
78 break |
84 pat = line |
79 pats.append(pat) |
85 break |
80 except IOError: pass |
86 pats.append(pat) |
|
87 except IOError: pass |
81 return pats |
88 return pats |
82 |
89 |
83 def ignore(self, fn): |
90 def ignore(self, fn): |
84 '''default match function used by dirstate and localrepository. |
91 '''default match function used by dirstate and |
85 this honours the .hgignore file, and nothing more.''' |
92 localrepository. this honours the repository .hgignore file |
|
93 and any other files specified in the [ui] section of .hgrc.''' |
86 if self.blockignore: |
94 if self.blockignore: |
87 return False |
95 return False |
88 if not self.ignorefunc: |
96 if not self.ignorefunc: |
89 ignore = self.hgignore() |
97 ignore = self.hgignore() |
90 if ignore: |
98 if ignore: |
|
99 # FIXME: if there are errors in patterns, matcher will |
|
100 # print out an error containing src ('.hgignore'); |
|
101 # really, we want the original source file to be |
|
102 # printed instead. |
91 files, self.ignorefunc, anypats = util.matcher(self.root, |
103 files, self.ignorefunc, anypats = util.matcher(self.root, |
92 inc=ignore, |
104 inc=ignore, |
93 src='.hgignore') |
105 src='.hgignore') |
94 else: |
106 else: |
95 self.ignorefunc = util.never |
107 self.ignorefunc = util.never |