зеркало из https://github.com/microsoft/git.git
combine-diff: fix hunks at the end (take #2).
The previous round showed the delete-only hunks at the end, but forgot to mark them interesting when they were. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Родитель
8a470ebfa1
Коммит
740659519e
|
@ -301,14 +301,14 @@ static unsigned long find_next(struct sline *sline,
|
||||||
* lines that are not interesting to interesting() function
|
* lines that are not interesting to interesting() function
|
||||||
* that are surrounded by interesting() ones.
|
* that are surrounded by interesting() ones.
|
||||||
*/
|
*/
|
||||||
while (i < cnt)
|
while (i <= cnt)
|
||||||
if (uninteresting
|
if (uninteresting
|
||||||
? !(sline[i].flag & mark)
|
? !(sline[i].flag & mark)
|
||||||
: (sline[i].flag & mark))
|
: (sline[i].flag & mark))
|
||||||
return i;
|
return i;
|
||||||
else
|
else
|
||||||
i++;
|
i++;
|
||||||
return cnt;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int give_context(struct sline *sline, unsigned long cnt, int num_parent)
|
static int give_context(struct sline *sline, unsigned long cnt, int num_parent)
|
||||||
|
@ -327,10 +327,10 @@ static int give_context(struct sline *sline, unsigned long cnt, int num_parent)
|
||||||
* lines but they are treated as "interesting" in the end.
|
* lines but they are treated as "interesting" in the end.
|
||||||
*/
|
*/
|
||||||
i = find_next(sline, mark, 0, cnt, 0);
|
i = find_next(sline, mark, 0, cnt, 0);
|
||||||
if (cnt <= i)
|
if (cnt < i)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
while (i < cnt) {
|
while (i <= cnt) {
|
||||||
unsigned long j = (context < i) ? (i - context) : 0;
|
unsigned long j = (context < i) ? (i - context) : 0;
|
||||||
unsigned long k;
|
unsigned long k;
|
||||||
|
|
||||||
|
@ -343,7 +343,7 @@ static int give_context(struct sline *sline, unsigned long cnt, int num_parent)
|
||||||
* next uninteresting one start?
|
* next uninteresting one start?
|
||||||
*/
|
*/
|
||||||
j = find_next(sline, mark, i, cnt, 1);
|
j = find_next(sline, mark, i, cnt, 1);
|
||||||
if (cnt <= j)
|
if (cnt < j)
|
||||||
break; /* the rest are all interesting */
|
break; /* the rest are all interesting */
|
||||||
|
|
||||||
/* lookahead context lines */
|
/* lookahead context lines */
|
||||||
|
@ -365,7 +365,7 @@ static int give_context(struct sline *sline, unsigned long cnt, int num_parent)
|
||||||
* the trailing edge a bit.
|
* the trailing edge a bit.
|
||||||
*/
|
*/
|
||||||
i = k;
|
i = k;
|
||||||
k = (j + context < cnt) ? j + context : cnt;
|
k = (j + context < cnt+1) ? j + context : cnt+1;
|
||||||
while (j < k)
|
while (j < k)
|
||||||
sline[j++].flag |= mark;
|
sline[j++].flag |= mark;
|
||||||
}
|
}
|
||||||
|
@ -380,7 +380,7 @@ static int make_hunks(struct sline *sline, unsigned long cnt,
|
||||||
unsigned long i;
|
unsigned long i;
|
||||||
int has_interesting = 0;
|
int has_interesting = 0;
|
||||||
|
|
||||||
for (i = 0; i < cnt; i++) {
|
for (i = 0; i <= cnt; i++) {
|
||||||
if (interesting(&sline[i], all_mask))
|
if (interesting(&sline[i], all_mask))
|
||||||
sline[i].flag |= mark;
|
sline[i].flag |= mark;
|
||||||
else
|
else
|
||||||
|
@ -394,15 +394,15 @@ static int make_hunks(struct sline *sline, unsigned long cnt,
|
||||||
* parent, mark that uninteresting.
|
* parent, mark that uninteresting.
|
||||||
*/
|
*/
|
||||||
i = 0;
|
i = 0;
|
||||||
while (i < cnt) {
|
while (i <= cnt) {
|
||||||
unsigned long j, hunk_begin, hunk_end;
|
unsigned long j, hunk_begin, hunk_end;
|
||||||
unsigned long same_diff;
|
unsigned long same_diff;
|
||||||
while (i < cnt && !(sline[i].flag & mark))
|
while (i <= cnt && !(sline[i].flag & mark))
|
||||||
i++;
|
i++;
|
||||||
if (cnt <= i)
|
if (cnt < i)
|
||||||
break; /* No more interesting hunks */
|
break; /* No more interesting hunks */
|
||||||
hunk_begin = i;
|
hunk_begin = i;
|
||||||
for (j = i + 1; j < cnt; j++) {
|
for (j = i + 1; j <= cnt; j++) {
|
||||||
if (!(sline[j].flag & mark)) {
|
if (!(sline[j].flag & mark)) {
|
||||||
/* Look beyond the end to see if there
|
/* Look beyond the end to see if there
|
||||||
* is an interesting line after this
|
* is an interesting line after this
|
||||||
|
@ -412,8 +412,8 @@ static int make_hunks(struct sline *sline, unsigned long cnt,
|
||||||
int contin = 0;
|
int contin = 0;
|
||||||
la = adjust_hunk_tail(sline, all_mask,
|
la = adjust_hunk_tail(sline, all_mask,
|
||||||
hunk_begin, j);
|
hunk_begin, j);
|
||||||
la = (la + context < cnt) ?
|
la = (la + context < cnt + 1) ?
|
||||||
(la + context) : cnt;
|
(la + context) : cnt + 1;
|
||||||
while (j <= --la) {
|
while (j <= --la) {
|
||||||
if (sline[la].flag & mark) {
|
if (sline[la].flag & mark) {
|
||||||
contin = 1;
|
contin = 1;
|
||||||
|
@ -507,30 +507,23 @@ static void dump_sline(struct sline *sline, unsigned long cnt, int num_parent)
|
||||||
while (1) {
|
while (1) {
|
||||||
struct sline *sl = &sline[lno];
|
struct sline *sl = &sline[lno];
|
||||||
int hunk_end;
|
int hunk_end;
|
||||||
while (lno < cnt && !(sline[lno].flag & mark))
|
int rlines;
|
||||||
|
while (lno <= cnt && !(sline[lno].flag & mark))
|
||||||
lno++;
|
lno++;
|
||||||
if (cnt < lno)
|
if (cnt < lno)
|
||||||
break;
|
break;
|
||||||
else if (cnt == lno) {
|
|
||||||
/* See if there is anything interesting */
|
|
||||||
struct lline *ll;
|
|
||||||
for (ll = sline[lno].lost_head; ll; ll = ll->next)
|
|
||||||
if (ll->parent_map)
|
|
||||||
break;
|
|
||||||
if (!ll)
|
|
||||||
break;
|
|
||||||
hunk_end = cnt + 1;
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
for (hunk_end = lno + 1; hunk_end < cnt; hunk_end++)
|
for (hunk_end = lno + 1; hunk_end <= cnt; hunk_end++)
|
||||||
if (!(sline[hunk_end].flag & mark))
|
if (!(sline[hunk_end].flag & mark))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
rlines = hunk_end - lno;
|
||||||
|
if (cnt < hunk_end)
|
||||||
|
rlines--; /* pointing at the last delete hunk */
|
||||||
for (i = 0; i <= num_parent; i++) putchar(combine_marker);
|
for (i = 0; i <= num_parent; i++) putchar(combine_marker);
|
||||||
for (i = 0; i < num_parent; i++)
|
for (i = 0; i < num_parent; i++)
|
||||||
show_parent_lno(sline, lno, hunk_end, cnt, i);
|
show_parent_lno(sline, lno, hunk_end, cnt, i);
|
||||||
printf(" +%lu,%lu ", lno+1,
|
printf(" +%lu,%lu ", lno+1, rlines);
|
||||||
(cnt == lno) ? 0 : hunk_end - lno);
|
|
||||||
for (i = 0; i <= num_parent; i++) putchar(combine_marker);
|
for (i = 0; i <= num_parent; i++) putchar(combine_marker);
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
while (lno < hunk_end) {
|
while (lno < hunk_end) {
|
||||||
|
@ -549,7 +542,7 @@ static void dump_sline(struct sline *sline, unsigned long cnt, int num_parent)
|
||||||
puts(ll->line);
|
puts(ll->line);
|
||||||
ll = ll->next;
|
ll = ll->next;
|
||||||
}
|
}
|
||||||
if (cnt <= lno)
|
if (cnt < lno)
|
||||||
break;
|
break;
|
||||||
p_mask = 1;
|
p_mask = 1;
|
||||||
for (j = 0; j < num_parent; j++) {
|
for (j = 0; j < num_parent; j++) {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче