Merge branch 'cc/sha1-file-name'
Code clean-up. * cc/sha1-file-name: sha1_file: improve sha1_file_name() perfs sha1_file: remove static strbuf from sha1_file_name()
This commit is contained in:
commit
9238941618
8
cache.h
8
cache.h
@ -960,12 +960,10 @@ extern void check_repository_format(void);
|
|||||||
#define TYPE_CHANGED 0x0040
|
#define TYPE_CHANGED 0x0040
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return the name of the file in the local object database that would
|
* Put in `buf` the name of the file in the local object database that
|
||||||
* be used to store a loose object with the specified sha1. The
|
* would be used to store a loose object with the specified sha1.
|
||||||
* 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);
|
extern void sha1_file_name(struct strbuf *buf, const unsigned char *sha1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return an abbreviated sha1 unique within this repository's object database.
|
* Return an abbreviated sha1 unique within this repository's object database.
|
||||||
|
@ -544,8 +544,10 @@ static int fetch_object(struct walker *walker, unsigned char *sha1)
|
|||||||
} else if (hashcmp(obj_req->sha1, req->real_sha1)) {
|
} else if (hashcmp(obj_req->sha1, req->real_sha1)) {
|
||||||
ret = error("File %s has bad hash", hex);
|
ret = error("File %s has bad hash", hex);
|
||||||
} else if (req->rename < 0) {
|
} else if (req->rename < 0) {
|
||||||
ret = error("unable to write sha1 filename %s",
|
struct strbuf buf = STRBUF_INIT;
|
||||||
sha1_file_name(req->sha1));
|
sha1_file_name(&buf, req->sha1);
|
||||||
|
ret = error("unable to write sha1 filename %s", buf.buf);
|
||||||
|
strbuf_release(&buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
release_http_object_request(req);
|
release_http_object_request(req);
|
||||||
|
16
http.c
16
http.c
@ -2168,7 +2168,7 @@ struct http_object_request *new_http_object_request(const char *base_url,
|
|||||||
unsigned char *sha1)
|
unsigned char *sha1)
|
||||||
{
|
{
|
||||||
char *hex = sha1_to_hex(sha1);
|
char *hex = sha1_to_hex(sha1);
|
||||||
const char *filename;
|
struct strbuf filename = STRBUF_INIT;
|
||||||
char prevfile[PATH_MAX];
|
char prevfile[PATH_MAX];
|
||||||
int prevlocal;
|
int prevlocal;
|
||||||
char prev_buf[PREV_BUF_SIZE];
|
char prev_buf[PREV_BUF_SIZE];
|
||||||
@ -2180,14 +2180,15 @@ struct http_object_request *new_http_object_request(const char *base_url,
|
|||||||
hashcpy(freq->sha1, sha1);
|
hashcpy(freq->sha1, sha1);
|
||||||
freq->localfile = -1;
|
freq->localfile = -1;
|
||||||
|
|
||||||
filename = sha1_file_name(sha1);
|
sha1_file_name(&filename, sha1);
|
||||||
snprintf(freq->tmpfile, sizeof(freq->tmpfile),
|
snprintf(freq->tmpfile, sizeof(freq->tmpfile),
|
||||||
"%s.temp", filename);
|
"%s.temp", filename.buf);
|
||||||
|
|
||||||
snprintf(prevfile, sizeof(prevfile), "%s.prev", filename);
|
snprintf(prevfile, sizeof(prevfile), "%s.prev", filename.buf);
|
||||||
unlink_or_warn(prevfile);
|
unlink_or_warn(prevfile);
|
||||||
rename(freq->tmpfile, prevfile);
|
rename(freq->tmpfile, prevfile);
|
||||||
unlink_or_warn(freq->tmpfile);
|
unlink_or_warn(freq->tmpfile);
|
||||||
|
strbuf_release(&filename);
|
||||||
|
|
||||||
if (freq->localfile != -1)
|
if (freq->localfile != -1)
|
||||||
error("fd leakage in start: %d", freq->localfile);
|
error("fd leakage in start: %d", freq->localfile);
|
||||||
@ -2302,6 +2303,7 @@ void process_http_object_request(struct http_object_request *freq)
|
|||||||
int finish_http_object_request(struct http_object_request *freq)
|
int finish_http_object_request(struct http_object_request *freq)
|
||||||
{
|
{
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
struct strbuf filename = STRBUF_INIT;
|
||||||
|
|
||||||
close(freq->localfile);
|
close(freq->localfile);
|
||||||
freq->localfile = -1;
|
freq->localfile = -1;
|
||||||
@ -2327,8 +2329,10 @@ int finish_http_object_request(struct http_object_request *freq)
|
|||||||
unlink_or_warn(freq->tmpfile);
|
unlink_or_warn(freq->tmpfile);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
freq->rename =
|
|
||||||
finalize_object_file(freq->tmpfile, sha1_file_name(freq->sha1));
|
sha1_file_name(&filename, freq->sha1);
|
||||||
|
freq->rename = finalize_object_file(freq->tmpfile, filename.buf);
|
||||||
|
strbuf_release(&filename);
|
||||||
|
|
||||||
return freq->rename;
|
return freq->rename;
|
||||||
}
|
}
|
||||||
|
40
sha1_file.c
40
sha1_file.c
@ -321,15 +321,11 @@ static void fill_sha1_path(struct strbuf *buf, const unsigned char *sha1)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *sha1_file_name(const unsigned char *sha1)
|
void sha1_file_name(struct strbuf *buf, const unsigned char *sha1)
|
||||||
{
|
{
|
||||||
static struct strbuf buf = STRBUF_INIT;
|
strbuf_addstr(buf, get_object_directory());
|
||||||
|
strbuf_addch(buf, '/');
|
||||||
strbuf_reset(&buf);
|
fill_sha1_path(buf, sha1);
|
||||||
strbuf_addf(&buf, "%s/", get_object_directory());
|
|
||||||
|
|
||||||
fill_sha1_path(&buf, sha1);
|
|
||||||
return buf.buf;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct strbuf *alt_scratch_buf(struct alternate_object_database *alt)
|
struct strbuf *alt_scratch_buf(struct alternate_object_database *alt)
|
||||||
@ -710,7 +706,12 @@ int check_and_freshen_file(const char *fn, int freshen)
|
|||||||
|
|
||||||
static int check_and_freshen_local(const unsigned char *sha1, int freshen)
|
static int check_and_freshen_local(const unsigned char *sha1, int freshen)
|
||||||
{
|
{
|
||||||
return check_and_freshen_file(sha1_file_name(sha1), freshen);
|
static struct strbuf buf = STRBUF_INIT;
|
||||||
|
|
||||||
|
strbuf_reset(&buf);
|
||||||
|
sha1_file_name(&buf, sha1);
|
||||||
|
|
||||||
|
return check_and_freshen_file(buf.buf, freshen);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int check_and_freshen_nonlocal(const unsigned char *sha1, int freshen)
|
static int check_and_freshen_nonlocal(const unsigned char *sha1, int freshen)
|
||||||
@ -866,8 +867,12 @@ static int stat_sha1_file(const unsigned char *sha1, struct stat *st,
|
|||||||
const char **path)
|
const char **path)
|
||||||
{
|
{
|
||||||
struct alternate_object_database *alt;
|
struct alternate_object_database *alt;
|
||||||
|
static struct strbuf buf = STRBUF_INIT;
|
||||||
|
|
||||||
|
strbuf_reset(&buf);
|
||||||
|
sha1_file_name(&buf, sha1);
|
||||||
|
*path = buf.buf;
|
||||||
|
|
||||||
*path = sha1_file_name(sha1);
|
|
||||||
if (!lstat(*path, st))
|
if (!lstat(*path, st))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -891,8 +896,12 @@ static int open_sha1_file(const unsigned char *sha1, const char **path)
|
|||||||
int fd;
|
int fd;
|
||||||
struct alternate_object_database *alt;
|
struct alternate_object_database *alt;
|
||||||
int most_interesting_errno;
|
int most_interesting_errno;
|
||||||
|
static struct strbuf buf = STRBUF_INIT;
|
||||||
|
|
||||||
|
strbuf_reset(&buf);
|
||||||
|
sha1_file_name(&buf, sha1);
|
||||||
|
*path = buf.buf;
|
||||||
|
|
||||||
*path = sha1_file_name(sha1);
|
|
||||||
fd = git_open(*path);
|
fd = git_open(*path);
|
||||||
if (fd >= 0)
|
if (fd >= 0)
|
||||||
return fd;
|
return fd;
|
||||||
@ -1572,9 +1581,12 @@ static int write_loose_object(const unsigned char *sha1, char *hdr, int hdrlen,
|
|||||||
git_SHA_CTX c;
|
git_SHA_CTX c;
|
||||||
unsigned char parano_sha1[20];
|
unsigned char parano_sha1[20];
|
||||||
static struct strbuf tmp_file = STRBUF_INIT;
|
static struct strbuf tmp_file = STRBUF_INIT;
|
||||||
const char *filename = sha1_file_name(sha1);
|
static struct strbuf filename = STRBUF_INIT;
|
||||||
|
|
||||||
fd = create_tmpfile(&tmp_file, filename);
|
strbuf_reset(&filename);
|
||||||
|
sha1_file_name(&filename, sha1);
|
||||||
|
|
||||||
|
fd = create_tmpfile(&tmp_file, filename.buf);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
if (errno == EACCES)
|
if (errno == EACCES)
|
||||||
return error("insufficient permission for adding an object to repository database %s", get_object_directory());
|
return error("insufficient permission for adding an object to repository database %s", get_object_directory());
|
||||||
@ -1627,7 +1639,7 @@ static int write_loose_object(const unsigned char *sha1, char *hdr, int hdrlen,
|
|||||||
warning_errno("failed utime() on %s", tmp_file.buf);
|
warning_errno("failed utime() on %s", tmp_file.buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
return finalize_object_file(tmp_file.buf, filename);
|
return finalize_object_file(tmp_file.buf, filename.buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int freshen_loose_object(const unsigned char *sha1)
|
static int freshen_loose_object(const unsigned char *sha1)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user