* 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.