]> git.cameronkatri.com Git - cgit.git/blobdiff - cgit.c
cgit: replace 'unsigned char sha1[20]' with 'struct object_id oid'
[cgit.git] / cgit.c
diff --git a/cgit.c b/cgit.c
index d84b4be370bb17136430ffe40b2aa1e7eb677232..9f5a80fe9ce76e01c945854729dc697690780643 100644 (file)
--- a/cgit.c
+++ b/cgit.c
@@ -41,6 +41,8 @@ static void repo_config(struct cgit_repo *repo, const char *name, const char *va
                repo->desc = xstrdup(value);
        else if (!strcmp(name, "owner"))
                repo->owner = xstrdup(value);
+       else if (!strcmp(name, "homepage"))
+               repo->homepage = xstrdup(value);
        else if (!strcmp(name, "defbranch"))
                repo->defbranch = xstrdup(value);
        else if (!strcmp(name, "snapshots"))
@@ -55,6 +57,8 @@ static void repo_config(struct cgit_repo *repo, const char *name, const char *va
                repo->enable_remote_branches = atoi(value);
        else if (!strcmp(name, "enable-subject-links"))
                repo->enable_subject_links = atoi(value);
+       else if (!strcmp(name, "enable-html-serving"))
+               repo->enable_html_serving = atoi(value);
        else if (!strcmp(name, "branch-sort")) {
                if (!strcmp(value, "age"))
                        repo->branch_sort = 1;
@@ -110,7 +114,7 @@ static void config_cb(const char *name, const char *value)
                ctx.repo->path = trim_end(value, '/');
        else if (ctx.repo && starts_with(name, "repo."))
                repo_config(ctx.repo, name + 5, value);
-       else if (!strcmp(name, "readme") && value != NULL)
+       else if (!strcmp(name, "readme"))
                string_list_append(&ctx.cfg.readme, xstrdup(value));
        else if (!strcmp(name, "root-title"))
                ctx.cfg.root_title = xstrdup(value);
@@ -170,6 +174,8 @@ static void config_cb(const char *name, const char *value)
                ctx.cfg.enable_remote_branches = atoi(value);
        else if (!strcmp(name, "enable-subject-links"))
                ctx.cfg.enable_subject_links = atoi(value);
+       else if (!strcmp(name, "enable-html-serving"))
+               ctx.cfg.enable_html_serving = atoi(value);
        else if (!strcmp(name, "enable-tree-linenumbers"))
                ctx.cfg.enable_tree_linenumbers = atoi(value);
        else if (!strcmp(name, "enable-git-config"))
@@ -314,8 +320,6 @@ static void querystring_cb(const char *name, const char *value)
                ctx.qry.path = trim_end(value, '/');
        } else if (!strcmp(name, "name")) {
                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);
        } else if (!strcmp(name, "showmsg")) {
@@ -467,13 +471,14 @@ static char *find_default_branch(struct cgit_repo *repo)
 static char *guess_defbranch(void)
 {
        const char *ref;
-       unsigned char sha1[20];
+       struct object_id oid;
 
-       ref = resolve_ref_unsafe("HEAD", 0, sha1, NULL);
+       ref = resolve_ref_unsafe("HEAD", 0, oid.hash, NULL);
        if (!ref || !starts_with(ref, "refs/heads/"))
                return "master";
        return xstrdup(ref + 11);
 }
+
 /* The caller must free filename and ref after calling this. */
 static inline void parse_readme(const char *readme, char **filename, char **ref, struct cgit_repo *repo)
 {
@@ -553,7 +558,7 @@ static void print_no_repo_clone_urls(const char *url)
 
 static int prepare_repo_cmd(void)
 {
-       unsigned char sha1[20];
+       struct object_id oid;
        int nongit = 0;
        int rc;
 
@@ -611,17 +616,12 @@ static int prepare_repo_cmd(void)
                return 1;
        }
 
-       if (get_sha1(ctx.qry.head, sha1)) {
-               char *tmp = xstrdup(ctx.qry.head);
-               ctx.qry.head = ctx.repo->defbranch;
-               ctx.page.status = 404;
-               ctx.page.statusmsg = "Not found";
-               cgit_print_http_headers();
-               cgit_print_docstart();
-               cgit_print_pageheader();
-               cgit_print_error("Invalid branch: %s", tmp);
-               cgit_print_docend();
-               free(tmp);
+       if (get_oid(ctx.qry.head, &oid)) {
+               char *old_head = ctx.qry.head;
+               ctx.qry.head = xstrdup(ctx.repo->defbranch);
+               cgit_print_error_page(404, "Not found",
+                               "Invalid branch: %s", old_head);
+               free(old_head);
                return 1;
        }
        string_list_sort(&ctx.repo->submodules);
@@ -656,7 +656,7 @@ static inline void open_auth_filter(const char *function)
 static inline void authenticate_post(void)
 {
        char buffer[MAX_AUTHENTICATION_POST_BYTES];
-       int len;
+       unsigned int len;
 
        open_auth_filter("authenticate-post");
        len = ctx.env.content_length;
@@ -713,18 +713,13 @@ static void process_request(void)
        cmd = cgit_get_cmd();
        if (!cmd) {
                ctx.page.title = "cgit error";
-               ctx.page.status = 404;
-               ctx.page.statusmsg = "Not found";
-               cgit_print_http_headers();
-               cgit_print_docstart();
-               cgit_print_pageheader();
-               cgit_print_error("Invalid request");
-               cgit_print_docend();
+               cgit_print_error_page(404, "Not found", "Invalid request");
                return;
        }
 
        if (!ctx.cfg.enable_http_clone && cmd->is_clone) {
-               html_status(404, "Not found", 0);
+               ctx.page.title = "cgit error";
+               cgit_print_error_page(404, "Not found", "Invalid request");
                return;
        }
 
@@ -735,30 +730,15 @@ static void process_request(void)
        ctx.qry.vpath = cmd->want_vpath ? ctx.qry.path : NULL;
 
        if (cmd->want_repo && !ctx.repo) {
-               cgit_print_http_headers();
-               cgit_print_docstart();
-               cgit_print_pageheader();
-               cgit_print_error("No repository selected");
-               cgit_print_docend();
+               cgit_print_error_page(400, "Bad request",
+                               "No repository selected");
                return;
        }
 
        if (ctx.repo && prepare_repo_cmd())
                return;
 
-       if (cmd->pre)
-               cmd->pre();
-
-       if (cmd->want_layout) {
-               cgit_print_http_headers();
-               cgit_print_docstart();
-               cgit_print_pageheader();
-       }
-
        cmd->fn();
-
-       if (cmd->want_layout)
-               cgit_print_docend();
 }
 
 static int cmp_repos(const void *a, const void *b)
@@ -816,6 +796,8 @@ static void print_repo(FILE *f, struct cgit_repo *repo)
                fprintf(f, "repo.module-link=%s\n", repo->module_link);
        if (repo->section)
                fprintf(f, "repo.section=%s\n", repo->section);
+       if (repo->homepage)
+               fprintf(f, "repo.homepage=%s\n", repo->homepage);
        if (repo->clone_url)
                fprintf(f, "repo.clone-url=%s\n", repo->clone_url);
        fprintf(f, "repo.enable-commit-graph=%d\n",
@@ -848,6 +830,7 @@ static void print_repo(FILE *f, struct cgit_repo *repo)
                fprintf(f, "repo.logo-link=%s\n", repo->logo_link);
        fprintf(f, "repo.enable-remote-branches=%d\n", repo->enable_remote_branches);
        fprintf(f, "repo.enable-subject-links=%d\n", repo->enable_subject_links);
+       fprintf(f, "repo.enable-html-serving=%d\n", repo->enable_html_serving);
        if (repo->branch_sort == 1)
                fprintf(f, "repo.branch-sort=age\n");
        if (repo->commit_sort) {
@@ -959,7 +942,7 @@ static void cgit_parse_args(int argc, const char **argv)
 
        for (i = 1; i < argc; i++) {
                if (!strcmp(argv[i], "--version")) {
-                       printf("CGit %s | http://git.zx2c4.com/cgit/\n\nCompiled in features:\n", CGIT_VERSION);
+                       printf("CGit %s | https://git.zx2c4.com/cgit/\n\nCompiled in features:\n", CGIT_VERSION);
 #ifdef NO_LUA
                        printf("[-] ");
 #else
@@ -1044,7 +1027,7 @@ static int calc_ttl(void)
        return ctx.cfg.cache_repo_ttl;
 }
 
-int main(int argc, const char **argv)
+int cmd_main(int argc, const char **argv)
 {
        const char *path;
        int err, ttl;