all repos — cgit @ 488a214a81a25c6397c56822ed1713f51dddc520

a hyperfast web frontend for git written in c

Add support for ETag in 'plain' view

When downloading a blob identified by its path, the client might want
to know if the blob has been modified since a previous download of the
same path. To this end, an ETag containing the blob SHA1 seems to be
ideal.

Todo: add support for HEAD requests...

Suggested-by: Owen Taylor <otaylor@redhat.com>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Lars Hjemli hjemli@gmail.com
Thu, 19 Feb 2009 22:38:36 +0100
commit

488a214a81a25c6397c56822ed1713f51dddc520

parent

6063e7b5532481ffaa7a6f080de28547983bbeb7

4 files changed, 5 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 {
M cgit.hcgit.h

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

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

@@ -34,6 +34,7 @@ }

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

@@ -468,6 +468,8 @@ 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"); }