Re: Feature request: Improve diff algorithm

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

 



Here is another place where diff can be improved:
@@ -141,8 +140,9 @@ My_runops(pTHX)
 		// Do not trace variables in DB:: module
 		if( SvOK( inDB ) ) continue;
 
-		sv_inc_nomg( inDB );
 
+		// save_item( inDB );
+		sv_inc_nomg( inDB );
 		dSP; SINFO; SAVETMPS;
 
 		// printf( "SWITCH\n" );


This would be better it the patch looks like:
( this patch is manually created just to light the idea. It may contain errors)
@@ -140,6 +140,7 @@ My_runops(pTHX)
         // Do not trace variables in DB:: module
         if( SvOK( inDB ) ) continue;

+ 
+        // save_item( inDB );
         sv_inc_nomg( inDB );
- 
         dSP; SINFO; SAVETMPS;

As we can see, here the `sv_inc_nomg( inDB );` line is unchanged and `// save_item( inDB );` is added.
Here we just add/remove empty lines and patch looks more better.

I think (and this is my assumption), the the diff algorithm should take into account the string length.
This is more better to add/remove more short lines

21.11.2016, 20:55, "Jacob Keller" <jacob.keller@xxxxxxxxx>:
> On Mon, Nov 21, 2016 at 10:17 AM, Stefan Beller <sbeller@xxxxxxxxxx> wrote:
>>  On Mon, Nov 21, 2016 at 8:56 AM, Jacob Keller <jacob.keller@xxxxxxxxx> wrote:
>>>  On Mon, Nov 21, 2016 at 12:11 AM, KES <kes-kes@xxxxxxxxx> wrote:
>>>>  Hi.
>>>
>>>  Hi,
>>>
>>>>  I have some question about how diff works then give proposal:
>>>>
>>>>  it will be very useful for each "symbol" store additional meta info as source line length. So in this case when git counter two equal sequence of commands it will do further comparison: Adds 23 chars deletes none VS adds 75 chars deletes 46
>>>>
>>>>  Actually I got this:
>>>>
>>>>  @@ -129,8 +132,9 @@ sub _preprocess_message {
>>>>   sub _process_message {
>>>>       my ($self, $message) = @_;
>>>>
>>>>  - my $method = ref($message) eq 'HASH' ? $message->{method} : undef;
>>>>  + my $time = [ gettimeofday ];
>>>>
>>>>  + my $method = ref($message) eq 'HASH' ? $message->{method} : undef;
>>>>       return $self->send_error(ERROR_REQUEST_INVALID)
>>>>           unless defined($method);
>>>>
>>>>  Instead of expected:
>>>>  @@ -129,6 +132,8 @@ sub _preprocess_message {
>>>>   sub _process_message {
>>>>       my ($self, $message) = @_;
>>>>
>>>>  + my $time = [ gettimeofday ];
>>>>  +
>>>>       my $method = ref($message) eq 'HASH' ? $message->{method} : undef;
>>>>  -
>>>>       return $self->send_error(ERROR_REQUEST_INVALID)
>>>
>>>  Have you tried the various options for git to search for smaller
>>>  diffs? Or using the other diff algorithms such as histogram instead of
>>>  patience?
>>
>>  The newest version of Git comes with a flag to move around the diff
>>  better, based on the work at https://github.com/mhagger/diff-slider-tools
>
> Unfortunately in this case, I'm not convinced that it will improve the
> diff. It's worth a try as well though.
>
> Thanks,
> Jake



[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]

  Powered by Linux