diff --git a/remote.c b/remote.c
index d7079c6dd871dc1b482d347d013438fe30cc0908..c7a8c2b1fbdea9aa03d8a5ccd8cbfb39eed742df 100644 (file)
--- a/remote.c
+++ b/remote.c
static struct branch *current_branch;
static const char *default_remote_name;
static struct branch *current_branch;
static const char *default_remote_name;
+static int explicit_default_remote_name;
static struct rewrite **rewrite;
static int rewrite_alloc;
static struct rewrite **rewrite;
static int rewrite_alloc;
if (!value)
return config_error_nonbool(key);
branch->remote_name = xstrdup(value);
if (!value)
return config_error_nonbool(key);
branch->remote_name = xstrdup(value);
- if (branch == current_branch)
+ if (branch == current_branch) {
default_remote_name = branch->remote_name;
default_remote_name = branch->remote_name;
+ explicit_default_remote_name = 1;
+ }
} else if (!strcmp(subkey, ".merge")) {
if (!value)
return config_error_nonbool(key);
} else if (!strcmp(subkey, ".merge")) {
if (!value)
return config_error_nonbool(key);
struct remote *remote_get(const char *name)
{
struct remote *ret;
struct remote *remote_get(const char *name)
{
struct remote *ret;
+ int name_given = 0;
read_config();
read_config();
- if (!name)
+ if (name)
+ name_given = 1;
+ else {
name = default_remote_name;
name = default_remote_name;
+ name_given = explicit_default_remote_name;
+ }
+
ret = make_remote(name, 0);
if (valid_remote_nick(name)) {
if (!ret->url)
ret = make_remote(name, 0);
if (valid_remote_nick(name)) {
if (!ret->url)
if (!ret->url)
read_branches_file(ret);
}
if (!ret->url)
read_branches_file(ret);
}
- if (!ret->url)
+ if (name_given && !ret->url)
add_url_alias(ret, name);
if (!ret->url)
return NULL;
add_url_alias(ret, name);
if (!ret->url)
return NULL;