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