ctx.cfg.robots = xstrdup(value);
else if (!strcmp(name, "clone-prefix"))
ctx.cfg.clone_prefix = xstrdup(value);
+ else if (!strcmp(name, "local-time"))
+ ctx.cfg.local_time = atoi(value);
else if (!strcmp(name, "repo.group"))
ctx.cfg.repo_group = xstrdup(value);
else if (!strcmp(name, "repo.url"))
} else if (!strcmp(name, "p")) {
ctx.qry.page = xstrdup(value);
} else if (!strcmp(name, "url")) {
+ ctx.qry.url = xstrdup(value);
cgit_parse_url(value);
} else if (!strcmp(name, "qt")) {
ctx.qry.grep = xstrdup(value);
ctx->cfg.cache_static_ttl = -1;
ctx->cfg.css = "/cgit.css";
ctx->cfg.logo = "/git-logo.png";
+ ctx->cfg.local_time = 0;
ctx->cfg.max_repo_count = 50;
ctx->cfg.max_commit_count = 50;
ctx->cfg.max_lock_attempts = 5;
- ctx->cfg.max_msg_len = 60;
- ctx->cfg.max_repodesc_len = 60;
+ ctx->cfg.max_msg_len = 80;
+ ctx->cfg.max_repodesc_len = 80;
ctx->cfg.module_link = "./?repo=%s&page=commit&id=%s";
ctx->cfg.renamelimit = -1;
ctx->cfg.robots = "index, nofollow";
ctx->cfg.root_title = "Git repository browser";
ctx->cfg.root_desc = "a fast webinterface for the git dscm";
ctx->cfg.script_name = CGIT_SCRIPT_NAME;
+ ctx->cfg.summary_branches = 10;
+ ctx->cfg.summary_log = 10;
+ ctx->cfg.summary_tags = 10;
ctx->page.mimetype = "text/html";
ctx->page.charset = PAGE_ENCODING;
ctx->page.filename = NULL;
+ ctx->page.size = 0;
ctx->page.modified = time(NULL);
ctx->page.expires = ctx->page.modified;
}
char *find_default_branch(struct cgit_repo *repo)
{
struct refmatch info;
+ char *ref;
info.req_ref = repo->defbranch;
info.first_ref = NULL;
info.match = 0;
for_each_branch_ref(find_current_ref, &info);
if (info.match)
- return info.req_ref;
+ ref = info.req_ref;
else
- return info.first_ref;
+ ref = info.first_ref;
+ if (ref)
+ ref = xstrdup(ref);
+ return ref;
}
static int prepare_repo_cmd(struct cgit_context *ctx)
ctx->page.title = fmt("%s - %s", ctx->repo->name, ctx->repo->desc);
if (!ctx->qry.head) {
- ctx->qry.head = xstrdup(find_default_branch(ctx->repo));
+ ctx->qry.head = find_default_branch(ctx->repo);
ctx->repo->defbranch = ctx->qry.head;
}
int main(int argc, const char **argv)
{
const char *cgit_config_env = getenv("CGIT_CONFIG");
+ const char *path;
+ char *qry;
int err, ttl;
prepare_context(&ctx);
cgit_parse_args(argc, argv);
http_parse_querystring(ctx.qry.raw, querystring_cb);
+ /* If virtual-root isn't specified in cgitrc and no url
+ * parameter is specified on the querystring, lets pretend
+ * that virtualroot equals SCRIPT_NAME and use PATH_INFO as
+ * url. This allows cgit to work with virtual urls without
+ * the need for rewriterules in the webserver (as long as
+ * PATH_INFO is included in the cache lookup key).
+ */
+ if (!ctx.cfg.virtual_root && !ctx.qry.url) {
+ ctx.cfg.virtual_root = ctx.cfg.script_name;
+ path = getenv("PATH_INFO");
+ if (path) {
+ if (path[0] == '/')
+ path++;
+ ctx.qry.url = xstrdup(path);
+ if (ctx.qry.raw) {
+ qry = ctx.qry.raw;
+ ctx.qry.raw = xstrdup(fmt("%s?%s", path, qry));
+ free(qry);
+ } else
+ ctx.qry.raw = ctx.qry.url;
+ cgit_parse_url(ctx.qry.url);
+ }
+ }
+
ttl = calc_ttl();
ctx.page.expires += ttl*60;
if (ctx.cfg.nocache)