Merge branch 'sb/checkout-recurse-submodules'
"git checkout --recurse-submodules" did not quite work with a submodule that itself has submodules. * sb/checkout-recurse-submodules: submodule: properly recurse for read-tree and checkout submodule: avoid auto-discovery in new working tree manipulator code submodule_move_head: reuse child_process structure for futher commands
This commit is contained in:
21
submodule.c
21
submodule.c
@ -1356,7 +1356,7 @@ static int submodule_has_dirty_index(const struct submodule *sub)
|
||||
{
|
||||
struct child_process cp = CHILD_PROCESS_INIT;
|
||||
|
||||
prepare_submodule_repo_env_no_git_dir(&cp.env_array);
|
||||
prepare_submodule_repo_env(&cp.env_array);
|
||||
|
||||
cp.git_cmd = 1;
|
||||
argv_array_pushl(&cp.args, "diff-index", "--quiet",
|
||||
@ -1373,7 +1373,7 @@ static int submodule_has_dirty_index(const struct submodule *sub)
|
||||
static void submodule_reset_index(const char *path)
|
||||
{
|
||||
struct child_process cp = CHILD_PROCESS_INIT;
|
||||
prepare_submodule_repo_env_no_git_dir(&cp.env_array);
|
||||
prepare_submodule_repo_env(&cp.env_array);
|
||||
|
||||
cp.git_cmd = 1;
|
||||
cp.no_stdin = 1;
|
||||
@ -1454,7 +1454,7 @@ int submodule_move_head(const char *path,
|
||||
}
|
||||
}
|
||||
|
||||
prepare_submodule_repo_env_no_git_dir(&cp.env_array);
|
||||
prepare_submodule_repo_env(&cp.env_array);
|
||||
|
||||
cp.git_cmd = 1;
|
||||
cp.no_stdin = 1;
|
||||
@ -1462,7 +1462,7 @@ int submodule_move_head(const char *path,
|
||||
|
||||
argv_array_pushf(&cp.args, "--super-prefix=%s%s/",
|
||||
get_super_prefix_or_empty(), path);
|
||||
argv_array_pushl(&cp.args, "read-tree", NULL);
|
||||
argv_array_pushl(&cp.args, "read-tree", "--recurse-submodules", NULL);
|
||||
|
||||
if (flags & SUBMODULE_MOVE_HEAD_DRY_RUN)
|
||||
argv_array_push(&cp.args, "-n");
|
||||
@ -1484,15 +1484,16 @@ int submodule_move_head(const char *path,
|
||||
|
||||
if (!(flags & SUBMODULE_MOVE_HEAD_DRY_RUN)) {
|
||||
if (new) {
|
||||
struct child_process cp1 = CHILD_PROCESS_INIT;
|
||||
child_process_init(&cp);
|
||||
/* also set the HEAD accordingly */
|
||||
cp1.git_cmd = 1;
|
||||
cp1.no_stdin = 1;
|
||||
cp1.dir = path;
|
||||
cp.git_cmd = 1;
|
||||
cp.no_stdin = 1;
|
||||
cp.dir = path;
|
||||
|
||||
argv_array_pushl(&cp1.args, "update-ref", "HEAD", new, NULL);
|
||||
prepare_submodule_repo_env(&cp.env_array);
|
||||
argv_array_pushl(&cp.args, "update-ref", "HEAD", new, NULL);
|
||||
|
||||
if (run_command(&cp1)) {
|
||||
if (run_command(&cp)) {
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user