attr: more matching optimizations from .gitignore
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>
Mon, 15 Oct 2012 06:24:39 +0000 (13:24 +0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 15 Oct 2012 21:57:17 +0000 (14:57 -0700)
commit82dce998c2028b6ee96691921b7037a6e182ec89
treec521a6c799d79527e70672291afa0aa1e57da817
parent84460eec8dcc82417840bf4be2eb0c13d14b1c94
attr: more matching optimizations from .gitignore

.gitattributes and .gitignore share the same pattern syntax but has
separate matching implementation. Over the years, ignore's
implementation accumulates more optimizations while attr's stays the
same.

This patch reuses the core matching functions that are also used by
excluded_from_list. excluded_from_list and path_matches can't be
merged due to differences in exclude and attr, for example:

* "!pattern" syntax is forbidden in .gitattributes.  As an attribute
  can be unset (i.e. set to a special value "false") or made back to
  unspecified (i.e. not even set to "false"), "!pattern attr" is unclear
  which one it means.

* we support attaching attributes to directories, but git-core
  internally does not currently make use of attributes on
  directories.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/gitattributes.txt
attr.c
dir.c
dir.h
t/t0003-attributes.sh