Re: [PATCH v3 22/23] worktree: add: auto-vivify new branch when branch is omitted

2015-07-07 Thread Junio C Hamano
Eric Sunshine sunsh...@sunshineco.com writes:

 Which may be something we would want to have a test for, though.

 Good idea. How about the following as a squash-in?

Sounds sensible.

At this point we do not have worktree list, but if we gained that,
we may want to add this as one more postcondition after the failed
worktree add:

   git worktree list actual 
   ! grep precious actual

but that should happen in the series that adds worktree list ;-)

 --- 8 ---
 From: Eric Sunshine sunsh...@sunshineco.com
 Subject: [PATCH] fixup! worktree: add: auto-vivify new branch when branch 
 is omitted

 ---
  t/t2025-worktree-add.sh | 9 +
  1 file changed, 9 insertions(+)

 diff --git a/t/t2025-worktree-add.sh b/t/t2025-worktree-add.sh
 index 8fe242f..ead8aa2 100755
 --- a/t/t2025-worktree-add.sh
 +++ b/t/t2025-worktree-add.sh
 @@ -150,4 +150,13 @@ test_expect_success 'add with branch omitted' '
   test_cmp_rev HEAD bat
  '
  
 +test_expect_success 'add auto-vivify does not clobber existing branch' '
 + test_commit c1 
 + test_commit c2 
 + git branch precious HEAD~1 
 + test_must_fail git worktree add precious 
 + test_cmp_rev HEAD~1 precious 
 + test_path_is_missing precious
 +'
 +
  test_done
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v3 22/23] worktree: add: auto-vivify new branch when branch is omitted

2015-07-06 Thread Eric Sunshine
As a convenience, when branch is omitted from git worktree path
branch and neither -b nor -B is used, automatically create a new
branch named after path, as if -b $(basename path) was specified.
Thus, git worktree add ../hotfix creates a new branch named hotfix
and associates it with new worktree ../hotfix.

Signed-off-by: Eric Sunshine sunsh...@sunshineco.com
---
 Documentation/git-worktree.txt | 8 ++--
 builtin/worktree.c | 8 ++--
 t/t2025-worktree-add.sh| 5 +
 3 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/Documentation/git-worktree.txt b/Documentation/git-worktree.txt
index 377ae0f..da71f50 100644
--- a/Documentation/git-worktree.txt
+++ b/Documentation/git-worktree.txt
@@ -9,7 +9,7 @@ git-worktree - Manage multiple worktrees
 SYNOPSIS
 
 [verse]
-'git worktree add' [-f] [--detach] [-b new-branch] path branch
+'git worktree add' [-f] [--detach] [-b new-branch] path [branch]
 'git worktree prune' [-n] [-v] [--expire expire]
 
 DESCRIPTION
@@ -45,11 +45,15 @@ pruning should be suppressed. See section DETAILS for 
more information.
 
 COMMANDS
 
-add path branch::
+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.
++
+If `branch` is omitted and neither `-b` nor `-B` is used, then, as a
+convenience, a new branch based at HEAD is created automatically, as if
+`-b $(basename path)` was specified.
 
 prune::
 
diff --git a/builtin/worktree.c b/builtin/worktree.c
index 323d444..69248ba 100644
--- a/builtin/worktree.c
+++ b/builtin/worktree.c
@@ -291,12 +291,16 @@ static int add(int ac, const char **av, const char 
*prefix)
die(_(-b and -B are mutually exclusive));
if (ac  1 || ac  2)
usage_with_options(worktree_usage, options);
-   if (ac  2  !new_branch  !new_branch_force)
-   usage_with_options(worktree_usage, options);
 
path = prefix ? prefix_filename(prefix, strlen(prefix), av[0]) : av[0];
branch = ac  2 ? HEAD : av[1];
 
+   if (ac  2  !new_branch  !new_branch_force) {
+   int n;
+   const char *s = worktree_basename(path, n);
+   new_branch = xstrndup(s, n);
+   }
+
argv_array_push(cmd, checkout);
if (force)
argv_array_push(cmd, --ignore-other-worktrees);
diff --git a/t/t2025-worktree-add.sh b/t/t2025-worktree-add.sh
index 8964dec..8fe242f 100755
--- a/t/t2025-worktree-add.sh
+++ b/t/t2025-worktree-add.sh
@@ -145,4 +145,9 @@ test_expect_success 'add -b with branch omitted' '
test_cmp_rev HEAD burble
 '
 
+test_expect_success 'add with branch omitted' '
+   git worktree add wiffle/bat 
+   test_cmp_rev HEAD bat
+'
+
 test_done
-- 
2.5.0.rc1.197.g417e668

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


Re: [PATCH v3 22/23] worktree: add: auto-vivify new branch when branch is omitted

2015-07-06 Thread Junio C Hamano
Eric Sunshine sunsh...@sunshineco.com writes:

 diff --git a/Documentation/git-worktree.txt b/Documentation/git-worktree.txt
 index 377ae0f..da71f50 100644
 --- a/Documentation/git-worktree.txt
 +++ b/Documentation/git-worktree.txt
 @@ -9,7 +9,7 @@ git-worktree - Manage multiple worktrees
  SYNOPSIS
  
  [verse]
 -'git worktree add' [-f] [--detach] [-b new-branch] path branch
 +'git worktree add' [-f] [--detach] [-b new-branch] path [branch]

Ahh, OK, this answers my previous question.

 + if (ac  2  !new_branch  !new_branch_force) {
 + int n;
 + const char *s = worktree_basename(path, n);
 + new_branch = xstrndup(s, n);
 + }
 +

and because this is new_branch, not new_branch_force, we will not
accidentally clobber an existing branch.  The hotfix time is when
the end-user tends to be less careful, and it is a good thing to
make sure git worktree add ../hotfix will not clobber an unrelated
hotfix branch.

Good.

Which may be something we would want to have a test for, though.

 diff --git a/t/t2025-worktree-add.sh b/t/t2025-worktree-add.sh
 index 8964dec..8fe242f 100755
 --- a/t/t2025-worktree-add.sh
 +++ b/t/t2025-worktree-add.sh
 @@ -145,4 +145,9 @@ test_expect_success 'add -b with branch omitted' '
   test_cmp_rev HEAD burble
  '
  
 +test_expect_success 'add with branch omitted' '
 + git worktree add wiffle/bat 
 + test_cmp_rev HEAD bat
 +'
 +
  test_done
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 22/23] worktree: add: auto-vivify new branch when branch is omitted

2015-07-06 Thread Eric Sunshine
On Mon, Jul 06, 2015 at 12:19:14PM -0700, Junio C Hamano wrote:
 Eric Sunshine sunsh...@sunshineco.com writes:
  diff --git a/Documentation/git-worktree.txt b/Documentation/git-worktree.txt
  index 377ae0f..da71f50 100644
  --- a/Documentation/git-worktree.txt
  +++ b/Documentation/git-worktree.txt
  @@ -9,7 +9,7 @@ git-worktree - Manage multiple worktrees
   SYNOPSIS
   
   [verse]
  -'git worktree add' [-f] [--detach] [-b new-branch] path branch
  +'git worktree add' [-f] [--detach] [-b new-branch] path [branch]
 
 Ahh, OK, this answers my previous question.

Right. I considered squashing this patch with the previous one, in
which case the synopsis question wouldn't have come up, but kept them
separate since they are (or can be) conceptually distinct, and the one
patch builds upon the other (and keeping them separate makes them a
bit easier to review).

  +   if (ac  2  !new_branch  !new_branch_force) {
  +   int n;
  +   const char *s = worktree_basename(path, n);
  +   new_branch = xstrndup(s, n);
  +   }
  +
 
 and because this is new_branch, not new_branch_force, we will not
 accidentally clobber an existing branch.  The hotfix time is when
 the end-user tends to be less careful, and it is a good thing to
 make sure git worktree add ../hotfix will not clobber an unrelated
 hotfix branch.
 
 Good.
 
 Which may be something we would want to have a test for, though.

Good idea. How about the following as a squash-in?

--- 8 ---
From: Eric Sunshine sunsh...@sunshineco.com
Subject: [PATCH] fixup! worktree: add: auto-vivify new branch when branch is 
omitted

---
 t/t2025-worktree-add.sh | 9 +
 1 file changed, 9 insertions(+)

diff --git a/t/t2025-worktree-add.sh b/t/t2025-worktree-add.sh
index 8fe242f..ead8aa2 100755
--- a/t/t2025-worktree-add.sh
+++ b/t/t2025-worktree-add.sh
@@ -150,4 +150,13 @@ test_expect_success 'add with branch omitted' '
test_cmp_rev HEAD bat
 '
 
+test_expect_success 'add auto-vivify does not clobber existing branch' '
+   test_commit c1 
+   test_commit c2 
+   git branch precious HEAD~1 
+   test_must_fail git worktree add precious 
+   test_cmp_rev HEAD~1 precious 
+   test_path_is_missing precious
+'
+
 test_done
-- 
2.5.0.rc1.201.ga12d9f8

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