From: Jordan DE GEA Date: Thu, 26 May 2016 11:54:22 GMT Subject: [PATCH] worktree: allow "-" short-hand for @{-1} in add command Message-ID: <1464263662-1290-1-git-send-email-jordan.de-gea@grenoble-inp.org> In-Reply-To: From: Jordan DE GEA Since `git worktree add` uses `git checkout` when `[]` is used, and `git checkout -` is already supported, it makes sense to allow the same shortcut in `git worktree add`. Signed-off-by: Matthieu Moy Signed-off-by: Jordan DE GEA --- Documentation/git-worktree.txt | 3 ++- builtin/worktree.c | 3 +++ t/t2025-worktree-add.sh | 18 ++++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/Documentation/git-worktree.txt b/Documentation/git-worktree.txt index c622345..48e5fdf 100644 --- a/Documentation/git-worktree.txt +++ b/Documentation/git-worktree.txt @@ -48,7 +48,8 @@ add []:: Create `` and checkout `` into it. The new working directory is linked to the current repository, sharing everything except working -directory specific files such as HEAD, index, etc. +directory specific files such as HEAD, index, etc. The last branch you +were on can be specify with `-` as `` which is synonymous with `"@{-1}"`. + If `` is omitted and neither `-b` nor `-B` nor `--detached` used, then, as a convenience, a new branch based at HEAD is created automatically, diff --git a/builtin/worktree.c b/builtin/worktree.c index d8e3795..d800d47 100644 --- a/builtin/worktree.c +++ b/builtin/worktree.c @@ -340,6 +340,9 @@ static int add(int ac, const char **av, const char *prefix) path = prefix ? prefix_filename(prefix, strlen(prefix), av[0]) : av[0]; branch = ac < 2 ? "HEAD" : av[1]; + if (!strcmp(branch, "-")) + branch = "@{-1}"; + opts.force_new_branch = !!new_branch_force; if (opts.force_new_branch) { struct strbuf symref = STRBUF_INIT; diff --git a/t/t2025-worktree-add.sh b/t/t2025-worktree-add.sh index 3acb992..b713efb 100755 --- a/t/t2025-worktree-add.sh +++ b/t/t2025-worktree-add.sh @@ -18,6 +18,24 @@ test_expect_success '"add" an existing empty worktree' ' git worktree add --detach existing_empty master ' +test_expect_success '"add" using shorthand - fails when no previous branch' ' + test_must_fail git worktree add existing - +' + +test_expect_success '"add" using - shorthand' ' + git checkout -b newbranch && + echo hello >myworld && + git add myworld && + git commit -m myworld && + git checkout master && + git worktree add short-hand - && + cd short-hand && + test $(git rev-parse --symbolic-full-name HEAD) = "refs/heads/newbranch" + branch=$(cd short-hand && git rev-parse --symbolic-full-name HEAD) && + test "$branch" = refs/heads/newbranch && + cd .. +' + test_expect_success '"add" refuses to checkout locked branch' ' test_must_fail git worktree add zere master && ! test -d zere && -- 2.7.4 (Apple Git-66)