~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/ignores.py

  • Committer: Robert Collins
  • Date: 2010-05-06 23:41:35 UTC
  • mto: This revision was merged to the branch mainline in revision 5223.
  • Revision ID: robertc@robertcollins.net-20100506234135-yivbzczw1sejxnxc
Lock methods on ``Tree``, ``Branch`` and ``Repository`` are now
expected to return an object which can be used to unlock them. This reduces
duplicate code when using cleanups. The previous 'tokens's returned by
``Branch.lock_write`` and ``Repository.lock_write`` are now attributes
on the result of the lock_write. ``repository.RepositoryWriteLockResult``
and ``branch.BranchWriteLockResult`` document this. (Robert Collins)

``log._get_info_for_log_files`` now takes an add_cleanup callable.
(Robert Collins)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006 Canonical Ltd
 
1
# Copyright (C) 2006-2010 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
25
25
    globbing,
26
26
    )
27
27
 
28
 
# This was the full ignore list for bzr 0.8
29
 
# please keep these sorted (in C locale order) to aid merging
30
 
OLD_DEFAULTS = [
31
 
    '#*#',
32
 
    '*$',
33
 
    '*,v',
34
 
    '*.BAK',
35
 
    '*.a',
36
 
    '*.bak',
37
 
    '*.elc',
38
 
    '*.exe',
39
 
    '*.la',
40
 
    '*.lo',
41
 
    '*.o',
42
 
    '*.obj',
43
 
    '*.orig',
44
 
    '*.py[oc]',
45
 
    '*.so',
46
 
    '*.tmp',
47
 
    '*~',
48
 
    '.#*',
49
 
    '.*.sw[nop]',
50
 
    '.*.tmp',
51
 
    # Our setup tests dump .python-eggs in the bzr source tree root
52
 
    './.python-eggs',
53
 
    '.DS_Store',
54
 
    '.arch-ids',
55
 
    '.arch-inventory',
56
 
    '.bzr.log',
57
 
    '.del-*',
58
 
    '.git',
59
 
    '.hg',
60
 
    '.jamdeps'
61
 
    '.libs',
62
 
    '.make.state',
63
 
    '.sconsign*',
64
 
    '.svn',
65
 
    '.sw[nop]',    # vim editing nameless file
66
 
    '.tmp*',
67
 
    'BitKeeper',
68
 
    'CVS',
69
 
    'CVS.adm',
70
 
    'RCS',
71
 
    'SCCS',
72
 
    'TAGS',
73
 
    '_darcs',
74
 
    'aclocal.m4',
75
 
    'autom4te*',
76
 
    'config.h',
77
 
    'config.h.in',
78
 
    'config.log',
79
 
    'config.status',
80
 
    'config.sub',
81
 
    'stamp-h',
82
 
    'stamp-h.in',
83
 
    'stamp-h1',
84
 
    '{arch}',
85
 
]
86
 
 
 
28
from trace import warning
87
29
 
88
30
# ~/.bazaar/ignore will be filled out using
89
31
# this ignore list, if it does not exist
100
42
]
101
43
 
102
44
 
 
45
 
103
46
def parse_ignore_file(f):
104
 
    """Read in all of the lines in the file and turn it into an ignore list"""
 
47
    """Read in all of the lines in the file and turn it into an ignore list
 
48
    
 
49
    Continue in the case of utf8 decoding errors, and emit a warning when 
 
50
    such and error is found. Optimise for the common case -- no decoding 
 
51
    errors.
 
52
    """
105
53
    ignored = set()
106
 
    for line in f.read().decode('utf8').split('\n'):
 
54
    ignore_file = f.read()
 
55
    try:
 
56
        # Try and parse whole ignore file at once.
 
57
        unicode_lines = ignore_file.decode('utf8').split('\n')
 
58
    except UnicodeDecodeError:
 
59
        # Otherwise go though line by line and pick out the 'good'
 
60
        # decodable lines
 
61
        lines = ignore_file.split('\n')
 
62
        unicode_lines = []
 
63
        for line_number, line in enumerate(lines):
 
64
            try:
 
65
                unicode_lines.append(line.decode('utf-8'))
 
66
            except UnicodeDecodeError:
 
67
                # report error about line (idx+1)
 
68
                warning('.bzrignore: On Line #%d, malformed utf8 character. '
 
69
                        'Ignoring line.' % (line_number+1))
 
70
 
 
71
    # Append each line to ignore list if it's not a comment line
 
72
    for line in unicode_lines:
107
73
        line = line.rstrip('\r\n')
108
74
        if not line or line.startswith('#'):
109
75
            continue
210
176
 
211
177
 
212
178
def tree_ignores_add_patterns(tree, name_pattern_list):
213
 
    """Retrieve a list of ignores from the ignore file in a tree.
 
179
    """Add more ignore patterns to the ignore file in a tree.
 
180
    If ignore file does not exist then it will be created.
 
181
    The ignore file will be automatically added under version control.
214
182
 
215
 
    :param tree: Tree to retrieve the ignore list from.
216
 
    :return:
 
183
    :param tree: Working tree to update the ignore list.
217
184
    """
218
185
    ifn = tree.abspath(bzrlib.IGNORE_FILENAME)
219
186
    if tree.has_filename(ifn):
240
207
    finally:
241
208
        f.close()
242
209
 
243
 
    if not tree.path2id('.bzrignore'):
244
 
        tree.add(['.bzrignore'])
 
210
    if not tree.path2id(bzrlib.IGNORE_FILENAME):
 
211
        tree.add([bzrlib.IGNORE_FILENAME])