Add support for sorting by Age in the repolist
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
这个提交包含在:
		
							
								
								
									
										2
									
								
								cgit.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								cgit.c
									
									
									
									
									
								
							| @@ -154,6 +154,8 @@ static void querystring_cb(const char *name, const char *value) | ||||
| 		ctx.qry.name = xstrdup(value); | ||||
| 	} else if (!strcmp(name, "mimetype")) { | ||||
| 		ctx.qry.mimetype = xstrdup(value); | ||||
| 	} else if (!strcmp(name, "s")){ | ||||
| 		ctx.qry.sort = xstrdup(value); | ||||
| 	} | ||||
| } | ||||
|  | ||||
|   | ||||
							
								
								
									
										1
									
								
								cgit.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								cgit.h
									
									
									
									
									
								
							| @@ -121,6 +121,7 @@ struct cgit_query { | ||||
| 	char *url; | ||||
| 	int   ofs; | ||||
| 	int nohead; | ||||
| 	char *sort; | ||||
| }; | ||||
|  | ||||
| struct cgit_config { | ||||
|   | ||||
| @@ -75,7 +75,7 @@ void print_header(int columns) | ||||
| 	     "<th class='left'>Name</th>" | ||||
| 	     "<th class='left'>Description</th>" | ||||
| 	     "<th class='left'>Owner</th>" | ||||
| 	     "<th class='left'>Idle</th>"); | ||||
| 	     "<th class='left'><a href=\"?s=1\">Idle</a></th>"); | ||||
| 	if (ctx.cfg.enable_index_links) | ||||
| 		html("<th class='left'>Links</th>"); | ||||
| 	html("</tr>\n"); | ||||
| @@ -92,6 +92,35 @@ void print_pager(int items, int pagelen, char *search) | ||||
| 	html("</div>"); | ||||
| } | ||||
|  | ||||
| static int cgit_reposort_modtime(const void *a, const void *b) | ||||
| { | ||||
| 	const struct cgit_repo *r1 = a; | ||||
| 	const struct cgit_repo *r2 = b; | ||||
| 	char *path; | ||||
| 	struct stat s; | ||||
| 	time_t t1, t2; | ||||
| 	path = fmt("%s/%s", r1->path, ctx.cfg.agefile); | ||||
| 	if (stat(path, &s) == 0) { | ||||
| 		t1 = read_agefile(path); | ||||
| 	} else { | ||||
| 		path = fmt("%s/refs/heads/%s", r1->path, r1->defbranch); | ||||
| 		if (stat(path, &s) != 0) | ||||
| 			return 0; | ||||
| 		t1 =s.st_mtime; | ||||
| 	} | ||||
|  | ||||
| 	path = fmt("%s/%s", r2->path, ctx.cfg.agefile); | ||||
| 	if (stat(path, &s) == 0) { | ||||
| 		t2 = read_agefile(path); | ||||
| 	} else { | ||||
| 		path = fmt("%s/refs/heads/%s", r2->path, r2->defbranch); | ||||
| 		if (stat(path, &s) != 0) | ||||
| 			return 0; | ||||
| 		t2 =s.st_mtime; | ||||
| 	} | ||||
| 	return t2-t1; | ||||
| } | ||||
|  | ||||
| void cgit_print_repolist() | ||||
| { | ||||
| 	int i, columns = 4, hits = 0, header = 0; | ||||
| @@ -108,6 +137,9 @@ void cgit_print_repolist() | ||||
| 	if (ctx.cfg.index_header) | ||||
| 		html_include(ctx.cfg.index_header); | ||||
|  | ||||
| 	if(ctx.qry.sort) | ||||
| 		qsort(cgit_repolist.repos,cgit_repolist.count,sizeof(struct cgit_repo),cgit_reposort_modtime); | ||||
|  | ||||
| 	html("<table summary='repository list' class='list nowrap'>"); | ||||
| 	for (i=0; i<cgit_repolist.count; i++) { | ||||
| 		ctx.repo = &cgit_repolist.repos[i]; | ||||
| @@ -120,10 +152,11 @@ void cgit_print_repolist() | ||||
| 			continue; | ||||
| 		if (!header++) | ||||
| 			print_header(columns); | ||||
| 		if ((last_group == NULL && ctx.repo->group != NULL) || | ||||
| 		if (!ctx.qry.sort && | ||||
| 		    ((last_group == NULL && ctx.repo->group != NULL) || | ||||
| 		    (last_group != NULL && ctx.repo->group == NULL) || | ||||
| 		    (last_group != NULL && ctx.repo->group != NULL && | ||||
| 		     strcmp(ctx.repo->group, last_group))) { | ||||
| 		     strcmp(ctx.repo->group, last_group)))) { | ||||
| 			htmlf("<tr class='nohover'><td colspan='%d' class='repogroup'>", | ||||
| 			      columns); | ||||
| 			html_txt(ctx.repo->group); | ||||
|   | ||||
		在新工单中引用
	
	屏蔽一个用户
	 Benjamin Close
					Benjamin Close