Merge branch 'jk/info-alternates-fix-2.11' into jk/info-alternates-fix
* jk/info-alternates-fix-2.11: read_info_alternates: read contents into strbuf
This commit is contained in:
commit
0db625f5d6
30
sha1_file.c
30
sha1_file.c
@ -422,7 +422,7 @@ static const char *parse_alt_odb_entry(const char *string,
|
|||||||
return end;
|
return end;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void link_alt_odb_entries(const char *alt, int len, int sep,
|
static void link_alt_odb_entries(const char *alt, int sep,
|
||||||
const char *relative_base, int depth)
|
const char *relative_base, int depth)
|
||||||
{
|
{
|
||||||
struct strbuf objdirbuf = STRBUF_INIT;
|
struct strbuf objdirbuf = STRBUF_INIT;
|
||||||
@ -451,28 +451,18 @@ static void link_alt_odb_entries(const char *alt, int len, int sep,
|
|||||||
|
|
||||||
static void read_info_alternates(const char * relative_base, int depth)
|
static void read_info_alternates(const char * relative_base, int depth)
|
||||||
{
|
{
|
||||||
char *map;
|
|
||||||
size_t mapsz;
|
|
||||||
struct stat st;
|
|
||||||
char *path;
|
char *path;
|
||||||
int fd;
|
struct strbuf buf = STRBUF_INIT;
|
||||||
|
|
||||||
path = xstrfmt("%s/info/alternates", relative_base);
|
path = xstrfmt("%s/info/alternates", relative_base);
|
||||||
fd = git_open(path);
|
if (strbuf_read_file(&buf, path, 1024) < 0) {
|
||||||
free(path);
|
free(path);
|
||||||
if (fd < 0)
|
|
||||||
return;
|
|
||||||
if (fstat(fd, &st) || (st.st_size == 0)) {
|
|
||||||
close(fd);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mapsz = xsize_t(st.st_size);
|
|
||||||
map = xmmap(NULL, mapsz, PROT_READ, MAP_PRIVATE, fd, 0);
|
|
||||||
close(fd);
|
|
||||||
|
|
||||||
link_alt_odb_entries(map, mapsz, '\n', relative_base, depth);
|
link_alt_odb_entries(buf.buf, '\n', relative_base, depth);
|
||||||
|
strbuf_release(&buf);
|
||||||
munmap(map, mapsz);
|
free(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct alternate_object_database *alloc_alt_odb(const char *dir)
|
struct alternate_object_database *alloc_alt_odb(const char *dir)
|
||||||
@ -527,7 +517,7 @@ void add_to_alternates_file(const char *reference)
|
|||||||
if (commit_lock_file(lock))
|
if (commit_lock_file(lock))
|
||||||
die_errno("unable to move new alternates file into place");
|
die_errno("unable to move new alternates file into place");
|
||||||
if (alt_odb_tail)
|
if (alt_odb_tail)
|
||||||
link_alt_odb_entries(reference, strlen(reference), '\n', NULL, 0);
|
link_alt_odb_entries(reference, '\n', NULL, 0);
|
||||||
}
|
}
|
||||||
free(alts);
|
free(alts);
|
||||||
}
|
}
|
||||||
@ -540,7 +530,7 @@ void add_to_alternates_memory(const char *reference)
|
|||||||
*/
|
*/
|
||||||
prepare_alt_odb();
|
prepare_alt_odb();
|
||||||
|
|
||||||
link_alt_odb_entries(reference, strlen(reference), '\n', NULL, 0);
|
link_alt_odb_entries(reference, '\n', NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -643,7 +633,7 @@ void prepare_alt_odb(void)
|
|||||||
if (!alt) alt = "";
|
if (!alt) alt = "";
|
||||||
|
|
||||||
alt_odb_tail = &alt_odb_list;
|
alt_odb_tail = &alt_odb_list;
|
||||||
link_alt_odb_entries(alt, strlen(alt), PATH_SEP, NULL, 0);
|
link_alt_odb_entries(alt, PATH_SEP, NULL, 0);
|
||||||
|
|
||||||
read_info_alternates(get_object_directory(), 0);
|
read_info_alternates(get_object_directory(), 0);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user