Re: [PATCH] defaults for where to merge from (take 3, inline)
From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:42:57
Hi, On Fri, 2 Mar 2007, Paolo Bonzini wrote:
quoted
quoted
+ remote_value[slash - remote_name] = 0;You should check if slash == NULL and error out before using it.remote_name is of the form "REMOTE/BRANCH", because it comes from dwim_ref's output after stripping "refs/remotes/" from the beginning.
You can create a new "remote" branch anytime by
$ git update-ref refs/remotes/lirumlarum HEAD
Your code would realize that it is a remote ref, strip "refs/remotes/",
and then call strchr("lirumlarum", '/'), which returns NULL.
On a related note, it _might_ make sense to check that the remote
information is set as expected:
static const char *remote_name;
static int found_remote, remote_name_len;
static int find_remote(const char *key, const char *value) {
/*
* This checks if
* remote.<bla>.fetch == refs/heads/*:refs/heads/<bla>/*
* where <bla> is the remote_name.
*/
if (!prefixcmp(key, "remote.") &&
!prefixcmp(key + 7, remote_name) &&
!strcmp(key + 7 + remote_name_len,
".fetch") &&
value &&
!prefixcmp(value,
"refs/heads/*:refs/remotes/") &&
!prefixcmp(value + 26, remote_name) &&
!strcmp(value + 26 + remote_name, "/*")) {
found_remote = 1;
return -1; /* stop parsing config */
}
return 0;
}
and then in remote_pull():
found_remote = 0;
remote_name = branch_name;
remote_name_len = slash - branch_name;
git_config(find_remote);
if (!found_remote) {
warn("Remote %s was not created with git-remote; "
"will not add it as default merge source to %s",
branch_name, name);
return;
}
We could rely on new git users not to fiddle with the remote information
in the config, and old-timers still using .git/remotes/ or .git/branches
would be told why the default merge information was not set up.
Ciao,
Dscho