Re: [RFC] The design of new pathspec features
From: Duy Nguyen <hidden>
Date: 2016-06-15 22:55:56
On Tue, Jan 29, 2013 at 12:33 PM, Junio C Hamano [off-list ref] wrote:
Have you considered if it may be helpful to have a :(literal) magic (or any magic in general) that applies only to the first N characters of the pathspec pattern?
Not user-driven. But the prefix part is :(literal)-applied. :(glob) is currently implemented this way, using nowildcard_len as you mentioned. :(icase) is more complicated and does not follow yet.
I personally think we do not need to support something like this:
prefix=$(git rev-parse --show-prefix)
n=${#prefix}
pathspec=":(literal-$n)$prefix$1"
but other aspiring Porcelain script writers may disagree and would
want to have it. We can always solve it by giving them an easy and
uniform way to get the glob-quoted version of prefix to solve this
particular issue, i.e.
prefixq=$(git rev-parse --show-prefix-glob-quoted)
pathspec="$prefixq$1"
but magic that applies only to a substring may have other uses.Yeah, that simplifies things. Supporting applying magic over just parts of the pathspec pattern sounds complex. Just a small modification. That rev-parse needs to look at "$1" as well. If :(literal) is already specified, glob quoting will backfire. The user script can deal with that, but it's harder (e.g. parsing magic from scripts and deal with magic combination) than letting rev-parse does it. I've done some form of this already, for supporting add--interactive. git-add prefixes the pathspec but keeps all the magic in place, before passing pathspec to add--interactive. But I missed the quoting point you mentioned above. I probably need de-quoting the prefix as well. Many optimizations stop short at the sign of any glob symbols, including backslash. This could be a new task for wildmatch. -- Duy