fetch-pack: print and use dangling .gitmodules
Teach index-pack to print dangling .gitmodules links after its "keep" or "pack" line instead of declaring an error, and teach fetch-pack to check such lines printed. This allows the tree side of the .gitmodules link to be in one packfile and the blob side to be in another without failing the fsck check, because it is now fetch-pack which checks such objects after all packfiles have been downloaded and indexed (and not index-pack on an individual packfile, as it is before this commit). Signed-off-by: Jonathan Tan <jonathantanmy@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
b664e9ffa1
commit
5476e1efde
@ -1693,6 +1693,22 @@ static void show_pack_info(int stat_only)
|
||||
}
|
||||
}
|
||||
|
||||
static int print_dangling_gitmodules(struct fsck_options *o,
|
||||
const struct object_id *oid,
|
||||
enum object_type object_type,
|
||||
int msg_type, const char *message)
|
||||
{
|
||||
/*
|
||||
* NEEDSWORK: Plumb the MSG_ID (from fsck.c) here and use it
|
||||
* instead of relying on this string check.
|
||||
*/
|
||||
if (starts_with(message, "gitmodulesMissing")) {
|
||||
printf("%s\n", oid_to_hex(oid));
|
||||
return 0;
|
||||
}
|
||||
return fsck_error_function(o, oid, object_type, msg_type, message);
|
||||
}
|
||||
|
||||
int cmd_index_pack(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
int i, fix_thin_pack = 0, verify = 0, stat_only = 0;
|
||||
@ -1888,8 +1904,13 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
|
||||
else
|
||||
close(input_fd);
|
||||
|
||||
if (do_fsck_object && fsck_finish(&fsck_options))
|
||||
die(_("fsck error in pack objects"));
|
||||
if (do_fsck_object) {
|
||||
struct fsck_options fo = fsck_options;
|
||||
|
||||
fo.error_func = print_dangling_gitmodules;
|
||||
if (fsck_finish(&fo))
|
||||
die(_("fsck error in pack objects"));
|
||||
}
|
||||
|
||||
free(objects);
|
||||
strbuf_release(&index_name_buf);
|
||||
|
Reference in New Issue
Block a user