Re: git log -S doesn't find some commits
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Nov 4, 2008, 23:45 UTC
- Message-ID
- <7vod0voy22.fsf@gitster.siamese.dyndns.org>
- In-Reply-To
- <alpine.DEB.1.00.0811050014310.30769@pacific.mpi-cbg.de>
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 17 quoted lines
> On Tue, 4 Nov 2008, Bernt Hansen wrote: > >> Commits B, C, and D are not included in the git log -S output even >> though with gitk you can see that 'org-publish-validate-link' is in the >> patch. > > It is not sufficient for it to be in the patch, it has to be added or > deleted in whole. So for example if you had a line > > org-publish-validate-link Hello > > and you changed it to > > org-publish-validate-link World > > git log -SWorld will find the commit, but git log > -Sorg-publish-validate-link will not.
It seems nobody has looked at the actual commits, but Dscho got it 80% right.
There seems to be a misconception on what -S<foo> does. It does *NOT* grep for string <foo> in the patch text. It counts number of <foo> in preimage and postimage and decides that the commit is worth showing iff they differ.
If you look at, for example (B):
http://repo.or.cz/w/org-mode.git?a=commitdiff;h=837c81ce51
You can see that in org-publish.el, org-publish-validate-link appears once as removed and once as added, so the total number of the appearance of the symbol in preimage and postimage are the same.