 18d472db6f
			
		
	
	18d472db6f
	
	
	
		
			
			t4211 attempts to test multiple git-log -L ranges where one range is a
superset of the other, and falsely succeeds because its "expected"
output is incorrect.
Overlapping -L ranges handed to git-log are coalesced by
line-log.c:sort_and_merge_range_set() into a set of non-overlapping,
disjoint ranges. When one range is a subset of another,
sort_and_merge_range_set() should coalesce both ranges to the superset
range, but instead the coalesced range often is incorrectly truncated to
the end of the subset range. For example, ranges 2-8 and 3-4 are
coalesced incorrectly to 2-4.
One can observe this incorrect behavior with git-log -L using the test
repository created by t4211. The superset/subset ranges t4211 employs
are 4-$ and 8-12 (where $ represents end-of-file). The coalesced range
should be 4-$. Manually invoking git-log with the same ranges the test
employs, we see:
  % git log -L 4:a.c simple |
    awk '/^commit [0-9a-f]{40}/ { print substr($2,1,7) }'
  4659538
  100b61a
  39b6eb2
  a6eb826
  f04fb20
  de4c48a
  % git log -L 8,12:a.c simple | awk ...
  f04fb20
  de4c48a
  % git log -L 4:a.c -L 8,12:a.c simple | awk ...
  a6eb826
  f04fb20
  de4c48a
This last output is incorrect. 8-12 is a subset of 4-$, hence the output
of the coalesced range should be the same as the 4-$ output shown first.
In fact, the above incorrect output is the truncated bogus range 4-12:
  % git log -L 4,12:a.c simple | awk ...
  a6eb826
  f04fb20
  de4c48a
Fix the test to correctly fail in the presence of the
sort_and_merge_range_set() coalescing bug. Do so by changing the
"expected" output to the commits mentioned in the 4-$ output above.
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
	
		
			
				
	
	
		
			188 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| commit 4659538844daa2849b1a9e7d6fadb96fcd26fc83
 | |
| Author: Thomas Rast <trast@student.ethz.ch>
 | |
| Date:   Thu Feb 28 10:48:43 2013 +0100
 | |
| 
 | |
|     change back to complete line
 | |
| 
 | |
| diff --git a/a.c b/a.c
 | |
| --- a/a.c
 | |
| +++ b/a.c
 | |
| @@ -4,19 +4,21 @@
 | |
|  long f(long x)
 | |
|  {
 | |
|  	int s = 0;
 | |
|  	while (x) {
 | |
|  		x >>= 1;
 | |
|  		s++;
 | |
|  	}
 | |
|  	return s;
 | |
|  }
 | |
|  
 | |
|  /*
 | |
|   * This is only an example!
 | |
|   */
 | |
|  
 | |
|  int main ()
 | |
|  {
 | |
|  	printf("%ld\n", f(15));
 | |
|  	return 0;
 | |
| -}
 | |
| \ No newline at end of file
 | |
| +}
 | |
| +
 | |
| +/* incomplete lines are bad! */
 | |
| 
 | |
| commit 100b61a6f2f720f812620a9d10afb3a960ccb73c
 | |
| Author: Thomas Rast <trast@student.ethz.ch>
 | |
| Date:   Thu Feb 28 10:48:10 2013 +0100
 | |
| 
 | |
|     change to an incomplete line at end
 | |
| 
 | |
| diff --git a/a.c b/a.c
 | |
| --- a/a.c
 | |
| +++ b/a.c
 | |
| @@ -4,19 +4,19 @@
 | |
|  long f(long x)
 | |
|  {
 | |
|  	int s = 0;
 | |
|  	while (x) {
 | |
|  		x >>= 1;
 | |
|  		s++;
 | |
|  	}
 | |
|  	return s;
 | |
|  }
 | |
|  
 | |
|  /*
 | |
|   * This is only an example!
 | |
|   */
 | |
|  
 | |
|  int main ()
 | |
|  {
 | |
|  	printf("%ld\n", f(15));
 | |
|  	return 0;
 | |
| -}
 | |
| +}
 | |
| \ No newline at end of file
 | |
| 
 | |
| commit 39b6eb2d5b706d3322184a169f666f25ed3fbd00
 | |
| Author: Thomas Rast <trast@student.ethz.ch>
 | |
| Date:   Thu Feb 28 10:45:41 2013 +0100
 | |
| 
 | |
|     touch comment
 | |
| 
 | |
| diff --git a/a.c b/a.c
 | |
| --- a/a.c
 | |
| +++ b/a.c
 | |
| @@ -3,19 +3,19 @@
 | |
|  long f(long x)
 | |
|  {
 | |
|  	int s = 0;
 | |
|  	while (x) {
 | |
|  		x >>= 1;
 | |
|  		s++;
 | |
|  	}
 | |
|  	return s;
 | |
|  }
 | |
|  
 | |
|  /*
 | |
| - * A comment.
 | |
| + * This is only an example!
 | |
|   */
 | |
|  
 | |
|  int main ()
 | |
|  {
 | |
|  	printf("%ld\n", f(15));
 | |
|  	return 0;
 | |
|  }
 | |
| 
 | |
| commit a6eb82647d5d67f893da442f8f9375fd89a3b1e2
 | |
| Author: Thomas Rast <trast@student.ethz.ch>
 | |
| Date:   Thu Feb 28 10:45:16 2013 +0100
 | |
| 
 | |
|     touch both functions
 | |
| 
 | |
| diff --git a/a.c b/a.c
 | |
| --- a/a.c
 | |
| +++ b/a.c
 | |
| @@ -3,19 +3,19 @@
 | |
| -int f(int x)
 | |
| +long f(long x)
 | |
|  {
 | |
|  	int s = 0;
 | |
|  	while (x) {
 | |
|  		x >>= 1;
 | |
|  		s++;
 | |
|  	}
 | |
|  	return s;
 | |
|  }
 | |
|  
 | |
|  /*
 | |
|   * A comment.
 | |
|   */
 | |
|  
 | |
|  int main ()
 | |
|  {
 | |
| -	printf("%d\n", f(15));
 | |
| +	printf("%ld\n", f(15));
 | |
|  	return 0;
 | |
|  }
 | |
| 
 | |
| commit f04fb20f2c77850996cba739709acc6faecc58f7
 | |
| Author: Thomas Rast <trast@student.ethz.ch>
 | |
| Date:   Thu Feb 28 10:44:55 2013 +0100
 | |
| 
 | |
|     change f()
 | |
| 
 | |
| diff --git a/a.c b/a.c
 | |
| --- a/a.c
 | |
| +++ b/a.c
 | |
| @@ -3,18 +3,19 @@
 | |
|  int f(int x)
 | |
|  {
 | |
|  	int s = 0;
 | |
|  	while (x) {
 | |
|  		x >>= 1;
 | |
|  		s++;
 | |
|  	}
 | |
| +	return s;
 | |
|  }
 | |
|  
 | |
|  /*
 | |
|   * A comment.
 | |
|   */
 | |
|  
 | |
|  int main ()
 | |
|  {
 | |
|  	printf("%d\n", f(15));
 | |
|  	return 0;
 | |
|  }
 | |
| 
 | |
| commit de4c48ae814792c02a49c4c3c0c757ae69c55f6a
 | |
| Author: Thomas Rast <trast@student.ethz.ch>
 | |
| Date:   Thu Feb 28 10:44:48 2013 +0100
 | |
| 
 | |
|     initial
 | |
| 
 | |
| diff --git a/a.c b/a.c
 | |
| --- /dev/null
 | |
| +++ b/a.c
 | |
| @@ -0,0 +3,18 @@
 | |
| +int f(int x)
 | |
| +{
 | |
| +	int s = 0;
 | |
| +	while (x) {
 | |
| +		x >>= 1;
 | |
| +		s++;
 | |
| +	}
 | |
| +}
 | |
| +
 | |
| +/*
 | |
| + * A comment.
 | |
| + */
 | |
| +
 | |
| +int main ()
 | |
| +{
 | |
| +	printf("%d\n", f(15));
 | |
| +	return 0;
 | |
| +}
 |