With the previous patch applied (fix of the same() function), the function `submodule_move_head` may be invoked with the same argument for the `old` and `new` state of a submodule, for example when you run `reset --hard --recurse-submodules` in the superproject that has no change in the gitlink entry, but only worktree related change in the submodule. The read-tree call in the submodule is not amused about the duplicate argument. It turns out that we can omit the duplicate old argument in all forced cases anyway, so let's do that. Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> --- submodule.c | 4 +++- t/lib-submodule-update.sh | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/submodule.c b/submodule.c index fa25888783..db0f7ac51e 100644 --- a/submodule.c +++ b/submodule.c @@ -1653,7 +1653,9 @@ int submodule_move_head(const char *path, else argv_array_push(&cp.args, "-m"); - argv_array_push(&cp.args, old ? old : EMPTY_TREE_SHA1_HEX); + if (!(flags & SUBMODULE_MOVE_HEAD_FORCE)) + argv_array_push(&cp.args, old ? old : EMPTY_TREE_SHA1_HEX); + argv_array_push(&cp.args, new ? new : EMPTY_TREE_SHA1_HEX); if (run_command(&cp)) { diff --git a/t/lib-submodule-update.sh b/t/lib-submodule-update.sh index 15cf3e0b8b..7b6661cc84 100755 --- a/t/lib-submodule-update.sh +++ b/t/lib-submodule-update.sh @@ -1016,7 +1016,7 @@ test_submodule_forced_switch_recursing_with_args () { ) ' - test_expect_failure "$command: changed submodule worktree is reset" ' + test_expect_success "$command: changed submodule worktree is reset" ' prolog && reset_work_tree_to_interested add_sub1 && ( -- 2.15.1.620.gb9897f4670-goog