]> gitweb.ps.run Git - ps-cgit/commitdiff
Merge branch 'stable'
authorLars Hjemli <hjemli@gmail.com>
Sat, 18 Jun 2011 12:59:51 +0000 (14:59 +0200)
committerLars Hjemli <hjemli@gmail.com>
Sat, 18 Jun 2011 12:59:51 +0000 (14:59 +0200)
1  2 
cgit.c

diff --combined cgit.c
index 51ca78a6cd56cc1f9c338636c70dcb139f8cf47f,5259f56fcd9cc09ebf152bcc163fd2801427afa4..b7807ad81a71d34d1a647a282dd5eb71dc72ef0c
--- 1/cgit.c
--- 2/cgit.c
+++ b/cgit.c
@@@ -26,27 -26,14 +26,27 @@@ void add_mimetype(const char *name, con
        item->util = xstrdup(value);
  }
  
 -struct cgit_filter *new_filter(const char *cmd, int extra_args)
 +struct cgit_filter *new_filter(const char *cmd, filter_type filtertype)
  {
        struct cgit_filter *f;
        int args_size = 0;
 +      int extra_args;
  
        if (!cmd || !cmd[0])
                return NULL;
  
 +      switch (filtertype) {
 +              case SOURCE:
 +                      extra_args = 1;
 +                      break;
 +
 +              case ABOUT:
 +              case COMMIT:
 +              default:
 +                      extra_args = 0;
 +                      break;
 +      }
 +
        f = xmalloc(sizeof(struct cgit_filter));
        f->cmd = xstrdup(cmd);
        args_size = (2 + extra_args) * sizeof(char *);
@@@ -96,11 -83,11 +96,11 @@@ void repo_config(struct cgit_repo *repo
                repo->logo_link = xstrdup(value);
        else if (ctx.cfg.enable_filter_overrides) {
                if (!strcmp(name, "about-filter"))
 -                      repo->about_filter = new_filter(value, 0);
 +                      repo->about_filter = new_filter(value, ABOUT);
                else if (!strcmp(name, "commit-filter"))
 -                      repo->commit_filter = new_filter(value, 0);
 +                      repo->commit_filter = new_filter(value, COMMIT);
                else if (!strcmp(name, "source-filter"))
 -                      repo->source_filter = new_filter(value, 1);
 +                      repo->source_filter = new_filter(value, SOURCE);
        }
  }
  
@@@ -160,8 -147,6 +160,8 @@@ void config_cb(const char *name, const 
                ctx.cfg.enable_filter_overrides = atoi(value);
        else if (!strcmp(name, "enable-gitweb-owner"))
                ctx.cfg.enable_gitweb_owner = atoi(value);
 +      else if (!strcmp(name, "enable-http-clone"))
 +              ctx.cfg.enable_http_clone = atoi(value);
        else if (!strcmp(name, "enable-index-links"))
                ctx.cfg.enable_index_links = atoi(value);
        else if (!strcmp(name, "enable-commit-graph"))
        else if (!strcmp(name, "cache-dynamic-ttl"))
                ctx.cfg.cache_dynamic_ttl = atoi(value);
        else if (!strcmp(name, "about-filter"))
 -              ctx.cfg.about_filter = new_filter(value, 0);
 +              ctx.cfg.about_filter = new_filter(value, ABOUT);
        else if (!strcmp(name, "commit-filter"))
 -              ctx.cfg.commit_filter = new_filter(value, 0);
 +              ctx.cfg.commit_filter = new_filter(value, COMMIT);
        else if (!strcmp(name, "embedded"))
                ctx.cfg.embedded = atoi(value);
        else if (!strcmp(name, "max-atom-items"))
        else if (!strcmp(name, "section-from-path"))
                ctx.cfg.section_from_path = atoi(value);
        else if (!strcmp(name, "source-filter"))
 -              ctx.cfg.source_filter = new_filter(value, 1);
 +              ctx.cfg.source_filter = new_filter(value, SOURCE);
        else if (!strcmp(name, "summary-log"))
                ctx.cfg.summary_log = atoi(value);
        else if (!strcmp(name, "summary-branches"))
                ctx.cfg.robots = xstrdup(value);
        else if (!strcmp(name, "clone-prefix"))
                ctx.cfg.clone_prefix = xstrdup(value);
 +      else if (!strcmp(name, "clone-url"))
 +              ctx.cfg.clone_url = xstrdup(value);
        else if (!strcmp(name, "local-time"))
                ctx.cfg.local_time = atoi(value);
        else if (!prefixcmp(name, "mimetype."))
@@@ -329,7 -312,6 +329,7 @@@ static void prepare_context(struct cgit
        ctx->cfg.logo = "/cgit.png";
        ctx->cfg.local_time = 0;
        ctx->cfg.enable_gitweb_owner = 1;
 +      ctx->cfg.enable_http_clone = 1;
        ctx->cfg.enable_tree_linenumbers = 1;
        ctx->cfg.max_repo_count = 50;
        ctx->cfg.max_commit_count = 50;
@@@ -421,13 -403,17 +421,17 @@@ static int prepare_repo_cmd(struct cgit
        char *tmp;
        unsigned char sha1[20];
        int nongit = 0;
+       int rc;
  
        setenv("GIT_DIR", ctx->repo->path, 1);
        setup_git_directory_gently(&nongit);
        if (nongit) {
+               rc = errno;
                ctx->page.title = fmt("%s - %s", ctx->cfg.root_title,
                                      "config error");
-               tmp = fmt("Not a git repository: '%s'", ctx->repo->path);
+               tmp = fmt("Failed to open %s: %s",
+                         ctx->repo->name,
+                         rc ? strerror(rc) : "Not a valid git repository");
                ctx->repo = NULL;
                cgit_print_http_headers(ctx);
                cgit_print_docstart(ctx);
                tmp = xstrdup(ctx->qry.head);
                ctx->qry.head = ctx->repo->defbranch;
                ctx->page.status = 404;
 -              ctx->page.statusmsg = "not found";
 +              ctx->page.statusmsg = "Not found";
                cgit_print_http_headers(ctx);
                cgit_print_docstart(ctx);
                cgit_print_pageheader(ctx);
                cgit_print_docend();
                return 1;
        }
 +      cgit_prepare_repo_env(ctx->repo);
        return 0;
  }
  
@@@ -477,8 -462,6 +481,8 @@@ static void process_request(void *cbdat
        cmd = cgit_get_cmd(ctx);
        if (!cmd) {
                ctx->page.title = "cgit error";
 +              ctx->page.status = 404;
 +              ctx->page.statusmsg = "Not found";
                cgit_print_http_headers(ctx);
                cgit_print_docstart(ctx);
                cgit_print_pageheader(ctx);
                return;
        }
  
 +      if (!ctx->cfg.enable_http_clone && cmd->is_clone) {
 +              html_status(404, "Not found", 0);
 +              return;
 +      }
 +
        /* If cmd->want_vpath is set, assume ctx->qry.path contains a "virtual"
         * in-project path limit to be made available at ctx->qry.vpath.
         * Otherwise, no path limit is in effect (ctx->qry.vpath = NULL).