summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.c50
-rw-r--r--cgit.h1
-rw-r--r--shared.c3
3 files changed, 51 insertions, 3 deletions
diff --git a/cgit.c b/cgit.c
index 37cdb83..9dbc608 100644
--- a/cgit.c
+++ b/cgit.c
@@ -93,18 +93,62 @@ static void cgit_print_cache(struct cacheitem *item)
while((i=read(fd, buf, sizeof(buf))) > 0)
write(STDOUT_FILENO, buf, i);
close(fd);
}
+static void cgit_parse_args(int argc, const char **argv)
+{
+ int i;
+
+ for (i = 1; i < argc; i++) {
+ if (!strncmp(argv[i], "--root=", 7)) {
+ cgit_root = xstrdup(argv[i]+7);
+ }
+ if (!strncmp(argv[i], "--cache=", 8)) {
+ cgit_cache_root = xstrdup(argv[i]+8);
+ }
+ if (!strcmp(argv[i], "--nocache")) {
+ cgit_nocache = 1;
+ }
+ if (!strncmp(argv[i], "--query=", 8)) {
+ cgit_querystring = xstrdup(argv[i]+8);
+ }
+ if (!strncmp(argv[i], "--repo=", 7)) {
+ cgit_query_repo = xstrdup(argv[i]+7);
+ }
+ if (!strncmp(argv[i], "--page=", 7)) {
+ cgit_query_page = xstrdup(argv[i]+7);
+ }
+ if (!strncmp(argv[i], "--head=", 7)) {
+ cgit_query_head = xstrdup(argv[i]+7);
+ cgit_query_has_symref = 1;
+ }
+ if (!strncmp(argv[i], "--sha1=", 7)) {
+ cgit_query_sha1 = xstrdup(argv[i]+7);
+ cgit_query_has_sha1 = 1;
+ }
+ if (!strncmp(argv[i], "--ofs=", 6)) {
+ cgit_query_ofs = atoi(argv[i]+6);
+ }
+ }
+}
+
int main(int argc, const char **argv)
{
struct cacheitem item;
cgit_read_config("/etc/cgitrc", cgit_global_config_cb);
- cgit_querystring = xstrdup(getenv("QUERY_STRING"));
+ if (getenv("QUERY_STRING"))
+ cgit_querystring = xstrdup(getenv("QUERY_STRING"));
+ cgit_parse_args(argc, argv);
cgit_parse_query(cgit_querystring, cgit_querystring_cb);
- cgit_check_cache(&item);
- cgit_print_cache(&item);
+ if (cgit_nocache) {
+ item.fd = STDOUT_FILENO;
+ cgit_fill_cache(&item);
+ } else {
+ cgit_check_cache(&item);
+ cgit_print_cache(&item);
+ }
return 0;
}
diff --git a/cgit.h b/cgit.h
index a54f2b5..b6b60c6 100644
--- a/cgit.h
+++ b/cgit.h
@@ -30,12 +30,13 @@ extern char *cgit_root_title;
extern char *cgit_css;
extern char *cgit_logo;
extern char *cgit_logo_link;
extern char *cgit_virtual_root;
extern char *cgit_cache_root;
+extern int cgit_nocache;
extern int cgit_max_lock_attempts;
extern int cgit_cache_root_ttl;
extern int cgit_cache_repo_ttl;
extern int cgit_cache_dynamic_ttl;
extern int cgit_cache_static_ttl;
extern int cgit_cache_max_create_time;
diff --git a/shared.c b/shared.c
index 5f2a5ce..7149597 100644
--- a/shared.c
+++ b/shared.c
@@ -14,12 +14,13 @@ char *cgit_css = "/cgit.css";
char *cgit_logo = "/git-logo.png";
char *cgit_logo_link = "http://www.kernel.org/pub/software/scm/git/docs/";
char *cgit_virtual_root = NULL;
char *cgit_cache_root = "/var/cache/cgit";
+int cgit_nocache = 0;
int cgit_max_lock_attempts = 5;
int cgit_cache_root_ttl = 5;
int cgit_cache_repo_ttl = 5;
int cgit_cache_dynamic_ttl = 5;
int cgit_cache_static_ttl = -1;
int cgit_cache_max_create_time = 5;
@@ -51,12 +52,14 @@ void cgit_global_config_cb(const char *name, const char *value)
else if (!strcmp(name, "logo"))
cgit_logo = xstrdup(value);
else if (!strcmp(name, "logo-link"))
cgit_logo_link = xstrdup(value);
else if (!strcmp(name, "virtual-root"))
cgit_virtual_root = xstrdup(value);
+ else if (!strcmp(name, "nocache"))
+ cgit_nocache = atoi(value);
}
void cgit_repo_config_cb(const char *name, const char *value)
{
if (!strcmp(name, "name"))
cgit_repo_name = xstrdup(value);