When line-level log is invoked with more than one disjoint line range
in the same file, and one of the commits happens to change that file
such that one diff range modifies more than one line range, then
changes to all modified line ranges should be shown, but only the
changes in the first modified line range are:
$ git log --oneline -p
80ca903 (HEAD -> master) Initial
diff --git a/file b/file
new file mode 100644
index 0000000..00935f1
--- /dev/null
+++ b/file
@@ -0,0 +1,10 @@
+Line 1
+Line 2
+Line 3
+Line 4
+Line 5
+Line 6
+Line 7
+Line 8
+Line 9
+Line 10
$ git log --oneline -L1,2:file -L4,5:file -L7,8:file
80ca903 (HEAD -> master) Initial
diff --git a/file b/file
--- /dev/null
+++ b/file
@@ -0,0 +1,2 @@
+Line 1
+Line 2
The line-log-specific diff printer is already clever enough to handle
the case when one line range covers multiple diff ranges, but the
possibility of one diff range touching multiple disjoint line ranges
was apparently overlooked.
Add the necessary condition to dump_diff_hacky_one() to handle this case
as well, and show all modified line ranges:
$ git log --oneline -L1,2:file -L4,5:file -L7,8:file
0f9a5b4 (HEAD -> master) Initial
diff --git a/file b/file
--- /dev/null
+++ b/file
@@ -0,0 +1,2 @@
+Line 1
+Line 2
@@ -0,0 +4,2 @@
+Line 4
+Line 5
@@ -0,0 +7,2 @@
+Line 7
+Line 8
This bug was already present in the initial line-log implementation
added in 2da1d1f6f (Implement line-history search (git log -L),
2013-03-28). Interestingly, that commit already contained a canned
test case covering a similar scenario:
"-L '/long f/',/^}/:a.c -L /main/,/^}/:a.c simple"
This test case looks for two line ranges in the same file, and both
trace back disjointly to the test repository's inital commit,
therefore changes to both line ranges should have been shown for the
initial commit, but only changes for the first line range are shown.
So this test case should have failed from the very beginning, but it
never did, because, unfortunately, the canned expected result is
incorrect, as it doesn't include changes for the second line range.
A similar test with a similarly incorrect canned expected result was
added later in 209618860c (log -L: fix overlapping input ranges,
2013-04-05).
Correct these two canned expected results to contain the changes for
the second line range for the initial commit as well.
Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
109 lines
1.7 KiB
Plaintext
109 lines
1.7 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
|
|
@@ -18,5 +18,5 @@
|
|
int main ()
|
|
{
|
|
printf("%ld\n", f(15));
|
|
return 0;
|
|
-}
|
|
\ No newline at end of file
|
|
+}
|
|
|
|
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
|
|
@@ -18,5 +18,5 @@
|
|
int main ()
|
|
{
|
|
printf("%ld\n", f(15));
|
|
return 0;
|
|
-}
|
|
+}
|
|
\ No newline at end of file
|
|
|
|
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,9 +3,9 @@
|
|
-int f(int x)
|
|
+long f(long x)
|
|
{
|
|
int s = 0;
|
|
while (x) {
|
|
x >>= 1;
|
|
s++;
|
|
}
|
|
return s;
|
|
}
|
|
@@ -17,5 +17,5 @@
|
|
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,8 +3,9 @@
|
|
int f(int x)
|
|
{
|
|
int s = 0;
|
|
while (x) {
|
|
x >>= 1;
|
|
s++;
|
|
}
|
|
+ return s;
|
|
}
|
|
|
|
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,8 @@
|
|
+int f(int x)
|
|
+{
|
|
+ int s = 0;
|
|
+ while (x) {
|
|
+ x >>= 1;
|
|
+ s++;
|
|
+ }
|
|
+}
|
|
@@ -0,0 +16,5 @@
|
|
+int main ()
|
|
+{
|
|
+ printf("%d\n", f(15));
|
|
+ return 0;
|
|
+}
|