git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [BUG] difference of info from diff and blame

From
SKSemyon Kirnosenko <semyon.kirnosenko@gmail.com>
Date
Jan 12, 2011, 07:53 UTC
Message-ID
<4D2D5E08.9040804@gmail.com>
In-Reply-To
<201101111440.08619.trast@student.ethz.ch>
11.01.2011 16:40, Thomas Rast пишет:
Show 81 quoted lines
> Semyon Kirnosenko wrote:
> [Word wrap fixed.]
>>
>> I have jquery repo (https://github.com/jquery/jquery.git)
>> Let's get blame for some file in some revision:
>> git blame -l -s 2ad223aedd1f93c783d98d60adc9fda3bdfbb4b6 -- src/event/event.js
>> According to blame, line 127 was added in revision
>> 2ad223aedd1f93c783d98d60adc9fda3bdfbb4b6.
>
> The surrounding context (with authorship and some whitespace snipped,
> obviously it's always the same) is
>
> 2ad223ae (124)		
> 2ad223ae (125)		// Pass along a fake event
> 2ad223ae (126)		data.unshift( this.fix({ type: type, target: element }) );
> 2ad223ae (127)
> 2ad223ae (128)		// Trigger the event
> 2ad223ae (129)		if ( (val = this.handle.apply( element, data )) !== false )
> 2ad223ae (130)			this.triggered = true;
>
>
>> Let's get diff for that revision:
>> git diff-tree -p 2ad223aedd1f93c783d98d60adc9fda3bdfbb4b6 -- src/event/event.js
>> We can see this:
>> @@ -105,19 +120,16 @@ jQuery.event = {
>>
>>    		// Handle triggering a single element
>>    		else {
>> -			var handler = element["on" + type ], val,
>> -				fn = jQuery.isFunction( element[ type
>> +			var val, ret, fn = jQuery.isFunction( element
>> +			
>> +			// Pass along a fake event
>> +			data.unshift( this.fix({ type: type, target:
>>
> [this blank context line is line 127 in the postimage]
>> -			if ( handler ) {
>>
>> As you can see line 127 is not marked with '+' char, which means it was
>> not added in this revision. But blame sad otherwise.
>
> git-blame internally runs a diff with no context lines to "pass
> blame".  On all lines in this diff, the current commit can pass on
> blame to the parent, thus avoiding having to take it for itself.
>
> And indeed, running
>
>    git show -U0 2ad223ae -- src/event/event.js
>
> in your repository gives a hunk
>
> @@ -108,11 +123,8 @@ jQuery.event = {
> -			var handler = element["on" + type ], val,
> -				fn = jQuery.isFunction( element[ type ] );
> -
> -			if ( handler ) {
> -				// Pass along a fake event
> -				data.unshift( this.fix({ type: type, target: element }) );
> -	
> -				// Trigger the event
> -				if ( (val = handler.apply( element, data )) !== false )
> -					this.triggered = true;
> -			}
> +			var val, ret, fn = jQuery.isFunction( element[ type ] );
> +			
> +			// Pass along a fake event
> +			data.unshift( this.fix({ type: type, target: element }) );
> +
> +			// Trigger the event
> +			if ( (val = this.handle.apply( element, data )) !== false )
> +				this.triggered = true;
>
> So I would tend to agree with the blame implementation.  If anything
> it's a bug in git-diff when not using any context.
>
> Do you have a reproduction recipe that exhibits the flaw on a
> non-whitespace line?  I'm not up to speed on the diff implementation
> (maybe someone else can help?), but I wouldn't be too surprised if it
> had heuristics that put lines consisting only of whitespace at a lower
> importance than "actual" lines.
>
All cases I have seen were about whitespace lines.
-- 
Regards,
Semyon Kirnosenko
kirnosenko@mail.ru
Previous: Thomas RastNext: Thomas Rast
Message 3 of 4 in “[BUG] difference of info from diff and blame”
  1. Semyon KirnosenkoJan 11, 2011
  2. Thomas RastJan 11, 2011
  3. Semyon KirnosenkoJan 12, 2011
  4. diff -U0 occasionally misses a chance to make empty lines context [was: Re: [BUG] difference of info from diff and blame]Thomas Rast, Jan 12, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.