зеркало из https://github.com/microsoft/git.git
Revert "Merge branch 'sb/submodule-core-worktree'"
This reverts commit7e25437d35
, reversing changes made to00624d608c
. v2.19.0-rc0~165^2~1 (submodule: ensure core.worktree is set after update, 2018-06-18) assumes an "absorbed" submodule layout, where the submodule's Git directory is in the superproject's .git/modules/ directory and .git in the submodule worktree is a .git file pointing there. In particular, it uses $GIT_DIR/modules/$name to find the submodule to find out whether it already has core.worktree set, and it uses connect_work_tree_and_git_dir if not, resulting in fatal: could not open sub/.git for writing The context behind that patch: v2.19.0-rc0~165^2~2 (submodule: unset core.worktree if no working tree is present, 2018-06-12) unsets core.worktree when running commands like "git checkout --recurse-submodules" to switch to a branch without the submodule. If a user then uses "git checkout --no-recurse-submodules" to switch back to a branch with the submodule and runs "git submodule update", this patch is needed to ensure that commands using the submodule directly are aware of the path to the worktree. It is late in the release cycle, so revert the whole 3-patch series. We can try again later for 2.20. Reported-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Helped-by: Stefan Beller <sbeller@google.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
c05048d439
Коммит
f178c13fda
|
@ -1123,8 +1123,6 @@ static void deinit_submodule(const char *path, const char *prefix,
|
|||
if (!(flags & OPT_QUIET))
|
||||
printf(format, displaypath);
|
||||
|
||||
submodule_unset_core_worktree(sub);
|
||||
|
||||
strbuf_release(&sb_rm);
|
||||
}
|
||||
|
||||
|
@ -2005,29 +2003,6 @@ static int check_name(int argc, const char **argv, const char *prefix)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int connect_gitdir_workingtree(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
const char *name, *path;
|
||||
char *sm_gitdir;
|
||||
|
||||
if (argc != 3)
|
||||
BUG("submodule--helper connect-gitdir-workingtree <name> <path>");
|
||||
|
||||
name = argv[1];
|
||||
path = argv[2];
|
||||
|
||||
strbuf_addf(&sb, "%s/modules/%s", get_git_dir(), name);
|
||||
sm_gitdir = absolute_pathdup(sb.buf);
|
||||
|
||||
connect_work_tree_and_git_dir(path, sm_gitdir, 0);
|
||||
|
||||
strbuf_release(&sb);
|
||||
free(sm_gitdir);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define SUPPORT_SUPER_PREFIX (1<<0)
|
||||
|
||||
struct cmd_struct {
|
||||
|
@ -2041,7 +2016,6 @@ static struct cmd_struct commands[] = {
|
|||
{"name", module_name, 0},
|
||||
{"clone", module_clone, 0},
|
||||
{"update-clone", update_clone, 0},
|
||||
{"connect-gitdir-workingtree", connect_gitdir_workingtree, 0},
|
||||
{"relative-path", resolve_relative_path, 0},
|
||||
{"resolve-relative-url", resolve_relative_url, 0},
|
||||
{"resolve-relative-url-test", resolve_relative_url_test, 0},
|
||||
|
|
|
@ -580,11 +580,6 @@ cmd_update()
|
|||
die "$(eval_gettext "Unable to find current \${remote_name}/\${branch} revision in submodule path '\$sm_path'")"
|
||||
fi
|
||||
|
||||
if ! $(git config -f "$(git rev-parse --git-common-dir)/modules/$name/config" core.worktree) 2>/dev/null
|
||||
then
|
||||
git submodule--helper connect-gitdir-workingtree "$name" "$sm_path"
|
||||
fi
|
||||
|
||||
if test "$subsha1" != "$sha1" || test -n "$force"
|
||||
then
|
||||
subforce=$force
|
||||
|
|
14
submodule.c
14
submodule.c
|
@ -1534,18 +1534,6 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
void submodule_unset_core_worktree(const struct submodule *sub)
|
||||
{
|
||||
char *config_path = xstrfmt("%s/modules/%s/config",
|
||||
get_git_common_dir(), sub->name);
|
||||
|
||||
if (git_config_set_in_file_gently(config_path, "core.worktree", NULL))
|
||||
warning(_("Could not unset core.worktree setting in submodule '%s'"),
|
||||
sub->path);
|
||||
|
||||
free(config_path);
|
||||
}
|
||||
|
||||
static const char *get_super_prefix_or_empty(void)
|
||||
{
|
||||
const char *s = get_super_prefix();
|
||||
|
@ -1711,8 +1699,6 @@ int submodule_move_head(const char *path,
|
|||
|
||||
if (is_empty_dir(path))
|
||||
rmdir_or_warn(path);
|
||||
|
||||
submodule_unset_core_worktree(sub);
|
||||
}
|
||||
}
|
||||
out:
|
||||
|
|
|
@ -127,8 +127,6 @@ int submodule_move_head(const char *path,
|
|||
const char *new_head,
|
||||
unsigned flags);
|
||||
|
||||
void submodule_unset_core_worktree(const struct submodule *sub);
|
||||
|
||||
/*
|
||||
* Prepare the "env_array" parameter of a "struct child_process" for executing
|
||||
* a submodule by clearing any repo-specific environment variables, but
|
||||
|
|
|
@ -235,7 +235,7 @@ reset_work_tree_to_interested () {
|
|||
then
|
||||
mkdir -p submodule_update/.git/modules/sub1/modules &&
|
||||
cp -r submodule_update_repo/.git/modules/sub1/modules/sub2 submodule_update/.git/modules/sub1/modules/sub2
|
||||
# core.worktree is unset for sub2 as it is not checked out
|
||||
GIT_WORK_TREE=. git -C submodule_update/.git/modules/sub1/modules/sub2 config --unset core.worktree
|
||||
fi &&
|
||||
# indicate we are interested in the submodule:
|
||||
git -C submodule_update config submodule.sub1.url "bogus" &&
|
||||
|
@ -709,8 +709,7 @@ test_submodule_recursing_with_args_common() {
|
|||
git branch -t remove_sub1 origin/remove_sub1 &&
|
||||
$command remove_sub1 &&
|
||||
test_superproject_content origin/remove_sub1 &&
|
||||
! test -e sub1 &&
|
||||
test_must_fail git config -f .git/modules/sub1/config core.worktree
|
||||
! test -e sub1
|
||||
)
|
||||
'
|
||||
# ... absorbing a .git directory along the way.
|
||||
|
|
|
@ -984,11 +984,6 @@ test_expect_success 'submodule deinit should remove the whole submodule section
|
|||
rmdir init
|
||||
'
|
||||
|
||||
test_expect_success 'submodule deinit should unset core.worktree' '
|
||||
test_path_is_file .git/modules/example/config &&
|
||||
test_must_fail git config -f .git/modules/example/config core.worktree
|
||||
'
|
||||
|
||||
test_expect_success 'submodule deinit from subdirectory' '
|
||||
git submodule update --init &&
|
||||
git config submodule.example.foo bar &&
|
||||
|
|
Загрузка…
Ссылка в новой задаче