|
|
@ -84,6 +84,7 @@ struct sline { |
|
|
|
/* bit 0 up to (N-1) are on if the parent has this line (i.e. |
|
|
|
/* bit 0 up to (N-1) are on if the parent has this line (i.e. |
|
|
|
* we did not change it). |
|
|
|
* we did not change it). |
|
|
|
* bit N is used for "interesting" lines, including context. |
|
|
|
* bit N is used for "interesting" lines, including context. |
|
|
|
|
|
|
|
* bit (N+1) is used for "do not show deletion before this". |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
unsigned long flag; |
|
|
|
unsigned long flag; |
|
|
|
unsigned long *p_lno; |
|
|
|
unsigned long *p_lno; |
|
|
@ -308,6 +309,7 @@ static int give_context(struct sline *sline, unsigned long cnt, int num_parent) |
|
|
|
{ |
|
|
|
{ |
|
|
|
unsigned long all_mask = (1UL<<num_parent) - 1; |
|
|
|
unsigned long all_mask = (1UL<<num_parent) - 1; |
|
|
|
unsigned long mark = (1UL<<num_parent); |
|
|
|
unsigned long mark = (1UL<<num_parent); |
|
|
|
|
|
|
|
unsigned long no_pre_delete = (2UL<<num_parent); |
|
|
|
unsigned long i; |
|
|
|
unsigned long i; |
|
|
|
|
|
|
|
|
|
|
|
/* Two groups of interesting lines may have a short gap of |
|
|
|
/* Two groups of interesting lines may have a short gap of |
|
|
@ -329,7 +331,7 @@ static int give_context(struct sline *sline, unsigned long cnt, int num_parent) |
|
|
|
|
|
|
|
|
|
|
|
/* Paint a few lines before the first interesting line. */ |
|
|
|
/* Paint a few lines before the first interesting line. */ |
|
|
|
while (j < i) |
|
|
|
while (j < i) |
|
|
|
sline[j++].flag |= mark; |
|
|
|
sline[j++].flag |= mark | no_pre_delete; |
|
|
|
|
|
|
|
|
|
|
|
again: |
|
|
|
again: |
|
|
|
/* we know up to i is to be included. where does the |
|
|
|
/* we know up to i is to be included. where does the |
|
|
@ -502,6 +504,7 @@ static void dump_sline(struct sline *sline, unsigned long cnt, int num_parent, |
|
|
|
int use_color) |
|
|
|
int use_color) |
|
|
|
{ |
|
|
|
{ |
|
|
|
unsigned long mark = (1UL<<num_parent); |
|
|
|
unsigned long mark = (1UL<<num_parent); |
|
|
|
|
|
|
|
unsigned long no_pre_delete = (2UL<<num_parent); |
|
|
|
int i; |
|
|
|
int i; |
|
|
|
unsigned long lno = 0; |
|
|
|
unsigned long lno = 0; |
|
|
|
const char *c_frag = diff_get_color(use_color, DIFF_FRAGINFO); |
|
|
|
const char *c_frag = diff_get_color(use_color, DIFF_FRAGINFO); |
|
|
@ -581,7 +584,7 @@ static void dump_sline(struct sline *sline, unsigned long cnt, int num_parent, |
|
|
|
int j; |
|
|
|
int j; |
|
|
|
unsigned long p_mask; |
|
|
|
unsigned long p_mask; |
|
|
|
sl = &sline[lno++]; |
|
|
|
sl = &sline[lno++]; |
|
|
|
ll = sl->lost_head; |
|
|
|
ll = (sl->flag & no_pre_delete) ? NULL : sl->lost_head; |
|
|
|
while (ll) { |
|
|
|
while (ll) { |
|
|
|
fputs(c_old, stdout); |
|
|
|
fputs(c_old, stdout); |
|
|
|
for (j = 0; j < num_parent; j++) { |
|
|
|
for (j = 0; j < num_parent; j++) { |
|
|
|