Re: git-rev-list: add "--dense" flag
- From
Linus Torvalds <torvalds@osdl.org>
- Date
- Oct 22, 2005, 01:26 UTC
- Message-ID
- <Pine.LNX.4.64.0510211814050.10477@g5.osdl.org>
- In-Reply-To
- <20051022003733.GA8351@pasky.or.cz>
On Sat, 22 Oct 2005, Petr Baudis wrote:
> > There is no documentation for the --dense flag and it is even missing > from the usage string.
I'm not much for docs ;)
The whole path argument also isn't even there (and without paths, --dense doesn't matter)
> But my main concern is - will it be possible to do the rename detection > here as well?
Yes. Note that git-rev-list doesn't actually _do_ the diff, it only checks whether the tree is changed. You still just get a list of commits out of it, and it is up to you to decide what to do with it.
If you're just going to feed them to diff-tree _anyway_, then you might as well not even do the dense thing, because quite frankly, you're just doing extra work.
But let's say that you want to follow a certain filename, what you can do is basically (fake shell syntax with "goto restart")
rev=HEAD restart:
git-rev-list $rev --dense --parents -- "$filename" | while read commit parent1 restofparents do if [ "$restofparents" ]; then .. it's a merge, do whatever it is you do with merges .. else shaold=$(git-ls-tree $parent -- "$filename") shanew=$(git-ls-tree $commit -- "$filename")
# Did it disappear? # Maybe it got renamed from something if [ -z "$shaold" ]; then old=$(git-diff-tree -M -r $commit | grep " R .* $filename") echo "rename? $old" filename=figure-it-out-from-$old rev=$parent goto restart fi git-diff-tree -p $commit -- "$filename" fi while
or something similar.
In other words: you'll basically have to figure out the renames on your own, and follow the renaming, but something like the above should do it.
Linus