threads / discuss / 31708

[ENHANCEMENT] Allow '**' pattern in .gitignore

Subject: [ENHANCEMENT] Allow '**' pattern in .gitignore

## tl;dr

9 messages between Oct 2, 2012 and Oct 4, 2012.

replies: 8people: 5as markdown or json

Ramkumar Ramachandra· Oct 2, 2012, 07:21 UTC · lore
Hi,

I've often found the '**' (extended) shell glob useful for matching any string crossing directory boundaries: it's especially useful if you only have a toplevel .gitignore, as opposed to a per-directory .gitignore. Unfortunately, .gitignore currently uses fnmatch(3), and doesn't recognize '**'. Would extending the .gitignore format to accept this be a useful feature? Would it involve re-implementing and extending fnmatch, or is there some other way?

Ram
Stefano Lattarini· Oct 2, 2012, 07:58 UTC · re: Ramkumar Ramachandra · lore

Re: [ENHANCEMENT] Allow '**' pattern in .gitignore

On 10/02/2012 09:21 AM, Ramkumar Ramachandra wrote:
Show 10 quoted lines
> Hi,
> 
> I've often found the '**' (extended) shell glob useful for matching
> any string crossing directory boundaries: it's especially useful if
> you only have a toplevel .gitignore, as opposed to a per-directory
> .gitignore.  Unfortunately, .gitignore currently uses fnmatch(3), and
> doesn't recognize '**'.  Would extending the .gitignore format to
> accept this be a useful feature?  Would it involve re-implementing and
> extending fnmatch, or is there some other way?
>
I think there is a topic in flight about this:
    <http://thread.gmane.org/gmane.comp.version-control.git/206406>
HTH,
  Stefano
Ramkumar Ramachandra· Oct 2, 2012, 08:24 UTC · re: Stefano Lattarini · lore

Re: [ENHANCEMENT] Allow '**' pattern in .gitignore

Stefano Lattarini wrote:
Show 14 quoted lines
> On 10/02/2012 09:21 AM, Ramkumar Ramachandra wrote:
>> Hi,
>>
>> I've often found the '**' (extended) shell glob useful for matching
>> any string crossing directory boundaries: it's especially useful if
>> you only have a toplevel .gitignore, as opposed to a per-directory
>> .gitignore.  Unfortunately, .gitignore currently uses fnmatch(3), and
>> doesn't recognize '**'.  Would extending the .gitignore format to
>> accept this be a useful feature?  Would it involve re-implementing and
>> extending fnmatch, or is there some other way?
>>
> I think there is a topic in flight about this:
>
>     <http://thread.gmane.org/gmane.comp.version-control.git/206406>
Ah, yes.  Thanks.
Ram
Nguyen Thai Ngoc Duy· Oct 3, 2012, 11:35 UTC · re: Ramkumar Ramachandra · lore

Re: [ENHANCEMENT] Allow '**' pattern in .gitignore

On Tue, Oct 2, 2012 at 3:24 PM, Ramkumar Ramachandra <artagnon@gmail.com> wrote:
Show 15 quoted lines
> Stefano Lattarini wrote:
>> On 10/02/2012 09:21 AM, Ramkumar Ramachandra wrote:
>>> Hi,
>>>
>>> I've often found the '**' (extended) shell glob useful for matching
>>> any string crossing directory boundaries: it's especially useful if
>>> you only have a toplevel .gitignore, as opposed to a per-directory
>>> .gitignore.  Unfortunately, .gitignore currently uses fnmatch(3), and
>>> doesn't recognize '**'.  Would extending the .gitignore format to
>>> accept this be a useful feature?  Would it involve re-implementing and
>>> extending fnmatch, or is there some other way?
>>>
>> I think there is a topic in flight about this:
>>
>>     <http://thread.gmane.org/gmane.comp.version-control.git/206406>

While I'm behind this series, I have no use cases for it in my repositories. It's tested in git test suite but that's about it. Some feedback would be nice, especially on the performance side if you do a lot of ignores.

-- 
Duy
Jens Lehmann· Oct 3, 2012, 13:35 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: [ENHANCEMENT] Allow '**' pattern in .gitignore

Am 03.10.2012 13:35, schrieb Nguyen Thai Ngoc Duy:
Show 21 quoted lines
> On Tue, Oct 2, 2012 at 3:24 PM, Ramkumar Ramachandra <artagnon@gmail.com> wrote:
>> Stefano Lattarini wrote:
>>> On 10/02/2012 09:21 AM, Ramkumar Ramachandra wrote:
>>>> Hi,
>>>>
>>>> I've often found the '**' (extended) shell glob useful for matching
>>>> any string crossing directory boundaries: it's especially useful if
>>>> you only have a toplevel .gitignore, as opposed to a per-directory
>>>> .gitignore.  Unfortunately, .gitignore currently uses fnmatch(3), and
>>>> doesn't recognize '**'.  Would extending the .gitignore format to
>>>> accept this be a useful feature?  Would it involve re-implementing and
>>>> extending fnmatch, or is there some other way?
>>>>
>>> I think there is a topic in flight about this:
>>>
>>>     <http://thread.gmane.org/gmane.comp.version-control.git/206406>
> 
> While I'm behind this series, I have no use cases for it in my
> repositories. It's tested in git test suite but that's about it. Some
> feedback would be nice, especially on the performance side if you do a
> lot of ignores.

I really like it as we do have use cases at my dayjob. Due to our naming conventions in subdirectories we have stuff like this in our .gitignore files:

*/foo/bar */*/foo/bar */*/*/foo/bar

Using "**/foo/bar" instead would be a great improvement (I looked into adding that myself some time ago, but decided it wasn't a low hanging fruit).

Maybe I'll find time do do some performance measurements until the weekend, what numbers are you interested in? Will a hot cache "time git status" be sufficient or are you interested in other numbers too?

Nguyen Thai Ngoc Duy· Oct 3, 2012, 13:42 UTC · re: Jens Lehmann · lore

Re: [ENHANCEMENT] Allow '**' pattern in .gitignore

On Wed, Oct 3, 2012 at 8:35 PM, Jens Lehmann <Jens.Lehmann@web.de> wrote:
Show 5 quoted lines
> */foo/bar
> */*/foo/bar
> */*/*/foo/bar
>
> Using "**/foo/bar" instead would be a great improvement

If this "**/foo/bar" (i.e. no wildcards except one ** at the beginning) is popular, we could optimize this case, turning fmatch() into strncmp(), just like what we do for "foobar*"

-- 
Duy
Jens Lehmann· Oct 3, 2012, 13:51 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: [ENHANCEMENT] Allow '**' pattern in .gitignore

Am 03.10.2012 15:42, schrieb Nguyen Thai Ngoc Duy:
Show 10 quoted lines
> On Wed, Oct 3, 2012 at 8:35 PM, Jens Lehmann <Jens.Lehmann@web.de> wrote:
>> */foo/bar
>> */*/foo/bar
>> */*/*/foo/bar
>>
>> Using "**/foo/bar" instead would be a great improvement
> 
> If this "**/foo/bar" (i.e. no wildcards except one ** at the
> beginning) is popular, we could optimize this case, turning fmatch()
> into strncmp(), just like what we do for "foobar*"

I expect the logic "ignore <pattern including a slash> in any directory depth you find it" to be one of the major use cases for "**", so I think optimization makes sense here.

Joshua Jensen· Oct 3, 2012, 17:51 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: [ENHANCEMENT] Allow '**' pattern in .gitignore

----- Original Message -----
From: Nguyen Thai Ngoc Duy
Date: 10/3/2012 7:42 AM
Show 9 quoted lines
> On Wed, Oct 3, 2012 at 8:35 PM, Jens Lehmann <Jens.Lehmann@web.de> wrote:
>> */foo/bar
>> */*/foo/bar
>> */*/*/foo/bar
>>
>> Using "**/foo/bar" instead would be a great improvement
> If this "**/foo/bar" (i.e. no wildcards except one ** at the
> beginning) is popular, we could optimize this case, turning fmatch()
> into strncmp(), just like what we do for "foobar*"

FWIW, I would like to see this in .gitattributes as well. I have a version of .gitattributes that supports recursive wildcards that I use for specifying filters.

-Josh
Nguyen Thai Ngoc Duy· Oct 4, 2012, 01:34 UTC · re: Joshua Jensen · lore

Re: [ENHANCEMENT] Allow '**' pattern in .gitignore

On Thu, Oct 4, 2012 at 12:51 AM, Joshua Jensen <jjensen@workspacewhiz.com> wrote:

> FWIW, I would like to see this in .gitattributes as well.  I have a version
> of .gitattributes that supports recursive wildcards that I use for
> specifying filters.
.gitattributes also learns about "**" in nd/wildmatch topic.
-- 
Duy

← back to recent threads