diff options
author | Junio C Hamano <gitster@pobox.com> | 2021-09-20 22:20:41 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-09-20 22:20:41 (GMT) |
commit | 75405e72703e2205eac2585e0c09a3e9751720f2 (patch) | |
tree | 5e1c1c414da4311a1e18ff8d0efb4926ec0d44a6 /submodule.c | |
parent | c2509c5407a70a187664982c7f484e7daacafc4f (diff) | |
parent | 67f61efbb92dce64b33c3280b89e9f253a34df1c (diff) | |
download | git-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.c | 14 |
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); |