Re: [PATCH] defaults for where to merge from (take 3, inline)
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Mar 2, 2007, 11:19 UTC
- Message-ID
- <Pine.LNX.4.63.0703021202080.22628@wbgn013.biozentrum.uni-wuerzburg.de>
- In-Reply-To
- <45E7DC04.5010701@lu.unisi.ch>
Hi,
On Fri, 2 Mar 2007, Paolo Bonzini wrote:
Show 6 quoted lines
> >> + 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