aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/RelNotes/2.18.0.txt12
-rwxr-xr-xGIT-VERSION-GEN2
-rw-r--r--builtin/index-pack.c8
-rw-r--r--commit.c3
-rw-r--r--contrib/completion/git-completion.bash5
-rw-r--r--contrib/completion/git-completion.zsh2
-rw-r--r--fsck.c3
-rw-r--r--merge-recursive.c4
-rwxr-xr-xt/t5300-pack-object.sh6
-rwxr-xr-xt/t7415-submodule-names.sh39
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));
diff --git a/commit.c b/commit.c
index b0e57cc440..0030e79940 100644
--- 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 */
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 ()
{
diff --git a/fsck.c b/fsck.c
index bcae2c30e6..48e7e36869 100644
--- a/fsck.c
+++ b/fsck.c
@@ -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