Per branch ignore exclusions

John Arbash Meinel john at arbash-meinel.com
Fri Sep 11 22:47:40 BST 2009


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Neil Martinsen-Burrell wrote:
> On 2009-09-11 13:07 , John Arbash Meinel wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> John Whitley wrote:
>>> Martin Pool<mbp<at>  canonical.com>  writes:
>>>> Since we support Python regexps in ignore rules, it may already be
>>>> possible to use a negative-match regexp to do this.  If there is, it
>>>> should be documented as as recipe; if not it would be worth filing or
>>>> duping a bug.
>>>
>>> I didn't see a dupe, so I filed as:
>>> https://bugs.launchpad.net/bugs/428031
>>>
>>> Good idea, re: regexps.  Depending on the ignore implementation, a
>>> negative-match regexp may or may not work as the user expects.  It
>>> might require collapsing some or all ignore rules into a big ugly
>>> alternate-list regexp.  If the ignore engine already compiles the
>>> rules into a big regexp, a negative matcher might be ok.
>>>
>>> In any event, I plan on starting by hacking out some (failing)
>>> exclusion tests and will use that time to see if a negative-match
>>> regexp approach will indeed work.
>>>
>>> -- John
>>
>> We turn globs into regexps and then put them all together in one big
>> match. Except it turned out that python's matcher had a limit of
>> something like 100 groups, so we limit it to 50 groups at a time.
>>
>> Unfortunately this probably means that it will work for almost everyone,
>> except when it starts failing unpredictably...
> 
> I can't seem to make a negative match work in an ignore rule:
> 
> nmb at guttle[/tmp]$ bzr init test
> Created a standalone tree (format: 2a)
> nmb at guttle[/tmp]$ cd test
> nmb at guttle[/tmp/test]$ touch file.txt file.a
> nmb at guttle[/tmp/test]$ bzr st
> unknown:
>   file.txt
> nmb at guttle[/tmp/test]$ bzr ignored
> file.a                                             *.a
> nmb at guttle[/tmp/test]$ bzr ignore 'RE:(?!.*\.a$)'
> nmb at guttle[/tmp/test]$ bzr ignored
> file.a                                             *.a
> nmb at guttle[/tmp/test]$ bzr st
> added:
>   .bzrignore
> unknown:
>   file.txt
> nmb at guttle[/tmp/test]$ cat .bzrignore
> RE:(?!.*\.a$)
> 
> I haven't tracked back to what regexp gets built for ignoring, but it
> doesn't seem to include my negative match.
> 
> -Neil
> 

It should end up as something like:

(?\.*a)|(?!.*\.a)

My guess is that negative regexp doesn't take precedence over the
positive regexp because of the '|' portion.

John
=:->

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkqqxXwACgkQJdeBCYSNAAMehACgsrAoO/MTOwlHJWT3iQ3Ja3Rm
r4oAoMB/5MTZsQv9w9fO4ZXbZwp/SFXy
=gw7N
-----END PGP SIGNATURE-----



More information about the bazaar mailing list