@@ -139,23 +139,22 @@ static void read_info_alternates(struct object_database *odb,
139
139
const char * relative_base ,
140
140
int depth );
141
141
142
- static int link_alt_odb_entry (struct object_database * odb ,
143
- const struct strbuf * entry ,
144
- const char * relative_base ,
145
- int depth ,
146
- const char * normalized_objdir )
142
+ static struct odb_source * link_alt_odb_entry (struct object_database * odb ,
143
+ const char * entry ,
144
+ const char * relative_base ,
145
+ int depth ,
146
+ const char * normalized_objdir )
147
147
{
148
- struct odb_source * alternate ;
148
+ struct odb_source * alternate = NULL ;
149
149
struct strbuf pathbuf = STRBUF_INIT ;
150
150
struct strbuf tmp = STRBUF_INIT ;
151
151
khiter_t pos ;
152
- int ret = -1 ;
153
152
154
- if (!is_absolute_path (entry -> buf ) && relative_base ) {
153
+ if (!is_absolute_path (entry ) && relative_base ) {
155
154
strbuf_realpath (& pathbuf , relative_base , 1 );
156
155
strbuf_addch (& pathbuf , '/' );
157
156
}
158
- strbuf_addbuf (& pathbuf , entry );
157
+ strbuf_addstr (& pathbuf , entry );
159
158
160
159
if (!strbuf_realpath (& tmp , pathbuf .buf , 0 )) {
161
160
error (_ ("unable to normalize alternate object path: %s" ),
@@ -189,11 +188,11 @@ static int link_alt_odb_entry(struct object_database *odb,
189
188
190
189
/* recursively add alternates */
191
190
read_info_alternates (odb , alternate -> path , depth + 1 );
192
- ret = 0 ;
191
+
193
192
error :
194
193
strbuf_release (& tmp );
195
194
strbuf_release (& pathbuf );
196
- return ret ;
195
+ return alternate ;
197
196
}
198
197
199
198
static const char * parse_alt_odb_entry (const char * string ,
@@ -246,7 +245,7 @@ static void link_alt_odb_entries(struct object_database *odb, const char *alt,
246
245
alt = parse_alt_odb_entry (alt , sep , & entry );
247
246
if (!entry .len )
248
247
continue ;
249
- link_alt_odb_entry (odb , & entry ,
248
+ link_alt_odb_entry (odb , entry . buf ,
250
249
relative_base , depth , objdirbuf .buf );
251
250
}
252
251
strbuf_release (& entry );
@@ -316,17 +315,23 @@ void odb_add_to_alternates_file(struct object_database *odb,
316
315
free (alts );
317
316
}
318
317
319
- void odb_add_to_alternates_memory (struct object_database * odb ,
320
- const char * reference )
318
+ struct odb_source * odb_add_to_alternates_memory (struct object_database * odb ,
319
+ const char * reference )
321
320
{
321
+ struct odb_source * alternate ;
322
+ char * objdir ;
323
+
322
324
/*
323
325
* Make sure alternates are initialized, or else our entry may be
324
326
* overwritten when they are.
325
327
*/
326
328
odb_prepare_alternates (odb );
327
329
328
- link_alt_odb_entries (odb , reference ,
329
- '\n' , NULL , 0 );
330
+ objdir = real_pathdup (odb -> sources -> path , 1 );
331
+ alternate = link_alt_odb_entry (odb , reference , NULL , 0 , objdir );
332
+
333
+ free (objdir );
334
+ return alternate ;
330
335
}
331
336
332
337
struct odb_source * odb_set_temporary_primary_source (struct object_database * odb ,
0 commit comments