Skip to content

Commit

Permalink
submodule--helper: replace connect-gitdir-workingtree by ensure-core-…
Browse files Browse the repository at this point in the history
…worktree

e983175 (submodule: ensure core.worktree is set after update,
2018-06-18) was overly aggressive in calling connect_work_tree_and_git_dir
as that ensures both the 'core.worktree' configuration is set as well as
setting up correct gitlink file pointing at the git directory.

We do not need to check for the gitlink in this part of the cmd_update
in git-submodule.sh, as the initial call to update-clone will have ensured
that. So we can reduce the work to only (check and potentially) set the
'core.worktree' setting.

While at it move the check from shell to C as that proves to be useful in
a follow up patch, as we do not need the 'name' in shell now.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
stefanbeller authored and gitster committed Aug 14, 2018
1 parent c94d9dc commit 74d4731
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 29 deletions.
64 changes: 40 additions & 24 deletions builtin/submodule--helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -1964,6 +1964,45 @@ static int push_check(int argc, const char **argv, const char *prefix)
return 0;
}

static int ensure_core_worktree(int argc, const char **argv, const char *prefix)
{
const struct submodule *sub;
const char *path;
char *cw;
struct repository subrepo;

if (argc != 2)
BUG("submodule--helper connect-gitdir-workingtree <name> <path>");

path = argv[1];

sub = submodule_from_path(the_repository, &null_oid, path);
if (!sub)
BUG("We could get the submodule handle before?");

if (repo_submodule_init(&subrepo, the_repository, path))
die(_("could not get a repository handle for submodule '%s'"), path);

if (!repo_config_get_string(&subrepo, "core.worktree", &cw)) {
char *cfg_file, *abs_path;
const char *rel_path;
struct strbuf sb = STRBUF_INIT;

cfg_file = repo_git_path(&subrepo, "config");

abs_path = absolute_pathdup(path);
rel_path = relative_path(abs_path, subrepo.gitdir, &sb);

git_config_set_in_file(cfg_file, "core.worktree", rel_path);

free(cfg_file);
free(abs_path);
strbuf_release(&sb);
}

return 0;
}

static int absorb_git_dirs(int argc, const char **argv, const char *prefix)
{
int i;
Expand Down Expand Up @@ -2029,29 +2068,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 {
Expand All @@ -2065,7 +2081,7 @@ 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},
{"ensure-core-worktree", ensure_core_worktree, 0},
{"relative-path", resolve_relative_path, 0},
{"resolve-relative-url", resolve_relative_url, 0},
{"resolve-relative-url-test", resolve_relative_url_test, 0},
Expand Down
7 changes: 2 additions & 5 deletions git-submodule.sh
Original file line number Diff line number Diff line change
Expand Up @@ -535,6 +535,8 @@ cmd_update()
do
die_if_unmatched "$quickabort" "$sha1"

git submodule--helper ensure-core-worktree "$sm_path"

name=$(git submodule--helper name "$sm_path") || exit
if ! test -z "$update"
then
Expand Down Expand Up @@ -577,11 +579,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
Expand Down

0 comments on commit 74d4731

Please sign in to comment.