[PATCH 24/25] worktree move: accept destination as directory
- From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
- Date
- Apr 13, 2016, 13:15 UTC
- Message-ID
- <1460553346-12985-25-git-send-email-pclouds@gmail.com>
- In-Reply-To
- <1460553346-12985-1-git-send-email-pclouds@gmail.com>
Similar to "mv a b/", which is actually "mv a b/a", we extract basename of source worktree and create a directory of the same name at destination if dst path is a directory.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> --- builtin/worktree.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/builtin/worktree.c b/builtin/worktree.c index a988913..5402a4e 100644 --- a/builtin/worktree.c +++ b/builtin/worktree.c @@ -538,7 +538,13 @@ static int move_worktree(int ac, const char **av, const char *prefix) strbuf_addstr(&dst, prefix_filename(prefix, strlen(prefix), av[1])); - if (file_exists(dst.buf)) + if (is_directory(dst.buf)) + /* + * keep going, dst will be appended after we get the + * source's absolute path + */ + ; + else if (file_exists(dst.buf)) die(_("target '%s' already exists"), av[1]); worktrees = get_worktrees(); @@ -558,6 +564,17 @@ static int move_worktree(int ac, const char **av, const char *prefix) if (validate_worktree(wt, 0)) return -1; + if (is_directory(dst.buf)) { + const char *sep = strrchr(wt->path, '/'); + + if (!sep) + die(_("could not figure out destination name from '%s'"), + wt->path); + strbuf_addstr(&dst, sep); + if (file_exists(dst.buf)) + die(_("target '%s' already exists"), dst.buf); + } + /* * First try. Atomically move, and probably cheaper, if both * source and target are on the same file system.
-- 2.8.0.rc0.210.gd302cd2