~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/globbing.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2007-03-06 15:25:11 UTC
  • mfrom: (2319.1.1 jam-integration)
  • Revision ID: pqm@pqm.ubuntu.com-20070306152511-aa137bb63d6e3a62
(Kent Gibson) Normalize ignore patterns to avoid problems with path seperators.

Show diffs side-by-side

added added

removed removed

Lines of Context:
108
108
    return _
109
109
 
110
110
 
 
111
def _trailing_backslashes_regex(m):
 
112
    """Check trailing backslashes.
 
113
 
 
114
    Does a head count on trailing backslashes to ensure there isn't an odd
 
115
    one on the end that would escape the brackets we wrap the RE in.
 
116
    """
 
117
    if (len(m) % 2) != 0:
 
118
        warning(u"Regular expressions cannot end with an odd number of '\\'. "
 
119
                "Dropping the final '\\'.")
 
120
        return m[:-1]
 
121
    return m
 
122
 
 
123
 
111
124
_sub_re = Replacer()
112
125
_sub_re.add(u'^RE:', u'')
113
126
_sub_re.add(u'\((?!\?)', u'(?:')
114
127
_sub_re.add(u'\(\?P<.*>', _invalid_regex(u'(?:'))
115
128
_sub_re.add(u'\(\?P=[^)]*\)', _invalid_regex(u''))
 
129
_sub_re.add(ur'\\+$', _trailing_backslashes_regex)
116
130
 
117
131
 
118
132
_sub_fullpath = Replacer()
169
183
        base_patterns = []
170
184
        ext_patterns = []
171
185
        for pat in patterns:
 
186
            pat = normalize_pattern(pat)
172
187
            if pat.startswith(u'RE:') or u'/' in pat:
173
188
                path_patterns.append(pat)
174
189
            elif pat.startswith(u'*.'):
200
215
                return patterns[match.lastindex -1]
201
216
        return None
202
217
        
 
218
 
 
219
def normalize_pattern(pattern):
 
220
    """Converts backslashes in path patterns to forward slashes.
 
221
    
 
222
    Doesn't normalize regular expressions - they may contain escapes.
 
223
    """
 
224
    if not pattern.startswith('RE:'):
 
225
        pattern = pattern.replace('\\','/')
 
226
    return pattern.rstrip('/')