1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-09 17:16:34 +02:00

http: use struct object_id instead of bare sha1

The dumb-http walker code still passes around and stores object ids as
"unsigned char *sha1". Let's modernize it.

There's probably still more work to be done to handle dumb-http fetches
with a new, larger hash. But that can wait; this is enough that we can
now convert some of the low-level object routines that we call into from
here (and in fact, some of the "oid.hash" references added here will be
further improved in the next patch).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King 2019-01-07 03:34:40 -05:00 committed by Junio C Hamano
parent c93206b412
commit f0be0db13d
4 changed files with 14 additions and 14 deletions

View File

@ -255,7 +255,7 @@ static void start_fetch_loose(struct transfer_request *request)
struct active_request_slot *slot;
struct http_object_request *obj_req;
obj_req = new_http_object_request(repo->url, request->obj->oid.hash);
obj_req = new_http_object_request(repo->url, &request->obj->oid);
if (obj_req == NULL) {
request->state = ABORTED;
return;

View File

@ -58,7 +58,7 @@ static void start_object_request(struct walker *walker,
struct active_request_slot *slot;
struct http_object_request *req;
req = new_http_object_request(obj_req->repo->base, obj_req->oid.hash);
req = new_http_object_request(obj_req->repo->base, &obj_req->oid);
if (req == NULL) {
obj_req->state = ABORTED;
return;
@ -543,11 +543,11 @@ static int fetch_object(struct walker *walker, unsigned char *sha1)
} else if (req->zret != Z_STREAM_END) {
walker->corrupt_object_found++;
ret = error("File %s (%s) corrupt", hex, req->url);
} else if (!hasheq(obj_req->oid.hash, req->real_sha1)) {
} else if (!oideq(&obj_req->oid, &req->real_oid)) {
ret = error("File %s has bad hash", hex);
} else if (req->rename < 0) {
struct strbuf buf = STRBUF_INIT;
loose_object_path(the_repository, &buf, req->sha1);
loose_object_path(the_repository, &buf, req->oid.hash);
ret = error("unable to write sha1 filename %s", buf.buf);
strbuf_release(&buf);
}

14
http.c
View File

@ -2337,9 +2337,9 @@ static size_t fwrite_sha1_file(char *ptr, size_t eltsize, size_t nmemb,
}
struct http_object_request *new_http_object_request(const char *base_url,
unsigned char *sha1)
const struct object_id *oid)
{
char *hex = sha1_to_hex(sha1);
char *hex = oid_to_hex(oid);
struct strbuf filename = STRBUF_INIT;
struct strbuf prevfile = STRBUF_INIT;
int prevlocal;
@ -2350,10 +2350,10 @@ struct http_object_request *new_http_object_request(const char *base_url,
freq = xcalloc(1, sizeof(*freq));
strbuf_init(&freq->tmpfile, 0);
hashcpy(freq->sha1, sha1);
oidcpy(&freq->oid, oid);
freq->localfile = -1;
loose_object_path(the_repository, &filename, sha1);
loose_object_path(the_repository, &filename, oid->hash);
strbuf_addf(&freq->tmpfile, "%s.temp", filename.buf);
strbuf_addf(&prevfile, "%s.prev", filename.buf);
@ -2495,16 +2495,16 @@ int finish_http_object_request(struct http_object_request *freq)
}
git_inflate_end(&freq->stream);
git_SHA1_Final(freq->real_sha1, &freq->c);
git_SHA1_Final(freq->real_oid.hash, &freq->c);
if (freq->zret != Z_STREAM_END) {
unlink_or_warn(freq->tmpfile.buf);
return -1;
}
if (!hasheq(freq->sha1, freq->real_sha1)) {
if (!oideq(&freq->oid, &freq->real_oid)) {
unlink_or_warn(freq->tmpfile.buf);
return -1;
}
loose_object_path(the_repository, &filename, freq->sha1);
loose_object_path(the_repository, &filename, freq->oid.hash);
freq->rename = finalize_object_file(freq->tmpfile.buf, filename.buf);
strbuf_release(&filename);

6
http.h
View File

@ -224,8 +224,8 @@ struct http_object_request {
CURLcode curl_result;
char errorstr[CURL_ERROR_SIZE];
long http_code;
unsigned char sha1[20];
unsigned char real_sha1[20];
struct object_id oid;
struct object_id real_oid;
git_SHA_CTX c;
git_zstream stream;
int zret;
@ -234,7 +234,7 @@ struct http_object_request {
};
extern struct http_object_request *new_http_object_request(
const char *base_url, unsigned char *sha1);
const char *base_url, const struct object_id *oid);
extern void process_http_object_request(struct http_object_request *freq);
extern int finish_http_object_request(struct http_object_request *freq);
extern void abort_http_object_request(struct http_object_request *freq);