diff options
| author | 2009-07-25 18:59:22 (JST) | |
|---|---|---|
| committer | 2009-07-25 18:59:22 (JST) | |
| commit | 681fdc45473143de3f3c5f69fbc7b94f5d6b0b75 (patch) | |
| tree | 3bfca05875524bee0e5444fb791707bc3e593dbd | |
| parent | 7e5c048505efe1902fb476cc2cb3160ff7df013d (diff) | |
| parent | 3ff58ddd51bcbcbc9b7649bad1a39aa98af4b49f (diff) | |
| download | cgit-681fdc45473143de3f3c5f69fbc7b94f5d6b0b75.zip cgit-681fdc45473143de3f3c5f69fbc7b94f5d6b0b75.tar.gz | |
Merge branch 'plain-etag'
Conflicts:
ui-shared.c
| -rw-r--r-- | cgit.c | 4 | ||||
| -rw-r--r-- | cgit.h | 1 | ||||
| -rw-r--r-- | ui-plain.c | 1 | ||||
| -rw-r--r-- | ui-shared.c | 6 |
4 files changed, 12 insertions, 0 deletions
| @@ -206,6 +206,7 @@ static void prepare_context(struct cgit_context *ctx) | |||
| 206 | ctx->page.size = 0; | 206 | ctx->page.size = 0; |
| 207 | ctx->page.modified = time(NULL); | 207 | ctx->page.modified = time(NULL); |
| 208 | ctx->page.expires = ctx->page.modified; | 208 | ctx->page.expires = ctx->page.modified; |
| 209 | ctx->page.etag = NULL; | ||
| 209 | } | 210 | } |
| 210 | 211 | ||
| 211 | struct refmatch { | 212 | struct refmatch { |
| @@ -431,6 +432,7 @@ static int calc_ttl() | |||
| 431 | int main(int argc, const char **argv) | 432 | int main(int argc, const char **argv) |
| 432 | { | 433 | { |
| 433 | const char *cgit_config_env = getenv("CGIT_CONFIG"); | 434 | const char *cgit_config_env = getenv("CGIT_CONFIG"); |
| 435 | const char *method = getenv("REQUEST_METHOD"); | ||
| 434 | const char *path; | 436 | const char *path; |
| 435 | char *qry; | 437 | char *qry; |
| 436 | int err, ttl; | 438 | int err, ttl; |
| @@ -477,6 +479,8 @@ int main(int argc, const char **argv) | |||
| 477 | 479 | ||
| 478 | ttl = calc_ttl(); | 480 | ttl = calc_ttl(); |
| 479 | ctx.page.expires += ttl*60; | 481 | ctx.page.expires += ttl*60; |
| 482 | if (method && !strcmp(method, "HEAD")) | ||
| 483 | ctx.cfg.nocache = 1; | ||
| 480 | if (ctx.cfg.nocache) | 484 | if (ctx.cfg.nocache) |
| 481 | ctx.cfg.cache_size = 0; | 485 | ctx.cfg.cache_size = 0; |
| 482 | err = cache_process(ctx.cfg.cache_size, ctx.cfg.cache_root, | 486 | err = cache_process(ctx.cfg.cache_size, ctx.cfg.cache_root, |
| @@ -180,6 +180,7 @@ struct cgit_page { | |||
| 180 | char *mimetype; | 180 | char *mimetype; |
| 181 | char *charset; | 181 | char *charset; |
| 182 | char *filename; | 182 | char *filename; |
| 183 | char *etag; | ||
| 183 | char *title; | 184 | char *title; |
| 184 | int status; | 185 | int status; |
| 185 | char *statusmsg; | 186 | char *statusmsg; |
| @@ -37,6 +37,7 @@ static void print_object(const unsigned char *sha1, const char *path) | |||
| 37 | ctx.page.mimetype = "text/plain"; | 37 | ctx.page.mimetype = "text/plain"; |
| 38 | ctx.page.filename = fmt("%s", path); | 38 | ctx.page.filename = fmt("%s", path); |
| 39 | ctx.page.size = size; | 39 | ctx.page.size = size; |
| 40 | ctx.page.etag = sha1_to_hex(sha1); | ||
| 40 | cgit_print_http_headers(&ctx); | 41 | cgit_print_http_headers(&ctx); |
| 41 | html_raw(buf, size); | 42 | html_raw(buf, size); |
| 42 | match = 1; | 43 | match = 1; |
diff --git a/ui-shared.c b/ui-shared.c index 29036d0..10be3c0 100644 --- a/ui-shared.c +++ b/ui-shared.c | |||
| @@ -467,6 +467,8 @@ void cgit_print_age(time_t t, time_t max_relative, char *format) | |||
| 467 | 467 | ||
| 468 | void cgit_print_http_headers(struct cgit_context *ctx) | 468 | void cgit_print_http_headers(struct cgit_context *ctx) |
| 469 | { | 469 | { |
| 470 | const char *method = getenv("REQUEST_METHOD"); | ||
| 471 | |||
| 470 | if (ctx->page.status) | 472 | if (ctx->page.status) |
| 471 | htmlf("Status: %d %s\n", ctx->page.status, ctx->page.statusmsg); | 473 | htmlf("Status: %d %s\n", ctx->page.status, ctx->page.statusmsg); |
| 472 | if (ctx->page.mimetype && ctx->page.charset) | 474 | if (ctx->page.mimetype && ctx->page.charset) |
| @@ -481,7 +483,11 @@ void cgit_print_http_headers(struct cgit_context *ctx) | |||
| 481 | ctx->page.filename); | 483 | ctx->page.filename); |
| 482 | htmlf("Last-Modified: %s\n", http_date(ctx->page.modified)); | 484 | htmlf("Last-Modified: %s\n", http_date(ctx->page.modified)); |
| 483 | htmlf("Expires: %s\n", http_date(ctx->page.expires)); | 485 | htmlf("Expires: %s\n", http_date(ctx->page.expires)); |
| 486 | if (ctx->page.etag) | ||
| 487 | htmlf("ETag: \"%s\"\n", ctx->page.etag); | ||
| 484 | html("\n"); | 488 | html("\n"); |
| 489 | if (method && !strcmp(method, "HEAD")) | ||
| 490 | exit(0); | ||
| 485 | } | 491 | } |
| 486 | 492 | ||
| 487 | void cgit_print_docstart(struct cgit_context *ctx) | 493 | void cgit_print_docstart(struct cgit_context *ctx) |
