 36617af7ed
			
		
	
	36617af7ed
	
	
	
		
			
			The goal of the patch is to introduce the GNU diff
-B/--ignore-blank-lines as closely as possible. The short option is not
available because it's already used for "break-rewrites".
When this option is used, git-diff will not create hunks that simply
add or remove empty lines, but will still show empty lines
addition/suppression if they are close enough to "valuable" changes.
There are two differences between this option and GNU diff -B option:
- GNU diff doesn't have "--inter-hunk-context", so this must be handled
- The following sequence looks like a bug (context is displayed twice):
    $ seq 5 >file1
    $ cat <<EOF >file2
    change
    1
    2
    3
    4
    5
    change
    EOF
    $ diff -u -B file1 file2
    --- file1	2013-06-08 22:13:04.471517834 +0200
    +++ file2	2013-06-08 22:13:23.275517855 +0200
    @@ -1,5 +1,7 @@
    +change
     1
     2
    +
     3
     4
     5
    @@ -3,3 +5,4 @@
     3
     4
     5
    +change
So here is a more thorough description of the option:
- real changes are interesting
- blank lines that are close enough (less than context size) to
interesting changes are considered interesting (recursive definition)
- "context" lines are used around each hunk of interesting changes
- If two hunks are separated by less than "inter-hunk-context", they
will be merged into one.
The implementation does the "interesting changes selection" in a single
pass.
Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
	
		
			
				
	
	
		
			65 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  *  LibXDiff by Davide Libenzi ( File Differential Library )
 | |
|  *  Copyright (C) 2003  Davide Libenzi
 | |
|  *
 | |
|  *  This library is free software; you can redistribute it and/or
 | |
|  *  modify it under the terms of the GNU Lesser General Public
 | |
|  *  License as published by the Free Software Foundation; either
 | |
|  *  version 2.1 of the License, or (at your option) any later version.
 | |
|  *
 | |
|  *  This library is distributed in the hope that it will be useful,
 | |
|  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
|  *  Lesser General Public License for more details.
 | |
|  *
 | |
|  *  You should have received a copy of the GNU Lesser General Public
 | |
|  *  License along with this library; if not, write to the Free Software
 | |
|  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | |
|  *
 | |
|  *  Davide Libenzi <davidel@xmailserver.org>
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #if !defined(XDIFFI_H)
 | |
| #define XDIFFI_H
 | |
| 
 | |
| 
 | |
| typedef struct s_diffdata {
 | |
| 	long nrec;
 | |
| 	unsigned long const *ha;
 | |
| 	long *rindex;
 | |
| 	char *rchg;
 | |
| } diffdata_t;
 | |
| 
 | |
| typedef struct s_xdalgoenv {
 | |
| 	long mxcost;
 | |
| 	long snake_cnt;
 | |
| 	long heur_min;
 | |
| } xdalgoenv_t;
 | |
| 
 | |
| typedef struct s_xdchange {
 | |
| 	struct s_xdchange *next;
 | |
| 	long i1, i2;
 | |
| 	long chg1, chg2;
 | |
| 	int ignore;
 | |
| } xdchange_t;
 | |
| 
 | |
| 
 | |
| 
 | |
| int xdl_recs_cmp(diffdata_t *dd1, long off1, long lim1,
 | |
| 		 diffdata_t *dd2, long off2, long lim2,
 | |
| 		 long *kvdf, long *kvdb, int need_min, xdalgoenv_t *xenv);
 | |
| int xdl_do_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
 | |
| 		xdfenv_t *xe);
 | |
| int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags);
 | |
| int xdl_build_script(xdfenv_t *xe, xdchange_t **xscr);
 | |
| void xdl_free_script(xdchange_t *xscr);
 | |
| int xdl_emit_diff(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb,
 | |
| 		  xdemitconf_t const *xecfg);
 | |
| int xdl_do_patience_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
 | |
| 		xdfenv_t *env);
 | |
| int xdl_do_histogram_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
 | |
| 		xdfenv_t *env);
 | |
| 
 | |
| #endif /* #if !defined(XDIFFI_H) */
 |