Browse Source

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>
maint
Ramkumar Ramachandra 12 years ago committed by Junio C Hamano
parent
commit
f24f715e05
  1. 2
      builtin/push.c
  2. 21
      remote.c
  3. 1
      remote.h

2
builtin/push.c

@ -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;



21
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,18 +671,22 @@ 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 {
if (pushremote_name) {
name = pushremote_name;
name_given = 1;
} else {
name = default_remote_name; name = default_remote_name;
name_given = explicit_default_remote_name; name_given = explicit_default_remote_name;
} }
}


ret = make_remote(name, 0); ret = make_remote(name, 0);
if (valid_remote_nick(name)) { if (valid_remote_nick(name)) {
@ -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

@ -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);

Loading…
Cancel
Save