ignore.py
64 lines
| 1.9 KiB
| text/x-python
|
PythonLexer
/ mercurial / ignore.py
Matt Mackall
|
r4609 | # ignore.py - ignored file handling for mercurial | ||
# | ||||
# Copyright 2007 Matt Mackall <mpm@selenic.com> | ||||
# | ||||
Martin Geisler
|
r8225 | # This software may be used and distributed according to the terms of the | ||
Matt Mackall
|
r10263 | # GNU General Public License version 2 or any later version. | ||
Matt Mackall
|
r4609 | |||
from i18n import _ | ||||
Matt Mackall
|
r8566 | import util, match | ||
Durham Goode
|
r25065 | |||
Bryan O'Sullivan
|
r18087 | def readpats(root, files, warn): | ||
'''return a dict mapping ignore-file-name to list-of-patterns''' | ||||
pats = {} | ||||
for f in files: | ||||
Bryan O'Sullivan
|
r18088 | if f in pats: | ||
continue | ||||
Durham Goode
|
r25164 | try: | ||
Durham Goode
|
r25167 | pats[f] = match.readpatternfile(f, warn) | ||
Durham Goode
|
r25164 | except IOError, inst: | ||
warn(_("skipping unreadable ignore file '%s': %s\n") % | ||||
(f, inst.strerror)) | ||||
Durham Goode
|
r25065 | |||
Bryan O'Sullivan
|
r18089 | return [(f, pats[f]) for f in files if f in pats] | ||
Bryan O'Sullivan
|
r18087 | |||
Matt Mackall
|
r4609 | def ignore(root, files, warn): | ||
Brendan Cully
|
r9091 | '''return matcher covering patterns in 'files'. | ||
Matt Mackall
|
r4609 | |||
the files parsed for patterns include: | ||||
.hgignore in the repository root | ||||
any additional files specified in the [ui] section of ~/.hgrc | ||||
trailing white space is dropped. | ||||
the escape character is backslash. | ||||
comments start with #. | ||||
empty lines are skipped. | ||||
lines can be of the following formats: | ||||
syntax: regexp # defaults following lines to non-rooted regexps | ||||
syntax: glob # defaults following lines to non-rooted globs | ||||
re:pattern # non-rooted regular expression | ||||
glob:pattern # non-rooted glob | ||||
pattern # pattern of the current default type''' | ||||
Bryan O'Sullivan
|
r18087 | pats = readpats(root, files, warn) | ||
Matt Mackall
|
r4609 | |||
allpats = [] | ||||
Bryan O'Sullivan
|
r18089 | for f, patlist in pats: | ||
Martin Geisler
|
r13412 | allpats.extend(patlist) | ||
Matt Mackall
|
r4609 | if not allpats: | ||
return util.never | ||||
try: | ||||
Matt Mackall
|
r8567 | ignorefunc = match.match(root, '', [], allpats) | ||
Matt Mackall
|
r4609 | except util.Abort: | ||
# Re-raise an exception where the src is the right file | ||||
Bryan O'Sullivan
|
r18089 | for f, patlist in pats: | ||
Matt Mackall
|
r8566 | try: | ||
Matt Mackall
|
r8567 | match.match(root, '', [], patlist) | ||
Matt Mackall
|
r8566 | except util.Abort, inst: | ||
raise util.Abort('%s: %s' % (f, inst[0])) | ||||
Matt Mackall
|
r4609 | |||
return ignorefunc | ||||