git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v6 0/4] worktree: Support `--orphan` when creating new worktrees

From
Jacob Abel <jacobabel@nullpo.dev>
Date
Dec 29, 2022, 06:38 UTC
Message-ID
<20221229063823.ij3jjuaar2fsayju@phi>
In-Reply-To
<221228.868risuf5x.gmgdl@evledraar.gmail.com>
On 22/12/28 09:01AM, Ævar Arnfjörð Bjarmason wrote:
Show 62 quoted lines
>
> On Wed, Dec 28 2022, Jacob Abel wrote:
>
> >   * Added save_param_arr() to preserve "$@" from being reset by
> >     test_expect_success() in test_wt_add_excl() (2/4).
> > [...]
> > 2:  3d8b26f9d6 ! 2:  c03c112f79 worktree add: refactor opt exclusion tests
> >     @@ t/t2400-worktree-add.sh: test_expect_success '"add" no auto-vivify with --detach
> >      -test_expect_success '"add" -b/-B mutually exclusive' '
> >      -	test_must_fail git worktree add -b poodle -B poodle bamboo main
> >      -'
> >     --
> >     ++# Saves parameter sequence/array as a string so they can be safely stored in a
> >     ++# variable and restored with `eval "set -- $arr"`. Sourced from
> >     ++# https://stackoverflow.com/a/27503158/15064705
> >     ++save_param_arr () {
> >     ++	local i
> >     ++	for i;
> >     ++	do
> >     ++		# For each argument:
> >     ++		# 1. Append "\n" after each entry
> >     ++		# 2. Convert "'" into "'\''"
> >     ++		# 3. Prepend "'" before each entry
> >     ++		# 4. Append " \" after each entry
> >     ++		printf "%s\\n" "$i" | sed "
> >     ++			s/'/'\\\\''/g
> >     ++			1s/^/'/
> >     ++			\$s/\$/' \\\\/
> >     ++		"
> >     ++	done
> >     ++	echo " "
> >     ++}
> >     +
> > [...]
> >       ## Documentation/config/advice.txt ##
> >     @@ t/t2400-worktree-add.sh: test_expect_success '"add" worktree with orphan branch,
> >       	test_cmp expect .git/worktrees/orphan-with-lock-reason/locked
> >       '
> >
> >     -+test_wt_add_empty_repo_orphan_hint() {
> >     ++test_wt_add_empty_repo_orphan_hint () {
> >      +	local context="$1"
> >      +	shift
> >     -+	local opts="$@"
> >     ++	local arr=$(save_param_arr "$@")
> >      +	test_expect_success "'worktree add' show orphan hint in empty repo w/ $context" '
> >     ++		eval "set -- $arr" &&
> >      +		test_when_finished "rm -rf empty_repo" &&
> >      +		GIT_DIR="empty_repo" git init --bare &&
> >     -+		test_must_fail git -C empty_repo worktree add $opts foobar/ 2> actual &&
> >     ++		test_must_fail git -C empty_repo worktree add "$@" foobar/ 2> actual &&
> >      +		grep "hint: If you meant to create a worktree containing a new orphan branch" actual
> >      +	'
> >      +}
>
> The rest of this looks good to me, but this bit looks like you went down
> the rabbit hole of responding to Junio's feedback in
> https://lore.kernel.org/git/xmqqsfhawwqf.fsf@gitster.g/
>
> I think as we're not dealing with any quoted arguments here it's not
> worth copy/pasting some code to do shell quoting from StackOverflow,
> i.e. for this series this squashed at the tip passes all the tests:
Understood.
Show 73 quoted lines
>
> 	diff --git a/t/t2400-worktree-add.sh b/t/t2400-worktree-add.sh
> 	index f43de591173..e5b01583cf2 100755
> 	--- a/t/t2400-worktree-add.sh
> 	+++ b/t/t2400-worktree-add.sh
> 	@@ -298,33 +298,11 @@ test_expect_success '"add" no auto-vivify with --detach and <branch> omitted' '
> 	 	test_must_fail git -C mish/mash symbolic-ref HEAD
> 	 '
>
> 	-# Saves parameter sequence/array as a string so they can be safely stored in a
> 	-# variable and restored with `eval "set -- $arr"`. Sourced from
> 	-# https://stackoverflow.com/a/27503158/15064705
> 	-save_param_arr () {
> 	-	local i
> 	-	for i;
> 	-	do
> 	-		# For each argument:
> 	-		# 1. Append "\n" after each entry
> 	-		# 2. Convert "'" into "'\''"
> 	-		# 3. Prepend "'" before each entry
> 	-		# 4. Append " \" after each entry
> 	-		printf "%s\\n" "$i" | sed "
> 	-			s/'/'\\\\''/g
> 	-			1s/^/'/
> 	-			\$s/\$/' \\\\/
> 	-		"
> 	-	done
> 	-	echo " "
> 	-}
> 	-
> 	 # Helper function to test mutually exclusive options.
> 	 test_wt_add_excl () {
> 	-	local arr=$(save_param_arr "$@")
> 	-	test_expect_success "'worktree add' with $* has mutually exclusive options" '
> 	-		eval "set -- $arr" &&
> 	-		test_must_fail git worktree add "$@"
> 	+	local args="$@" &&
> 	+	test_expect_success "'worktree add' with '$args' has mutually exclusive options" '
> 	+		test_must_fail git worktree add $args
> 	 	'
> 	 }
>
> 	@@ -398,21 +376,20 @@ test_expect_success '"add" worktree with orphan branch, lock, and reason' '
> 	 '
>
> 	 test_wt_add_empty_repo_orphan_hint () {
> 	-	local context="$1"
> 	-	shift
> 	-	local arr=$(save_param_arr "$@")
> 	+	local context="$1" &&
> 	+	shift &&
> 	+	local args="$@" &&
> 	 	test_expect_success "'worktree add' show orphan hint in empty repo w/ $context" '
> 	-		eval "set -- $arr" &&
> 	 		test_when_finished "rm -rf empty_repo" &&
> 	 		GIT_DIR="empty_repo" git init --bare &&
> 	-		test_must_fail git -C empty_repo worktree add "$@" foobar/ 2> actual &&
> 	+		test_must_fail git -C empty_repo worktree add $args foobar/ 2> actual &&
> 	 		grep "hint: If you meant to create a worktree containing a new orphan branch" actual
> 	 	'
> 	 }
>
> 	-test_wt_add_empty_repo_orphan_hint 'DWIM'
> 	-test_wt_add_empty_repo_orphan_hint '-b' -b foobar_branch
> 	-test_wt_add_empty_repo_orphan_hint '-B' -B foobar_branch
> 	+test_wt_add_empty_repo_orphan_hint DWIM
> 	+test_wt_add_empty_repo_orphan_hint -b -b foobar_branch
> 	+test_wt_add_empty_repo_orphan_hint -B -B foobar_branch
>
> 	 test_expect_success 'local clone from linked checkout' '
> 	 	git clone --local here here-clone &&
>
> Note also that you lost the &&-chaining.
Ah yes. Apologies. Fixed.
Show 7 quoted lines
>
> If we do want to be slightly paranoid about it, doesn't just creating a:
>
> 	local args_str="$*" &&
>
> And then using that in the description argument to test_expect_success()
> also address Junio's feedback, without the need for this quoting helper?

Below is what I have come up with while still not needing the quoting helper. Could this work as an alternative?

It doesn't handle quotes properly without a bit of help from the test author but it can handle them as long as you double escape the string.

The diff also includes slight tweaks to the tests themselves to better verify the behavior.

Note: The two extra tests added in the diff wouldn't be in the next revision but they
are there to demonstrate that things work as expected with this change.
diff --git a/t/t2400-worktree-add.sh b/t/t2400-worktree-add.sh
index f43de59117..1d5843c956 100755
--- a/t/t2400-worktree-add.sh
+++ b/t/t2400-worktree-add.sh
@@ -298,36 +298,18 @@ test_expect_success '"add" no auto-vivify with --detach and <branch> omitted' '
 	test_must_fail git -C mish/mash symbolic-ref HEAD
 '

-# Saves parameter sequence/array as a string so they can be safely stored in a
-# variable and restored with `eval "set -- $arr"`. Sourced from
-# https://stackoverflow.com/a/27503158/15064705
-save_param_arr () {
-	local i
-	for i;
-	do
-		# For each argument:
-		# 1. Append "\n" after each entry
-		# 2. Convert "'" into "'\''"
-		# 3. Prepend "'" before each entry
-		# 4. Append " \" after each entry
-		printf "%s\\n" "$i" | sed "
-			s/'/'\\\\''/g
-			1s/^/'/
-			\$s/\$/' \\\\/
-		"
-	done
-	echo " "
-}
-
 # Helper function to test mutually exclusive options.
+#
+# Note: Any arguments that contain spaces must be double and single quoted, ex:
+# test_wt_add_excl -b poodle --detach bamboo --lock --reason "'the reason'" main
 test_wt_add_excl () {
-	local arr=$(save_param_arr "$@")
-	test_expect_success "'worktree add' with $* has mutually exclusive options" '
-		eval "set -- $arr" &&
-		test_must_fail git worktree add "$@"
-	'
+	test_expect_success "'worktree add' with $* has mutually exclusive options" "
+		test_must_fail git worktree add $* 2>actual &&
+		grep -P 'fatal:( options)? .* cannot be used together' actual
+	"
 }

+test_wt_add_excl -b poodle --detach bamboo --lock --reason "'the reason'" main
 test_wt_add_excl -b poodle -B poodle bamboo main
 test_wt_add_excl -b poodle --detach bamboo main
 test_wt_add_excl -B poodle --detach bamboo main
@@ -397,19 +379,22 @@ test_expect_success '"add" worktree with orphan branch, lock, and reason' '
 	test_cmp expect .git/worktrees/orphan-with-lock-reason/locked
 '

+# Note: Any arguments (except the first argument) that contain spaces must be
+# double and single quoted, ex:
+# test_wt_add_empty_repo_orphan_hint 'the context' --lock --reason "'the reason'"
 test_wt_add_empty_repo_orphan_hint () {
-	local context="$1"
-	shift
-	local arr=$(save_param_arr "$@")
-	test_expect_success "'worktree add' show orphan hint in empty repo w/ $context" '
-		eval "set -- $arr" &&
-		test_when_finished "rm -rf empty_repo" &&
-		GIT_DIR="empty_repo" git init --bare &&
-		test_must_fail git -C empty_repo worktree add "$@" foobar/ 2> actual &&
-		grep "hint: If you meant to create a worktree containing a new orphan branch" actual
-	'
+	local context="$1" &&
+	shift &&
+	test_expect_success "'worktree add' show orphan hint in empty repo w/ $context" "
+		test_when_finished 'rm -rf empty_repo' &&
+		GIT_DIR='empty_repo' git init --bare &&
+		test_must_fail git -C empty_repo worktree add $* foobar/ 2>actual &&
+		! grep 'error: unknown switch' actual &&
+		grep 'hint: If you meant to create a worktree containing a new orphan branch' actual
+	"
 }

+test_wt_add_empty_repo_orphan_hint 'the context' --lock --reason "'the reason'"
 test_wt_add_empty_repo_orphan_hint 'DWIM'
 test_wt_add_empty_repo_orphan_hint '-b' -b foobar_branch
 test_wt_add_empty_repo_orphan_hint '-B' -B foobar_branch
--
2.38.2

And the results of running `cd t/ && sh ./t2400-worktree-add.sh -x -r 1,32,49`:

    Initialized empty Git repository in /path/to/git/repo/t/trash directory.t2400-worktree-add/.git/
    expecting success of 2400.1 'setup':
        test_commit init

    ++ test_commit init
    ++ local notick=
    ++ local echo=echo
    ++ local append=
    ++ local author=
    ++ local signoff=
    ++ local indir=
    ++ local tag=light
    ++ test 1 '!=' 0
    ++ case "$1" in
    ++ break
    ++ indir=
    ++ local file=init.t
    ++ test -n ''
    ++ echo init
    ++ git add -- init.t
    ++ test -z ''
    ++ test_tick
    ++ test -z ''
    ++ test_tick=1112911993
    ++ GIT_COMMITTER_DATE='1112911993 -0700'
    ++ GIT_AUTHOR_DATE='1112911993 -0700'
    ++ export GIT_COMMITTER_DATE GIT_AUTHOR_DATE
    ++ git commit -m init
    [main (root-commit) 2519212] init
     Author: A U Thor <author@example.com>
     1 file changed, 1 insertion(+)
     create mode 100644 init.t
    ++ case "$tag" in
    ++ git tag init
    ok 1 - setup

    ok 2 # skip "add" an existing worktree (--run)

    ok 3 # skip "add" an existing empty worktree (--run)

    ok 4 # skip "add" using shorthand - fails when no previous branch (--run)

    ok 5 # skip "add" using - shorthand (--run)

    ok 6 # skip "add" refuses to checkout locked branch (--run)

    ok 7 # skip checking out paths not complaining about linked checkouts (--run)

    ok 8 # skip "add" worktree (--run)

    ok 9 # skip "add" worktree with lock (--run)

    ok 10 # skip "add" worktree with lock and reason (--run)

    ok 11 # skip "add" worktree with reason but no lock (--run)

    ok 12 # skip "add" worktree from a subdir (--run)

    ok 13 # skip "add" from a linked checkout (--run)

    ok 14 # skip "add" worktree creating new branch (--run)

    ok 15 # skip die the same branch is already checked out (--run)

    ok 16 # skip die the same branch is already checked out (symlink) (--run)

    ok 17 # skip not die the same branch is already checked out (--run)

    ok 18 # skip not die on re-checking out current branch (--run)

    ok 19 # skip "add" from a bare repo (--run)

    ok 20 # skip checkout from a bare repo without "add" (--run)

    ok 21 # skip "add" default branch of a bare repo (--run)

    ok 22 # skip "add" to bare repo with worktree config (--run)

    ok 23 # skip checkout with grafts (--run)

    ok 24 # skip "add" from relative HEAD (--run)

    ok 25 # skip "add -b" with <branch> omitted (--run)

    ok 26 # skip "add --detach" with <branch> omitted (--run)

    ok 27 # skip "add" with <branch> omitted (--run)

    ok 28 # skip "add" checks out existing branch of dwimd name (--run)

    ok 29 # skip "add <path>" dwim fails with checked out branch (--run)

    ok 30 # skip "add --force" with existing dwimd name doesnt die (--run)

    ok 31 # skip "add" no auto-vivify with --detach and <branch> omitted (--run)

    expecting success of 2400.32 ''worktree add' with -b poodle --detach bamboo --lock --reason 'the reason' main has mutually exclusive options':
            test_must_fail git worktree add -b poodle --detach bamboo --lock --reason 'the reason' main 2>actual &&
            grep -P 'fatal:( options)? .* cannot be used together' actual

    ++ test_must_fail git worktree add -b poodle --detach bamboo --lock --reason 'the reason' main
    ++ case "$1" in
    ++ _test_ok=
    ++ test_must_fail_acceptable git worktree add -b poodle --detach bamboo --lock --reason 'the reason' main
    ++ test git = env
    ++ case "$1" in
    ++ return 0
    ++ git worktree add -b poodle --detach bamboo --lock --reason 'the reason' main
    ++ exit_code=128
    ++ test 128 -eq 0
    ++ test_match_signal 13 128
    ++ test 128 = 141
    ++ test 128 = 269
    ++ return 1
    ++ test 128 -gt 129
    ++ test 128 -eq 127
    ++ test 128 -eq 126
    ++ return 0
    ++ grep -P 'fatal:( options)? .* cannot be used together' actual
    fatal: options '-b', '-B', and '--detach' cannot be used together
    ok 32 - 'worktree add' with -b poodle --detach bamboo --lock --reason 'the reason' main has mutually exclusive options

    ok 33 # skip 'worktree add' with -b poodle -B poodle bamboo main has mutually exclusive options (--run)

    ok 34 # skip 'worktree add' with -b poodle --detach bamboo main has mutually exclusive options (--run)

    ok 35 # skip 'worktree add' with -B poodle --detach bamboo main has mutually exclusive options (--run)

    ok 36 # skip 'worktree add' with -B poodle --orphan poodle bamboo has mutually exclusive options (--run)

    ok 37 # skip 'worktree add' with -b poodle --orphan poodle bamboo has mutually exclusive options (--run)

    ok 38 # skip 'worktree add' with --orphan poodle --detach bamboo has mutually exclusive options (--run)

    ok 39 # skip 'worktree add' with --orphan poodle --no-checkout bamboo has mutually exclusive options (--run)

    ok 40 # skip 'worktree add' with --orphan poodle bamboo main has mutually exclusive options (--run)

    ok 41 # skip "add -B" fails if the branch is checked out (--run)

    ok 42 # skip add -B (--run)

    ok 43 # skip add --quiet (--run)

    ok 44 # skip "add --orphan" (--run)

    ok 45 # skip "add --orphan" fails if the branch already exists (--run)

    ok 46 # skip "add --orphan" with empty repository (--run)

    ok 47 # skip "add" worktree with orphan branch and lock (--run)

    ok 48 # skip "add" worktree with orphan branch, lock, and reason (--run)

    expecting success of 2400.49 ''worktree add' show orphan hint in empty repo w/ the context':
            test_when_finished 'rm -rf empty_repo' &&
            GIT_DIR='empty_repo' git init --bare &&
            test_must_fail git -C empty_repo worktree add --lock --reason 'the reason' foobar/ 2>actual &&
            ! grep 'error: unknown switch' actual &&
            grep 'hint: If you meant to create a worktree containing a new orphan branch' actual

    ++ test_when_finished 'rm -rf empty_repo'
    ++ test 0 = 0
    ++ test_cleanup='{ rm -rf empty_repo
            } && (exit "$eval_ret"); eval_ret=$?; :'
    ++ GIT_DIR=empty_repo
    ++ git init --bare
    Initialized empty Git repository in /path/to/git/repo/t/trash directory.t2400-worktree-add/empty_repo/
    ++ test_must_fail git -C empty_repo worktree add --lock --reason 'the reason' foobar/
    ++ case "$1" in
    ++ _test_ok=
    ++ test_must_fail_acceptable git -C empty_repo worktree add --lock --reason 'the reason' foobar/
    ++ test git = env
    ++ case "$1" in
    ++ return 0
    ++ git -C empty_repo worktree add --lock --reason 'the reason' foobar/
    ++ exit_code=128
    ++ test 128 -eq 0
    ++ test_match_signal 13 128
    ++ test 128 = 141
    ++ test 128 = 269
    ++ return 1
    ++ test 128 -gt 129
    ++ test 128 -eq 127
    ++ test 128 -eq 126
    ++ return 0
    ++ grep 'error: unknown switch' actual
    ++ grep 'hint: If you meant to create a worktree containing a new orphan branch' actual
    hint: If you meant to create a worktree containing a new orphan branch
    ++ rm -rf empty_repo
    ++ exit 0
    ++ eval_ret=0
    ++ :
    ok 49 - 'worktree add' show orphan hint in empty repo w/ the context

    ok 50 # skip 'worktree add' show orphan hint in empty repo w/ DWIM (--run)

    ok 51 # skip 'worktree add' show orphan hint in empty repo w/ -b (--run)

    ok 52 # skip 'worktree add' show orphan hint in empty repo w/ -B (--run)

    ok 53 # skip local clone from linked checkout (--run)

    ok 54 # skip local clone --shared from linked checkout (--run)

    ok 55 # skip "add" worktree with --no-checkout (--run)

    ok 56 # skip "add" worktree with --checkout (--run)

    ok 57 # skip put a worktree under rebase (--run)

    ok 58 # skip add a worktree, checking out a rebased branch (--run)

    ok 59 # skip checking out a rebased branch from another worktree (--run)

    ok 60 # skip not allow to delete a branch under rebase (--run)

    ok 61 # skip rename a branch under rebase not allowed (--run)

    ok 62 # skip check out from current worktree branch ok (--run)

    ok 63 # skip checkout a branch under bisect (--run)

    ok 64 # skip rename a branch under bisect not allowed (--run)

    ok 65 # skip --track sets up tracking (--run)

    ok 66 # skip "add" <path> <remote/branch> w/ no HEAD (--run)

    ok 67 # skip --no-track avoids setting up tracking (--run)

    ok 68 # skip "add" <path> <non-existent-branch> fails (--run)

    ok 69 # skip "add" <path> <branch> dwims (--run)

    ok 70 # skip "add" <path> <branch> dwims with checkout.defaultRemote (--run)

    ok 71 # skip git worktree add does not match remote (--run)

    ok 72 # skip git worktree add --guess-remote sets up tracking (--run)

    ok 73 # skip git worktree add with worktree.guessRemote sets up tracking (--run)

    ok 74 # skip git worktree --no-guess-remote option overrides config (--run)

    ok 75 # skip "add" invokes post-checkout hook (branch) (--run)

    ok 76 # skip "add" invokes post-checkout hook (detached) (--run)

    ok 77 # skip "add --no-checkout" suppresses post-checkout hook (--run)

    ok 78 # skip "add" in other worktree invokes post-checkout hook (--run)

    ok 79 # skip "add" in bare repo invokes post-checkout hook (--run)

    ok 80 # skip "add" an existing but missing worktree (--run)

    ok 81 # skip "add" an existing locked but missing worktree (--run)

    ok 82 # skip "add" not tripped up by magic worktree matching" (--run)

    ok 83 # skip sanitize generated worktree name (--run)

    ok 84 # skip "add" should not fail because of another bad worktree (--run)

    ok 85 # skip "add" with uninitialized submodule, with submodule.recurse unset (--run)

    ok 86 # skip "add" with uninitialized submodule, with submodule.recurse set (--run)

    ok 87 # skip "add" with initialized submodule, with submodule.recurse unset (--run)

    ok 88 # skip "add" with initialized submodule, with submodule.recurse set (--run)

    # passed all 88 test(s)
    1..88
Previous: Ævar Arnfjörð BjarmasonNext: Ævar Arnfjörð Bjarmason
Message 95 of 129 in “worktree: Support `--orphan` when creating new worktrees”
  1. 0/4 worktree: Support `--orphan` when creating new worktreesJacob Abel, Nov 4, 2022
  2. 1/4 worktree add: Include -B in usage docsJacob Abel, Nov 4, 2022
  3. Eric SunshineNov 4, 2022
  4. Jacob AbelNov 4, 2022
  5. 2/4 builtin/worktree.c: Update checkout_worktree() to use git-worktreeJacob Abel, Nov 4, 2022
  6. Ævar Arnfjörð BjarmasonNov 4, 2022
  7. Jacob AbelNov 4, 2022
  8. Taylor BlauNov 4, 2022
  9. 3/4 worktree add: add --orphan flagJacob Abel, Nov 4, 2022
  10. Ævar Arnfjörð BjarmasonNov 4, 2022
  11. Jacob AbelNov 4, 2022
  12. Eric SunshineNov 4, 2022
  13. Jacob AbelNov 4, 2022
  14. Eric SunshineNov 10, 2022
  15. Jacob AbelNov 10, 2022
  16. 4/4 worktree add: Add unit tests for --orphanJacob Abel, Nov 4, 2022
  17. Ævar Arnfjörð BjarmasonNov 4, 2022
  18. Jacob AbelNov 4, 2022
  19. Eric SunshineNov 4, 2022
  20. Jacob AbelNov 4, 2022
  21. Jacob AbelNov 4, 2022
  22. 0/2 worktree: Support `--orphan` when creating new worktreesJacob Abel, Nov 4, 2022
  23. 1/2 worktree add: Include -B in usage docsJacob Abel, Nov 4, 2022
  24. 2/2 worktree add: add --orphan flagJacob Abel, Nov 4, 2022
  25. 0/2 worktree: Support `--orphan` when creating new worktreesJacob Abel, Nov 10, 2022
  26. 1/2 worktree add: Include -B in usage docsJacob Abel, Nov 10, 2022
  27. 2/2 worktree add: add --orphan flagJacob Abel, Nov 10, 2022
  28. Ævar Arnfjörð BjarmasonNov 15, 2022
  29. Eric SunshineNov 15, 2022
  30. Ævar Arnfjörð BjarmasonNov 15, 2022
  31. Eric SunshineNov 16, 2022
  32. Jacob AbelNov 19, 2022
  33. Jacob AbelNov 19, 2022
  34. Ævar Arnfjörð BjarmasonNov 19, 2022
  35. Jacob AbelNov 19, 2022
  36. Eric SunshineNov 22, 2022
  37. Jacob AbelNov 22, 2022
  38. Ævar Arnfjörð BjarmasonNov 15, 2022
  39. Jacob AbelNov 19, 2022
  40. Ævar Arnfjörð BjarmasonNov 19, 2022
  41. Eric SunshineNov 16, 2022
  42. Ævar Arnfjörð BjarmasonNov 17, 2022
  43. Jacob AbelNov 19, 2022
  44. Ævar Arnfjörð BjarmasonNov 19, 2022
  45. Eric SunshineNov 22, 2022
  46. Jacob AbelNov 22, 2022
  47. Ævar Arnfjörð BjarmasonNov 22, 2022
  48. Jacob AbelNov 23, 2022
  49. Rubén JustoNov 23, 2022
  50. Jacob AbelNov 23, 2022
  51. Rubén JustoNov 23, 2022
  52. Phillip WoodNov 22, 2022
  53. Jacob AbelNov 23, 2022
  54. 0/3 worktree: Support `--orphan` when creating new worktreesJacob Abel, Dec 12, 2022
  55. 1/3 worktree add: Include -B in usage docsJacob Abel, Dec 12, 2022
  56. 2/3 worktree add: add --orphan flagJacob Abel, Dec 12, 2022
  57. Ævar Arnfjörð BjarmasonDec 12, 2022
  58. Jacob AbelDec 12, 2022
  59. Ævar Arnfjörð BjarmasonDec 12, 2022
  60. Jacob AbelDec 12, 2022
  61. 3/3 worktree add: Add hint to use --orphan when bad refJacob Abel, Dec 12, 2022
  62. Ævar Arnfjörð BjarmasonDec 12, 2022
  63. Jacob AbelDec 12, 2022
  64. Ævar Arnfjörð BjarmasonDec 12, 2022
  65. Eric SunshineDec 12, 2022
  66. Jacob AbelDec 12, 2022
  67. Jacob AbelDec 12, 2022
  68. 0/4 worktree: Support `--orphan` when creating new worktreesJacob Abel, Dec 20, 2022
  69. 1/4 worktree add: Include -B in usage docsJacob Abel, Dec 20, 2022
  70. Junio C HamanoDec 20, 2022
  71. Jacob AbelDec 20, 2022
  72. 2/4 worktree add: refactor opt exclusion testsJacob Abel, Dec 20, 2022
  73. Junio C HamanoDec 20, 2022
  74. Jacob AbelDec 20, 2022
  75. 3/4 worktree add: add --orphan flagJacob Abel, Dec 20, 2022
  76. Junio C HamanoDec 20, 2022
  77. Jacob AbelDec 21, 2022
  78. 4/4 worktree add: Add hint to use --orphan when bad refJacob Abel, Dec 20, 2022
  79. Junio C HamanoDec 20, 2022
  80. Jacob AbelDec 21, 2022
  81. 0/4 worktree: Support `--orphan` when creating new worktreesJacob Abel, Dec 28, 2022
  82. 1/4 worktree add: include -B in usage docsJacob Abel, Dec 28, 2022
  83. 2/4 worktree add: refactor opt exclusion testsJacob Abel, Dec 28, 2022
  84. Junio C HamanoDec 28, 2022
  85. Jacob AbelDec 29, 2022
  86. Junio C HamanoDec 29, 2022
  87. Jacob AbelDec 29, 2022
  88. Jacob AbelJan 6, 2023
  89. Junio C HamanoJan 6, 2023
  90. Jacob AbelJan 7, 2023
  91. 3/4 worktree add: add --orphan flagJacob Abel, Dec 28, 2022
  92. 4/4 worktree add: add hint to direct users towards --orphanJacob Abel, Dec 28, 2022
  93. Phillip WoodJan 6, 2023
  94. Ævar Arnfjörð BjarmasonDec 28, 2022
  95. Jacob AbelDec 29, 2022
  96. Ævar Arnfjörð BjarmasonDec 29, 2022
  97. Jacob AbelDec 29, 2022
  98. 0/4 worktree: Support `--orphan` when creating new worktreesJacob Abel, Jan 7, 2023
  99. 1/4 worktree add: include -B in usage docsJacob Abel, Jan 7, 2023
  100. 2/4 worktree add: refactor opt exclusion testsJacob Abel, Jan 7, 2023
  101. Junio C HamanoJan 8, 2023
  102. Jacob AbelJan 8, 2023
  103. 3/4 worktree add: add --orphan flagJacob Abel, Jan 7, 2023
  104. 4/4 worktree add: add hint to direct users towards --orphanJacob Abel, Jan 7, 2023
  105. Ævar Arnfjörð BjarmasonJan 9, 2023
  106. Jacob AbelJan 9, 2023
  107. Ævar Arnfjörð BjarmasonJan 9, 2023
  108. Jacob AbelJan 9, 2023
  109. 0/4 worktree: Support `--orphan` when creating new worktreesJacob Abel, Jan 9, 2023
  110. 1/4 worktree add: include -B in usage docsJacob Abel, Jan 9, 2023
  111. 3/4 worktree add: add --orphan flagJacob Abel, Jan 9, 2023
  112. Phillip WoodJan 13, 2023
  113. Junio C HamanoJan 13, 2023
  114. Jacob AbelJan 14, 2023
  115. Junio C HamanoJan 15, 2023
  116. rsbecker@nexbridge.comJan 15, 2023
  117. Junio C HamanoJan 15, 2023
  118. 'Jacob Abel'Jan 18, 2023
  119. Jacob AbelJan 18, 2023
  120. Ævar Arnfjörð BjarmasonJan 19, 2023
  121. Junio C HamanoJan 19, 2023
  122. Phillip WoodJan 16, 2023
  123. Jacob AbelJan 18, 2023
  124. Phillip WoodJan 19, 2023
  125. Jacob AbelJan 19, 2023
  126. 2/4 worktree add: refactor opt exclusion testsJacob Abel, Jan 9, 2023
  127. 4/4 worktree add: add hint to direct users towards --orphanJacob Abel, Jan 9, 2023
  128. Ævar Arnfjörð BjarmasonJan 9, 2023
  129. Junio C HamanoJan 13, 2023

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.