summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Nieder <jrnieder@gmail.com>2017-08-30 00:06:38 -0700
committerJunio C Hamano <gitster@pobox.com>2017-09-07 08:49:45 +0900
commit6e2a48246df731841975a4c621d0654c0c0f9fb1 (patch)
tree8a9a2cff2344b5e06f4e9a885be2a8afb0fa521e
parente8f40493c78565ccf053825ea547067a9c86556c (diff)
downloadgit-6e2a48246df731841975a4c621d0654c0c0f9fb1.tar.gz
pack: add repository argument to sha1_file_name
Add a repository argument to allow sha1_file_name callers to be more specific about which repository to handle. This is a small mechanical change; it doesn't change the implementation to handle repositories other than the_repository yet. As with the previous commits, use a macro to catch callers passing a repository other than the_repository at compile time. While at it, move the declaration to object-store.h, where it should be easier to find. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--cache.h8
-rw-r--r--http-walker.c3
-rw-r--r--http.c5
-rw-r--r--object-store.h9
-rw-r--r--sha1_file.c11
5 files changed, 20 insertions, 16 deletions
diff --git a/cache.h b/cache.h
index abec62dc9b..0d120b9327 100644
--- a/cache.h
+++ b/cache.h
@@ -896,14 +896,6 @@ extern void check_repository_format(void);
#define TYPE_CHANGED 0x0040
/*
- * Return the name of the file in the local object database that would
- * be used to store a loose object with the specified sha1. The
- * return value is a pointer to a statically allocated buffer that is
- * overwritten each time the function is called.
- */
-extern const char *sha1_file_name(const unsigned char *sha1);
-
-/*
* Return an abbreviated sha1 unique within this repository's object database.
* The result will be at least `len` characters long, and will be NUL
* terminated.
diff --git a/http-walker.c b/http-walker.c
index a1c6f2639b..96873bdfed 100644
--- a/http-walker.c
+++ b/http-walker.c
@@ -1,4 +1,5 @@
#include "cache.h"
+#include "repository.h"
#include "commit.h"
#include "walker.h"
#include "http.h"
@@ -546,7 +547,7 @@ static int fetch_object(struct walker *walker, unsigned char *sha1)
ret = error("File %s has bad hash", hex);
} else if (req->rename < 0) {
ret = error("unable to write sha1 filename %s",
- sha1_file_name(req->sha1));
+ sha1_file_name(the_repository, req->sha1));
}
release_http_object_request(req);
diff --git a/http.c b/http.c
index 0979053272..2c86e6e76e 100644
--- a/http.c
+++ b/http.c
@@ -2163,7 +2163,7 @@ struct http_object_request *new_http_object_request(const char *base_url,
hashcpy(freq->sha1, sha1);
freq->localfile = -1;
- filename = sha1_file_name(sha1);
+ filename = sha1_file_name(the_repository, sha1);
snprintf(freq->tmpfile, sizeof(freq->tmpfile),
"%s.temp", filename);
@@ -2311,7 +2311,8 @@ int finish_http_object_request(struct http_object_request *freq)
return -1;
}
freq->rename =
- finalize_object_file(freq->tmpfile, sha1_file_name(freq->sha1));
+ finalize_object_file(freq->tmpfile,
+ sha1_file_name(the_repository, freq->sha1));
return freq->rename;
}
diff --git a/object-store.h b/object-store.h
index eef8d3b653..228c2ce8ae 100644
--- a/object-store.h
+++ b/object-store.h
@@ -54,6 +54,15 @@ struct packed_git {
char pack_name[FLEX_ARRAY]; /* more */
};
+/*
+ * Return the name of the file in a repository's local object database
+ * that would be used to store a loose object with the specified sha1.
+ * The return value is a pointer to a statically allocated buffer that
+ * is overwritten each time the function is called.
+ */
+#define sha1_file_name(r, s) sha1_file_name_##r(s)
+extern const char *sha1_file_name_the_repository(const unsigned char *sha1);
+
#define prepare_alt_odb(r) prepare_alt_odb_##r()
extern void prepare_alt_odb_the_repository(void);
diff --git a/sha1_file.c b/sha1_file.c
index 6af88e5b04..8ab26fb3b3 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -253,7 +253,7 @@ static void fill_sha1_path(struct strbuf *buf, const unsigned char *sha1)
}
}
-const char *sha1_file_name(const unsigned char *sha1)
+const char *sha1_file_name_the_repository(const unsigned char *sha1)
{
static struct strbuf buf = STRBUF_INIT;
@@ -664,7 +664,8 @@ int check_and_freshen_file(const char *fn, int freshen)
static int check_and_freshen_local(const unsigned char *sha1, int freshen)
{
- return check_and_freshen_file(sha1_file_name(sha1), freshen);
+ return check_and_freshen_file(sha1_file_name(the_repository, sha1),
+ freshen);
}
static int check_and_freshen_nonlocal(const unsigned char *sha1, int freshen)
@@ -822,7 +823,7 @@ static int stat_sha1_file_the_repository(const unsigned char *sha1,
{
struct alternate_object_database *alt;
- *path = sha1_file_name(sha1);
+ *path = sha1_file_name(the_repository, sha1);
if (!lstat(*path, st))
return 0;
@@ -849,7 +850,7 @@ static int open_sha1_file_the_repository(const unsigned char *sha1,
struct alternate_object_database *alt;
int most_interesting_errno;
- *path = sha1_file_name(sha1);
+ *path = sha1_file_name(the_repository, sha1);
fd = git_open(*path);
if (fd >= 0)
return fd;
@@ -1509,7 +1510,7 @@ static int write_loose_object(const unsigned char *sha1, char *hdr, int hdrlen,
git_SHA_CTX c;
unsigned char parano_sha1[20];
static struct strbuf tmp_file = STRBUF_INIT;
- const char *filename = sha1_file_name(sha1);
+ const char *filename = sha1_file_name(the_repository, sha1);
fd = create_tmpfile(&tmp_file, filename);
if (fd < 0) {