Re: [PATCH 3/3] implement pattern matching in ce_path_match
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 16, 2009, 02:51 UTC
- Message-ID
- <7vzlhsneuc.fsf@gitster.siamese.dyndns.org>
- In-Reply-To
- <7vljtd20m6.fsf@gitster.siamese.dyndns.org>
Junio C Hamano <gitster@pobox.com> writes:
Show 25 quoted lines
> Clemens Buchacher <drizzd@aon.at> writes: > >> With this patch ce_path_match uses match_pathspec in order to perform >> pattern matching. > > We have two conflicting definitions of pattern matching in our system. > I'd make it more explicit which kind of pattern matching you are talking > about here. > > The family of operations based on the diff-tree machinery (e.g. path > limited revision walking "git log A..B -- dir1/dir2") define the pattern > matching as "leading path match (exact match is just a special case of > this)". Other operations that work on paths in the work tree and the > index (e.g. grep, ls-files) uses "leading path match, but fall back to > globbing". > > In the longer term we really should unify them by teaching the former to > fall back to globbing without getting undue performance hit, and this > patch may be a step in the right direction. There are optimizations that > assume the "leading path" semantics to trim the input early and avoid > opening and descending into a tree object if pathspec patterns cannot > possibly match (see tree-diff.c::tree_entry_interesting() for an example), > and we need to teach them to notice a glob wildcard in an earlier part of > a pathspec and to descend into some trees that they would have skipped > with the old definition of pathspec.
Actually there was an earlier attempt that resulted in the pathspec matching tree traverser builtin-grep uses. Even though it has to work with trees (when grepping inside a tree-ish) and has optimizations not to open unnecessary subtrees similar to the one the diff-tree machinery has, it also knows how to handle globs. If we were to pick one of existing implementations for the longer term unification, I think that is probably the one we should build on top of.