#include "configfile.h"
#include "html.h"
#include "ui-shared.h"
+#include "scan-tree.h"
const char *cgit_version = CGIT_VERSION;
} 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.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")) {
+ ctx.qry.showmsg = atoi(value);
}
}
ctx->page.title = fmt("%s - %s", ctx->repo->name, ctx->repo->desc);
if (!ctx->qry.head) {
+ ctx->qry.nohead = 1;
ctx->qry.head = find_default_branch(ctx->repo);
ctx->repo->defbranch = ctx->qry.head;
}
cmd = cgit_get_cmd(ctx);
if (!cmd) {
ctx->page.title = "cgit error";
- ctx->repo = NULL;
cgit_print_http_headers(ctx);
cgit_print_docstart(ctx);
cgit_print_pageheader(ctx);
cgit_print_docend();
}
+int cmp_repos(const void *a, const void *b)
+{
+ const struct cgit_repo *ra = a, *rb = b;
+ return strcmp(ra->url, rb->url);
+}
+
+void print_repo(struct cgit_repo *repo)
+{
+ printf("repo.url=%s\n", repo->url);
+ printf("repo.name=%s\n", repo->name);
+ printf("repo.path=%s\n", repo->path);
+ if (repo->owner)
+ printf("repo.owner=%s\n", repo->owner);
+ if (repo->desc)
+ printf("repo.desc=%s\n", repo->desc);
+ if (repo->readme)
+ printf("repo.readme=%s\n", repo->readme);
+ printf("\n");
+}
+
+void print_repolist(struct cgit_repolist *list)
+{
+ int i;
+
+ for(i = 0; i < list->count; i++)
+ print_repo(&list->repos[i]);
+}
+
+
static void cgit_parse_args(int argc, const char **argv)
{
int i;
+ int scan = 0;
for (i = 1; i < argc; i++) {
if (!strncmp(argv[i], "--cache=", 8)) {
if (!strncmp(argv[i], "--ofs=", 6)) {
ctx.qry.ofs = atoi(argv[i]+6);
}
+ if (!strncmp(argv[i], "--scan-tree=", 12)) {
+ scan++;
+ scan_tree(argv[i] + 12);
+ }
+ }
+ if (scan) {
+ qsort(cgit_repolist.repos, cgit_repolist.count,
+ sizeof(struct cgit_repo), cmp_repos);
+ print_repolist(&cgit_repolist);
+ exit(0);
}
}
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_repolist.count = 0;
cgit_repolist.repos = NULL;
- parse_configfile(cgit_config_env ? cgit_config_env : CGIT_CONFIG,
- config_cb);
- ctx.repo = NULL;
if (getenv("SCRIPT_NAME"))
ctx.cfg.script_name = xstrdup(getenv("SCRIPT_NAME"));
if (getenv("QUERY_STRING"))
ctx.qry.raw = xstrdup(getenv("QUERY_STRING"));
cgit_parse_args(argc, argv);
+ parse_configfile(cgit_config_env ? cgit_config_env : CGIT_CONFIG,
+ config_cb);
+ ctx.repo = NULL;
http_parse_querystring(ctx.qry.raw, querystring_cb);
+ /* If virtual-root isn't specified in cgitrc, lets pretend
+ * that virtual-root equals SCRIPT_NAME.
+ */
+ if (!ctx.cfg.virtual_root)
+ ctx.cfg.virtual_root = ctx.cfg.script_name;
+
+ /* If no url parameter is specified on the querystring, lets
+ * 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).
+ */
+ path = getenv("PATH_INFO");
+ if (!ctx.qry.url && 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)