diff options
author | Junio C Hamano <gitster@pobox.com> | 2021-09-20 15:20:41 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-09-20 15:20:41 -0700 |
commit | 75405e72703e2205eac2585e0c09a3e9751720f2 (patch) | |
tree | 5e1c1c414da4311a1e18ff8d0efb4926ec0d44a6 /submodule.c | |
parent | Merge branch 'jv/pkt-line-batch' (diff) | |
parent | diff --submodule=diff: don't print failure message twice (diff) | |
download | tgif-75405e72703e2205eac2585e0c09a3e9751720f2.tar.xz |
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.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/submodule.c b/submodule.c index 8de1aecaeb..5e63e91caf 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); |