From 8f9eeb3280c43ef184eb6ce08b322bc7d9ad6c3f Mon Sep 17 00:00:00 2001 From: Wynn Wolf Arbor Date: Fri, 3 Jul 2020 15:17:02 +0200 Subject: [PATCH 1/2] 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; -- 2.27.0