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)
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))
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);
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++) {