Re: [PATCH/alternative/raw and rough] setup.c: denote repo wide pathspecs by ':'
- From
Michael J Gruber <git@drmicha.warpmail.net>
- Date
- Mar 1, 2011, 15:01 UTC
- Message-ID
- <4D6D0A51.9030701@drmicha.warpmail.net>
- In-Reply-To
- <7vsjv6evy4.fsf@alter.siamese.dyndns.org>
Junio C Hamano venit, vidit, dixit 01.03.2011 15:50:
Show 40 quoted lines
> Nguyen Thai Ngoc Duy <pclouds@gmail.com> writes: > >> No. ':foo' as a reference to 'foo' in index is a SHA1-extended syntax >> and I think we try to avoid ambiguation when a sha1-extended syntax >> may look like a path or vice versa. > > Very true. > > Just as a thought experiment (I am skeptical about this whole "this is > from root" prefix idea to begin with, but I don't want to shoot an idea > down prematurely when there may still be untold gems I haven't seen in > it): > > $ git grep -e frotz .../ > > to abbreviate "I don't bother to count my ../" might be an alternative, > though. > > The reason I am skeptical about the "from root prefix" is because I do not > see a way to make it compatible with other meaningful pathspecs. > > $ cd Documentation > $ git grep -e frotz '*.txt' > > would find frotz in all *.txt files in Documentation (and its > subdirectories), if the command takes "relatigve to cwd". > > It also is very clear that > > $ cd Documentation > $ git grep --full-tree -e frotz '*.txt' > > would find those anywhere, inside or outside Documentation. > > On the other hand, it is natural to expect that > > $ git grep -e frotz ".../*.txt" > > should find *.txt files _only_ at the root level, so it is not as useful as > the --full-tree (or --root).
Exactly that is (one of the reasons) why I used something which does not look like "as many ../ as necessary" nor like "/". With my implementation,
git grep -e frotz ":*.txt"
from a subdir will grep the exact same files as
(cd $(git rev-parse --cdup) && git grep -e frotz "*.txt")
will (it is --full-tree!), and will output the results relative to the current workdir.
Note that we already have to disambiguate between revspecs and pathspecs with -- in several places; that is not different with the new notation, and even not more frequent if it is not used.
I have to say I'm really excited about how transparently this works across all kinds of commands, and how suggestive this is with rev:path in mind.
Also, e.g.,
git grep -e frotz "*.c" ":*.h"
will look in all C files in the cwd and and all headers everywhere. Just think of the possibilities, and of the usefulness with clean, add, commit, reset,...!
Michael