diff options
| author | Junio C Hamano <gitster@pobox.com> | 2020-02-14 12:54:22 -0800 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2020-02-14 12:54:22 -0800 |
| commit | 78e67cda42a440f216fc4cbfd8a9e190c5eece5a (patch) | |
| tree | 6e1f8349af8dc8ba249a6fd9f4367ef8e983a55d /streaming.c | |
| parent | df04a316176d5ba44422c2c6b0cb1a9fc31901e5 (diff) | |
| parent | b98d18858187eb926912d5199533a6d2a14d5007 (diff) | |
| download | git-78e67cda42a440f216fc4cbfd8a9e190c5eece5a.tar.xz | |
Merge branch 'mt/use-passed-repo-more-in-funcs'
Some codepaths were given a repository instance as a parameter to
work in the repository, but passed the_repository instance to its
callees, which has been cleaned up (somewhat).
* mt/use-passed-repo-more-in-funcs:
sha1-file: allow check_object_signature() to handle any repo
sha1-file: pass git_hash_algo to hash_object_file()
sha1-file: pass git_hash_algo to write_object_file_prepare()
streaming: allow open_istream() to handle any repo
pack-check: use given repo's hash_algo at verify_packfile()
cache-tree: use given repo's hash_algo at verify_one()
diff: make diff_populate_filespec() honor its repo argument
Diffstat (limited to 'streaming.c')
| -rw-r--r-- | streaming.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/streaming.c b/streaming.c index fcd6303219..800f07a52c 100644 --- a/streaming.c +++ b/streaming.c @@ -16,6 +16,7 @@ enum input_source { }; typedef int (*open_istream_fn)(struct git_istream *, + struct repository *, struct object_info *, const struct object_id *, enum object_type *); @@ -29,8 +30,8 @@ struct stream_vtbl { #define open_method_decl(name) \ int open_istream_ ##name \ - (struct git_istream *st, struct object_info *oi, \ - const struct object_id *oid, \ + (struct git_istream *st, struct repository *r, \ + struct object_info *oi, const struct object_id *oid, \ enum object_type *type) #define close_method_decl(name) \ @@ -108,7 +109,8 @@ ssize_t read_istream(struct git_istream *st, void *buf, size_t sz) return st->vtbl->read(st, buf, sz); } -static enum input_source istream_source(const struct object_id *oid, +static enum input_source istream_source(struct repository *r, + const struct object_id *oid, enum object_type *type, struct object_info *oi) { @@ -117,7 +119,7 @@ static enum input_source istream_source(const struct object_id *oid, oi->typep = type; oi->sizep = &size; - status = oid_object_info_extended(the_repository, oid, oi, 0); + status = oid_object_info_extended(r, oid, oi, 0); if (status < 0) return stream_error; @@ -133,22 +135,23 @@ static enum input_source istream_source(const struct object_id *oid, } } -struct git_istream *open_istream(const struct object_id *oid, +struct git_istream *open_istream(struct repository *r, + const struct object_id *oid, enum object_type *type, unsigned long *size, struct stream_filter *filter) { struct git_istream *st; struct object_info oi = OBJECT_INFO_INIT; - const struct object_id *real = lookup_replace_object(the_repository, oid); - enum input_source src = istream_source(real, type, &oi); + const struct object_id *real = lookup_replace_object(r, oid); + enum input_source src = istream_source(r, real, type, &oi); if (src < 0) return NULL; st = xmalloc(sizeof(*st)); - if (open_istream_tbl[src](st, &oi, real, type)) { - if (open_istream_incore(st, &oi, real, type)) { + if (open_istream_tbl[src](st, r, &oi, real, type)) { + if (open_istream_incore(st, r, &oi, real, type)) { free(st); return NULL; } @@ -338,8 +341,7 @@ static struct stream_vtbl loose_vtbl = { static open_method_decl(loose) { - st->u.loose.mapped = map_loose_object(the_repository, - oid, &st->u.loose.mapsize); + st->u.loose.mapped = map_loose_object(r, oid, &st->u.loose.mapsize); if (!st->u.loose.mapped) return -1; if ((unpack_loose_header(&st->z, @@ -499,7 +501,7 @@ static struct stream_vtbl incore_vtbl = { static open_method_decl(incore) { - st->u.incore.buf = read_object_file_extended(the_repository, oid, type, &st->size, 0); + st->u.incore.buf = read_object_file_extended(r, oid, type, &st->size, 0); st->u.incore.read_ptr = 0; st->vtbl = &incore_vtbl; @@ -520,7 +522,7 @@ int stream_blob_to_fd(int fd, const struct object_id *oid, struct stream_filter ssize_t kept = 0; int result = -1; - st = open_istream(oid, &type, &sz, filter); + st = open_istream(the_repository, oid, &type, &sz, filter); if (!st) { if (filter) free_stream_filter(filter); |
