Merge branch 'sb/checkout-recurse-submodules'
"git checkout" is taught the "--recurse-submodules" option. * sb/checkout-recurse-submodules: builtin/read-tree: add --recurse-submodules switch builtin/checkout: add --recurse-submodules switch entry.c: create submodules when interesting unpack-trees: check if we can perform the operation for submodules unpack-trees: pass old oid to verify_clean_submodule update submodules: add submodule_move_head submodule.c: get_super_prefix_or_empty update submodules: move up prepare_submodule_repo_env submodules: introduce check to see whether to touch a submodule update submodules: add a config option to determine if submodules are updated update submodules: add submodule config parsing make is_submodule_populated gently lib-submodule-update.sh: define tests for recursing into submodules lib-submodule-update.sh: replace sha1 by hash lib-submodule-update: teach test_submodule_content the -C <dir> flag lib-submodule-update.sh: do not use ./. as submodule remote lib-submodule-update.sh: reorder create_lib_submodule_repo submodule--helper.c: remove duplicate code connect_work_tree_and_git_dir: safely create leading directories
This commit is contained in:
32
dir.c
32
dir.c
@ -2765,23 +2765,33 @@ void untracked_cache_add_to_index(struct index_state *istate,
|
||||
/* Update gitfile and core.worktree setting to connect work tree and git dir */
|
||||
void connect_work_tree_and_git_dir(const char *work_tree_, const char *git_dir_)
|
||||
{
|
||||
struct strbuf file_name = STRBUF_INIT;
|
||||
struct strbuf gitfile_sb = STRBUF_INIT;
|
||||
struct strbuf cfg_sb = STRBUF_INIT;
|
||||
struct strbuf rel_path = STRBUF_INIT;
|
||||
char *git_dir = real_pathdup(git_dir_, 1);
|
||||
char *work_tree = real_pathdup(work_tree_, 1);
|
||||
char *git_dir, *work_tree;
|
||||
|
||||
/* Update gitfile */
|
||||
strbuf_addf(&file_name, "%s/.git", work_tree);
|
||||
write_file(file_name.buf, "gitdir: %s",
|
||||
/* Prepare .git file */
|
||||
strbuf_addf(&gitfile_sb, "%s/.git", work_tree_);
|
||||
if (safe_create_leading_directories_const(gitfile_sb.buf))
|
||||
die(_("could not create directories for %s"), gitfile_sb.buf);
|
||||
|
||||
/* Prepare config file */
|
||||
strbuf_addf(&cfg_sb, "%s/config", git_dir_);
|
||||
if (safe_create_leading_directories_const(cfg_sb.buf))
|
||||
die(_("could not create directories for %s"), cfg_sb.buf);
|
||||
|
||||
git_dir = real_pathdup(git_dir_, 1);
|
||||
work_tree = real_pathdup(work_tree_, 1);
|
||||
|
||||
/* Write .git file */
|
||||
write_file(gitfile_sb.buf, "gitdir: %s",
|
||||
relative_path(git_dir, work_tree, &rel_path));
|
||||
|
||||
/* Update core.worktree setting */
|
||||
strbuf_reset(&file_name);
|
||||
strbuf_addf(&file_name, "%s/config", git_dir);
|
||||
git_config_set_in_file(file_name.buf, "core.worktree",
|
||||
git_config_set_in_file(cfg_sb.buf, "core.worktree",
|
||||
relative_path(work_tree, git_dir, &rel_path));
|
||||
|
||||
strbuf_release(&file_name);
|
||||
strbuf_release(&gitfile_sb);
|
||||
strbuf_release(&cfg_sb);
|
||||
strbuf_release(&rel_path);
|
||||
free(work_tree);
|
||||
free(git_dir);
|
||||
|
Reference in New Issue
Block a user