aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore5
-rw-r--r--Makefile21
-rw-r--r--cgit-doc.css3
-rw-r--r--cgit.c8
-rw-r--r--cgit.h4
-rw-r--r--cgitrc.5.txt122
-rw-r--r--ui-atom.c6
-rw-r--r--ui-blob.c8
-rw-r--r--ui-plain.c6
-rw-r--r--ui-shared.c26
-rw-r--r--ui-shared.h1
-rw-r--r--ui-snapshot.c23
-rw-r--r--ui-tree.c26
13 files changed, 177 insertions, 82 deletions
diff --git a/.gitignore b/.gitignore
index 1e016e5..487728b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,5 +2,10 @@
2cgit 2cgit
3cgit.conf 3cgit.conf
4VERSION 4VERSION
5cgitrc.5
6cgitrc.5.fo
7cgitrc.5.html
8cgitrc.5.pdf
9cgitrc.5.xml
5*.o 10*.o
6*.d 11*.d
diff --git a/Makefile b/Makefile
index 0f0089a..707d446 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
1CGIT_VERSION = v0.8.2 1CGIT_VERSION = v0.8.2.1
2CGIT_SCRIPT_NAME = cgit.cgi 2CGIT_SCRIPT_NAME = cgit.cgi
3CGIT_SCRIPT_PATH = /var/www/htdocs/cgit 3CGIT_SCRIPT_PATH = /var/www/htdocs/cgit
4CGIT_DATA_PATH = $(CGIT_SCRIPT_PATH) 4CGIT_DATA_PATH = $(CGIT_SCRIPT_PATH)
@@ -100,7 +100,8 @@ ifdef NEEDS_LIBICONV
100endif 100endif
101 101
102 102
103.PHONY: all libgit test install uninstall clean force-version get-git 103.PHONY: all libgit test install uninstall clean force-version get-git \
104 doc man-doc html-doc clean-doc
104 105
105all: cgit 106all: cgit
106 107
@@ -149,8 +150,22 @@ uninstall:
149 rm -f $(CGIT_DATA_PATH)/cgit.css 150 rm -f $(CGIT_DATA_PATH)/cgit.css
150 rm -f $(CGIT_DATA_PATH)/cgit.png 151 rm -f $(CGIT_DATA_PATH)/cgit.png
151 152
152clean: 153doc: man-doc html-doc pdf-doc
154
155man-doc: cgitrc.5.txt
156 a2x -f manpage cgitrc.5.txt
157
158html-doc: cgitrc.5.txt
159 a2x -f xhtml --stylesheet=cgit-doc.css cgitrc.5.txt
160
161pdf-doc: cgitrc.5.txt
162 a2x -f pdf cgitrc.5.txt
163
164clean: clean-doc
153 rm -f cgit VERSION *.o *.d 165 rm -f cgit VERSION *.o *.d
154 166
167clean-doc:
168 rm -f cgitrc.5 cgitrc.5.html cgitrc.5.pdf cgitrc.5.xml cgitrc.5.fo
169
155get-git: 170get-git:
156 curl $(GIT_URL) | tar -xj && rm -rf git && mv git-$(GIT_VER) git 171 curl $(GIT_URL) | tar -xj && rm -rf git && mv git-$(GIT_VER) git
diff --git a/cgit-doc.css b/cgit-doc.css
new file mode 100644
index 0000000..5a399b6
--- /dev/null
+++ b/cgit-doc.css
@@ -0,0 +1,3 @@
1div.variablelist dt {
2 margin-top: 1em;
3}
diff --git a/cgit.c b/cgit.c
index 38f0fdd..2039ab1 100644
--- a/cgit.c
+++ b/cgit.c
@@ -31,6 +31,8 @@ void config_cb(const char *name, const char *value)
31 ctx.cfg.favicon = xstrdup(value); 31 ctx.cfg.favicon = xstrdup(value);
32 else if (!strcmp(name, "footer")) 32 else if (!strcmp(name, "footer"))
33 ctx.cfg.footer = xstrdup(value); 33 ctx.cfg.footer = xstrdup(value);
34 else if (!strcmp(name, "head-include"))
35 ctx.cfg.head_include = xstrdup(value);
34 else if (!strcmp(name, "header")) 36 else if (!strcmp(name, "header"))
35 ctx.cfg.header = xstrdup(value); 37 ctx.cfg.header = xstrdup(value);
36 else if (!strcmp(name, "logo")) 38 else if (!strcmp(name, "logo"))
@@ -210,6 +212,7 @@ static void prepare_context(struct cgit_context *ctx)
210 ctx->page.size = 0; 212 ctx->page.size = 0;
211 ctx->page.modified = time(NULL); 213 ctx->page.modified = time(NULL);
212 ctx->page.expires = ctx->page.modified; 214 ctx->page.expires = ctx->page.modified;
215 ctx->page.etag = NULL;
213} 216}
214 217
215struct refmatch { 218struct refmatch {
@@ -289,6 +292,8 @@ static int prepare_repo_cmd(struct cgit_context *ctx)
289 if (get_sha1(ctx->qry.head, sha1)) { 292 if (get_sha1(ctx->qry.head, sha1)) {
290 tmp = xstrdup(ctx->qry.head); 293 tmp = xstrdup(ctx->qry.head);
291 ctx->qry.head = ctx->repo->defbranch; 294 ctx->qry.head = ctx->repo->defbranch;
295 ctx->page.status = 404;
296 ctx->page.statusmsg = "not found";
292 cgit_print_http_headers(ctx); 297 cgit_print_http_headers(ctx);
293 cgit_print_docstart(ctx); 298 cgit_print_docstart(ctx);
294 cgit_print_pageheader(ctx); 299 cgit_print_pageheader(ctx);
@@ -433,6 +438,7 @@ static int calc_ttl()
433int main(int argc, const char **argv) 438int main(int argc, const char **argv)
434{ 439{
435 const char *cgit_config_env = getenv("CGIT_CONFIG"); 440 const char *cgit_config_env = getenv("CGIT_CONFIG");
441 const char *method = getenv("REQUEST_METHOD");
436 const char *path; 442 const char *path;
437 char *qry; 443 char *qry;
438 int err, ttl; 444 int err, ttl;
@@ -479,6 +485,8 @@ int main(int argc, const char **argv)
479 485
480 ttl = calc_ttl(); 486 ttl = calc_ttl();
481 ctx.page.expires += ttl*60; 487 ctx.page.expires += ttl*60;
488 if (method && !strcmp(method, "HEAD"))
489 ctx.cfg.nocache = 1;
482 if (ctx.cfg.nocache) 490 if (ctx.cfg.nocache)
483 ctx.cfg.cache_size = 0; 491 ctx.cfg.cache_size = 0;
484 err = cache_process(ctx.cfg.cache_size, ctx.cfg.cache_root, 492 err = cache_process(ctx.cfg.cache_size, ctx.cfg.cache_root,
diff --git a/cgit.h b/cgit.h
index ca01705..8c64efe 100644
--- a/cgit.h
+++ b/cgit.h
@@ -136,6 +136,7 @@ struct cgit_config {
136 char *css; 136 char *css;
137 char *favicon; 137 char *favicon;
138 char *footer; 138 char *footer;
139 char *head_include;
139 char *header; 140 char *header;
140 char *index_header; 141 char *index_header;
141 char *index_info; 142 char *index_info;
@@ -182,7 +183,10 @@ struct cgit_page {
182 char *mimetype; 183 char *mimetype;
183 char *charset; 184 char *charset;
184 char *filename; 185 char *filename;
186 char *etag;
185 char *title; 187 char *title;
188 int status;
189 char *statusmsg;
186}; 190};
187 191
188struct cgit_context { 192struct cgit_context {
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index 771bb7d..a207fe0 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -1,14 +1,14 @@
1CGITRC 1CGITRC(5)
2====== 2========
3 3
4 4
5NAME 5NAME
6---- 6----
7 cgitrc - runtime configuration for cgit 7cgitrc - runtime configuration for cgit
8