remote: move static variables into per-repository struct

remote.c does not works with non-the_repository because it stores its
state as static variables. To support non-the_repository, we can use a
per-repository struct for the remotes subsystem.

Prepare for this change by defining a struct remote_state that holds
the remotes subsystem state and move the static variables of remote.c
into the_repository->remote_state.

This introduces no behavioral or API changes.

Signed-off-by: Glen Choo <chooglen@google.com>
Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Glen Choo
2021-11-17 16:53:22 -08:00
committed by Junio C Hamano
parent e083ef5d54
commit fd3cb0501e
4 changed files with 170 additions and 67 deletions

View File

@@ -23,6 +23,40 @@ enum {
REMOTE_BRANCHES
};
struct rewrite {
const char *base;
size_t baselen;
struct counted_string *instead_of;
int instead_of_nr;
int instead_of_alloc;
};
struct rewrites {
struct rewrite **rewrite;
int rewrite_alloc;
int rewrite_nr;
};
struct remote_state {
struct remote **remotes;
int remotes_alloc;
int remotes_nr;
struct hashmap remotes_hash;
struct branch **branches;
int branches_alloc;
int branches_nr;
struct branch *current_branch;
const char *pushremote_name;
struct rewrites rewrites;
struct rewrites rewrites_push;
};
void remote_state_clear(struct remote_state *remote_state);
struct remote_state *remote_state_new(void);
struct remote {
struct hashmap_entry ent;