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>
Этот коммит содержится в:
родитель
6063e7b553
Коммит
488a214a81
1
cgit.c
1
cgit.c
@ -206,6 +206,7 @@ static void prepare_context(struct cgit_context *ctx)
|
||||
ctx->page.size = 0;
|
||||
ctx->page.modified = time(NULL);
|
||||
ctx->page.expires = ctx->page.modified;
|
||||
ctx->page.etag = NULL;
|
||||
}
|
||||
|
||||
struct refmatch {
|
||||
|
1
cgit.h
1
cgit.h
@ -180,6 +180,7 @@ struct cgit_page {
|
||||
char *mimetype;
|
||||
char *charset;
|
||||
char *filename;
|
||||
char *etag;
|
||||
char *title;
|
||||
};
|
||||
|
||||
|
@ -34,6 +34,7 @@ static void print_object(const unsigned char *sha1, const char *path)
|
||||
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;
|
||||
|
@ -468,6 +468,8 @@ void cgit_print_http_headers(struct cgit_context *ctx)
|
||||
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");
|
||||
}
|
||||
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user