git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Single brackets matching in .gitignore rules
@ 2015-09-26 22:01 Andrey Loskutov
  2015-09-27  8:58 ` Andreas Schwab
  2015-09-28 13:15 ` Duy Nguyen
  0 siblings, 2 replies; 7+ messages in thread
From: Andrey Loskutov @ 2015-09-26 22:01 UTC (permalink / raw)
  To: git

Hi,

I'm trying to make JGit .gitignore parser compatible to Git behavior and need help to understand some corner cases.

Git seem to fail to match file names if the ignore rule contain a single bracket '[' and seem to have inconsistent behavior for a single ']'.
For all experiments below I was using git 2.1.0 from Fedora 21 repositories.

Example table for '[':
----------------------
rule  | file | match?
----------------------
[           [          false
[*         [          false
*[         [          false
*[         a[        false
----------------------

I would expect that in all cases above Git ignore rules must match, since there is no valid character group defined and so the pattern should be interpreted literally.
However, it looks like Git simply gives up on parsing the rule, probably because it contains unmatched '[' character starting a (broken) character group.

Next, the surprising table for ']':
----------------------
rule  | file | match?
----------------------
]           ]          true
]*         ]          true
*]         ]          true
*]         a]        true
----------------------

Here Git does not give up on parsing, treats unmatched ']' character literally, and doesn't dislike that it is an "unmatched" end of a broken character group.
Why?

If Git interprets [ character only as part of the glob rules (character groups), it should interpret unmatched ] character equally.
Also if Git interprets unmatched  ] character literally, why not same behavior for the [ character?
IMHO the first table for single '[' character is just a bug in Git, and it should be consistent to the ']' table.

Anyway, it would be nice to hear what should be the "right" way to interpret the tables above.

BTW the only official documentation I found about ignore rules:

https://www.kernel.org/pub/software/scm/git/docs/gitignore.html
http://man7.org/linux/man-pages/man3/fnmatch.3.html
http://man7.org/linux/man-pages/man7/glob.7.html

-- 
Kind regards,
google.com/+AndreyLoskutov

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2015-09-28 18:05 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-26 22:01 Single brackets matching in .gitignore rules Andrey Loskutov
2015-09-27  8:58 ` Andreas Schwab
2015-09-27 16:35   ` Andrey Loskutov
2015-09-28 13:15 ` Duy Nguyen
2015-09-28 17:40   ` Junio C Hamano
2015-09-28 17:46     ` Andrey Loskutov
2015-09-28 18:04       ` Junio C Hamano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).