[PATCH] diff: code clean-up and removal of rename hack.
A new macro, DIFF_PAIR_RENAME(), is introduced to distinguish a filepair that is a rename/copy (the definition of which is src and dst are different paths, of course). This removes the hack used in the record_rename_pair() to always put a non-zero value in the score field. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>maint
							parent
							
								
									befe86392c
								
							
						
					
					
						commit
						01c4e70f63
					
				
							
								
								
									
										6
									
								
								diff.c
								
								
								
								
							
							
						
						
									
										6
									
								
								diff.c
								
								
								
								
							|  | @ -796,7 +796,7 @@ static void diff_resolve_rename_copy(void) | ||||||
| 			for (j = 0; j < q->nr; j++) { | 			for (j = 0; j < q->nr; j++) { | ||||||
| 				pp = q->queue[j]; | 				pp = q->queue[j]; | ||||||
| 				if (!strcmp(p->one->path, pp->one->path) && | 				if (!strcmp(p->one->path, pp->one->path) && | ||||||
| 				    pp->score) { | 				    DIFF_PAIR_RENAME(pp)) { | ||||||
| 					/* rename/copy are always valid | 					/* rename/copy are always valid | ||||||
| 					 * so we do not say DIFF_FILE_VALID() | 					 * so we do not say DIFF_FILE_VALID() | ||||||
| 					 * on pp->one and pp->two. | 					 * on pp->one and pp->two. | ||||||
|  | @ -815,7 +815,7 @@ static void diff_resolve_rename_copy(void) | ||||||
| 		 * whose both sides are valid and of the same type, i.e. | 		 * whose both sides are valid and of the same type, i.e. | ||||||
| 		 * either in-place edit or rename/copy edit. | 		 * either in-place edit or rename/copy edit. | ||||||
| 		 */ | 		 */ | ||||||
| 		else if (p->score) { | 		else if (DIFF_PAIR_RENAME(p)) { | ||||||
| 			if (p->source_stays) { | 			if (p->source_stays) { | ||||||
| 				p->status = 'C'; | 				p->status = 'C'; | ||||||
| 				continue; | 				continue; | ||||||
|  | @ -828,7 +828,7 @@ static void diff_resolve_rename_copy(void) | ||||||
| 				pp = q->queue[j]; | 				pp = q->queue[j]; | ||||||
| 				if (strcmp(pp->one->path, p->one->path)) | 				if (strcmp(pp->one->path, p->one->path)) | ||||||
| 					continue; /* not us */ | 					continue; /* not us */ | ||||||
| 				if (!pp->score) | 				if (!DIFF_PAIR_RENAME(pp)) | ||||||
| 					continue; /* not a rename/copy */ | 					continue; /* not a rename/copy */ | ||||||
| 				/* pp is a rename/copy from the same source */ | 				/* pp is a rename/copy from the same source */ | ||||||
| 				p->status = 'C'; | 				p->status = 'C'; | ||||||
|  |  | ||||||
|  | @ -207,7 +207,7 @@ static void record_rename_pair(struct diff_queue_struct *renq, | ||||||
| 	fill_filespec(two, dst->sha1, dst->mode); | 	fill_filespec(two, dst->sha1, dst->mode); | ||||||
|  |  | ||||||
| 	dp = diff_queue(renq, one, two); | 	dp = diff_queue(renq, one, two); | ||||||
| 	dp->score = score ? : 1; /* make sure it is at least 1 */ | 	dp->score = score; | ||||||
| 	dp->source_stays = rename_src[src_index].src_stays; | 	dp->source_stays = rename_src[src_index].src_stays; | ||||||
| 	rename_dst[dst_index].pair = dp; | 	rename_dst[dst_index].pair = dp; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -39,15 +39,15 @@ extern void diff_free_filespec_data(struct diff_filespec *); | ||||||
| struct diff_filepair { | struct diff_filepair { | ||||||
| 	struct diff_filespec *one; | 	struct diff_filespec *one; | ||||||
| 	struct diff_filespec *two; | 	struct diff_filespec *two; | ||||||
| 	unsigned short int score; /* only valid when one and two are | 	unsigned short int score; | ||||||
| 				   * different paths |  | ||||||
| 				   */ |  | ||||||
| 	char source_stays; /* all of R/C are copies */ | 	char source_stays; /* all of R/C are copies */ | ||||||
| 	char status; /* M C R N D U (see Documentation/diff-format.txt) */ | 	char status; /* M C R N D U (see Documentation/diff-format.txt) */ | ||||||
| }; | }; | ||||||
| #define DIFF_PAIR_UNMERGED(p) \ | #define DIFF_PAIR_UNMERGED(p) \ | ||||||
| 	(!DIFF_FILE_VALID((p)->one) && !DIFF_FILE_VALID((p)->two)) | 	(!DIFF_FILE_VALID((p)->one) && !DIFF_FILE_VALID((p)->two)) | ||||||
|  |  | ||||||
|  | #define DIFF_PAIR_RENAME(p) (strcmp((p)->one->path, (p)->two->path)) | ||||||
|  |  | ||||||
| #define DIFF_PAIR_TYPE_CHANGED(p) \ | #define DIFF_PAIR_TYPE_CHANGED(p) \ | ||||||
| 	((S_IFMT & (p)->one->mode) != (S_IFMT & (p)->two->mode)) | 	((S_IFMT & (p)->one->mode) != (S_IFMT & (p)->two->mode)) | ||||||
|  |  | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano