From 69a9085b7b833c5c8a445784b479518cb391baae Mon Sep 17 00:00:00 2001 From: Wolfgang Müller Date: Fri, 28 May 2021 16:02:54 +0200 Subject: cache: Disable caching for clones Whilst the cache feature is useful for content that the web browser will see, it is less useful when cgit is asked to clone a repository. Users might end up with a tree that is ever so slightly out of date. An upcoming commit will introduce functionality to offload clones to git-http-backend(1). The cache feature will prevent this from working correctly. Therefore, disable cache processing for commands that have the is_clone flag set. --- cache.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/cache.c b/cache.c index 2c70be7..bb4fc47 100644 --- a/cache.c +++ b/cache.c @@ -15,6 +15,7 @@ #include "cgit.h" #include "cache.h" +#include "cmd.h" #include "html.h" #ifdef HAVE_LINUX_SENDFILE #include @@ -356,6 +357,7 @@ int cache_process(int size, const char *path, const char *key, int ttl, struct strbuf filename = STRBUF_INIT; struct strbuf lockname = STRBUF_INIT; struct cache_slot slot; + struct cgit_cmd *cmd; int result; /* If the cache is disabled, just generate the content */ @@ -370,6 +372,15 @@ int cache_process(int size, const char *path, const char *key, int ttl, fn(); return 0; } + + cmd = cgit_get_cmd(); + + /* Do not cache files that are being cloned */ + if (cmd && cmd->is_clone) { + fn(); + return 0; + } + if (!key) key = ""; hash = hash_str(key) % size; -- cgit v1.2.3-2-gb3c3