[RFC/PATCHv2] Allow the short-hand - replacing @{-1} in git worktree add

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[RFC/PATCHv2] Allow the short-hand - replacing @{-1} in git worktree add

Jordan DE GEA
Since `git worktree add` uses `git checkout` when `[<branch>]` 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 <[hidden email]>
Signed-off-by: Jordan DE GEA <[hidden email]>
---
 Documentation/git-worktree.txt |  3 ++-
 builtin/worktree.c             |  3 +++
 t/t2025-worktree-add.sh        | 17 +++++++++++++++++
 3 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/Documentation/git-worktree.txt b/Documentation/git-worktree.txt
index c622345..28dc559 100644
--- a/Documentation/git-worktree.txt
+++ b/Documentation/git-worktree.txt
@@ -48,7 +48,8 @@ add <path> [<branch>]::
 
 Create `<path>` and checkout `<branch>` 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. You may also specify
+`-` as `<branch>` which is synonymous with `"@{-1}"`.
 +
 If `<branch>` 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..ef81bc6 100755
--- a/t/t2025-worktree-add.sh
+++ b/t/t2025-worktree-add.sh
@@ -18,6 +18,23 @@ 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"
+ )
+'
+
 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)

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [hidden email]
More majordomo info at  http://vger.kernel.org/majordomo-info.html