]> gitweb.ps.run Git - ps-cgit/blobdiff - ui-repolist.c
ui-repolist: extract repo visibility criteria to separate function
[ps-cgit] / ui-repolist.c
index edefc4c713145c6f67515738cfe468a2959ee478..4912fa55bd5628791f6bc4685f17f4219cc264bf 100644 (file)
 #include "ui-repolist.h"
 #include "html.h"
 #include "ui-shared.h"
-#include <strings.h>
 
 static time_t read_agefile(char *path)
 {
        time_t result;
        size_t size;
-       char *buf;
+       char *buf = NULL;
        struct strbuf date_buf = STRBUF_INIT;
 
-       if (readfile(path, &buf, &size))
+       if (readfile(path, &buf, &size)) {
+               free(buf);
                return -1;
+       }
 
        if (parse_date(buf, &date_buf) == 0)
                result = strtoul(date_buf.buf, NULL, 10);
@@ -105,16 +106,27 @@ static int is_in_url(struct cgit_repo *repo)
        return 0;
 }
 
+static int is_visible(struct cgit_repo *repo)
+{
+       if (repo->hide || repo->ignore)
+               return 0;
+       if (!(is_match(repo) && is_in_url(repo)))
+               return 0;
+       return 1;
+}
+
 static void print_sort_header(const char *title, const char *sort)
 {
+       char *currenturl = cgit_currenturl();
        html("<th class='left'><a href='");
-       html_attr(cgit_currenturl());
+       html_attr(currenturl);
        htmlf("?s=%s", sort);
        if (ctx.qry.search) {
                html("&amp;q=");
                html_url_arg(ctx.qry.search);
        }
        htmlf("'>%s</a></th>", title);
+       free(currenturl);
 }
 
 static void print_header(void)
@@ -275,9 +287,7 @@ void cgit_print_repolist(void)
        html("<table summary='repository list' class='list nowrap'>");
        for (i = 0; i < cgit_repolist.count; i++) {
                ctx.repo = &cgit_repolist.repos[i];
-               if (ctx.repo->hide || ctx.repo->ignore)
-                       continue;
-               if (!(is_match(ctx.repo) && is_in_url(ctx.repo)))
+               if (!is_visible(ctx.repo))
                        continue;
                hits++;
                if (hits <= ctx.qry.ofs)
@@ -346,9 +356,12 @@ void cgit_print_repolist(void)
 
 void cgit_print_site_readme(void)
 {
+       cgit_print_layout_start();
        if (!ctx.cfg.root_readme)
-               return;
+               goto done;
        cgit_open_filter(ctx.cfg.about_filter, ctx.cfg.root_readme);
        html_include(ctx.cfg.root_readme);
        cgit_close_filter(ctx.cfg.about_filter);
+done:
+       cgit_print_layout_end();
 }