Add support for lightweight tags
There is nothing bad about a tag that has no tag-object, but the old code didn't handle such tags correctly. Fix it. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
这个提交包含在:
		
							
								
								
									
										4
									
								
								git.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								git.h
									
									
									
									
									
								
							| @@ -278,6 +278,10 @@ struct object { | ||||
| }; | ||||
|  | ||||
|  | ||||
| /** Returns the object, having parsed it to find out what it is. **/ | ||||
| struct object *parse_object(const unsigned char *sha1); | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * from git:tree.h | ||||
|  */ | ||||
|   | ||||
							
								
								
									
										52
									
								
								ui-summary.c
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								ui-summary.c
									
									
									
									
									
								
							| @@ -47,16 +47,42 @@ static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1, | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
|  | ||||
| static void cgit_print_object_ref(struct object *obj) | ||||
| { | ||||
| 	char *page, *url; | ||||
|  | ||||
| 	if (obj->type == OBJ_COMMIT) | ||||
| 		page = "commit"; | ||||
| 	else if (obj->type == OBJ_TREE) | ||||
| 		page = "tree"; | ||||
| 	else | ||||
| 		page = "view"; | ||||
|  | ||||
| 	url = cgit_pageurl(cgit_query_repo, page,  | ||||
| 			   fmt("id=%s", sha1_to_hex(obj->sha1))); | ||||
| 	html_link_open(url, NULL, NULL); | ||||
| 	htmlf("%s %s", type_names[obj->type],  | ||||
| 	      sha1_to_hex(obj->sha1)); | ||||
| 	html_link_close(); | ||||
| } | ||||
|  | ||||
| static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1, | ||||
| 				int flags, void *cb_data) | ||||
| { | ||||
| 	struct tag *tag; | ||||
| 	struct taginfo *info; | ||||
| 	char buf[256], *page, *url; | ||||
|  | ||||
| 	struct object *obj; | ||||
| 	char buf[256], *url; | ||||
|   | ||||
| 	strncpy(buf, refname, sizeof(buf)); | ||||
| 	tag = lookup_tag(sha1); | ||||
| 	if (tag && !parse_tag(tag) && (info = cgit_parse_tag(tag))){ | ||||
| 	obj = parse_object(sha1); | ||||
| 	if (!obj) | ||||
| 		return 1; | ||||
| 	if (obj->type == OBJ_TAG) { | ||||
| 		tag = lookup_tag(sha1); | ||||
| 		if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) | ||||
| 			return 2; | ||||
| 		html("<tr><td>"); | ||||
| 		url = cgit_pageurl(cgit_query_repo, "view",  | ||||
| 				   fmt("id=%s", sha1_to_hex(sha1))); | ||||
| @@ -70,25 +96,13 @@ static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1, | ||||
| 		if (info->tagger) | ||||
| 			html(info->tagger); | ||||
| 		html("</td><td>"); | ||||
| 		if (tag->tagged->type == OBJ_COMMIT) | ||||
| 			page = "commit"; | ||||
| 		else if (tag->tagged->type == OBJ_TREE) | ||||
| 			page = "tree"; | ||||
| 		else | ||||
| 			page = "view"; | ||||
| 		 | ||||
| 		url = cgit_pageurl(cgit_query_repo, page,  | ||||
| 				   fmt("id=%s", sha1_to_hex(tag->tagged->sha1))); | ||||
| 		html_link_open(url, NULL, NULL); | ||||
| 		htmlf("%s %s", type_names[tag->tagged->type],  | ||||
| 		      sha1_to_hex(tag->tagged->sha1)); | ||||
| 		html_link_close(); | ||||
| 		cgit_print_object_ref(tag->tagged); | ||||
| 		html("</td></tr>\n"); | ||||
| 	} else { | ||||
| 		html("<tr><td>"); | ||||
| 		html_txt(buf); | ||||
| 		html("</td><td colspan='3'>"); | ||||
| 		htmlf("*** bad ref %s ***", sha1_to_hex(sha1)); | ||||
| 		html("</td><td colspan='2'/><td>"); | ||||
| 		cgit_print_object_ref(obj); | ||||
| 		html("</td></tr>\n"); | ||||
| 	} | ||||
| 	return 0; | ||||
|   | ||||
		在新工单中引用
	
	屏蔽一个用户
	 Lars Hjemli
					Lars Hjemli