Merge branch 'ek/alt-odb-entry-fix'
* ek/alt-odb-entry-fix: sha1_file: do not add own object directory as alternate
This commit is contained in:
commit
a8c565b227
13
sha1_file.c
13
sha1_file.c
@ -268,9 +268,9 @@ static struct alternate_object_database **alt_odb_tail;
|
|||||||
* SHA1, an extra slash for the first level indirection, and the
|
* SHA1, an extra slash for the first level indirection, and the
|
||||||
* terminating NUL.
|
* terminating NUL.
|
||||||
*/
|
*/
|
||||||
static int link_alt_odb_entry(const char *entry, const char *relative_base, int depth)
|
static int link_alt_odb_entry(const char *entry, const char *relative_base,
|
||||||
|
int depth, const char *normalized_objdir)
|
||||||
{
|
{
|
||||||
const char *objdir = get_object_directory();
|
|
||||||
struct alternate_object_database *ent;
|
struct alternate_object_database *ent;
|
||||||
struct alternate_object_database *alt;
|
struct alternate_object_database *alt;
|
||||||
int pfxlen, entlen;
|
int pfxlen, entlen;
|
||||||
@ -321,7 +321,7 @@ static int link_alt_odb_entry(const char *entry, const char *relative_base, int
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!strcmp(ent->base, objdir)) {
|
if (!strcmp_icase(ent->base, normalized_objdir)) {
|
||||||
free(ent);
|
free(ent);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -345,6 +345,7 @@ static void link_alt_odb_entries(const char *alt, int len, int sep,
|
|||||||
struct string_list entries = STRING_LIST_INIT_NODUP;
|
struct string_list entries = STRING_LIST_INIT_NODUP;
|
||||||
char *alt_copy;
|
char *alt_copy;
|
||||||
int i;
|
int i;
|
||||||
|
struct strbuf objdirbuf = STRBUF_INIT;
|
||||||
|
|
||||||
if (depth > 5) {
|
if (depth > 5) {
|
||||||
error("%s: ignoring alternate object stores, nesting too deep.",
|
error("%s: ignoring alternate object stores, nesting too deep.",
|
||||||
@ -352,6 +353,9 @@ static void link_alt_odb_entries(const char *alt, int len, int sep,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
strbuf_addstr(&objdirbuf, absolute_path(get_object_directory()));
|
||||||
|
normalize_path_copy(objdirbuf.buf, objdirbuf.buf);
|
||||||
|
|
||||||
alt_copy = xmemdupz(alt, len);
|
alt_copy = xmemdupz(alt, len);
|
||||||
string_list_split_in_place(&entries, alt_copy, sep, -1);
|
string_list_split_in_place(&entries, alt_copy, sep, -1);
|
||||||
for (i = 0; i < entries.nr; i++) {
|
for (i = 0; i < entries.nr; i++) {
|
||||||
@ -362,11 +366,12 @@ static void link_alt_odb_entries(const char *alt, int len, int sep,
|
|||||||
error("%s: ignoring relative alternate object store %s",
|
error("%s: ignoring relative alternate object store %s",
|
||||||
relative_base, entry);
|
relative_base, entry);
|
||||||
} else {
|
} else {
|
||||||
link_alt_odb_entry(entry, relative_base, depth);
|
link_alt_odb_entry(entry, relative_base, depth, objdirbuf.buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
string_list_clear(&entries, 0);
|
string_list_clear(&entries, 0);
|
||||||
free(alt_copy);
|
free(alt_copy);
|
||||||
|
strbuf_release(&objdirbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void read_info_alternates(const char * relative_base, int depth)
|
void read_info_alternates(const char * relative_base, int depth)
|
||||||
|
24
t/t7702-repack-cyclic-alternate.sh
Executable file
24
t/t7702-repack-cyclic-alternate.sh
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2014 Ephrim Khong
|
||||||
|
#
|
||||||
|
|
||||||
|
test_description='repack involving cyclic alternate'
|
||||||
|
. ./test-lib.sh
|
||||||
|
|
||||||
|
test_expect_success setup '
|
||||||
|
GIT_OBJECT_DIRECTORY=.git//../.git/objects &&
|
||||||
|
export GIT_OBJECT_DIRECTORY &&
|
||||||
|
touch a &&
|
||||||
|
git add a &&
|
||||||
|
git commit -m 1 &&
|
||||||
|
git repack -adl &&
|
||||||
|
echo "$(pwd)"/.git/objects/../objects >.git/objects/info/alternates
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 're-packing repository with itsself as alternate' '
|
||||||
|
git repack -adl &&
|
||||||
|
git fsck
|
||||||
|
'
|
||||||
|
|
||||||
|
test_done
|
Loading…
Reference in New Issue
Block a user