Merge branch 'jk/index-pack-maint'
authorJunio C Hamano <gitster@pobox.com>
Wed, 13 Jun 2018 19:50:46 +0000 (12:50 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 13 Jun 2018 19:50:46 +0000 (12:50 -0700)
"index-pack --strict" has been taught to make sure that it runs the
final object integrity checks after making the freshly indexed
packfile available to itself.

* jk/index-pack-maint:
index-pack: correct install_packed_git() args
index-pack: handle --strict checks of non-repo packs
prepare_commit_graft: treat non-repository as a noop

builtin/index-pack.c
commit.c
t/t5300-pack-object.sh
t/t7415-submodule-names.sh
index 4ab31ed388bb860110f5bd33ddf6d707f0cfa41f..74fe2973e1256e092652fce28ba2036cc3203af9 100644 (file)
@@ -1482,8 +1482,12 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
        } else
                chmod(final_index_name, 0444);
 
-       if (do_fsck_object)
-               add_packed_git(final_index_name, strlen(final_index_name), 0);
+       if (do_fsck_object) {
+               struct packed_git *p;
+               p = add_packed_git(final_index_name, strlen(final_index_name), 0);
+               if (p)
+                       install_packed_git(the_repository, p);
+       }
 
        if (!from_stdin) {
                printf("%s\n", sha1_to_hex(hash));
index b0e57cc4400964ad7dca8d37c5d4c10bf3979b51..0030e79940ff8564b5c8c5ebab462eb1bd745174 100644 (file)
--- a/commit.c
+++ b/commit.c
@@ -207,6 +207,9 @@ static void prepare_commit_graft(void)
 
        if (commit_graft_prepared)
                return;
+       if (!startup_info->have_repository)
+               return;
+
        graft_file = get_graft_file();
        read_graft_file(graft_file);
        /* make sure shallows are read */
index 87a590c4a952d743c2d9f8b0daac76d448f51e8e..2336d09dcc45f3b808c5e5d6a7c43c8129e8cecc 100755 (executable)
@@ -421,6 +421,12 @@ test_expect_success 'index-pack <pack> works in non-repo' '
        test_path_is_file foo.idx
 '
 
+test_expect_success 'index-pack --strict <pack> works in non-repo' '
+       rm -f foo.idx &&
+       nongit git index-pack --strict ../foo.pack &&
+       test_path_is_file foo.idx
+'
+
 test_expect_success !PTHREADS,C_LOCALE_OUTPUT 'index-pack --threads=N or pack.threads=N warns when no pthreads' '
        test_must_fail git index-pack --threads=2 2>err &&
        grep ^warning: err >warnings &&
index 3c0f1a102a09e5c03cd6e270bbbf32d870b5c093..b68c5f5e8510ddbf4e10f6cb608d9e789bef09b4 100755 (executable)
@@ -122,6 +122,16 @@ test_expect_success 'transfer.fsckObjects handles odd pack (index)' '
        test_must_fail git -C dst.git index-pack --strict --stdin <odd.pack
 '
 
+test_expect_success 'index-pack --strict works for non-repo pack' '
+       rm -rf dst.git &&
+       git init --bare dst.git &&
+       cp odd.pack dst.git &&
+       test_must_fail git -C dst.git index-pack --strict odd.pack 2>output &&
+       # Make sure we fail due to bad gitmodules content, not because we
+       # could not read the blob in the first place.
+       grep gitmodulesName output
+'
+
 test_expect_success 'fsck detects symlinked .gitmodules file' '
        git init symlink &&
        (