|
|
|
@ -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); |
|
|
|
|