Re: Relative ls-files

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Junio C Hamano <gitster@xxxxxxxxx> writes:

> Martin Langhoff <martin.langhoff@xxxxxxxxx> writes:
>
>> and the answer is git ls-files --with-tree=<treeish> | grep <regex> .
>> But the --with-tree param is so counterintuitive to me that I read the
>> manpage, everytime.
>
> Because --with-tree nor ls-files is the tool that was designed for.
>
> If you want to find out about a branch, why aren't you using "ls-tree -r"?

It obviously needs a side note to answer "what is 'ls-files --with-tree'
for, then?", so here is such a note.

The --with-tree option was invented for the sole purpose of helping "git
commit -- $paths" back when "commit" was still a scripted Porcelain.  We
wanted to make sure that the $paths given from the command line made sense
(we wanted to diagnose e.g. "git commit Mkaefile" as a typo).

The obvious plumbing to check if the given pathspec matches what are known
to git (i.e. in the index) is:

	git ls-files --error-unmatch -- $paths

but there is a catch.  If you are about to commit a removal of a path,
i.e.

	$ rm -f generated-file.c
	$ git update-index --remove generated-file.c
        $ git commit -m "Do not keep a generated file in SCM" generated-file.c

the above ls-files would report that the pathspec "generated-file.c" does
not match, as that path is no longer in the index.

To make the "ls-files --error-unmatch" useful for this check, we use:

	git ls-files --error-unmatch --with-tree=HEAD -- $paths

to overlay the contents of the tree on top of what is already in the index
and then determine what paths are "known" to git at that point.

So your use of "git ls-files --with-tree=<unrelated branch>" has been
giving results that you didn't want to see, as the set of paths in your
index that is based on your current branch most likely are different from
what is in that unrelated branch.

I don't think there is any in-tree users of --with-tree option anymore,
other than the tests, so it probably is not even worth thinking about
removing it and replacing it with a --with-head-tree (as using any commit
other than HEAD makes little sense) option.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]