Extract filepair_cb from ui-patch.c
Move filepair_cb() from ui-patch.c to ui-shared.c and rename it to filepair_cb_raw(). This callback will be used in ui-diff.c in a follow-up patch. Note that it is not straightforward to extract filepair_cb() from ui-diff.c which is why it is not done here as well. Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
This commit is contained in:
		 Lukas Fleischer
					Lukas Fleischer
				
			
				
					committato da
					
						 Jason A. Donenfeld
						Jason A. Donenfeld
					
				
			
			
				
	
			
			
			 Jason A. Donenfeld
						Jason A. Donenfeld
					
				
			
						parent
						
							cf152604c3
						
					
				
				
					commit
					747b035dda
				
			
							
								
								
									
										74
									
								
								ui-patch.c
									
									
									
									
									
								
							
							
						
						
									
										74
									
								
								ui-patch.c
									
									
									
									
									
								
							| @@ -11,78 +11,6 @@ | |||||||
| #include "html.h" | #include "html.h" | ||||||
| #include "ui-shared.h" | #include "ui-shared.h" | ||||||
|  |  | ||||||
| static void print_line(char *line, int len) |  | ||||||
| { |  | ||||||
| 	char c = line[len-1]; |  | ||||||
|  |  | ||||||
| 	line[len-1] = '\0'; |  | ||||||
| 	htmlf("%s\n", line); |  | ||||||
| 	line[len-1] = c; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static void header(unsigned char *sha1, char *path1, int mode1, |  | ||||||
| 		   unsigned char *sha2, char *path2, int mode2) |  | ||||||
| { |  | ||||||
| 	char *abbrev1, *abbrev2; |  | ||||||
| 	int subproject; |  | ||||||
|  |  | ||||||
| 	subproject = (S_ISGITLINK(mode1) || S_ISGITLINK(mode2)); |  | ||||||
| 	htmlf("diff --git a/%s b/%s\n", path1, path2); |  | ||||||
|  |  | ||||||
| 	if (mode1 == 0) |  | ||||||
| 		htmlf("new file mode %.6o\n", mode2); |  | ||||||
|  |  | ||||||
| 	if (mode2 == 0) |  | ||||||
| 		htmlf("deleted file mode %.6o\n", mode1); |  | ||||||
|  |  | ||||||
| 	if (!subproject) { |  | ||||||
| 		abbrev1 = xstrdup(find_unique_abbrev(sha1, DEFAULT_ABBREV)); |  | ||||||
| 		abbrev2 = xstrdup(find_unique_abbrev(sha2, DEFAULT_ABBREV)); |  | ||||||
| 		htmlf("index %s..%s", abbrev1, abbrev2); |  | ||||||
| 		free(abbrev1); |  | ||||||
| 		free(abbrev2); |  | ||||||
| 		if (mode1 != 0 && mode2 != 0) { |  | ||||||
| 			htmlf(" %.6o", mode1); |  | ||||||
| 			if (mode2 != mode1) |  | ||||||
| 				htmlf("..%.6o", mode2); |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		if (is_null_sha1(sha1)) { |  | ||||||
| 			path1 = "dev/null"; |  | ||||||
| 			htmlf("\n--- /%s\n", path1); |  | ||||||
| 		} else |  | ||||||
| 			htmlf("\n--- a/%s\n", path1); |  | ||||||
|  |  | ||||||
| 		if (is_null_sha1(sha2)) { |  | ||||||
| 			path2 = "dev/null"; |  | ||||||
| 			htmlf("+++ /%s\n", path2); |  | ||||||
| 		} else |  | ||||||
| 			htmlf("+++ b/%s\n", path2); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static void filepair_cb(struct diff_filepair *pair) |  | ||||||
| { |  | ||||||
| 	unsigned long old_size = 0; |  | ||||||
| 	unsigned long new_size = 0; |  | ||||||
| 	int binary = 0; |  | ||||||
|  |  | ||||||
| 	header(pair->one->sha1, pair->one->path, pair->one->mode, |  | ||||||
| 	       pair->two->sha1, pair->two->path, pair->two->mode); |  | ||||||
| 	if (S_ISGITLINK(pair->one->mode) || S_ISGITLINK(pair->two->mode)) { |  | ||||||
| 		if (S_ISGITLINK(pair->one->mode)) |  | ||||||
| 			print_line(fmt("-Subproject %s", sha1_to_hex(pair->one->sha1)), 52); |  | ||||||
| 		if (S_ISGITLINK(pair->two->mode)) |  | ||||||
| 			print_line(fmt("+Subproject %s", sha1_to_hex(pair->two->sha1)), 52); |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 	if (cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size, |  | ||||||
| 			    &new_size, &binary, 0, 0, print_line)) |  | ||||||
| 		html("Error running diff"); |  | ||||||
| 	if (binary) |  | ||||||
| 		html("Binary files differ\n"); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void cgit_print_patch(char *hex, const char *prefix) | void cgit_print_patch(char *hex, const char *prefix) | ||||||
| { | { | ||||||
| 	struct commit *commit; | 	struct commit *commit; | ||||||
| @@ -130,7 +58,7 @@ void cgit_print_patch(char *hex, const char *prefix) | |||||||
| 	html("---\n"); | 	html("---\n"); | ||||||
| 	if (prefix) | 	if (prefix) | ||||||
| 		htmlf("(limited to '%s')\n\n", prefix); | 		htmlf("(limited to '%s')\n\n", prefix); | ||||||
| 	cgit_diff_tree(old_sha1, sha1, filepair_cb, prefix, 0); | 	cgit_diff_tree(old_sha1, sha1, filepair_cb_raw, prefix, 0); | ||||||
| 	html("--\n"); | 	html("--\n"); | ||||||
| 	htmlf("cgit %s\n", cgit_version); | 	htmlf("cgit %s\n", cgit_version); | ||||||
| 	cgit_free_commitinfo(info); | 	cgit_free_commitinfo(info); | ||||||
|   | |||||||
							
								
								
									
										72
									
								
								ui-shared.c
									
									
									
									
									
								
							
							
						
						
									
										72
									
								
								ui-shared.c
									
									
									
									
									
								
							| @@ -950,3 +950,75 @@ void cgit_print_snapshot_links(const char *repo, const char *head, | |||||||
| 	} | 	} | ||||||
| 	strbuf_release(&filename); | 	strbuf_release(&filename); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static void print_line_raw(char *line, int len) | ||||||
|  | { | ||||||
|  | 	char c = line[len-1]; | ||||||
|  |  | ||||||
|  | 	line[len-1] = '\0'; | ||||||
|  | 	htmlf("%s\n", line); | ||||||
|  | 	line[len-1] = c; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void header_raw(unsigned char *sha1, char *path1, int mode1, | ||||||
|  | 		       unsigned char *sha2, char *path2, int mode2) | ||||||
|  | { | ||||||
|  | 	char *abbrev1, *abbrev2; | ||||||
|  | 	int subproject; | ||||||
|  |  | ||||||
|  | 	subproject = (S_ISGITLINK(mode1) || S_ISGITLINK(mode2)); | ||||||
|  | 	htmlf("diff --git a/%s b/%s\n", path1, path2); | ||||||
|  |  | ||||||
|  | 	if (mode1 == 0) | ||||||
|  | 		htmlf("new file mode %.6o\n", mode2); | ||||||
|  |  | ||||||
|  | 	if (mode2 == 0) | ||||||
|  | 		htmlf("deleted file mode %.6o\n", mode1); | ||||||
|  |  | ||||||
|  | 	if (!subproject) { | ||||||
|  | 		abbrev1 = xstrdup(find_unique_abbrev(sha1, DEFAULT_ABBREV)); | ||||||
|  | 		abbrev2 = xstrdup(find_unique_abbrev(sha2, DEFAULT_ABBREV)); | ||||||
|  | 		htmlf("index %s..%s", abbrev1, abbrev2); | ||||||
|  | 		free(abbrev1); | ||||||
|  | 		free(abbrev2); | ||||||
|  | 		if (mode1 != 0 && mode2 != 0) { | ||||||
|  | 			htmlf(" %.6o", mode1); | ||||||
|  | 			if (mode2 != mode1) | ||||||
|  | 				htmlf("..%.6o", mode2); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if (is_null_sha1(sha1)) { | ||||||
|  | 			path1 = "dev/null"; | ||||||
|  | 			htmlf("\n--- /%s\n", path1); | ||||||
|  | 		} else | ||||||
|  | 			htmlf("\n--- a/%s\n", path1); | ||||||
|  |  | ||||||
|  | 		if (is_null_sha1(sha2)) { | ||||||
|  | 			path2 = "dev/null"; | ||||||
|  | 			htmlf("+++ /%s\n", path2); | ||||||
|  | 		} else | ||||||
|  | 			htmlf("+++ b/%s\n", path2); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void filepair_cb_raw(struct diff_filepair *pair) | ||||||
|  | { | ||||||
|  | 	unsigned long old_size = 0; | ||||||
|  | 	unsigned long new_size = 0; | ||||||
|  | 	int binary = 0; | ||||||
|  |  | ||||||
|  | 	header_raw(pair->one->sha1, pair->one->path, pair->one->mode, | ||||||
|  | 		   pair->two->sha1, pair->two->path, pair->two->mode); | ||||||
|  | 	if (S_ISGITLINK(pair->one->mode) || S_ISGITLINK(pair->two->mode)) { | ||||||
|  | 		if (S_ISGITLINK(pair->one->mode)) | ||||||
|  | 			print_line_raw(fmt("-Subproject %s", sha1_to_hex(pair->one->sha1)), 52); | ||||||
|  | 		if (S_ISGITLINK(pair->two->mode)) | ||||||
|  | 			print_line_raw(fmt("+Subproject %s", sha1_to_hex(pair->two->sha1)), 52); | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  | 	if (cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size, | ||||||
|  | 			    &new_size, &binary, 0, 0, print_line_raw)) | ||||||
|  | 		html("Error running diff"); | ||||||
|  | 	if (binary) | ||||||
|  | 		html("Binary files differ\n"); | ||||||
|  | } | ||||||
|   | |||||||
| @@ -67,4 +67,5 @@ extern void cgit_print_snapshot_links(const char *repo, const char *head, | |||||||
| 				      const char *hex, int snapshots); | 				      const char *hex, int snapshots); | ||||||
| extern void cgit_add_hidden_formfields(int incl_head, int incl_search, | extern void cgit_add_hidden_formfields(int incl_head, int incl_search, | ||||||
| 				       const char *page); | 				       const char *page); | ||||||
|  | extern void filepair_cb_raw(struct diff_filepair *pair); | ||||||
| #endif /* UI_SHARED_H */ | #endif /* UI_SHARED_H */ | ||||||
|   | |||||||
		Fai riferimento in un nuovo problema
	
	Block a user