diff options
| -rw-r--r-- | Documentation/RelNotes/2.18.0.txt | 12 | ||||
| -rwxr-xr-x | GIT-VERSION-GEN | 2 | ||||
| -rw-r--r-- | builtin/index-pack.c | 8 | ||||
| -rw-r--r-- | commit.c | 3 | ||||
| -rw-r--r-- | contrib/completion/git-completion.bash | 5 | ||||
| -rw-r--r-- | contrib/completion/git-completion.zsh | 2 | ||||
| -rw-r--r-- | fsck.c | 3 | ||||
| -rw-r--r-- | merge-recursive.c | 4 | ||||
| -rwxr-xr-x | t/t5300-pack-object.sh | 6 | ||||
| -rwxr-xr-x | t/t7415-submodule-names.sh | 39 |
10 files changed, 66 insertions, 18 deletions
diff --git a/Documentation/RelNotes/2.18.0.txt b/Documentation/RelNotes/2.18.0.txt index 8d0ee5c426..7c59bd92fb 100644 --- a/Documentation/RelNotes/2.18.0.txt +++ b/Documentation/RelNotes/2.18.0.txt @@ -6,7 +6,7 @@ Updates since v2.17 UI, Workflows & Features - * Rename detection logic in "diff" family that is used in "merge" has + * Rename detection logic that is used in "merge" and "cherry-pick" has learned to guess when all of x/a, x/b and x/c have moved to z/a, z/b and z/c, it is likely that x/d added in the meantime would also want to move to z/d by taking the hint that the entire directory @@ -50,7 +50,7 @@ UI, Workflows & Features have been replaced with a stub that errors out and tells the user there are replacements. - * The new "checkout-encoding" attribute can ask Git to convert the + * The new "working-tree-encoding" attribute can ask Git to convert the contents to the specified encoding when checking out to the working tree (and the other way around when checking in). @@ -508,7 +508,7 @@ Fixes since v2.17 not committishes. (merge 0ed556d38f en/rev-parse-invalid-range later to maint). - * "git pull -recurse-submodules --rebase", when the submodule + * "git pull --recurse-submodules --rebase", when the submodule repository's history did not have anything common between ours and the upstream's, failed to execute. We need to fetch from them to continue even in such a case. @@ -518,6 +518,11 @@ Fixes since v2.17 nickname for remote groups, but only one of them was documented. (merge a97447a42a nd/remote-update-doc later to maint). + * "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. + (merge 3737746120 jk/index-pack-maint later to maint). + * Other minor doc, test and build updates and code cleanups. (merge 248f66ed8e nd/trace-with-env later to maint). (merge 14ced5562c ys/bisect-object-id-missing-conversion-fix later to maint). @@ -553,3 +558,4 @@ Fixes since v2.17 (merge 44f560fc16 rd/init-typo later to maint). (merge f156a0934a rd/p4-doc-markup-env later to maint). (merge 2a00502b14 tg/doc-sec-list later to maint). + (merge 47cc91310a jk/submodule-fsck-loose-fixup later to maint). diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index 1971bf34c3..49fc15e1c1 100755 --- a/GIT-VERSION-GEN +++ b/GIT-VERSION-GEN @@ -1,7 +1,7 @@ #!/bin/sh GVF=GIT-VERSION-FILE -DEF_VER=v2.18.0-rc1 +DEF_VER=v2.18.0-rc2 LF=' ' diff --git a/builtin/index-pack.c b/builtin/index-pack.c index 4ab31ed388..74fe2973e1 100644 --- a/builtin/index-pack.c +++ b/builtin/index-pack.c @@ -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)); @@ -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 */ diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 12814e9bbf..dd3e925843 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -3223,7 +3223,10 @@ __gitk_main () __git_complete_revlist } -if [[ -n ${ZSH_VERSION-} ]]; then +if [[ -n ${ZSH_VERSION-} ]] && + # Don't define these functions when sourced from 'git-completion.zsh', + # it has its own implementations. + [[ -z ${GIT_SOURCING_ZSH_COMPLETION-} ]]; then echo "WARNING: this script is deprecated, please see git-completion.zsh" 1>&2 autoload -U +X compinit && compinit diff --git a/contrib/completion/git-completion.zsh b/contrib/completion/git-completion.zsh index 53cb0f934f..049d6b80f6 100644 --- a/contrib/completion/git-completion.zsh +++ b/contrib/completion/git-completion.zsh @@ -39,7 +39,7 @@ if [ -z "$script" ]; then test -f $e && script="$e" && break done fi -ZSH_VERSION='' . "$script" +GIT_SOURCING_ZSH_COMPLETION=y . "$script" __gitcomp () { @@ -1036,7 +1036,8 @@ int fsck_finish(struct fsck_options *options) blob = lookup_blob(oid); if (!blob) { - ret |= report(options, &blob->object, + struct object *obj = lookup_unknown_object(oid->hash); + ret |= report(options, obj, FSCK_MSG_GITMODULES_BLOB, "non-blob found at .gitmodules"); continue; diff --git a/merge-recursive.c b/merge-recursive.c index ac27abbd4c..5eb907f46e 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -1208,7 +1208,7 @@ static int merge_submodule(struct merge_options *o, output(o, 3, _("Fast-forwarding submodule %s to the following commit:"), path); output_commit_title(o, commit_b); } else if (show(o, 2)) - output(o, 2, _("Fast-forwarding submodule %s to %s"), path, oid_to_hex(b)); + output(o, 2, _("Fast-forwarding submodule %s"), path); else ; /* no output */ @@ -1220,7 +1220,7 @@ static int merge_submodule(struct merge_options *o, output(o, 3, _("Fast-forwarding submodule %s to the following commit:"), path); output_commit_title(o, commit_a); } else if (show(o, 2)) - output(o, 2, _("Fast-forwarding submodule %s to %s"), path, oid_to_hex(a)); + output(o, 2, _("Fast-forwarding submodule %s"), path); else ; /* no output */ diff --git a/t/t5300-pack-object.sh b/t/t5300-pack-object.sh index 87a590c4a9..2336d09dcc 100755 --- a/t/t5300-pack-object.sh +++ b/t/t5300-pack-object.sh @@ -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 && diff --git a/t/t7415-submodule-names.sh b/t/t7415-submodule-names.sh index a770d92a55..b68c5f5e85 100755 --- a/t/t7415-submodule-names.sh +++ b/t/t7415-submodule-names.sh @@ -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 && ( @@ -135,13 +145,10 @@ test_expect_success 'fsck detects symlinked .gitmodules file' ' tricky="[foo]bar=true" && content=$(git hash-object -w ../.gitmodules) && target=$(printf "$tricky" | git hash-object -w --stdin) && - tree=$( - { - printf "100644 blob $content\t$tricky\n" && - printf "120000 blob $target\t.gitmodules\n" - } | git mktree - ) && - commit=$(git commit-tree $tree) && + { + printf "100644 blob $content\t$tricky\n" && + printf "120000 blob $target\t.gitmodules\n" + } | git mktree && # Check not only that we fail, but that it is due to the # symlink detector; this grep string comes from the config @@ -151,4 +158,22 @@ test_expect_success 'fsck detects symlinked .gitmodules file' ' ) ' +test_expect_success 'fsck detects non-blob .gitmodules' ' + git init non-blob && + ( + cd non-blob && + + # As above, make the funny tree directly to avoid index + # restrictions. + mkdir subdir && + cp ../.gitmodules subdir/file && + git add subdir/file && + git commit -m ok && + git ls-tree HEAD | sed s/subdir/.gitmodules/ | git mktree && + + test_must_fail git fsck 2>output && + grep gitmodulesBlob output + ) +' + test_done |
