Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- builtin/worktree.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/builtin/worktree.c b/builtin/worktree.c index 3ebb9e9..80a8b80 100644 --- a/builtin/worktree.c +++ b/builtin/worktree.c @@ -477,9 +477,52 @@ static int list(int ac, const char **av, const char *prefix) return 0; } +static int move_gitdir(int ac, const char **av, const char *prefix) +{ + struct string_list paths = STRING_LIST_INIT_NODUP; + struct strbuf dst = STRBUF_INIT; + struct strbuf src = STRBUF_INIT; + struct worktree **worktrees, *mwt = NULL; + int i, ret = 0; + + if (ac != 1) + die(_("--repository requires one argument")); + + strbuf_addstr(&src, real_path(get_git_common_dir())); + strbuf_addstr(&dst, real_path(prefix_filename(prefix, strlen(prefix), av[0]))); + + worktrees = get_worktrees(); + for (i = 0; worktrees[i]; i++) { + if (is_main_worktree(worktrees[i])) + mwt = worktrees[i]; + string_list_append(&paths, + get_worktree_git_dir(worktrees[i])); + } + + if (mwt) + die(_("converting main worktree is not supported")); + + ret = copy_dir_recursively(src.buf, dst.buf); + if (ret) + die(_("failed to copy '%s' to '%s'"), src.buf, dst.buf); + + for (i = 0; paths.nr; i++) + if (update_worktree_gitfile(paths.items[i].string, dst.buf, + worktrees[i]->id)) + ret = -1; + + if (!ret) + ret = remove_dir_recursively(&src, 0); + + string_list_clear(&paths, 0); + return ret; +} + static int move(int ac, const char **av, const char *prefix) { + int move_repo = 0; struct option options[] = { + OPT_BOOL(0, "repository", &move_repo, N_("move repository")), OPT_END() }; struct worktree **worktrees, *wt; @@ -487,6 +530,8 @@ static int move(int ac, const char **av, const char *prefix) struct strbuf src = STRBUF_INIT; ac = parse_options(ac, av, prefix, options, worktree_usage, 0); + if (move_repo) + return move_gitdir(ac, av, prefix); if (ac != 2) usage_with_options(worktree_usage, options); -- 2.7.0.377.g4cd97dd -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html