Wrap rewrite globals in a struct in preparation for adding another set
remote.c has a global set of URL rewrites, accessed by alias_url and make_rewrite. Wrap them in a new "struct rewrites", passed to alias_url and make_rewrite. This allows adding other sets of rewrites. Signed-off-by: Josh Triplett <josh@joshtriplett.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Josh Triplett committed
Sep 7, 2009 at 01:56 UTC
d071d942963fa76b11826f25c54fdfd8b09d7626
1 file changed
+28
-25
remote.c
+28
-25
@@ -28,6 +28,11 @@ struct rewrite {
28
int instead_of_nr;
29
int instead_of_alloc;
30
};
31
+struct rewrites {
32
+ struct rewrite **rewrite;
33
+ int rewrite_alloc;
34
+ int rewrite_nr;
35
+};
36
37
static struct remote **remotes;
38
static int remotes_alloc;
@@ -41,14 +46,12 @@ static struct branch *current_branch;
46
static const char *default_remote_name;
47
static int explicit_default_remote_name;
48
44
-static struct rewrite **rewrite;
45
-static int rewrite_alloc;
46
-static int rewrite_nr;
49
+static struct rewrites rewrites;
50
51
#define BUF_SIZE (2048)
52
static char buffer[BUF_SIZE];
53
51
-static const char *alias_url(const char *url)
54
+static const char *alias_url(const char *url, struct rewrites *r)
55
{
56
int i, j;
57
char *ret;
@@ -57,14 +60,14 @@ static const char *alias_url(const char *url)
60
61
longest = NULL;
62
longest_i = -1;
60
- for (i = 0; i < rewrite_nr; i++) {
61
- if (!rewrite[i])
63
+ for (i = 0; i < r->rewrite_nr; i++) {
64
+ if (!r->rewrite[i])
65
continue;
63
- for (j = 0; j < rewrite[i]->instead_of_nr; j++) {
64
- if (!prefixcmp(url, rewrite[i]->instead_of[j].s) &&
66
+ for (j = 0; j < r->rewrite[i]->instead_of_nr; j++) {
67
+ if (!prefixcmp(url, r->rewrite[i]->instead_of[j].s) &&
68
(!longest ||
66
- longest->len < rewrite[i]->instead_of[j].len)) {
67
- longest = &(rewrite[i]->instead_of[j]);
69
+ longest->len < r->rewrite[i]->instead_of[j].len)) {
70
+ longest = &(r->rewrite[i]->instead_of[j]);
71
longest_i = i;
72
}
73
}
@@ -72,10 +75,10 @@ static const char *alias_url(const char *url)
75
if (!longest)
76
return url;
77
75
- ret = xmalloc(rewrite[longest_i]->baselen +
78
+ ret = xmalloc(r->rewrite[longest_i]->baselen +
79
(strlen(url) - longest->len) + 1);
77
- strcpy(ret, rewrite[longest_i]->base);
78
- strcpy(ret + rewrite[longest_i]->baselen, url + longest->len);
80
+ strcpy(ret, r->rewrite[longest_i]->base);
81
+ strcpy(ret + r->rewrite[longest_i]->baselen, url + longest->len);
82
return ret;
83
}
84
@@ -103,7 +106,7 @@ static void add_url(struct remote *remote, const char *url)
106
107
static void add_url_alias(struct remote *remote, const char *url)
108
{
106
- add_url(remote, alias_url(url));
109
+ add_url(remote, alias_url(url, &rewrites));
110
}
111
112
static void add_pushurl(struct remote *remote, const char *pushurl)
@@ -169,22 +172,22 @@ static struct branch *make_branch(const char *name, int len)
172
return ret;
173
}
174
172
-static struct rewrite *make_rewrite(const char *base, int len)
175
+static struct rewrite *make_rewrite(struct rewrites *r, const char *base, int len)
176
{
177
struct rewrite *ret;
178
int i;
179
177
- for (i = 0; i < rewrite_nr; i++) {
180
+ for (i = 0; i < r->rewrite_nr; i++) {
181
if (len
179
- ? (len == rewrite[i]->baselen &&
180
- !strncmp(base, rewrite[i]->base, len))
181
- : !strcmp(base, rewrite[i]->base))
182
- return rewrite[i];
182
+ ? (len == r->rewrite[i]->baselen &&
183
+ !strncmp(base, r->rewrite[i]->base, len))
184
+ : !strcmp(base, r->rewrite[i]->base))
185
+ return r->rewrite[i];
186
}
187
185
- ALLOC_GROW(rewrite, rewrite_nr + 1, rewrite_alloc);
188
+ ALLOC_GROW(r->rewrite, r->rewrite_nr + 1, r->rewrite_alloc);
189
ret = xcalloc(1, sizeof(struct rewrite));
187
- rewrite[rewrite_nr++] = ret;
190
+ r->rewrite[r->rewrite_nr++] = ret;
191
if (len) {
192
ret->base = xstrndup(base, len);
193
ret->baselen = len;
@@ -355,7 +358,7 @@ static int handle_config(const char *key, const char *value, void *cb)
358
subkey = strrchr(name, '.');
359
if (!subkey)
360
return 0;
358
- rewrite = make_rewrite(name, subkey - name);
361
+ rewrite = make_rewrite(&rewrites, name, subkey - name);
362
if (!strcmp(subkey, ".insteadof")) {
363
if (!value)
364
return config_error_nonbool(key);
@@ -433,10 +436,10 @@ static void alias_all_urls(void)
436
if (!remotes[i])
437
continue;
438
for (j = 0; j < remotes[i]->url_nr; j++) {
436
- remotes[i]->url[j] = alias_url(remotes[i]->url[j]);
439
+ remotes[i]->url[j] = alias_url(remotes[i]->url[j], &rewrites);
440
}
441
for (j = 0; j < remotes[i]->pushurl_nr; j++) {
439
- remotes[i]->pushurl[j] = alias_url(remotes[i]->pushurl[j]);
442
+ remotes[i]->pushurl[j] = alias_url(remotes[i]->pushurl[j], &rewrites);
443
}
444
}
445
}