All of lore.kernel.org
 help / color / mirror / Atom feed
* a slight anomaly in '--unified=0' diff output for one particular commit?
@ 2007-02-02 16:19 Ray Lehtiniemi
  2007-02-03 20:37 ` Junio C Hamano
  0 siblings, 1 reply; 3+ messages in thread
From: Ray Lehtiniemi @ 2007-02-02 16:19 UTC (permalink / raw)
  To: git


hi all

i get the same output for both these commands in the git repository using 
v1.5.0-rc3-1-ge4b0e4a. 

  # git show --unified=1 9299c4f147bcff603eef187eb04fe38153571d30
  # git show --unified=0 9299c4f147bcff603eef187eb04fe38153571d30

in both cases, i get the following single line of context at the end of the 
diff:

  glossary.html : glossary.txt sort_glossary.pl


i'm also not sure the numbers in the '@@@' line look correct for 
the 'unified=0' case...



the context at the top of the diff behaves as expected.  i checked a few other 
commits (merge and non-merge types), and they all behaved perfectly with both 
unified settings.  it's just this one commit that seems funny when 
using --unified=0


can anyone reproduce?

ray

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: a slight anomaly in '--unified=0' diff output for one particular commit?
  2007-02-02 16:19 a slight anomaly in '--unified=0' diff output for one particular commit? Ray Lehtiniemi
@ 2007-02-03 20:37 ` Junio C Hamano
  2007-02-03 22:12   ` Enhanced diff options for gitk (Re: --unified=0) Ray Lehtiniemi
  0 siblings, 1 reply; 3+ messages in thread
From: Junio C Hamano @ 2007-02-03 20:37 UTC (permalink / raw)
  To: Ray Lehtiniemi; +Cc: git

Ray Lehtiniemi <rayl@mail.com> writes:

> i get the same output for both these commands in the git repository using 
> v1.5.0-rc3-1-ge4b0e4a. 
>
>   # git show --unified=1 9299c4f147bcff603eef187eb04fe38153571d30
>   # git show --unified=0 9299c4f147bcff603eef187eb04fe38153571d30
>
> in both cases, i get the following single line of context at the end of the 
> diff:
>
>   glossary.html : glossary.txt sort_glossary.pl
>
> i'm also not sure the numbers in the '@@@' line look correct for 
> the 'unified=0' case...

That's sick.

-- >8 --
[PATCH] combine-diff: special case --unified=0

Even when --unified=0 is given, the main loop to show the
combined textual diff needs to handle a line that is unchanged
but has lines that were deleted relative to a parent before it
(because that is where the lost lines hang).  However, such a
line should not be emitted in the final output.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---
 combine-diff.c |   34 ++++++++++++++++++++++++++++++----
 1 files changed, 30 insertions(+), 4 deletions(-)

diff --git a/combine-diff.c b/combine-diff.c
index 29d0c9c..a5f2c8d 100644
--- a/combine-diff.c
+++ b/combine-diff.c
@@ -482,11 +482,11 @@ static int make_hunks(struct sline *sline, unsigned long cnt,
 	return has_interesting;
 }
 
-static void show_parent_lno(struct sline *sline, unsigned long l0, unsigned long l1, int n)
+static void show_parent_lno(struct sline *sline, unsigned long l0, unsigned long l1, int n, unsigned long null_context)
 {
 	l0 = sline[l0].p_lno[n];
 	l1 = sline[l1].p_lno[n];
-	printf(" -%lu,%lu", l0, l1-l0);
+	printf(" -%lu,%lu", l0, l1-l0-null_context);
 }
 
 static int hunk_comment_line(const char *bol)
@@ -519,6 +519,7 @@ static void dump_sline(struct sline *sline, unsigned long cnt, int num_parent,
 		unsigned long hunk_end;
 		unsigned long rlines;
 		const char *hunk_comment = NULL;
+		unsigned long null_context = 0;
 
 		while (lno <= cnt && !(sline[lno].flag & mark)) {
 			if (hunk_comment_line(sline[lno].bol))
@@ -535,10 +536,28 @@ static void dump_sline(struct sline *sline, unsigned long cnt, int num_parent,
 		rlines = hunk_end - lno;
 		if (cnt < hunk_end)
 			rlines--; /* pointing at the last delete hunk */
+
+		if (!context) {
+			/*
+			 * Even when running with --unified=0, all
+			 * lines in the hunk needs to be processed in
+			 * the loop below in order to show the
+			 * deletion recorded in lost_head.  However,
+			 * we do not want to show the resulting line
+			 * with all blank context markers in such a
+			 * case.  Compensate.
+			 */
+			unsigned long j;
+			for (j = lno; j < hunk_end; j++)
+				if (!(sline[j].flag & (mark-1)))
+					null_context++;
+			rlines -= null_context;
+		}
+
 		fputs(c_frag, stdout);
 		for (i = 0; i <= num_parent; i++) putchar(combine_marker);
 		for (i = 0; i < num_parent; i++)
-			show_parent_lno(sline, lno, hunk_end, i);
+			show_parent_lno(sline, lno, hunk_end, i, null_context);
 		printf(" +%lu,%lu ", lno+1, rlines);
 		for (i = 0; i <= num_parent; i++) putchar(combine_marker);
 
@@ -578,8 +597,15 @@ static void dump_sline(struct sline *sline, unsigned long cnt, int num_parent,
 			if (cnt < lno)
 				break;
 			p_mask = 1;
-			if (!(sl->flag & (mark-1)))
+			if (!(sl->flag & (mark-1))) {
+				/*
+				 * This sline was here to hang the
+				 * lost lines in front of it.
+				 */
+				if (!context)
+					continue;
 				fputs(c_plain, stdout);
+			}
 			else
 				fputs(c_new, stdout);
 			for (j = 0; j < num_parent; j++) {

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Enhanced diff options for gitk (Re: --unified=0)
  2007-02-03 20:37 ` Junio C Hamano
@ 2007-02-03 22:12   ` Ray Lehtiniemi
  0 siblings, 0 replies; 3+ messages in thread
From: Ray Lehtiniemi @ 2007-02-03 22:12 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

On Saturday 03 February 2007 13:37, Junio C Hamano wrote:

> That's sick.

:-)  i actually only noticed it while testing this patch....

 
-- >8 --
[PATCH] Enhanced diff options for gitk.

The diff options box in the gitk preferences dialog
doesn't do much because the GIT_DIFF_OPTS environment
variable only honors the --unified option.

Adjust the usage of $diffopts and remove GIT_DIFF_OPTS
from gitk so that other diff options will be honored.

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
---
 gitk |   13 ++++++-------
 1 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/gitk b/gitk
index 68cfd63..7ee19b7 100755
--- a/gitk
+++ b/gitk
@@ -4183,9 +4183,7 @@ proc mergediff {id l} {
 
     set diffmergeid $id
     set diffids $id
-    # this doesn't seem to actually affect anything...
-    set env(GIT_DIFF_OPTS) $diffopts
-    set cmd [concat | git diff-tree --no-commit-id --cc $id]
+    set cmd [concat | git diff-tree $diffopts --no-commit-id --cc $id]
     if {[catch {set mdf [open $cmd r]} err]} {
 	error_popup "Error getting merge diffs: $err"
 	return
@@ -4332,8 +4330,7 @@ proc getblobdiffs {ids} {
     global diffopts blobdifffd diffids env curdifftag curtagstart
     global nextupdate diffinhdr treediffs
 
-    set env(GIT_DIFF_OPTS) $diffopts
-    set cmd [concat | git diff-tree --no-commit-id -r -p -C $ids]
+    set cmd [concat | git diff-tree $diffopts --no-commit-id -r -p -C $ids]
     if {[catch {set bdf [open $cmd r]} err]} {
 	puts "error getting diffs: $err"
 	return
@@ -5896,7 +5893,7 @@ proc prefscan {} {
 }
 
 proc prefsok {} {
-    global maxwidth maxgraphpct
+    global maxwidth maxgraphpct diffopts
     global oldprefs prefstop showneartags
 
     catch {destroy $prefstop}
@@ -5906,6 +5903,8 @@ proc prefsok {} {
 	redisplay
     } elseif {$showneartags != $oldprefs(showneartags)} {
 	reselectline
+    } elseif {$diffopts != $oldprefs(diffopts)} {
+	reselectline
     }
 }
 
@@ -6188,7 +6187,7 @@ proc tcl_encoding {enc} {
 
 # defaults...
 set datemode 0
-set diffopts "-U 5 -p"
+set diffopts ""
 set wrcomcmd "git diff-tree --stdin -p --pretty"
 
 set gitencoding {}
-- 
1.5.0.rc3.28.g8bbd

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2007-02-03 22:15 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-02-02 16:19 a slight anomaly in '--unified=0' diff output for one particular commit? Ray Lehtiniemi
2007-02-03 20:37 ` Junio C Hamano
2007-02-03 22:12   ` Enhanced diff options for gitk (Re: --unified=0) Ray Lehtiniemi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.