Skip to content

Commit c26da34

Browse files
pks-tgitster
authored andcommitted
streaming: get rid of the_repository
Subsequent commits will move the backend-specific logic of object streaming into their respective subsystems. These subsystems have gotten rid of `the_repository` already, but we still use it in two locations in the streaming subsystem. Prepare for the move by fixing those two cases. Converting the logic in `open_istream_pack_non_delta()` is trivial as we already got the object database as input. But for `stream_blob_to_fd()` we have to add a new parameter to make it accessible. So, as we already have to adjust all callers anyway, rename the function to `odb_stream_blob_to_fd()` to indicate it's part of the object subsystem. Signed-off-by: Patrick Steinhardt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 4c89d31 commit c26da34

File tree

7 files changed

+32
-13
lines changed

7 files changed

+32
-13
lines changed

builtin/cat-file.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ static int filter_object(const char *path, unsigned mode,
9595

9696
static int stream_blob(const struct object_id *oid)
9797
{
98-
if (stream_blob_to_fd(1, oid, NULL, 0))
98+
if (odb_stream_blob_to_fd(the_repository->objects, 1, oid, NULL, 0))
9999
die("unable to stream %s to stdout", oid_to_hex(oid));
100100
return 0;
101101
}

builtin/fsck.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,8 @@ static void check_unreachable_object(struct object *obj)
340340
}
341341
f = xfopen(filename, "w");
342342
if (obj->type == OBJ_BLOB) {
343-
if (stream_blob_to_fd(fileno(f), &obj->oid, NULL, 1))
343+
if (odb_stream_blob_to_fd(the_repository->objects, fileno(f),
344+
&obj->oid, NULL, 1))
344345
die_errno(_("could not write '%s'"), filename);
345346
} else
346347
fprintf(f, "%s\n", describe_object(&obj->oid));

builtin/log.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -584,7 +584,7 @@ static int show_blob_object(const struct object_id *oid, struct rev_info *rev, c
584584
fflush(rev->diffopt.file);
585585
if (!rev->diffopt.flags.textconv_set_via_cmdline ||
586586
!rev->diffopt.flags.allow_textconv)
587-
return stream_blob_to_fd(1, oid, NULL, 0);
587+
return odb_stream_blob_to_fd(the_repository->objects, 1, oid, NULL, 0);
588588

589589
if (get_oid_with_context(the_repository, obj_name,
590590
GET_OID_RECORD_PATH,
@@ -594,7 +594,7 @@ static int show_blob_object(const struct object_id *oid, struct rev_info *rev, c
594594
!textconv_object(the_repository, obj_context.path,
595595
obj_context.mode, &oidc, 1, &buf, &size)) {
596596
object_context_release(&obj_context);
597-
return stream_blob_to_fd(1, oid, NULL, 0);
597+
return odb_stream_blob_to_fd(the_repository->objects, 1, oid, NULL, 0);
598598
}
599599

600600
if (!buf)

entry.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ static int streaming_write_entry(const struct cache_entry *ce, char *path,
139139
if (fd < 0)
140140
return -1;
141141

142-
result |= stream_blob_to_fd(fd, &ce->oid, filter, 1);
142+
result |= odb_stream_blob_to_fd(the_repository->objects, fd, &ce->oid, filter, 1);
143143
*fstat_done = fstat_checkout_output(fd, state, statbuf);
144144
result |= close(fd);
145145

parallel-checkout.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,8 @@ static int write_pc_item_to_fd(struct parallel_checkout_item *pc_item, int fd,
281281

282282
filter = get_stream_filter_ca(&pc_item->ca, &pc_item->ce->oid);
283283
if (filter) {
284-
if (stream_blob_to_fd(fd, &pc_item->ce->oid, filter, 1)) {
284+
if (odb_stream_blob_to_fd(the_repository->objects, fd,
285+
&pc_item->ce->oid, filter, 1)) {
285286
/* On error, reset fd to try writing without streaming */
286287
if (reset_fd(fd, path))
287288
return -1;

streaming.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
* Copyright (c) 2011, Google Inc.
33
*/
44

5-
#define USE_THE_REPOSITORY_VARIABLE
6-
75
#include "git-compat-util.h"
86
#include "convert.h"
97
#include "environment.h"
@@ -359,7 +357,7 @@ static int open_istream_pack_non_delta(struct odb_read_stream **out,
359357

360358
if (packfile_store_read_object_info(odb->packfiles, oid, &oi, 0) ||
361359
oi.u.packed.is_delta ||
362-
repo_settings_get_big_file_threshold(the_repository) >= size)
360+
repo_settings_get_big_file_threshold(odb->repo) >= size)
363361
return -1;
364362

365363
in_pack_type = unpack_object_header(oi.u.packed.pack,
@@ -518,16 +516,19 @@ struct odb_read_stream *open_istream(struct repository *r,
518516
return st;
519517
}
520518

521-
int stream_blob_to_fd(int fd, const struct object_id *oid, struct stream_filter *filter,
522-
int can_seek)
519+
int odb_stream_blob_to_fd(struct object_database *odb,
520+
int fd,
521+
const struct object_id *oid,
522+
struct stream_filter *filter,
523+
int can_seek)
523524
{
524525
struct odb_read_stream *st;
525526
enum object_type type;
526527
unsigned long sz;
527528
ssize_t kept = 0;
528529
int result = -1;
529530

530-
st = open_istream(the_repository, oid, &type, &sz, filter);
531+
st = open_istream(odb->repo, oid, &type, &sz, filter);
531532
if (!st) {
532533
if (filter)
533534
free_stream_filter(filter);

streaming.h

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
#include "object.h"
88

9+
struct object_database;
910
/* opaque */
1011
struct odb_read_stream;
1112
struct stream_filter;
@@ -16,6 +17,21 @@ struct odb_read_stream *open_istream(struct repository *, const struct object_id
1617
int close_istream(struct odb_read_stream *);
1718
ssize_t read_istream(struct odb_read_stream *, void *, size_t);
1819

19-
int stream_blob_to_fd(int fd, const struct object_id *, struct stream_filter *, int can_seek);
20+
/*
21+
* Look up the object by its ID and write the full contents to the file
22+
* descriptor. The object must be a blob, or the function will fail. When
23+
* provided, the filter is used to transform the blob contents.
24+
*
25+
* `can_seek` should be set to 1 in case the given file descriptor can be
26+
* seek(3p)'d on. This is used to support files with holes in case a
27+
* significant portion of the blob contains NUL bytes.
28+
*
29+
* Returns a negative error code on failure, 0 on success.
30+
*/
31+
int odb_stream_blob_to_fd(struct object_database *odb,
32+
int fd,
33+
const struct object_id *oid,
34+
struct stream_filter *filter,
35+
int can_seek);
2036

2137
#endif /* STREAMING_H */

0 commit comments

Comments
 (0)