Re: [PATCH updated] Add "--dirstat" for some directory statistics
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Feb 13, 2008, 01:27 UTC
- Message-ID
- <7vbq6lzluy.fsf@gitster.siamese.dyndns.org>
- In-Reply-To
- <alpine.LFD.1.00.0802121701310.2920@woody.linux-foundation.org>
Linus Torvalds <torvalds@linux-foundation.org> writes:
Show 23 quoted lines
> On Tue, 12 Feb 2008, Junio C Hamano wrote: >> >> You can drop the "line count" idea and instead count the "amount >> of damage" done to the preimage, just like we do in the rename >> similarity computation. >> >> The attached patch is just an outline. There may need special >> cases for unmerged paths. > > Ouch. I like the concept and the result, but an not a huge fan of the the > implementation. The problem with this is that it makes the whole damage > computation something separate from the earlier phases. > > So it actually seems to add a lot of cost. Right now there is basically > zero added cost to just adding a "--dirstat" to one of my common > operations, which is > > git diff -M --stat --summary > > (that's what I do on merges). > > Wouldn't it be nicer to merge it with one of the stages we did earlier by > simply saving the data. If not the --stat phase, then the -M phase?
We could add one ulong to diff_filepair struct to record "damage", and populate it inside diffcore_rename().
Obviously:
- You would need to diffcore_count_changes() in separate phase if you do not use -M;
- Even if you use -M, we do not run diffcore_count_changes() for unrenamed paths during diffcore_rename(), so you would need to do that separately.
By the way, if you run "git diff --summary --dirstat -M" (that is, without --stat), we will not have to run diffstat at all. Instead, we only run diffcore_count_changes(), which can be reused for renamed paths if we keep it in diff_filepair struct.