Skip to content

Commit

Permalink
Add handlers for fetch-side configuration of remotes.
Browse files Browse the repository at this point in the history
These follow the pattern of the push side configuration, but aren't
taken from anywhere else, because git-fetch is still in shell.

Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Daniel Barkalow authored and Junio C Hamano committed May 21, 2007
1 parent 6b62816 commit 5d46c9d
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 0 deletions.
59 changes: 59 additions & 0 deletions remote.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,15 @@ static void add_push_refspec(struct remote *remote, const char *ref)
remote->push_refspec_nr = nr;
}

static void add_fetch_refspec(struct remote *remote, const char *ref)
{
int nr = remote->fetch_refspec_nr + 1;
remote->fetch_refspec =
xrealloc(remote->fetch_refspec, nr * sizeof(char *));
remote->fetch_refspec[nr-1] = ref;
remote->fetch_refspec_nr = nr;
}

static void add_uri(struct remote *remote, const char *uri)
{
int nr = remote->uri_nr + 1;
Expand Down Expand Up @@ -74,6 +83,9 @@ static void read_remotes_file(struct remote *remote)
} else if (!prefixcmp(buffer, "Push:")) {
value_list = 1;
s = buffer + 5;
} else if (!prefixcmp(buffer, "Pull:")) {
value_list = 2;
s = buffer + 5;
} else
continue;

Expand All @@ -93,6 +105,9 @@ static void read_remotes_file(struct remote *remote)
case 1:
add_push_refspec(remote, xstrdup(s));
break;
case 2:
add_fetch_refspec(remote, xstrdup(s));
break;
}
}
fclose(f);
Expand Down Expand Up @@ -174,6 +189,8 @@ static int handle_config(const char *key, const char *value)
add_uri(remote, xstrdup(value));
} else if (!strcmp(subkey, ".push")) {
add_push_refspec(remote, xstrdup(value));
} else if (!strcmp(subkey, ".fetch")) {
add_fetch_refspec(remote, xstrdup(value));
} else if (!strcmp(subkey, ".receivepack")) {
if (!remote->receivepack)
remote->receivepack = xstrdup(value);
Expand Down Expand Up @@ -257,10 +274,52 @@ struct remote *remote_get(const char *name)
add_uri(ret, name);
if (!ret->uri)
return NULL;
ret->fetch = parse_ref_spec(ret->fetch_refspec_nr, ret->fetch_refspec);
ret->push = parse_ref_spec(ret->push_refspec_nr, ret->push_refspec);
return ret;
}

int remote_has_uri(struct remote *remote, const char *uri)
{
int i;
for (i = 0; i < remote->uri_nr; i++) {
if (!strcmp(remote->uri[i], uri))
return 1;
}
return 0;
}

int remote_find_tracking(struct remote *remote, struct refspec *refspec)
{
int i;
for (i = 0; i < remote->fetch_refspec_nr; i++) {
struct refspec *fetch = &remote->fetch[i];
if (!fetch->dst)
continue;
if (fetch->pattern) {
if (!prefixcmp(refspec->src, fetch->src)) {
refspec->dst =
xmalloc(strlen(fetch->dst) +
strlen(refspec->src) -
strlen(fetch->src) + 1);
strcpy(refspec->dst, fetch->dst);
strcpy(refspec->dst + strlen(fetch->dst),
refspec->src + strlen(fetch->src));
refspec->force = fetch->force;
return 0;
}
} else {
if (!strcmp(refspec->src, fetch->src)) {
refspec->dst = xstrdup(fetch->dst);
refspec->force = fetch->force;
return 0;
}
}
}
refspec->dst = NULL;
return -1;
}

static int count_refspec_match(const char *pattern,
struct ref *refs,
struct ref **matched_ref)
Expand Down
11 changes: 11 additions & 0 deletions remote.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,17 @@ struct remote {
struct refspec *push;
int push_refspec_nr;

const char **fetch_refspec;
struct refspec *fetch;
int fetch_refspec_nr;

const char *receivepack;
};

struct remote *remote_get(const char *name);

int remote_has_uri(struct remote *remote, const char *uri);

struct refspec {
unsigned force : 1;
unsigned pattern : 1;
Expand All @@ -27,4 +33,9 @@ struct refspec {
int match_refs(struct ref *src, struct ref *dst, struct ref ***dst_tail,
int nr_refspec, char **refspec, int all);

/*
* For the given remote, reads the refspec's src and sets the other fields.
*/
int remote_find_tracking(struct remote *remote, struct refspec *refspec);

#endif

0 comments on commit 5d46c9d

Please sign in to comment.