Am 05.12.2018 um 09:15 schrieb Jeff King: > On Wed, Dec 05, 2018 at 01:51:36AM -0500, Jeff King wrote: > >>> This >>> function is easily converted to struct object_id, though, as its single >>> caller can pass one on -- this makes the copy unnecessary. >> >> If you mean modifying sha1_loose_object_info() to take an oid, then >> sure, I agree that is a good step forward (and that is exactly the "punt >> until" moment I meant). > > So the simple thing is to do that, and then have it pass oid->hash to > the other functions it uses. Yes. > If we start to convert those, there's a > little bit of a rabbit hole, but it's actually not too bad. You don't need to crawl in just for quick_has_loose(), but eventually everything has to be converted. It seems a bit much for one patch, but perhaps that's just my ever-decreasing attention span speaking. Converting one function prototype or struct member at a time seems about the right amount of change per patch to me. That's not always possible due to entanglement, of course. > Most of the spill-over is into the dumb-http code. Note that it actually > uses sha1 itself! That probably needs to be the_hash_algo (though I'm > not even sure how we'd negotiate the algorithm across a dumb fetch). At > any rate, I don't think this patch makes anything _worse_ in that > respect. Right. > diff --git a/sha1-file.c b/sha1-file.c > index 3ddf4c9426..0705709036 100644 > --- a/sha1-file.c > +++ b/sha1-file.c > @@ -333,12 +333,12 @@ int raceproof_create_file(const char *path, create_file_fn fn, void *cb) > return ret; > } > > -static void fill_sha1_path(struct strbuf *buf, const unsigned char *sha1) > +static void fill_loose_path(struct strbuf *buf, const struct object_id *oid) The new name fits. > @@ -879,15 +879,15 @@ int git_open_cloexec(const char *name, int flags) > * Note that it may point to static storage and is only valid until another > * call to stat_sha1_file(). > */ > -static int stat_sha1_file(struct repository *r, const unsigned char *sha1, > - struct stat *st, const char **path) > +static int stat_loose_object(struct repository *r, const struct object_id *oid, > + struct stat *st, const char **path) Hmm, read_sha1_file() was renamed to read_object_file() earlier this year, and I'd have expected this to become stat_object_file(). Names.. Anyway, the comment above and one a few lines below should be updated as well. > { > struct object_directory *odb; > static struct strbuf buf = STRBUF_INIT; > > prepare_alt_odb(r); > for (odb = r->objects->odb; odb; odb = odb->next) { > - *path = odb_loose_path(odb, &buf, sha1); > + *path = odb_loose_path(odb, &buf, oid); > if (!lstat(*path, st)) > return 0; > } > @@ -900,7 +900,7 @@ static int stat_sha1_file(struct repository *r, const unsigned char *sha1, > * descriptor. See the caveats on the "path" parameter above. > */ > static int open_sha1_file(struct repository *r, > - const unsigned char *sha1, const char **path) > + const struct object_id *oid, const char **path) That function should lose the "sha1" in its name as well. > -static void *map_sha1_file_1(struct repository *r, const char *path, > - const unsigned char *sha1, unsigned long *size) > +static void *map_loose_object_1(struct repository *r, const char *path, > + const struct object_id *oid, unsigned long *size) Similarly, map_object_file_1()? > -void *map_sha1_file(struct repository *r, > - const unsigned char *sha1, unsigned long *size) > +void *map_loose_object(struct repository *r, > + const struct object_id *oid, > + unsigned long *size) Similar. > @@ -1045,7 +1043,9 @@ static int unpack_sha1_header_to_strbuf(git_zstream *stream, unsigned char *map, > return -1; > } > > -static void *unpack_sha1_rest(git_zstream *stream, void *buffer, unsigned long size, const unsigned char *sha1) > +static void *unpack_loose_rest(git_zstream *stream, > + void *buffer, unsigned long size, > + const struct object_id *oid) Hmm, both old and new name here look weird to me at this point. > -static int sha1_loose_object_info(struct repository *r, > - const unsigned char *sha1, > - struct object_info *oi, int flags) > +static int loose_object_info(struct repository *r, > + const struct object_id *oid, > + struct object_info *oi, int flags) And nothing of value was lost. :) René