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:
		| @ -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++) { | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Junio C Hamano
					Junio C Hamano