On 06/05/13 at 03:10pm, Patrick Steinhardt wrote: > On Wed, Jun 05, 2013 at 10:28:25PM +1000, Allan McRae wrote: > > On 05/06/13 16:16, Andrew Gregory wrote: > > > > > > I tend to think that the particular problem at issue here would be > > > better solved by a negation operator ala gitignore: > > > > > > NoExtract = usr/share/locale/* !usr/share/locale/en_US/* > > > > > > I like this idea. > > How would you ignore all but two files in this directory then? > > NoExtract = !usr/share/locale/en_US/* !usr/share/locale/locale.alias > > One problem that comes to my mind: the first inverse match > already includes locale.alias and as such it would not be > extracted. The second term would exclude locale.alias but include > en_US/*. > > Currently we abort as soon as the first expression (whether it is > PCRE or fnmatch) matches. If we do it like that we would need to > always iterate over all entries in NoExtract and check if a later > occurence of the same file exists that overwrites previous > occurences. _If_ a later term matches again it is unclear as to > what to do, as stated above. >
I would simply have the last match win. It's simple, flexible, and we can still abort as soon as we find a match if we just check them in reverse order. So you could do what you want with: NoExtract = usr/share/locale/* NoExtract = !usr/share/locale/en_US/* NoExtract = !usr/share/locale/locale.alias apg
