author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
Mon, 18 May 2015 02:52:55 +0900 | |
changeset 25174 | 86298718b01c |
parent 25167 | 6f7048cc2419 |
permissions | -rw-r--r-- |
4609
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1 |
# ignore.py - ignored file handling for mercurial |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
2 |
# |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
3 |
# Copyright 2007 Matt Mackall <mpm@selenic.com> |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
4 |
# |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
7622
diff
changeset
|
5 |
# This software may be used and distributed according to the terms of the |
10263 | 6 |
# GNU General Public License version 2 or any later version. |
4609
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
7 |
|
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
8 |
from i18n import _ |
8566
744d6322b05b
match: change all users of util.matcher to match.match
Matt Mackall <mpm@selenic.com>
parents:
8312
diff
changeset
|
9 |
import util, match |
25065
8cf7f0c4cb14
ignore: refactor file read into a function
Durham Goode <durham@fb.com>
parents:
18089
diff
changeset
|
10 |
|
18087
5712e3b12274
ignore: refactor ignore into two functions
Bryan O'Sullivan <bryano@fb.com>
parents:
18054
diff
changeset
|
11 |
def readpats(root, files, warn): |
5712e3b12274
ignore: refactor ignore into two functions
Bryan O'Sullivan <bryano@fb.com>
parents:
18054
diff
changeset
|
12 |
'''return a dict mapping ignore-file-name to list-of-patterns''' |
5712e3b12274
ignore: refactor ignore into two functions
Bryan O'Sullivan <bryano@fb.com>
parents:
18054
diff
changeset
|
13 |
|
5712e3b12274
ignore: refactor ignore into two functions
Bryan O'Sullivan <bryano@fb.com>
parents:
18054
diff
changeset
|
14 |
pats = {} |
5712e3b12274
ignore: refactor ignore into two functions
Bryan O'Sullivan <bryano@fb.com>
parents:
18054
diff
changeset
|
15 |
for f in files: |
18088
52620e5db2f6
ignore: only read an ignore file once
Bryan O'Sullivan <bryano@fb.com>
parents:
18087
diff
changeset
|
16 |
if f in pats: |
52620e5db2f6
ignore: only read an ignore file once
Bryan O'Sullivan <bryano@fb.com>
parents:
18087
diff
changeset
|
17 |
continue |
25164
1e86bb282c71
ignore: move bad file handling out of readignorefile
Durham Goode <durham@fb.com>
parents:
25163
diff
changeset
|
18 |
try: |
25167
6f7048cc2419
ignore: move readpatternfile to match.py
Durham Goode <durham@fb.com>
parents:
25166
diff
changeset
|
19 |
pats[f] = match.readpatternfile(f, warn) |
25164
1e86bb282c71
ignore: move bad file handling out of readignorefile
Durham Goode <durham@fb.com>
parents:
25163
diff
changeset
|
20 |
except IOError, inst: |
1e86bb282c71
ignore: move bad file handling out of readignorefile
Durham Goode <durham@fb.com>
parents:
25163
diff
changeset
|
21 |
warn(_("skipping unreadable ignore file '%s': %s\n") % |
1e86bb282c71
ignore: move bad file handling out of readignorefile
Durham Goode <durham@fb.com>
parents:
25163
diff
changeset
|
22 |
(f, inst.strerror)) |
25065
8cf7f0c4cb14
ignore: refactor file read into a function
Durham Goode <durham@fb.com>
parents:
18089
diff
changeset
|
23 |
|
18089
0127366df8fe
ignore: process hgignore files in deterministic order
Bryan O'Sullivan <bryano@fb.com>
parents:
18088
diff
changeset
|
24 |
return [(f, pats[f]) for f in files if f in pats] |
18087
5712e3b12274
ignore: refactor ignore into two functions
Bryan O'Sullivan <bryano@fb.com>
parents:
18054
diff
changeset
|
25 |
|
4609
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
26 |
def ignore(root, files, warn): |
9091
79a886bcf461
ignore: separate pattern extraction from match compilation
Brendan Cully <brendan@kublai.com>
parents:
8567
diff
changeset
|
27 |
'''return matcher covering patterns in 'files'. |
4609
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
28 |
|
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
29 |
the files parsed for patterns include: |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
30 |
.hgignore in the repository root |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
31 |
any additional files specified in the [ui] section of ~/.hgrc |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
32 |
|
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
33 |
trailing white space is dropped. |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
34 |
the escape character is backslash. |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
35 |
comments start with #. |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
36 |
empty lines are skipped. |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
37 |
|
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
38 |
lines can be of the following formats: |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
39 |
|
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
40 |
syntax: regexp # defaults following lines to non-rooted regexps |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
41 |
syntax: glob # defaults following lines to non-rooted globs |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
42 |
re:pattern # non-rooted regular expression |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
43 |
glob:pattern # non-rooted glob |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
44 |
pattern # pattern of the current default type''' |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
45 |
|
18087
5712e3b12274
ignore: refactor ignore into two functions
Bryan O'Sullivan <bryano@fb.com>
parents:
18054
diff
changeset
|
46 |
pats = readpats(root, files, warn) |
4609
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
47 |
|
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
48 |
allpats = [] |
18089
0127366df8fe
ignore: process hgignore files in deterministic order
Bryan O'Sullivan <bryano@fb.com>
parents:
18088
diff
changeset
|
49 |
for f, patlist in pats: |
13412
58c497d0e44d
remove unnecessary list comprehensions
Martin Geisler <mg@aragost.com>
parents:
10263
diff
changeset
|
50 |
allpats.extend(patlist) |
4609
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
51 |
if not allpats: |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
52 |
return util.never |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
53 |
|
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
54 |
try: |
8567
fea40a677d43
match: add some default args
Matt Mackall <mpm@selenic.com>
parents:
8566
diff
changeset
|
55 |
ignorefunc = match.match(root, '', [], allpats) |
4609
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
56 |
except util.Abort: |
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
57 |
# Re-raise an exception where the src is the right file |
18089
0127366df8fe
ignore: process hgignore files in deterministic order
Bryan O'Sullivan <bryano@fb.com>
parents:
18088
diff
changeset
|
58 |
for f, patlist in pats: |
8566
744d6322b05b
match: change all users of util.matcher to match.match
Matt Mackall <mpm@selenic.com>
parents:
8312
diff
changeset
|
59 |
try: |
8567
fea40a677d43
match: add some default args
Matt Mackall <mpm@selenic.com>
parents:
8566
diff
changeset
|
60 |
match.match(root, '', [], patlist) |
8566
744d6322b05b
match: change all users of util.matcher to match.match
Matt Mackall <mpm@selenic.com>
parents:
8312
diff
changeset
|
61 |
except util.Abort, inst: |
744d6322b05b
match: change all users of util.matcher to match.match
Matt Mackall <mpm@selenic.com>
parents:
8312
diff
changeset
|
62 |
raise util.Abort('%s: %s' % (f, inst[0])) |
4609
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
63 |
|
b43f17691ae6
dirstate: move ignore to its own file
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
64 |
return ignorefunc |