@@ -28,6 +28,11 @@ struct rewrite {
28
28
int instead_of_nr ;
29
29
int instead_of_alloc ;
30
30
};
31
+ struct rewrites {
32
+ struct rewrite * * rewrite ;
33
+ int rewrite_alloc ;
34
+ int rewrite_nr ;
35
+ };
31
36
32
37
static struct remote * * remotes ;
33
38
static int remotes_alloc ;
@@ -41,14 +46,12 @@ static struct branch *current_branch;
41
46
static const char * default_remote_name ;
42
47
static int explicit_default_remote_name ;
43
48
44
- static struct rewrite * * rewrite ;
45
- static int rewrite_alloc ;
46
- static int rewrite_nr ;
49
+ static struct rewrites rewrites ;
47
50
48
51
#define BUF_SIZE (2048)
49
52
static char buffer [BUF_SIZE ];
50
53
51
- static const char * alias_url (const char * url )
54
+ static const char * alias_url (const char * url , struct rewrites * r )
52
55
{
53
56
int i , j ;
54
57
char * ret ;
@@ -57,25 +60,25 @@ static const char *alias_url(const char *url)
57
60
58
61
longest = NULL ;
59
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 ])
62
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 ) &&
65
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 ]);
68
71
longest_i = i ;
69
72
}
70
73
}
71
74
}
72
75
if (!longest )
73
76
return url ;
74
77
75
- ret = xmalloc (rewrite [longest_i ]-> baselen +
78
+ ret = xmalloc (r -> rewrite [longest_i ]-> baselen +
76
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 );
79
82
return ret ;
80
83
}
81
84
@@ -103,7 +106,7 @@ static void add_url(struct remote *remote, const char *url)
103
106
104
107
static void add_url_alias (struct remote * remote , const char * url )
105
108
{
106
- add_url (remote , alias_url (url ));
109
+ add_url (remote , alias_url (url , & rewrites ));
107
110
}
108
111
109
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)
169
172
return ret ;
170
173
}
171
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 )
173
176
{
174
177
struct rewrite * ret ;
175
178
int i ;
176
179
177
- for (i = 0 ; i < rewrite_nr ; i ++ ) {
180
+ for (i = 0 ; i < r -> rewrite_nr ; i ++ ) {
178
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 ];
183
186
}
184
187
185
- ALLOC_GROW (rewrite , rewrite_nr + 1 , rewrite_alloc );
188
+ ALLOC_GROW (r -> rewrite , r -> rewrite_nr + 1 , r -> rewrite_alloc );
186
189
ret = xcalloc (1 , sizeof (struct rewrite ));
187
- rewrite [rewrite_nr ++ ] = ret ;
190
+ r -> rewrite [r -> rewrite_nr ++ ] = ret ;
188
191
if (len ) {
189
192
ret -> base = xstrndup (base , len );
190
193
ret -> baselen = len ;
@@ -355,7 +358,7 @@ static int handle_config(const char *key, const char *value, void *cb)
355
358
subkey = strrchr (name , '.' );
356
359
if (!subkey )
357
360
return 0 ;
358
- rewrite = make_rewrite (name , subkey - name );
361
+ rewrite = make_rewrite (& rewrites , name , subkey - name );
359
362
if (!strcmp (subkey , ".insteadof" )) {
360
363
if (!value )
361
364
return config_error_nonbool (key );
@@ -433,10 +436,10 @@ static void alias_all_urls(void)
433
436
if (!remotes [i ])
434
437
continue ;
435
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 );
437
440
}
438
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 );
440
443
}
441
444
}
442
445
}
0 commit comments