зеркало из https://github.com/microsoft/git.git
remote.c: introduce a way to have different remotes for fetch/push
Currently, do_push() in push.c calls remote_get(), which gets the configured remote for fetching and pushing. Replace this call with a call to pushremote_get() instead, a new function that will return the remote configured specifically for pushing. This function tries to work with the string pushremote_name, before falling back to the codepath of remote_get(). This patch has no visible impact, but serves to enable future patches to introduce configuration variables to set pushremote_name. For example, you can now do the following in handle_config(): if (!strcmp(key, "remote.pushdefault")) git_config_string(&pushremote_name, key, value); Then, pushes will automatically go to the remote specified by remote.pushdefault. Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com> Reviewed-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
2e433b7895
Коммит
f24f715e05
|
@ -322,7 +322,7 @@ static int push_with_options(struct transport *transport, int flags)
|
||||||
static int do_push(const char *repo, int flags)
|
static int do_push(const char *repo, int flags)
|
||||||
{
|
{
|
||||||
int i, errs;
|
int i, errs;
|
||||||
struct remote *remote = remote_get(repo);
|
struct remote *remote = pushremote_get(repo);
|
||||||
const char **url;
|
const char **url;
|
||||||
int url_nr;
|
int url_nr;
|
||||||
|
|
||||||
|
|
25
remote.c
25
remote.c
|
@ -49,6 +49,7 @@ static int branches_nr;
|
||||||
|
|
||||||
static struct branch *current_branch;
|
static struct branch *current_branch;
|
||||||
static const char *default_remote_name;
|
static const char *default_remote_name;
|
||||||
|
static const char *pushremote_name;
|
||||||
static int explicit_default_remote_name;
|
static int explicit_default_remote_name;
|
||||||
|
|
||||||
static struct rewrites rewrites;
|
static struct rewrites rewrites;
|
||||||
|
@ -670,17 +671,21 @@ static int valid_remote_nick(const char *name)
|
||||||
return !strchr(name, '/'); /* no slash */
|
return !strchr(name, '/'); /* no slash */
|
||||||
}
|
}
|
||||||
|
|
||||||
struct remote *remote_get(const char *name)
|
static struct remote *remote_get_1(const char *name, const char *pushremote_name)
|
||||||
{
|
{
|
||||||
struct remote *ret;
|
struct remote *ret;
|
||||||
int name_given = 0;
|
int name_given = 0;
|
||||||
|
|
||||||
read_config();
|
|
||||||
if (name)
|
if (name)
|
||||||
name_given = 1;
|
name_given = 1;
|
||||||
else {
|
else {
|
||||||
name = default_remote_name;
|
if (pushremote_name) {
|
||||||
name_given = explicit_default_remote_name;
|
name = pushremote_name;
|
||||||
|
name_given = 1;
|
||||||
|
} else {
|
||||||
|
name = default_remote_name;
|
||||||
|
name_given = explicit_default_remote_name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = make_remote(name, 0);
|
ret = make_remote(name, 0);
|
||||||
|
@ -699,6 +704,18 @@ struct remote *remote_get(const char *name)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct remote *remote_get(const char *name)
|
||||||
|
{
|
||||||
|
read_config();
|
||||||
|
return remote_get_1(name, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct remote *pushremote_get(const char *name)
|
||||||
|
{
|
||||||
|
read_config();
|
||||||
|
return remote_get_1(name, pushremote_name);
|
||||||
|
}
|
||||||
|
|
||||||
int remote_is_configured(const char *name)
|
int remote_is_configured(const char *name)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
1
remote.h
1
remote.h
|
@ -51,6 +51,7 @@ struct remote {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct remote *remote_get(const char *name);
|
struct remote *remote_get(const char *name);
|
||||||
|
struct remote *pushremote_get(const char *name);
|
||||||
int remote_is_configured(const char *name);
|
int remote_is_configured(const char *name);
|
||||||
|
|
||||||
typedef int each_remote_fn(struct remote *remote, void *priv);
|
typedef int each_remote_fn(struct remote *remote, void *priv);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче