author | Lars Hjemli <hjemli@gmail.com> | 2008-09-14 18:18:10 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2008-09-15 21:35:34 (UTC) |
commit | dd80ef59e7cad0146b7e4812afa3f84ea3d1c7b8 (patch) (side-by-side diff) | |
tree | 9cf8cbc2c29a6fb84fdbc0021dc9817aafac6617 | |
parent | 93397a765b9d9af11b7d10c114406e303ea4fb1c (diff) | |
download | cgit-dd80ef59e7cad0146b7e4812afa3f84ea3d1c7b8.zip cgit-dd80ef59e7cad0146b7e4812afa3f84ea3d1c7b8.tar.gz cgit-dd80ef59e7cad0146b7e4812afa3f84ea3d1c7b8.tar.bz2 |
ui-repolist: enable filtering of repos by path
If a repo url is specified but no exact match is found in the list of
repos the url will now be used as a prefix-filter.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | ui-repolist.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/ui-repolist.c b/ui-repolist.c index ee4facb..725338b 100644 --- a/ui-repolist.c +++ b/ui-repolist.c @@ -38,91 +38,100 @@ static void print_modtime(struct cgit_repo *repo) return; } path = fmt("%s/refs/heads/%s", repo->path, repo->defbranch); if (stat(path, &s) != 0) return; cgit_print_age(s.st_mtime, -1, NULL); } int is_match(struct cgit_repo *repo) { if (!ctx.qry.search) return 1; if (repo->url && strcasestr(repo->url, ctx.qry.search)) return 1; if (repo->name && strcasestr(repo->name, ctx.qry.search)) return 1; if (repo->desc && strcasestr(repo->desc, ctx.qry.search)) return 1; if (repo->owner && strcasestr(repo->owner, ctx.qry.search)) return 1; return 0; } +int is_in_url(struct cgit_repo *repo) +{ + if (!ctx.qry.url) + return 1; + if (repo->url && !prefixcmp(repo->url, ctx.qry.url)) + return 1; + return 0; +} + void print_header(int columns) { html("<tr class='nohover'>" "<th class='left'>Name</th>" "<th class='left'>Description</th>" "<th class='left'>Owner</th>" "<th class='left'>Idle</th>"); if (ctx.cfg.enable_index_links) html("<th class='left'>Links</th>"); html("</tr>\n"); } void print_pager(int items, int pagelen, char *search) { int i; html("<div class='pager'>"); for(i = 0; i * pagelen < items; i++) cgit_index_link(fmt("[%d]", i+1), fmt("Page %d", i+1), NULL, search, i * pagelen); html("</div>"); } void cgit_print_repolist() { int i, columns = 4, hits = 0, header = 0; char *last_group = NULL; if (ctx.cfg.enable_index_links) columns++; ctx.page.title = ctx.cfg.root_title; cgit_print_http_headers(&ctx); cgit_print_docstart(&ctx); cgit_print_pageheader(&ctx); if (ctx.cfg.index_header) html_include(ctx.cfg.index_header); html("<table summary='repository list' class='list nowrap'>"); for (i=0; i<cgit_repolist.count; i++) { ctx.repo = &cgit_repolist.repos[i]; - if (!is_match(ctx.repo)) + if (!(is_match(ctx.repo) && is_in_url(ctx.repo))) continue; hits++; if (hits <= ctx.qry.ofs) continue; if (hits > ctx.qry.ofs + ctx.cfg.max_repo_count) continue; if (!header++) print_header(columns); if ((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))) { htmlf("<tr class='nohover'><td colspan='%d' class='repogroup'>", columns); html_txt(ctx.repo->group); html("</td></tr>"); last_group = ctx.repo->group; } htmlf("<tr><td class='%s'>", ctx.repo->group ? "sublevel-repo" : "toplevel-repo"); html_link_open(cgit_repourl(ctx.repo->url), NULL, NULL); html_txt(ctx.repo->name); html_link_close(); html("</td><td>"); |