Mercurial > hg-git
annotate hggit/gitdirstate.py @ 1135:c4703246f350
compat: mark all compat-checking locations outside hggit.compat with "COMPAT:"
The format is:
# COMPAT: hg X.Y - description of change that affects this block
author | Kevin Bullock <kbullock@ringworld.org> |
---|---|
date | Fri, 02 Feb 2018 13:41:42 -0600 |
parents | 6141895a53c9 |
children | 56a3fc2086b3 |
rev | line source |
---|---|
893 | 1 import os |
2 import stat | |
3 import re | |
4 import errno | |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
5 |
963
5db7e2be619e
gitdirstate: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
910
diff
changeset
|
6 from mercurial import ( |
5db7e2be619e
gitdirstate: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
910
diff
changeset
|
7 dirstate, |
1128
6141895a53c9
compat: switch from hgutil.Abort to error.Abort
Kevin Bullock <kbullock@ringworld.org>
parents:
1115
diff
changeset
|
8 error, |
963
5db7e2be619e
gitdirstate: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
910
diff
changeset
|
9 match as matchmod, |
5db7e2be619e
gitdirstate: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
910
diff
changeset
|
10 scmutil, |
5db7e2be619e
gitdirstate: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
910
diff
changeset
|
11 util, |
5db7e2be619e
gitdirstate: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
910
diff
changeset
|
12 ) |
5db7e2be619e
gitdirstate: regularize mercurial imports
Siddharth Agarwal <sid0@fb.com>
parents:
910
diff
changeset
|
13 |
1135
c4703246f350
compat: mark all compat-checking locations outside hggit.compat with "COMPAT:"
Kevin Bullock <kbullock@ringworld.org>
parents:
1128
diff
changeset
|
14 # COMPAT: hg 3.5 - ignore module was removed |
907
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
893
diff
changeset
|
15 try: |
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
893
diff
changeset
|
16 from mercurial import ignore |
909
67b27ec080ae
ignore: evaluate ignore.readpats to see if ignore module really exists
Yuya Nishihara <yuya@tcha.org>
parents:
907
diff
changeset
|
17 ignore.readpats |
907
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
893
diff
changeset
|
18 ignoremod = True |
956
06385a2b30f3
init: handle AttributeError in addition to ImportError
timeless@gmail.com
parents:
910
diff
changeset
|
19 except (AttributeError, ImportError): |
907
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
893
diff
changeset
|
20 ignoremod = False |
1135
c4703246f350
compat: mark all compat-checking locations outside hggit.compat with "COMPAT:"
Kevin Bullock <kbullock@ringworld.org>
parents:
1128
diff
changeset
|
21 |
c4703246f350
compat: mark all compat-checking locations outside hggit.compat with "COMPAT:"
Kevin Bullock <kbullock@ringworld.org>
parents:
1128
diff
changeset
|
22 # COMPAT: hg 2.9 - pathauditor moved to pathutil |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
23 try: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
24 from mercurial import pathutil |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
25 pathutil.pathauditor |
956
06385a2b30f3
init: handle AttributeError in addition to ImportError
timeless@gmail.com
parents:
910
diff
changeset
|
26 except (AttributeError, ImportError): |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
27 pathutil = scmutil |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
28 from mercurial.i18n import _ |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
29 |
1115
8ed6c0cae9b8
cleanup: add some blank lines
Sean Farley <sean@farley.io>
parents:
1110
diff
changeset
|
30 |
893 | 31 def gignorepats(orig, lines, root=None): |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
32 '''parse lines (iterable) of .gitignore text, returning a tuple of |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
33 (patterns, parse errors). These patterns should be given to compile() |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
34 to be validated and converted into a match function.''' |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
35 syntaxes = {'re': 'relre:', 'regexp': 'relre:', 'glob': 'relglob:'} |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
36 syntax = 'glob:' |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
37 |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
38 patterns = [] |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
39 warnings = [] |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
40 |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
41 for line in lines: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
42 if "#" in line: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
43 _commentre = re.compile(r'((^|[^\\])(\\\\)*)#.*') |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
44 # remove comments prefixed by an even number of escapes |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
45 line = _commentre.sub(r'\1', line) |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
46 # fixup properly escaped comments that survived the above |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
47 line = line.replace("\\#", "#") |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
48 line = line.rstrip() |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
49 if not line: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
50 continue |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
51 |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
52 if line.startswith('!'): |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
53 warnings.append(_("unsupported ignore pattern '%s'") % line) |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
54 continue |
718
9c6f083eecad
gignore: remove illegal components (issue92)
Takumi IINO <trot.thunder@gmail.com>
parents:
632
diff
changeset
|
55 if re.match(r'(:?.*/)?\.hg(:?/|$)', line): |
9c6f083eecad
gignore: remove illegal components (issue92)
Takumi IINO <trot.thunder@gmail.com>
parents:
632
diff
changeset
|
56 continue |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
57 rootprefix = '%s/' % root if root else '' |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
58 if line.startswith('/'): |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
59 line = line[1:] |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
60 rootsuffixes = [''] |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
61 else: |
893 | 62 rootsuffixes = ['', '**/'] |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
63 for rootsuffix in rootsuffixes: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
64 pat = syntax + rootprefix + rootsuffix + line |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
65 for s, rels in syntaxes.iteritems(): |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
66 if line.startswith(rels): |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
67 pat = line |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
68 break |
893 | 69 elif line.startswith(s + ':'): |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
70 pat = rels + line[len(s) + 1:] |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
71 break |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
72 patterns.append(pat) |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
73 |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
74 return patterns, warnings |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
75 |
1115
8ed6c0cae9b8
cleanup: add some blank lines
Sean Farley <sean@farley.io>
parents:
1110
diff
changeset
|
76 |
907
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
893
diff
changeset
|
77 def gignore(root, files, warn, extrapatterns=None): |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
78 allpats = [] |
907
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
893
diff
changeset
|
79 pats = [] |
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
893
diff
changeset
|
80 if ignoremod: |
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
893
diff
changeset
|
81 pats = ignore.readpats(root, files, warn) |
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
893
diff
changeset
|
82 else: |
1046
cf982a23e15c
gitdirstate: show pattern error in hgignore file as expected
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
1037
diff
changeset
|
83 pats = [(f, ['include:%s' % f]) for f in files] |
cf982a23e15c
gitdirstate: show pattern error in hgignore file as expected
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
1037
diff
changeset
|
84 for f, patlist in pats: |
cf982a23e15c
gitdirstate: show pattern error in hgignore file as expected
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
1037
diff
changeset
|
85 allpats.extend(patlist) |
907
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
893
diff
changeset
|
86 |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
87 if extrapatterns: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
88 allpats.extend(extrapatterns) |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
89 if not allpats: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
90 return util.never |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
91 try: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
92 ignorefunc = matchmod.match(root, '', [], allpats) |
1128
6141895a53c9
compat: switch from hgutil.Abort to error.Abort
Kevin Bullock <kbullock@ringworld.org>
parents:
1115
diff
changeset
|
93 except error.Abort: |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
94 for f, patlist in pats: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
95 try: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
96 matchmod.match(root, '', [], patlist) |
1128
6141895a53c9
compat: switch from hgutil.Abort to error.Abort
Kevin Bullock <kbullock@ringworld.org>
parents:
1115
diff
changeset
|
97 except error.Abort, inst: |
1046
cf982a23e15c
gitdirstate: show pattern error in hgignore file as expected
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
1037
diff
changeset
|
98 if not ignoremod: |
cf982a23e15c
gitdirstate: show pattern error in hgignore file as expected
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
1037
diff
changeset
|
99 # in this case, patlist is ['include: FILE'], and |
cf982a23e15c
gitdirstate: show pattern error in hgignore file as expected
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
1037
diff
changeset
|
100 # inst[0] should already include FILE |
cf982a23e15c
gitdirstate: show pattern error in hgignore file as expected
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
1037
diff
changeset
|
101 raise |
1128
6141895a53c9
compat: switch from hgutil.Abort to error.Abort
Kevin Bullock <kbullock@ringworld.org>
parents:
1115
diff
changeset
|
102 raise error.Abort('%s: %s' % (f, inst[0])) |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
103 if extrapatterns: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
104 try: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
105 matchmod.match(root, '', [], extrapatterns) |
1128
6141895a53c9
compat: switch from hgutil.Abort to error.Abort
Kevin Bullock <kbullock@ringworld.org>
parents:
1115
diff
changeset
|
106 except error.Abort, inst: |
6141895a53c9
compat: switch from hgutil.Abort to error.Abort
Kevin Bullock <kbullock@ringworld.org>
parents:
1115
diff
changeset
|
107 raise error.Abort('%s: %s' % ('extra patterns', inst[0])) |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
108 return ignorefunc |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
109 |
1115
8ed6c0cae9b8
cleanup: add some blank lines
Sean Farley <sean@farley.io>
parents:
1110
diff
changeset
|
110 |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
111 class gitdirstate(dirstate.dirstate): |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
112 @dirstate.rootcache('.hgignore') |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
113 def _ignore(self): |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
114 files = [self._join('.hgignore')] |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
115 for name, path in self._ui.configitems("ui"): |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
116 if name == 'ignore' or name.startswith('ignore.'): |
893 | 117 files.append(util.expandpath(path)) |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
118 patterns = [] |
871
c1c2af8aecb3
gitdirstate: fix whitespace
Siddharth Agarwal <sid0@fb.com>
parents:
860
diff
changeset
|
119 # Only use .gitignore if there's no .hgignore |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
120 try: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
121 fp = open(files[0]) |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
122 fp.close() |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
123 except: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
124 fns = self._finddotgitignores() |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
125 for fn in fns: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
126 d = os.path.dirname(fn) |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
127 fn = self.pathto(fn) |
860
cdf46071a83f
gitdirstate: avoid an abort when a .gitignore is missing
Mathias De Maré <mathias.demare@gmail.com>
parents:
718
diff
changeset
|
128 if not os.path.exists(fn): |
cdf46071a83f
gitdirstate: avoid an abort when a .gitignore is missing
Mathias De Maré <mathias.demare@gmail.com>
parents:
718
diff
changeset
|
129 continue |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
130 fp = open(fn) |
893 | 131 pats, warnings = gignorepats(None, fp, root=d) |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
132 for warning in warnings: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
133 self._ui.warn("%s: %s\n" % (fn, warning)) |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
134 patterns.extend(pats) |
907
e5b10a710036
ignore: update ignore logic to match upstream
Durham Goode <durham@fb.com>
parents:
893
diff
changeset
|
135 return gignore(self._root, files, self._ui.warn, |
1110
94aaea5c65f7
cleanup: fix incorrect indentation
Sean Farley <sean@farley.io>
parents:
1046
diff
changeset
|
136 extrapatterns=patterns) |
871
c1c2af8aecb3
gitdirstate: fix whitespace
Siddharth Agarwal <sid0@fb.com>
parents:
860
diff
changeset
|
137 |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
138 def _finddotgitignores(self): |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
139 """A copy of dirstate.walk. This is called from the new _ignore method, |
871
c1c2af8aecb3
gitdirstate: fix whitespace
Siddharth Agarwal <sid0@fb.com>
parents:
860
diff
changeset
|
140 which is called by dirstate.walk, which would cause infinite recursion, |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
141 except _finddotgitignores calls the superclass _ignore directly.""" |
893 | 142 match = matchmod.match(self._root, self.getcwd(), |
143 ['relglob:.gitignore']) | |
144 # TODO: need subrepos? | |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
145 subrepos = [] |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
146 unknown = True |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
147 ignored = False |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
148 |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
149 def fwarn(f, msg): |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
150 self._ui.warn('%s: %s\n' % (self.pathto(f), msg)) |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
151 return False |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
152 |
893 | 153 ignore = super(gitdirstate, self)._ignore |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
154 dirignore = self._dirignore |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
155 if ignored: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
156 ignore = util.never |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
157 dirignore = util.never |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
158 elif not unknown: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
159 # if unknown and ignored are False, skip step 2 |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
160 ignore = util.always |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
161 dirignore = util.always |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
162 |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
163 matchfn = match.matchfn |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
164 matchalways = match.always() |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
165 matchtdir = match.traversedir |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
166 dmap = self._map |
1135
c4703246f350
compat: mark all compat-checking locations outside hggit.compat with "COMPAT:"
Kevin Bullock <kbullock@ringworld.org>
parents:
1128
diff
changeset
|
167 # COMPAT: hg 4.3 - osutil moved, but util re-exports listdir |
1022
006c837f9181
gitdirstate: use util.listdir if available
Kevin Bullock <kbullock@ringworld.org>
parents:
967
diff
changeset
|
168 try: |
006c837f9181
gitdirstate: use util.listdir if available
Kevin Bullock <kbullock@ringworld.org>
parents:
967
diff
changeset
|
169 listdir = util.listdir |
006c837f9181
gitdirstate: use util.listdir if available
Kevin Bullock <kbullock@ringworld.org>
parents:
967
diff
changeset
|
170 except AttributeError: |
1037
e3dab807e38c
compat: delay importing osutil until we know we need it
Kevin Bullock <kbullock@ringworld.org>
parents:
1022
diff
changeset
|
171 from mercurial import osutil |
1022
006c837f9181
gitdirstate: use util.listdir if available
Kevin Bullock <kbullock@ringworld.org>
parents:
967
diff
changeset
|
172 listdir = osutil.listdir |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
173 lstat = os.lstat |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
174 dirkind = stat.S_IFDIR |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
175 regkind = stat.S_IFREG |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
176 lnkkind = stat.S_IFLNK |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
177 join = self._join |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
178 |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
179 exact = skipstep3 = False |
893 | 180 if matchfn == match.exact: # match.exact |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
181 exact = True |
893 | 182 dirignore = util.always # skip step 2 |
183 elif match.files() and not match.anypats(): # match.match, no patterns | |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
184 skipstep3 = True |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
185 |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
186 if not exact and self._checkcase: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
187 normalize = self._normalize |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
188 skipstep3 = False |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
189 else: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
190 normalize = None |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
191 |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
192 # step 1: find all explicit files |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
193 results, work, dirsnotfound = self._walkexplicit(match, subrepos) |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
194 |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
195 skipstep3 = skipstep3 and not (work or dirsnotfound) |
1135
c4703246f350
compat: mark all compat-checking locations outside hggit.compat with "COMPAT:"
Kevin Bullock <kbullock@ringworld.org>
parents:
1128
diff
changeset
|
196 # COMPAT: hg 3.3.3 - work is now a list of tuples |
872
da01212cd53a
gitdirstate: use normalized path from _walkexplicit
Siddharth Agarwal <sid0@fb.com>
parents:
871
diff
changeset
|
197 if work and isinstance(work[0], tuple): |
da01212cd53a
gitdirstate: use normalized path from _walkexplicit
Siddharth Agarwal <sid0@fb.com>
parents:
871
diff
changeset
|
198 work = [nd for nd, d in work if not dirignore(d)] |
da01212cd53a
gitdirstate: use normalized path from _walkexplicit
Siddharth Agarwal <sid0@fb.com>
parents:
871
diff
changeset
|
199 else: |
da01212cd53a
gitdirstate: use normalized path from _walkexplicit
Siddharth Agarwal <sid0@fb.com>
parents:
871
diff
changeset
|
200 work = [d for d in work if not dirignore(d)] |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
201 wadd = work.append |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
202 |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
203 # step 2: visit subdirectories |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
204 while work: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
205 nd = work.pop() |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
206 skip = None |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
207 if nd == '.': |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
208 nd = '' |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
209 else: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
210 skip = '.hg' |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
211 try: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
212 entries = listdir(join(nd), stat=True, skip=skip) |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
213 except OSError, inst: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
214 if inst.errno in (errno.EACCES, errno.ENOENT): |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
215 fwarn(nd, inst.strerror) |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
216 continue |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
217 raise |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
218 for f, kind, st in entries: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
219 if normalize: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
220 nf = normalize(nd and (nd + "/" + f) or f, True, True) |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
221 else: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
222 nf = nd and (nd + "/" + f) or f |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
223 if nf not in results: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
224 if kind == dirkind: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
225 if not ignore(nf): |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
226 if matchtdir: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
227 matchtdir(nf) |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
228 wadd(nf) |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
229 if nf in dmap and (matchalways or matchfn(nf)): |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
230 results[nf] = None |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
231 elif kind == regkind or kind == lnkkind: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
232 if nf in dmap: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
233 if matchalways or matchfn(nf): |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
234 results[nf] = st |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
235 elif (matchalways or matchfn(nf)) and not ignore(nf): |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
236 results[nf] = st |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
237 elif nf in dmap and (matchalways or matchfn(nf)): |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
238 results[nf] = None |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
239 |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
240 for s in subrepos: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
241 del results[s] |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
242 del results['.hg'] |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
243 |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
244 # step 3: report unseen items in the dmap hash |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
245 if not skipstep3 and not exact: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
246 if not results and matchalways: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
247 visit = dmap.keys() |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
248 else: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
249 visit = [f for f in dmap if f not in results and matchfn(f)] |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
250 visit.sort() |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
251 |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
252 if unknown: |
893 | 253 # unknown == True means we walked the full directory tree |
254 # above. So if a file is not seen it was either a) not matching | |
255 # matchfn b) ignored, c) missing, or d) under a symlink | |
256 # directory. | |
615
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
257 audit_path = pathutil.pathauditor(self._root) |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
258 |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
259 for nf in iter(visit): |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
260 # Report ignored items in the dmap as long as they are not |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
261 # under a symlink directory. |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
262 if audit_path.check(nf): |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
263 try: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
264 results[nf] = lstat(join(nf)) |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
265 except OSError: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
266 # file doesn't exist |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
267 results[nf] = None |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
268 else: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
269 # It's either missing or under a symlink directory |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
270 results[nf] = None |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
271 else: |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
272 # We may not have walked the full directory tree above, |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
273 # so stat everything we missed. |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
274 nf = iter(visit).next |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
275 for st in util.statfiles([join(i) for i in visit]): |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
276 results[nf()] = st |
503d403fc040
Fix for #68 | Use .gitignore files (with proper semantics)
Ben Kehoe <benk@berkeley.edu>
parents:
diff
changeset
|
277 return results.keys() |