about summary refs log tree commit diff
path: root/cgit.c
diff options
context:
space:
mode:
Diffstat (limited to 'cgit.c')
-rw-r--r--cgit.c50
1 files changed, 33 insertions, 17 deletions
diff --git a/cgit.c b/cgit.c
index e6b4526..d0f6905 100644
--- a/cgit.c
+++ b/cgit.c
@@ -7,13 +7,16 @@
  */
 
 #include "cgit.h"
+#include "cmd.h"
 
 static int cgit_prepare_cache(struct cacheitem *item)
 {
 	if (!ctx.repo && ctx.qry.repo) {
-		char *title = fmt("%s - %s", ctx.cfg.root_title, "Bad request");
-		cgit_print_docstart(title, item);
-		cgit_print_pageheader(title, 0);
+		ctx.page.title = fmt("%s - %s", ctx.cfg.root_title,
+				      "Bad request");
+		cgit_print_http_headers(&ctx);
+		cgit_print_docstart(&ctx);
+		cgit_print_pageheader(&ctx);
 		cgit_print_error(fmt("Unknown repo: %s", ctx.qry.repo));
 		cgit_print_docend();
 		return 0;
@@ -80,7 +83,7 @@ char *find_default_branch(struct cgit_repo *repo)
 
 static void cgit_print_repo_page(struct cacheitem *item)
 {
-	char *title, *tmp;
+	char *tmp;
 	int show_search;
 	unsigned char sha1[20];
 	int nongit = 0;
@@ -88,17 +91,19 @@ static void cgit_print_repo_page(struct cacheitem *item)
 	setenv("GIT_DIR", ctx.repo->path, 1);
 	setup_git_directory_gently(&nongit);
 	if (nongit) {
-		title = fmt("%s - %s", ctx.cfg.root_title, "config error");
+		ctx.page.title = fmt("%s - %s", ctx.cfg.root_title,
+				     "config error");
 		tmp = fmt("Not a git repository: '%s'", ctx.repo->path);
 		ctx.repo = NULL;
-		cgit_print_docstart(title, item);
-		cgit_print_pageheader(title, 0);
+		cgit_print_http_headers(&ctx);
+		cgit_print_docstart(&ctx);
+		cgit_print_pageheader(&ctx);
 		cgit_print_error(tmp);
 		cgit_print_docend();
 		return;
 	}
 
-	title = fmt("%s - %s", ctx.repo->name, ctx.repo->desc);
+	ctx.page.title = fmt("%s - %s", ctx.repo->name, ctx.repo->desc);
 	show_search = 0;
 
 	if (!ctx.qry.head) {
@@ -107,8 +112,9 @@ static void cgit_print_repo_page(struct cacheitem *item)
 	}
 
 	if (!ctx.qry.head) {
-		cgit_print_docstart(title, item);
-		cgit_print_pageheader(title, 0);
+		cgit_print_http_headers(&ctx);
+		cgit_print_docstart(&ctx);
+		cgit_print_pageheader(&ctx);
 		cgit_print_error("Repository seems to be empty");
 		cgit_print_docend();
 		return;
@@ -117,8 +123,9 @@ static void cgit_print_repo_page(struct cacheitem *item)
 	if (get_sha1(ctx.qry.head, sha1)) {
 		tmp = xstrdup(ctx.qry.head);
 		ctx.qry.head = ctx.repo->defbranch;
-		cgit_print_docstart(title, item);
-		cgit_print_pageheader(title, 0);
+		cgit_print_http_headers(&ctx);
+		cgit_print_docstart(&ctx);
+		cgit_print_pageheader(&ctx);
 		cgit_print_error(fmt("Invalid branch: %s", tmp));
 		cgit_print_docend();
 		return;
@@ -143,15 +150,16 @@ static void cgit_print_repo_page(struct cacheitem *item)
 	}
 
 	show_search = (cgit_cmd == CMD_LOG);
-	cgit_print_docstart(title, item);
+	cgit_print_http_headers(&ctx);
+	cgit_print_docstart(&ctx);
 	if (!cgit_cmd) {
-		cgit_print_pageheader("summary", show_search);
+		cgit_print_pageheader(&ctx);
 		cgit_print_summary();
 		cgit_print_docend();
 		return;
 	}
 
-	cgit_print_pageheader(ctx.qry.page, show_search);
+	cgit_print_pageheader(&ctx);
 
 	switch(cgit_cmd) {
 	case CMD_LOG:
@@ -180,12 +188,18 @@ static void cgit_print_repo_page(struct cacheitem *item)
 	cgit_print_docend();
 }
 
+static long ttl_seconds(long ttl)
+{
+	if (ttl<0)
+		return 60 * 60 * 24 * 365;
+	else
+		return ttl * 60;
+}
+
 static void cgit_fill_cache(struct cacheitem *item, int use_cache)
 {
 	int stdout2;
 
-	item->st.st_mtime = time(NULL);
-
 	if (use_cache) {
 		stdout2 = chk_positive(dup(STDOUT_FILENO),
 				       "Preserving STDOUT");
@@ -193,6 +207,8 @@ static void cgit_fill_cache(struct cacheitem *item, int use_cache)
 		chk_positive(dup2(item->fd, STDOUT_FILENO), "Dup2(cachefile)");
 	}
 
+	ctx.page.modified = time(NULL);
+	ctx.page.expires = ctx.page.modified + ttl_seconds(item->ttl);
 	if (ctx.repo)
 		cgit_print_repo_page(item);
 	else