Fix branches file configuration
Fetched remote branch from .git/branches/foo should fetch into refs/heads/foo. Also when partial URL is given, the fetched head should always be remote HEAD, and the result should not be stored anywhere. Signed-off-by: Daniel Barkalow <barkalow@iabervon.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
c091b3d415
commit
472fa4cd33
28
remote.c
28
remote.c
@ -171,7 +171,7 @@ static void read_branches_file(struct remote *remote)
|
||||
{
|
||||
const char *slash = strchr(remote->name, '/');
|
||||
char *frag;
|
||||
char *branch;
|
||||
struct strbuf branch;
|
||||
int n = slash ? slash - remote->name : 1000;
|
||||
FILE *f = fopen(git_path("branches/%.*s", n, remote->name), "r");
|
||||
char *s, *p;
|
||||
@ -197,17 +197,33 @@ static void read_branches_file(struct remote *remote)
|
||||
strcpy(p, s);
|
||||
if (slash)
|
||||
strcat(p, slash);
|
||||
|
||||
/*
|
||||
* With "slash", e.g. "git fetch jgarzik/netdev-2.6" when
|
||||
* reading from $GIT_DIR/branches/jgarzik fetches "HEAD" from
|
||||
* the partial URL obtained from the branches file plus
|
||||
* "/netdev-2.6" and does not store it in any tracking ref.
|
||||
* #branch specifier in the file is ignored.
|
||||
*
|
||||
* Otherwise, the branches file would have URL and optionally
|
||||
* #branch specified. The "master" (or specified) branch is
|
||||
* fetched and stored in the local branch of the same name.
|
||||
*/
|
||||
strbuf_init(&branch, 0);
|
||||
frag = strchr(p, '#');
|
||||
if (frag) {
|
||||
*(frag++) = '\0';
|
||||
branch = xmalloc(strlen(frag) + 12);
|
||||
strcpy(branch, "refs/heads/");
|
||||
strcat(branch, frag);
|
||||
strbuf_addf(&branch, "refs/heads/%s", frag);
|
||||
} else
|
||||
strbuf_addstr(&branch, "refs/heads/master");
|
||||
if (!slash) {
|
||||
strbuf_addf(&branch, ":refs/heads/%s", remote->name);
|
||||
} else {
|
||||
branch = "refs/heads/master";
|
||||
strbuf_reset(&branch);
|
||||
strbuf_addstr(&branch, "HEAD:");
|
||||
}
|
||||
add_url(remote, p);
|
||||
add_fetch_refspec(remote, branch);
|
||||
add_fetch_refspec(remote, strbuf_detach(&branch, 0));
|
||||
remote->fetch_tags = 1; /* always auto-follow */
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user