This new function adds the external odb cache to all the other odbs. Signed-off-by: Christian Couder <chriscool@xxxxxxxxxxxxx> --- cache.h | 1 + sha1_file.c | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/cache.h b/cache.h index d06932ed0b..2ac7d63e5c 100644 --- a/cache.h +++ b/cache.h @@ -1583,6 +1583,7 @@ extern void prepare_alt_odb(void); extern char *compute_alternate_path(const char *path, struct strbuf *err); typedef int alt_odb_fn(struct alternate_object_database *, void *); extern int foreach_alt_odb(alt_odb_fn, void*); +extern void prepare_external_alt_odb(void); /* * Allocate a "struct alternate_object_database" but do _not_ actually diff --git a/sha1_file.c b/sha1_file.c index 1b94f39c4c..3f00fc716e 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -29,6 +29,7 @@ #include "quote.h" #include "packfile.h" #include "fetch-object.h" +#include "external-odb.h" const unsigned char null_sha1[GIT_MAX_RAWSZ]; const struct object_id null_oid; @@ -663,6 +664,21 @@ int foreach_alt_odb(alt_odb_fn fn, void *cb) return r; } +void prepare_external_alt_odb(void) +{ + static int linked_external; + const char *path; + + if (linked_external) + return; + + path = external_odb_root(); + if (!access(path, F_OK)) { + link_alt_odb_entry(path, NULL, 0, ""); + linked_external = 1; + } +} + void prepare_alt_odb(void) { const char *alt; @@ -676,6 +692,7 @@ void prepare_alt_odb(void) link_alt_odb_entries(alt, PATH_SEP, NULL, 0); read_info_alternates(get_object_directory(), 0); + prepare_external_alt_odb(); } /* Returns 1 if we have successfully freshened the file, 0 otherwise. */ -- 2.17.0.rc0.37.g8f476fabe9