all repos — cgit @ 681fdc45473143de3f3c5f69fbc7b94f5d6b0b75

a hyperfast web frontend for git written in c

Merge branch 'plain-etag'

Conflicts:
	ui-shared.c
Lars Hjemli hjemli@gmail.com
Sat, 25 Jul 2009 11:59:22 +0200
commit

681fdc45473143de3f3c5f69fbc7b94f5d6b0b75

parent

7e5c048505efe1902fb476cc2cb3160ff7df013d

4 files changed, 12 insertions(+), 0 deletions(-)

jump to
M cgit.ccgit.c

@@ -206,6 +206,7 @@ ctx->page.filename = NULL;

ctx->page.size = 0; ctx->page.modified = time(NULL); ctx->page.expires = ctx->page.modified; + ctx->page.etag = NULL; } struct refmatch {

@@ -431,6 +432,7 @@

int main(int argc, const char **argv) { const char *cgit_config_env = getenv("CGIT_CONFIG"); + const char *method = getenv("REQUEST_METHOD"); const char *path; char *qry; int err, ttl;

@@ -477,6 +479,8 @@ }

ttl = calc_ttl(); ctx.page.expires += ttl*60; + if (method && !strcmp(method, "HEAD")) + ctx.cfg.nocache = 1; if (ctx.cfg.nocache) ctx.cfg.cache_size = 0; err = cache_process(ctx.cfg.cache_size, ctx.cfg.cache_root,
M cgit.hcgit.h

@@ -180,6 +180,7 @@ size_t size;

char *mimetype; char *charset; char *filename; + char *etag; char *title; int status; char *statusmsg;
M ui-plain.cui-plain.c

@@ -37,6 +37,7 @@ else

ctx.page.mimetype = "text/plain"; ctx.page.filename = fmt("%s", path); ctx.page.size = size; + ctx.page.etag = sha1_to_hex(sha1); cgit_print_http_headers(&ctx); html_raw(buf, size); match = 1;
M ui-shared.cui-shared.c

@@ -467,6 +467,8 @@ }

void cgit_print_http_headers(struct cgit_context *ctx) { + const char *method = getenv("REQUEST_METHOD"); + if (ctx->page.status) htmlf("Status: %d %s\n", ctx->page.status, ctx->page.statusmsg); if (ctx->page.mimetype && ctx->page.charset)

@@ -481,7 +483,11 @@ htmlf("Content-Disposition: inline; filename=\"%s\"\n",

ctx->page.filename); htmlf("Last-Modified: %s\n", http_date(ctx->page.modified)); htmlf("Expires: %s\n", http_date(ctx->page.expires)); + if (ctx->page.etag) + htmlf("ETag: \"%s\"\n", ctx->page.etag); html("\n"); + if (method && !strcmp(method, "HEAD")) + exit(0); } void cgit_print_docstart(struct cgit_context *ctx)