summaryrefslogtreecommitdiff
path: root/submodule.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2021-09-20 22:20:41 (GMT)
committerJunio C Hamano <gitster@pobox.com>2021-09-20 22:20:41 (GMT)
commit75405e72703e2205eac2585e0c09a3e9751720f2 (patch)
tree5e1c1c414da4311a1e18ff8d0efb4926ec0d44a6 /submodule.c
parentc2509c5407a70a187664982c7f484e7daacafc4f (diff)
parent67f61efbb92dce64b33c3280b89e9f253a34df1c (diff)
downloadgit-75405e72703e2205eac2585e0c09a3e9751720f2.zip
git-75405e72703e2205eac2585e0c09a3e9751720f2.tar.gz
git-75405e72703e2205eac2585e0c09a3e9751720f2.tar.bz2
Merge branch 'dt/submodule-diff-fixes'
"git diff --submodule=diff" showed failure from run_command() when trying to run diff inside a submodule, when the user manually removes the submodule directory. * dt/submodule-diff-fixes: diff --submodule=diff: don't print failure message twice diff --submodule=diff: do not fail on ever-initialied deleted submodules t4060: remove unused variable
Diffstat (limited to 'submodule.c')
-rw-r--r--submodule.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/submodule.c b/submodule.c
index 8de1aec..5e63e91 100644
--- a/submodule.c
+++ b/submodule.c
@@ -720,8 +720,20 @@ void show_submodule_inline_diff(struct diff_options *o, const char *path,
strvec_push(&cp.args, oid_to_hex(new_oid));
prepare_submodule_repo_env(&cp.env_array);
- if (start_command(&cp))
+
+ if (!is_directory(path)) {
+ /* fall back to absorbed git dir, if any */
+ if (!sub)
+ goto done;
+ cp.dir = sub->gitdir;
+ strvec_push(&cp.env_array, GIT_DIR_ENVIRONMENT "=.");
+ strvec_push(&cp.env_array, GIT_WORK_TREE_ENVIRONMENT "=.");
+ }
+
+ if (start_command(&cp)) {
diff_emit_submodule_error(o, "(diff failed)\n");
+ goto done;
+ }
while (strbuf_getwholeline_fd(&sb, cp.out, '\n') != EOF)
diff_emit_submodule_pipethrough(o, sb.buf, sb.len);