bundle: get (mostly) rid of `the_repository`
Refactor "bundle.c" so that we don't depend on `the_repository` anymore. This conversion is trivial for most of the part, as we already have a repository available in all calling conexts. The only exception is that we use `get_log_output_encoding()`, which implicitly depends on `the_repository`. Add an `extern` declaration for this function so that we can drop `USE_THE_REPOSITORY_VARIABLE` and not accidentally introduce more uses of `the_repository`. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>main
parent
3f0986b27c
commit
9e8558a31d
32
bundle.c
32
bundle.c
|
|
@ -1,4 +1,3 @@
|
|||
#define USE_THE_REPOSITORY_VARIABLE
|
||||
#define DISABLE_SIGN_COMPARE_WARNINGS
|
||||
|
||||
#include "git-compat-util.h"
|
||||
|
|
@ -21,6 +20,13 @@
|
|||
#include "connected.h"
|
||||
#include "write-or-die.h"
|
||||
|
||||
/*
|
||||
* NEEDSWORK: this function implicitly depends on `the_repository` and is not
|
||||
* available because we dropped USE_THE_REPOSITORY_VARIABLE. We can remove the
|
||||
* declaration once it's accessible via `repo_config_values`.
|
||||
*/
|
||||
extern const char *get_log_output_encoding(void);
|
||||
|
||||
static const char v2_bundle_signature[] = "# v2 git bundle\n";
|
||||
static const char v3_bundle_signature[] = "# v3 git bundle\n";
|
||||
static struct {
|
||||
|
|
@ -294,7 +300,8 @@ int list_bundle_refs(struct bundle_header *header, int argc, const char **argv)
|
|||
return list_refs(&header->references, argc, argv);
|
||||
}
|
||||
|
||||
static int is_tag_in_date_range(struct object *tag, struct rev_info *revs)
|
||||
static int is_tag_in_date_range(struct repository *repo,
|
||||
struct object *tag, struct rev_info *revs)
|
||||
{
|
||||
size_t size;
|
||||
enum object_type type;
|
||||
|
|
@ -305,7 +312,7 @@ static int is_tag_in_date_range(struct object *tag, struct rev_info *revs)
|
|||
if (revs->max_age == -1 && revs->min_age == -1)
|
||||
goto out;
|
||||
|
||||
buf = odb_read_object(the_repository->objects, &tag->oid, &type, &size);
|
||||
buf = odb_read_object(repo->objects, &tag->oid, &type, &size);
|
||||
if (!buf)
|
||||
goto out;
|
||||
line = memmem(buf, size, "\ntagger ", 8);
|
||||
|
|
@ -362,7 +369,8 @@ static int write_pack_data(int bundle_fd, struct rev_info *revs, struct strvec *
|
|||
struct object *object = revs->pending.objects[i].item;
|
||||
if (object->flags & UNINTERESTING)
|
||||
write_or_die(pack_objects.in, "^", 1);
|
||||
write_or_die(pack_objects.in, oid_to_hex(&object->oid), the_hash_algo->hexsz);
|
||||
write_or_die(pack_objects.in, oid_to_hex(&object->oid),
|
||||
revs->repo->hash_algo->hexsz);
|
||||
write_or_die(pack_objects.in, "\n", 1);
|
||||
}
|
||||
close(pack_objects.in);
|
||||
|
|
@ -395,10 +403,10 @@ static int write_bundle_refs(int bundle_fd, struct rev_info *revs)
|
|||
|
||||
if (e->item->flags & UNINTERESTING)
|
||||
continue;
|
||||
if (repo_dwim_ref(the_repository, e->name, strlen(e->name),
|
||||
if (repo_dwim_ref(revs->repo, e->name, strlen(e->name),
|
||||
&oid, &ref, 0) != 1)
|
||||
goto skip_write_ref;
|
||||
if (refs_read_ref_full(get_main_ref_store(the_repository), e->name, RESOLVE_REF_READING, &oid, &flag))
|
||||
if (refs_read_ref_full(get_main_ref_store(revs->repo), e->name, RESOLVE_REF_READING, &oid, &flag))
|
||||
flag = 0;
|
||||
display_ref = (flag & REF_ISSYMREF) ? e->name : ref;
|
||||
|
||||
|
|
@ -406,7 +414,7 @@ static int write_bundle_refs(int bundle_fd, struct rev_info *revs)
|
|||
goto skip_write_ref;
|
||||
|
||||
if (e->item->type == OBJ_TAG &&
|
||||
!is_tag_in_date_range(e->item, revs)) {
|
||||
!is_tag_in_date_range(revs->repo, e->item, revs)) {
|
||||
e->item->flags |= UNINTERESTING;
|
||||
goto skip_write_ref;
|
||||
}
|
||||
|
|
@ -428,7 +436,8 @@ static int write_bundle_refs(int bundle_fd, struct rev_info *revs)
|
|||
|
||||
ref_count++;
|
||||
strset_add(&objects, display_ref);
|
||||
write_or_die(bundle_fd, oid_to_hex(&e->item->oid), the_hash_algo->hexsz);
|
||||
write_or_die(bundle_fd, oid_to_hex(&e->item->oid),
|
||||
revs->repo->hash_algo->hexsz);
|
||||
write_or_die(bundle_fd, " ", 1);
|
||||
write_or_die(bundle_fd, display_ref, strlen(display_ref));
|
||||
write_or_die(bundle_fd, "\n", 1);
|
||||
|
|
@ -507,7 +516,7 @@ int create_bundle(struct repository *r, const char *path,
|
|||
* SHA1.
|
||||
* 2. @filter is required because we parsed an object filter.
|
||||
*/
|
||||
if (the_hash_algo != &hash_algos[GIT_HASH_SHA1_LEGACY] || revs.filter.choice)
|
||||
if (r->hash_algo != &hash_algos[GIT_HASH_SHA1_LEGACY] || revs.filter.choice)
|
||||
min_version = 3;
|
||||
|
||||
if (argc > 1) {
|
||||
|
|
@ -528,14 +537,15 @@ int create_bundle(struct repository *r, const char *path,
|
|||
if (version < 2 || version > 3) {
|
||||
die(_("unsupported bundle version %d"), version);
|
||||
} else if (version < min_version) {
|
||||
die(_("cannot write bundle version %d with algorithm %s"), version, the_hash_algo->name);
|
||||
die(_("cannot write bundle version %d with algorithm %s"), version,
|
||||
r->hash_algo->name);
|
||||
} else if (version == 2) {
|
||||
write_or_die(bundle_fd, v2_bundle_signature, strlen(v2_bundle_signature));
|
||||
} else {
|
||||
const char *capability = "@object-format=";
|
||||
write_or_die(bundle_fd, v3_bundle_signature, strlen(v3_bundle_signature));
|
||||
write_or_die(bundle_fd, capability, strlen(capability));
|
||||
write_or_die(bundle_fd, the_hash_algo->name, strlen(the_hash_algo->name));
|
||||
write_or_die(bundle_fd, r->hash_algo->name, strlen(r->hash_algo->name));
|
||||
write_or_die(bundle_fd, "\n", 1);
|
||||
|
||||
if (revs.filter.choice) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue