(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'git branch assorted tests'>)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <'prepare a trivial repository'>)} 
      {
        (SQ <'\n'> <'\techo Hello >A &&\n'> <'\tgit update-index --add A &&\n'> 
          <'\tgit commit -m "Initial commit." &&\n'> <'\techo World >>A &&\n'> <'\tgit update-index --add A &&\n'> <'\tgit commit -m "Second commit." &&\n'> 
          <'\tHEAD=$(git rev-parse --verify HEAD)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch --help should not have created a bogus branch'>)} 
      {
        (SQ <'\n'> <'\ttest_might_fail git branch --man --help </dev/null >/dev/null 2>&1 &&\n'> 
          <'\ttest_path_is_missing .git/refs/heads/--help\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'branch -h in broken repository'>)} 
      {
        (SQ <'\n'> <'\tmkdir broken &&\n'> <'\t(\n'> <'\t\tcd broken &&\n'> <'\t\tgit init &&\n'> 
          <'\t\t>.git/refs/heads/master &&\n'> <'\t\ttest_expect_code 129 git branch -h >usage 2>&1\n'> <'\t) &&\n'> 
          <'\ttest_i18ngrep "[Uu]sage" broken/usage\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch abc should create a branch'>)} 
      {(SQ <'\n'> <'\tgit branch abc && test_path_is_file .git/refs/heads/abc\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'git branch a/b/c should create a branch'>)} 
      {(SQ <'\n'> <'\tgit branch a/b/c && test_path_is_file .git/refs/heads/a/b/c\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'git branch HEAD should fail'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git branch HEAD\n'>)}
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(expect)} spids:[112])
        (HereDoc
          op_id: Redir_DLess
          fd: 16777215
          body: 
            {
              (DQ ($ VSub_Name '$_z40') (' ') ($ VSub_Name '$HEAD') (' ') 
                ($ VSub_Name '$GIT_COMMITTER_NAME') (' <') ($ VSub_Name '$GIT_COMMITTER_EMAIL') ('> 1117150200 +0000\tbranch: Created from master\n')
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [115]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'git branch -l d/e/f should create a branch and a log'>)} 
      {
        (SQ <'\n'> <'\tGIT_COMMITTER_DATE="2005-05-26 23:30" \\\n'> <'\tgit branch -l d/e/f &&\n'> 
          <'\ttest_path_is_file .git/refs/heads/d/e/f &&\n'> <'\ttest_path_is_file .git/logs/refs/heads/d/e/f &&\n'> 
          <'\ttest_cmp expect .git/logs/refs/heads/d/e/f\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch -d d/e/f should delete a branch and a log'>)} 
      {
        (SQ <'\n'> <'\tgit branch -d d/e/f &&\n'> <'\ttest_path_is_missing .git/refs/heads/d/e/f &&\n'> 
          <'\ttest_must_fail git reflog exists refs/heads/d/e/f\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch j/k should work after branch j has been deleted'>)} 
      {(SQ <'\n'> <'\tgit branch j &&\n'> <'\tgit branch -d j &&\n'> <'\tgit branch j/k\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'git branch l should work after branch l/m has been deleted'>)} 
      {(SQ <'\n'> <'\tgit branch l/m &&\n'> <'\tgit branch -d l/m &&\n'> <'\tgit branch l\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'git branch -m dumps usage'>)} 
      {
        (SQ <'\n'> <'\ttest_expect_code 128 git branch -m 2>err &&\n'> 
          <'\ttest_i18ngrep "branch name required" err\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch -m m broken_symref should work'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished "git branch -D broken_symref" &&\n'> 
          <'\tgit branch -l m &&\n'> <'\tgit symbolic-ref refs/heads/broken_symref refs/heads/i_am_broken &&\n'> 
          <'\tgit branch -m m broken_symref &&\n'> <'\tgit reflog exists refs/heads/broken_symref &&\n'> 
          <'\ttest_must_fail git reflog exists refs/heads/i_am_broken\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch -m m m/m should work'>)} 
      {
        (SQ <'\n'> <'\tgit branch -l m &&\n'> <'\tgit branch -m m m/m &&\n'> 
          <'\tgit reflog exists refs/heads/m/m\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch -m n/n n should work'>)} 
      {
        (SQ <'\n'> <'\tgit branch -l n/n &&\n'> <'\tgit branch -m n/n n &&\n'> 
          <'\tgit reflog exists refs/heads/n\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch -m o/o o should fail when o/p exists'>)} 
      {
        (SQ <'\n'> <'\tgit branch o/o &&\n'> <'\tgit branch o/p &&\n'> 
          <'\ttest_must_fail git branch -m o/o o\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch -m o/q o/p should fail when o/p exists'>)} 
      {(SQ <'\n'> <'\tgit branch o/q &&\n'> <'\ttest_must_fail git branch -m o/q o/p\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'git branch -M o/q o/p should work when o/p exists'>)} 
      {(SQ <'\n'> <'\tgit branch -M o/q o/p\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'git branch -m -f o/q o/p should work when o/p exists'>)} 
      {(SQ <'\n'> <'\tgit branch o/q &&\n'> <'\tgit branch -m -f o/q o/p\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'git branch -m q r/q should fail when r exists'>)} 
      {
        (SQ <'\n'> <'\tgit branch q &&\n'> <'\tgit branch r &&\n'> 
          <'\ttest_must_fail git branch -m q r/q\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch -M foo bar should fail when bar is checked out'>)} 
      {
        (SQ <'\n'> <'\tgit branch bar &&\n'> <'\tgit checkout -b foo &&\n'> 
          <'\ttest_must_fail git branch -M bar foo\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch -M baz bam should succeed when baz is checked out'>)} 
      {
        (SQ <'\n'> <'\tgit checkout -b baz &&\n'> <'\tgit branch bam &&\n'> 
          <'\tgit branch -M baz bam &&\n'> <'\ttest $(git rev-parse --abbrev-ref HEAD) = bam\n'>
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ <'git branch -M baz bam should succeed when baz is checked out as linked working tree'>)} 
      {
        (SQ <'\n'> <'\tgit checkout master &&\n'> <'\tgit worktree add -b baz bazdir &&\n'> 
          <'\tgit worktree add -f bazdir2 baz &&\n'> <'\tgit branch -M baz bam &&\n'> <'\ttest $(git -C bazdir rev-parse --abbrev-ref HEAD) = bam &&\n'> 
          <'\ttest $(git -C bazdir2 rev-parse --abbrev-ref HEAD) = bam\n'>
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ <'git branch -M baz bam should succeed within a worktree in which baz is checked out'>)} 
      {
        (SQ <'\n'> <'\tgit checkout -b baz &&\n'> <'\tgit worktree add -f bazdir3 baz &&\n'> <'\t(\n'> 
          <'\t\tcd bazdir3 &&\n'> <'\t\tgit branch -M baz bam &&\n'> <'\t\ttest $(git rev-parse --abbrev-ref HEAD) = bam\n'> <'\t) &&\n'> 
          <'\ttest $(git rev-parse --abbrev-ref HEAD) = bam\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch -M master should work when master is checked out'>)} 
      {(SQ <'\n'> <'\tgit checkout master &&\n'> <'\tgit branch -M master\n'>)}
    )
    (C {(test_expect_success)} 
      {(SQ <'git branch -M master master should work when master is checked out'>)} {(SQ <'\n'> <'\tgit checkout master &&\n'> <'\tgit branch -M master master\n'>)}
    )
    (C {(test_expect_success)} 
      {(SQ <'git branch -M master2 master2 should work when master is checked out'>)} 
      {
        (SQ <'\n'> <'\tgit checkout master &&\n'> <'\tgit branch master2 &&\n'> 
          <'\tgit branch -M master2 master2\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch -v -d t should work'>)} 
      {
        (SQ <'\n'> <'\tgit branch t &&\n'> <'\ttest_path_is_file .git/refs/heads/t &&\n'> 
          <'\tgit branch -v -d t &&\n'> <'\ttest_path_is_missing .git/refs/heads/t\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch -v -m t s should work'>)} 
      {
        (SQ <'\n'> <'\tgit branch t &&\n'> <'\ttest_path_is_file .git/refs/heads/t &&\n'> 
          <'\tgit branch -v -m t s &&\n'> <'\ttest_path_is_missing .git/refs/heads/t &&\n'> <'\ttest_path_is_file .git/refs/heads/s &&\n'> 
          <'\tgit branch -d s\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch -m -d t s should fail'>)} 
      {
        (SQ <'\n'> <'\tgit branch t &&\n'> <'\ttest_path_is_file .git/refs/heads/t &&\n'> 
          <'\ttest_must_fail git branch -m -d t s &&\n'> <'\tgit branch -d t &&\n'> <'\ttest_path_is_missing .git/refs/heads/t\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch --list -d t should fail'>)} 
      {
        (SQ <'\n'> <'\tgit branch t &&\n'> <'\ttest_path_is_file .git/refs/heads/t &&\n'> 
          <'\ttest_must_fail git branch --list -d t &&\n'> <'\tgit branch -d t &&\n'> <'\ttest_path_is_missing .git/refs/heads/t\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch --column'>)} 
      {
        (SQ <'\n'> <'\tCOLUMNS=81 git branch --column=column >actual &&\n'> 
          <'\tcat >expected <<\\EOF &&\n'> <'  a/b/c     bam       foo       l       * master    n         o/p       r\n'> 
          <'  abc       bar       j/k       m/m       master2   o/o       q\n'> <'EOF\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch --column with an extremely long branch name'>)} 
      {
        (SQ <'\n'> <'\tlong=this/is/a/part/of/long/branch/name &&\n'> 
          <'\tlong=z$long/$long/$long/$long &&\n'> <'\ttest_when_finished "git branch -d $long" &&\n'> <'\tgit branch $long &&\n'> 
          <'\tCOLUMNS=80 git branch --column=column >actual &&\n'> <'\tcat >expected <<EOF &&\n'> <'  a/b/c\n'> <'  abc\n'> <'  bam\n'> <'  bar\n'> <'  foo\n'> <'  j/k\n'> 
          <'  l\n'> <'  m/m\n'> <'* master\n'> <'  master2\n'> <'  n\n'> <'  o/o\n'> <'  o/p\n'> <'  q\n'> <'  r\n'> 
          <'  $long\n'> <'EOF\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch with column.*'>)} 
      {
        (SQ <'\n'> <'\tgit config column.ui column &&\n'> <'\tgit config column.branch "dense" &&\n'> 
          <'\tCOLUMNS=80 git branch >actual &&\n'> <'\tgit config --unset column.branch &&\n'> <'\tgit config --unset column.ui &&\n'> 
          <'\tcat >expected <<\\EOF &&\n'> <'  a/b/c   bam   foo   l   * master    n     o/p   r\n'> 
          <'  abc     bar   j/k   m/m   master2   o/o   q\n'> <'EOF\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git branch --column -v should fail'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git branch --column -v\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'git branch -v with column.ui ignored'>)} 
      {
        (SQ <'\n'> <'\tgit config column.ui column &&\n'> 
          <'\tCOLUMNS=80 git branch -v | cut -c -10 | sed "s/ *$//" >actual &&\n'> <'\tgit config --unset column.ui &&\n'> <'\tcat >expected <<\\EOF &&\n'> <'  a/b/c\n'> <'  abc\n'> 
          <'  bam\n'> <'  bar\n'> <'  foo\n'> <'  j/k\n'> <'  l\n'> <'  m/m\n'> <'* master\n'> <'  master2\n'> <'  n\n'> 
          <'  o/o\n'> <'  o/p\n'> <'  q\n'> <'  r\n'> <'EOF\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(mv)} {(.git/config)} {(.git/config-saved)})
    (C {(test_expect_success)} {(SQ <'git branch -m q q2 without config should succeed'>)} 
      {(SQ <'\n'> <'\tgit branch -m q q2 &&\n'> <'\tgit branch -m q2 q\n'>)}
    )
    (C {(mv)} {(.git/config-saved)} {(.git/config)})
    (C {(git)} {(config)} {(branch.s/s.dummy)} {(Hello)})
    (C {(test_expect_success)} {(SQ <'git branch -m s/s s should work when s/t is deleted'>)} 
      {
        (SQ <'\n'> <'\tgit branch -l s/s &&\n'> <'\tgit reflog exists refs/heads/s/s &&\n'> 
          <'\tgit branch -l s/t &&\n'> <'\tgit reflog exists refs/heads/s/t &&\n'> <'\tgit branch -d s/t &&\n'> <'\tgit branch -m s/s s &&\n'> 
          <'\tgit reflog exists refs/heads/s\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'config information was renamed, too'>)} 
      {
        (SQ <'\n'> <'\ttest $(git config branch.s.dummy) = Hello &&\n'> 
          <'\ttest_must_fail git config branch.s/s/dummy\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'deleting a symref'>)} 
      {
        (SQ <'\n'> <'\tgit branch target &&\n'> 
          <'\tgit symbolic-ref refs/heads/symref refs/heads/target &&\n'> <'\techo "Deleted branch symref (was refs/heads/target)." >expect &&\n'> 
          <'\tgit branch -d symref >actual &&\n'> <'\ttest_path_is_file .git/refs/heads/target &&\n'> 
          <'\ttest_path_is_missing .git/refs/heads/symref &&\n'> <'\ttest_i18ncmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'deleting a dangling symref'>)} 
      {
        (SQ <'\n'> <'\tgit symbolic-ref refs/heads/dangling-symref nowhere &&\n'> 
          <'\ttest_path_is_file .git/refs/heads/dangling-symref &&\n'> <'\techo "Deleted branch dangling-symref (was nowhere)." >expect &&\n'> 
          <'\tgit branch -d dangling-symref >actual &&\n'> <'\ttest_path_is_missing .git/refs/heads/dangling-symref &&\n'> <'\ttest_i18ncmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'deleting a self-referential symref'>)} 
      {
        (SQ <'\n'> <'\tgit symbolic-ref refs/heads/self-reference refs/heads/self-reference &&\n'> 
          <'\ttest_path_is_file .git/refs/heads/self-reference &&\n'> <'\techo "Deleted branch self-reference (was refs/heads/self-reference)." >expect &&\n'> 
          <'\tgit branch -d self-reference >actual &&\n'> <'\ttest_path_is_missing .git/refs/heads/self-reference &&\n'> <'\ttest_i18ncmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'renaming a symref is not allowed'>)} 
      {
        (SQ <'\n'> <'\tgit symbolic-ref refs/heads/master2 refs/heads/master &&\n'> 
          <'\ttest_must_fail git branch -m master2 master3 &&\n'> <'\tgit symbolic-ref refs/heads/master2 &&\n'> <'\ttest_path_is_file .git/refs/heads/master &&\n'> 
          <'\ttest_path_is_missing .git/refs/heads/master3\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ <'git branch -m u v should fail when the reflog for u is a symlink'>)} 
      {
        (SQ <'\n'> <'\tgit branch -l u &&\n'> <'\tmv .git/logs/refs/heads/u real-u &&\n'> 
          <'\tln -s real-u .git/logs/refs/heads/u &&\n'> <'\ttest_must_fail git branch -m u v\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'test tracking setup via --track'>)} 
      {
        (SQ <'\n'> <'\tgit config remote.local.url . &&\n'> 
          <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> 
          <'\tgit branch --track my1 local/master &&\n'> <'\ttest $(git config branch.my1.remote) = local &&\n'> 
          <'\ttest $(git config branch.my1.merge) = refs/heads/master\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'test tracking setup (non-wildcard, matching)'>)} 
      {
        (SQ <'\n'> <'\tgit config remote.local.url . &&\n'> 
          <'\tgit config remote.local.fetch refs/heads/master:refs/remotes/local/master &&\n'> <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> 
          <'\tgit branch --track my4 local/master &&\n'> <'\ttest $(git config branch.my4.remote) = local &&\n'> 
          <'\ttest $(git config branch.my4.merge) = refs/heads/master\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'tracking setup fails on non-matching refspec'>)} 
      {
        (SQ <'\n'> <'\tgit config remote.local.url . &&\n'> 
          <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> 
          <'\tgit config remote.local.fetch refs/heads/s:refs/remotes/local/s &&\n'> <'\ttest_must_fail git branch --track my5 local/master &&\n'> 
          <'\ttest_must_fail git config branch.my5.remote &&\n'> <'\ttest_must_fail git config branch.my5.merge\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'test tracking setup via config'>)} 
      {
        (SQ <'\n'> <'\tgit config branch.autosetupmerge true &&\n'> 
          <'\tgit config remote.local.url . &&\n'> <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> <'\tgit branch my3 local/master &&\n'> <'\ttest $(git config branch.my3.remote) = local &&\n'> 
          <'\ttest $(git config branch.my3.merge) = refs/heads/master\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'test overriding tracking setup via --no-track'>)} 
      {
        (SQ <'\n'> <'\tgit config branch.autosetupmerge true &&\n'> 
          <'\tgit config remote.local.url . &&\n'> <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> <'\tgit branch --no-track my2 local/master &&\n'> <'\tgit config branch.autosetupmerge false &&\n'> 
          <'\t! test "$(git config branch.my2.remote)" = local &&\n'> <'\t! test "$(git config branch.my2.merge)" = refs/heads/master\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'no tracking without .fetch entries'>)} 
      {
        (SQ <'\n'> <'\tgit config branch.autosetupmerge true &&\n'> <'\tgit branch my6 s &&\n'> 
          <'\tgit config branch.autosetupmerge false &&\n'> <'\ttest -z "$(git config branch.my6.remote)" &&\n'> <'\ttest -z "$(git config branch.my6.merge)"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'test tracking setup via --track but deeper'>)} 
      {
        (SQ <'\n'> <'\tgit config remote.local.url . &&\n'> 
          <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> <'\t(git show-ref -q refs/remotes/local/o/o || git fetch local) &&\n'> 
          <'\tgit branch --track my7 local/o/o &&\n'> <'\ttest "$(git config branch.my7.remote)" = local &&\n'> 
          <'\ttest "$(git config branch.my7.merge)" = refs/heads/o/o\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'test deleting branch deletes branch config'>)} 
      {
        (SQ <'\n'> <'\tgit branch -d my7 &&\n'> <'\ttest -z "$(git config branch.my7.remote)" &&\n'> 
          <'\ttest -z "$(git config branch.my7.merge)"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'test deleting branch without config'>)} 
      {
        (SQ <'\n'> <'\tgit branch my7 s &&\n'> <'\tsha1=$(git rev-parse my7 | cut -c 1-7) &&\n'> 
          <'\techo "Deleted branch my7 (was $sha1)." >expect &&\n'> <'\tgit branch -d my7 >actual 2>&1 &&\n'> <'\ttest_i18ncmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'deleting currently checked out branch fails'>)} 
      {
        (SQ <'\n'> <'\tgit worktree add -b my7 my7 &&\n'> 
          <'\ttest_must_fail git -C my7 branch -d my7 &&\n'> <'\ttest_must_fail git branch -d my7\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'test --track without .fetch entries'>)} 
      {
        (SQ <'\n'> <'\tgit branch --track my8 &&\n'> <'\ttest "$(git config branch.my8.remote)" &&\n'> 
          <'\ttest "$(git config branch.my8.merge)"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'branch from non-branch HEAD w/autosetupmerge=always'>)} 
      {
        (SQ <'\n'> <'\tgit config branch.autosetupmerge always &&\n'> <'\tgit branch my9 HEAD^ &&\n'> 
          <'\tgit config branch.autosetupmerge false\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'branch from non-branch HEAD w/--track causes failure'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git branch --track my10 HEAD^\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'branch from tag w/--track causes failure'>)} 
      {(SQ <'\n'> <'\tgit tag foobar &&\n'> <'\ttest_must_fail git branch --track my11 foobar\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'--set-upstream-to fails on multiple branches'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git branch --set-upstream-to master a b c\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'--set-upstream-to fails on detached HEAD'>)} 
      {
        (SQ <'\n'> <'\tgit checkout HEAD^{} &&\n'> 
          <'\ttest_must_fail git branch --set-upstream-to master &&\n'> <'\tgit checkout -\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'--set-upstream-to fails on a missing dst branch'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git branch --set-upstream-to master does-not-exist\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'--set-upstream-to fails on a missing src branch'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git branch --set-upstream-to does-not-exist master\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'--set-upstream-to fails on a non-ref'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git branch --set-upstream-to HEAD^{}\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'--set-upstream-to fails on locked config'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished "rm -f .git/config.lock" &&\n'> <'\t>.git/config.lock &&\n'> 
          <'\tgit branch locked &&\n'> <'\ttest_must_fail git branch --set-upstream-to locked\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'use --set-upstream-to modify HEAD'>)} 
      {
        (SQ <'\n'> <'\ttest_config branch.master.remote foo &&\n'> 
          <'\ttest_config branch.master.merge foo &&\n'> <'\tgit branch my12 &&\n'> <'\tgit branch --set-upstream-to my12 &&\n'> 
          <'\ttest "$(git config branch.master.remote)" = "." &&\n'> <'\ttest "$(git config branch.master.merge)" = "refs/heads/my12"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'use --set-upstream-to modify a particular branch'>)} 
      {
        (SQ <'\n'> <'\tgit branch my13 &&\n'> <'\tgit branch --set-upstream-to master my13 &&\n'> 
          <'\ttest "$(git config branch.my13.remote)" = "." &&\n'> <'\ttest "$(git config branch.my13.merge)" = "refs/heads/master"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'--unset-upstream should fail if given a non-existent branch'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git branch --unset-upstream i-dont-exist\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'--unset-upstream should fail if config is locked'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished "rm -f .git/config.lock" &&\n'> 
          <'\tgit branch --set-upstream-to locked &&\n'> <'\t>.git/config.lock &&\n'> <'\ttest_must_fail git branch --unset-upstream\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'test --unset-upstream on HEAD'>)} 
      {
        (SQ <'\n'> <'\tgit branch my14 &&\n'> <'\ttest_config branch.master.remote foo &&\n'> 
          <'\ttest_config branch.master.merge foo &&\n'> <'\tgit branch --set-upstream-to my14 &&\n'> <'\tgit branch --unset-upstream &&\n'> 
          <'\ttest_must_fail git config branch.master.remote &&\n'> <'\ttest_must_fail git config branch.master.merge &&\n'> 
          <'\t# fail for a branch without upstream set\n'> <'\ttest_must_fail git branch --unset-upstream\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'--unset-upstream should fail on multiple branches'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git branch --unset-upstream a b c\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'--unset-upstream should fail on detached HEAD'>)} 
      {
        (SQ <'\n'> <'\tgit checkout HEAD^{} &&\n'> 
          <'\ttest_must_fail git branch --unset-upstream &&\n'> <'\tgit checkout -\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'test --unset-upstream on a particular branch'>)} 
      {
        (SQ <'\n'> <'\tgit branch my15 &&\n'> <'\tgit branch --set-upstream-to master my14 &&\n'> 
          <'\tgit branch --unset-upstream my14 &&\n'> <'\ttest_must_fail git config branch.my14.remote &&\n'> 
          <'\ttest_must_fail git config branch.my14.merge\n'>
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          <
'--set-upstream shows message when creating a new branch that exists as remote-tracking'
          >
        )
      } 
      {
        (SQ <'\n'> <'\tgit update-ref refs/remotes/origin/master HEAD &&\n'> 
          <'\tgit branch --set-upstream origin/master 2>actual &&\n'> <'\ttest_when_finished git update-ref -d refs/remotes/origin/master &&\n'> 
          <'\ttest_when_finished git branch -d origin/master &&\n'> <'\tcat >expected <<EOF &&\n'> 
          <
'The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to\n'
          > <'\n'> <'If you wanted to make '>
        ) (DQ ("'master'")) (SQ <' track '>) (DQ ("'origin/master'")) 
        (SQ <', do this:\n'> <'\n'> <'    git branch -d origin/master\n'> 
          <'    git branch --set-upstream-to origin/master\n'> <'EOF\n'> <'\ttest_i18ncmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ <'--set-upstream with two args only shows the deprecation message'>)} 
      {
        (SQ <'\n'> <'\tgit branch --set-upstream master my13 2>actual &&\n'> 
          <'\ttest_when_finished git branch --unset-upstream master &&\n'> <'\tcat >expected <<EOF &&\n'> 
          <
'The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to\n'
          > <'EOF\n'> <'\ttest_i18ncmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ <'--set-upstream with one arg only shows the deprecation message if the branch existed'>)} 
      {
        (SQ <'\n'> <'\tgit branch --set-upstream my13 2>actual &&\n'> 
          <'\ttest_when_finished git branch --unset-upstream my13 &&\n'> <'\tcat >expected <<EOF &&\n'> 
          <
'The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to\n'
          > <'EOF\n'> <'\ttest_i18ncmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ <'--set-upstream-to notices an error to set branch as own upstream'>)} 
      {
        (SQ <'\n'> <'\tgit branch --set-upstream-to refs/heads/my13 my13 2>actual &&\n'> 
          <'\tcat >expected <<-\\EOF &&\n'> <'\twarning: Not setting branch my13 as its own upstream.\n'> <'\tEOF\n'> 
          <'\ttest_expect_code 1 git config branch.my13.remote &&\n'> <'\ttest_expect_code 1 git config branch.my13.merge &&\n'> <'\ttest_i18ncmp expected actual\n'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(expect)} spids:[1257])
        (HereDoc
          op_id: Redir_DLess
          fd: 16777215
          body: 
            {
              (DQ ($ VSub_Name '$_z40') (' ') ($ VSub_Name '$HEAD') (' ') 
                ($ VSub_Name '$GIT_COMMITTER_NAME') (' <') ($ VSub_Name '$GIT_COMMITTER_EMAIL') ('> 1117150200 +0000\tbranch: Created from master\n')
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [1260]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'git checkout -b g/h/i -l should create a branch and a log'>)} 
      {
        (SQ <'\n'> <'\tGIT_COMMITTER_DATE="2005-05-26 23:30" \\\n'> 
          <'\tgit checkout -b g/h/i -l master &&\n'> <'\ttest_path_is_file .git/refs/heads/g/h/i &&\n'> 
          <'\ttest_path_is_file .git/logs/refs/heads/g/h/i &&\n'> <'\ttest_cmp expect .git/logs/refs/heads/g/h/i\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'checkout -b makes reflog by default'>)} 
      {
        (SQ <'\n'> <'\tgit checkout master &&\n'> <'\tgit config --unset core.logAllRefUpdates &&\n'> 
          <'\tgit checkout -b alpha &&\n'> <'\tgit rev-parse --verify alpha@{0}\n'>
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ <'checkout -b does not make reflog when core.logAllRefUpdates = false'>)} 
      {
        (SQ <'\n'> <'\tgit checkout master &&\n'> <'\tgit config core.logAllRefUpdates false &&\n'> 
          <'\tgit checkout -b beta &&\n'> <'\ttest_must_fail git rev-parse --verify beta@{0}\n'>
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ <'checkout -b with -l makes reflog when core.logAllRefUpdates = false'>)} 
      {
        (SQ <'\n'> <'\tgit checkout master &&\n'> <'\tgit checkout -lb gamma &&\n'> 
          <'\tgit config --unset core.logAllRefUpdates &&\n'> <'\tgit rev-parse --verify gamma@{0}\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'avoid ambiguous track'>)} 
      {
        (SQ <'\n'> <'\tgit config branch.autosetupmerge true &&\n'> 
          <'\tgit config remote.ambi1.url lalala &&\n'> <'\tgit config remote.ambi1.fetch refs/heads/lalala:refs/heads/master &&\n'> 
          <'\tgit config remote.ambi2.url lilili &&\n'> <'\tgit config remote.ambi2.fetch refs/heads/lilili:refs/heads/master &&\n'> 
          <'\ttest_must_fail git branch all1 master &&\n'> <'\ttest -z "$(git config branch.all1.merge)"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase local on a tracked local branch'>)} 
      {
        (SQ <'\n'> <'\tgit config remote.local.url . &&\n'> 
          <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> <'\tgit config branch.autosetuprebase local &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/o || git fetch local) &&\n'> <'\tgit branch mybase &&\n'> <'\tgit branch --track myr1 mybase &&\n'> 
          <'\ttest "$(git config branch.myr1.remote)" = . &&\n'> <'\ttest "$(git config branch.myr1.merge)" = refs/heads/mybase &&\n'> 
          <'\ttest "$(git config branch.myr1.rebase)" = true\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase always on a tracked local branch'>)} 
      {
        (SQ <'\n'> <'\tgit config remote.local.url . &&\n'> 
          <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> <'\tgit config branch.autosetuprebase always &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/o || git fetch local) &&\n'> <'\tgit branch mybase2 &&\n'> <'\tgit branch --track myr2 mybase &&\n'> 
          <'\ttest "$(git config branch.myr2.remote)" = . &&\n'> <'\ttest "$(git config branch.myr2.merge)" = refs/heads/mybase &&\n'> 
          <'\ttest "$(git config branch.myr2.rebase)" = true\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase remote on a tracked local branch'>)} 
      {
        (SQ <'\n'> <'\tgit config remote.local.url . &&\n'> 
          <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> <'\tgit config branch.autosetuprebase remote &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/o || git fetch local) &&\n'> <'\tgit branch mybase3 &&\n'> <'\tgit branch --track myr3 mybase2 &&\n'> 
          <'\ttest "$(git config branch.myr3.remote)" = . &&\n'> <'\ttest "$(git config branch.myr3.merge)" = refs/heads/mybase2 &&\n'> 
          <'\t! test "$(git config branch.myr3.rebase)" = true\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase never on a tracked local branch'>)} 
      {
        (SQ <'\n'> <'\tgit config remote.local.url . &&\n'> 
          <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> <'\tgit config branch.autosetuprebase never &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/o || git fetch local) &&\n'> <'\tgit branch mybase4 &&\n'> <'\tgit branch --track myr4 mybase2 &&\n'> 
          <'\ttest "$(git config branch.myr4.remote)" = . &&\n'> <'\ttest "$(git config branch.myr4.merge)" = refs/heads/mybase2 &&\n'> 
          <'\t! test "$(git config branch.myr4.rebase)" = true\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase local on a tracked remote branch'>)} 
      {
        (SQ <'\n'> <'\tgit config remote.local.url . &&\n'> 
          <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> <'\tgit config branch.autosetuprebase local &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> <'\tgit branch --track myr5 local/master &&\n'> 
          <'\ttest "$(git config branch.myr5.remote)" = local &&\n'> <'\ttest "$(git config branch.myr5.merge)" = refs/heads/master &&\n'> 
          <'\t! test "$(git config branch.myr5.rebase)" = true\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase never on a tracked remote branch'>)} 
      {
        (SQ <'\n'> <'\tgit config remote.local.url . &&\n'> 
          <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> <'\tgit config branch.autosetuprebase never &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> <'\tgit branch --track myr6 local/master &&\n'> 
          <'\ttest "$(git config branch.myr6.remote)" = local &&\n'> <'\ttest "$(git config branch.myr6.merge)" = refs/heads/master &&\n'> 
          <'\t! test "$(git config branch.myr6.rebase)" = true\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase remote on a tracked remote branch'>)} 
      {
        (SQ <'\n'> <'\tgit config remote.local.url . &&\n'> 
          <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> <'\tgit config branch.autosetuprebase remote &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> <'\tgit branch --track myr7 local/master &&\n'> 
          <'\ttest "$(git config branch.myr7.remote)" = local &&\n'> <'\ttest "$(git config branch.myr7.merge)" = refs/heads/master &&\n'> 
          <'\ttest "$(git config branch.myr7.rebase)" = true\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase always on a tracked remote branch'>)} 
      {
        (SQ <'\n'> <'\tgit config remote.local.url . &&\n'> 
          <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> <'\tgit config branch.autosetuprebase remote &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> <'\tgit branch --track myr8 local/master &&\n'> 
          <'\ttest "$(git config branch.myr8.remote)" = local &&\n'> <'\ttest "$(git config branch.myr8.merge)" = refs/heads/master &&\n'> 
          <'\ttest "$(git config branch.myr8.rebase)" = true\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase unconfigured on a tracked remote branch'>)} 
      {
        (SQ <'\n'> <'\tgit config --unset branch.autosetuprebase &&\n'> 
          <'\tgit config remote.local.url . &&\n'> <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> <'\tgit branch --track myr9 local/master &&\n'> 
          <'\ttest "$(git config branch.myr9.remote)" = local &&\n'> <'\ttest "$(git config branch.myr9.merge)" = refs/heads/master &&\n'> 
          <'\ttest "z$(git config branch.myr9.rebase)" = z\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase unconfigured on a tracked local branch'>)} 
      {
        (SQ <'\n'> <'\tgit config remote.local.url . &&\n'> 
          <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> <'\t(git show-ref -q refs/remotes/local/o || git fetch local) &&\n'> <'\tgit branch mybase10 &&\n'> 
          <'\tgit branch --track myr10 mybase2 &&\n'> <'\ttest "$(git config branch.myr10.remote)" = . &&\n'> 
          <'\ttest "$(git config branch.myr10.merge)" = refs/heads/mybase2 &&\n'> <'\ttest "z$(git config branch.myr10.rebase)" = z\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase unconfigured on untracked local branch'>)} 
      {
        (SQ <'\n'> <'\tgit config remote.local.url . &&\n'> 
          <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> 
          <'\tgit branch --no-track myr11 mybase2 &&\n'> <'\ttest "z$(git config branch.myr11.remote)" = z &&\n'> 
          <'\ttest "z$(git config branch.myr11.merge)" = z &&\n'> <'\ttest "z$(git config branch.myr11.rebase)" = z\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase unconfigured on untracked remote branch'>)} 
      {
        (SQ <'\n'> <'\tgit config remote.local.url . &&\n'> 
          <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> 
          <'\tgit branch --no-track myr12 local/master &&\n'> <'\ttest "z$(git config branch.myr12.remote)" = z &&\n'> 
          <'\ttest "z$(git config branch.myr12.merge)" = z &&\n'> <'\ttest "z$(git config branch.myr12.rebase)" = z\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase never on an untracked local branch'>)} 
      {
        (SQ <'\n'> <'\tgit config branch.autosetuprebase never &&\n'> 
          <'\tgit config remote.local.url . &&\n'> <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> <'\tgit branch --no-track myr13 mybase2 &&\n'> 
          <'\ttest "z$(git config branch.myr13.remote)" = z &&\n'> <'\ttest "z$(git config branch.myr13.merge)" = z &&\n'> 
          <'\ttest "z$(git config branch.myr13.rebase)" = z\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase local on an untracked local branch'>)} 
      {
        (SQ <'\n'> <'\tgit config branch.autosetuprebase local &&\n'> 
          <'\tgit config remote.local.url . &&\n'> <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> <'\tgit branch --no-track myr14 mybase2 &&\n'> 
          <'\ttest "z$(git config branch.myr14.remote)" = z &&\n'> <'\ttest "z$(git config branch.myr14.merge)" = z &&\n'> 
          <'\ttest "z$(git config branch.myr14.rebase)" = z\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase remote on an untracked local branch'>)} 
      {
        (SQ <'\n'> <'\tgit config branch.autosetuprebase remote &&\n'> 
          <'\tgit config remote.local.url . &&\n'> <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> <'\tgit branch --no-track myr15 mybase2 &&\n'> 
          <'\ttest "z$(git config branch.myr15.remote)" = z &&\n'> <'\ttest "z$(git config branch.myr15.merge)" = z &&\n'> 
          <'\ttest "z$(git config branch.myr15.rebase)" = z\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase always on an untracked local branch'>)} 
      {
        (SQ <'\n'> <'\tgit config branch.autosetuprebase always &&\n'> 
          <'\tgit config remote.local.url . &&\n'> <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> <'\tgit branch --no-track myr16 mybase2 &&\n'> 
          <'\ttest "z$(git config branch.myr16.remote)" = z &&\n'> <'\ttest "z$(git config branch.myr16.merge)" = z &&\n'> 
          <'\ttest "z$(git config branch.myr16.rebase)" = z\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase never on an untracked remote branch'>)} 
      {
        (SQ <'\n'> <'\tgit config branch.autosetuprebase never &&\n'> 
          <'\tgit config remote.local.url . &&\n'> <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> <'\tgit branch --no-track myr17 local/master &&\n'> 
          <'\ttest "z$(git config branch.myr17.remote)" = z &&\n'> <'\ttest "z$(git config branch.myr17.merge)" = z &&\n'> 
          <'\ttest "z$(git config branch.myr17.rebase)" = z\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase local on an untracked remote branch'>)} 
      {
        (SQ <'\n'> <'\tgit config branch.autosetuprebase local &&\n'> 
          <'\tgit config remote.local.url . &&\n'> <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> <'\tgit branch --no-track myr18 local/master &&\n'> 
          <'\ttest "z$(git config branch.myr18.remote)" = z &&\n'> <'\ttest "z$(git config branch.myr18.merge)" = z &&\n'> 
          <'\ttest "z$(git config branch.myr18.rebase)" = z\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase remote on an untracked remote branch'>)} 
      {
        (SQ <'\n'> <'\tgit config branch.autosetuprebase remote &&\n'> 
          <'\tgit config remote.local.url . &&\n'> <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> <'\tgit branch --no-track myr19 local/master &&\n'> 
          <'\ttest "z$(git config branch.myr19.remote)" = z &&\n'> <'\ttest "z$(git config branch.myr19.merge)" = z &&\n'> 
          <'\ttest "z$(git config branch.myr19.rebase)" = z\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase always on an untracked remote branch'>)} 
      {
        (SQ <'\n'> <'\tgit config branch.autosetuprebase always &&\n'> 
          <'\tgit config remote.local.url . &&\n'> <'\tgit config remote.local.fetch refs/heads/*:refs/remotes/local/* &&\n'> 
          <'\t(git show-ref -q refs/remotes/local/master || git fetch local) &&\n'> <'\tgit branch --no-track myr20 local/master &&\n'> 
          <'\ttest "z$(git config branch.myr20.remote)" = z &&\n'> <'\ttest "z$(git config branch.myr20.merge)" = z &&\n'> 
          <'\ttest "z$(git config branch.myr20.rebase)" = z\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autosetuprebase always on detached HEAD'>)} 
      {
        (SQ <'\n'> <'\tgit config branch.autosetupmerge always &&\n'> 
          <'\ttest_when_finished git checkout master &&\n'> <'\tgit checkout HEAD^0 &&\n'> <'\tgit branch my11 &&\n'> 
          <'\ttest -z "$(git config branch.my11.remote)" &&\n'> <'\ttest -z "$(git config branch.my11.merge)"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'detect misconfigured autosetuprebase (bad value)'>)} 
      {
        (SQ <'\n'> <'\tgit config branch.autosetuprebase garbage &&\n'> 
          <'\ttest_must_fail git branch\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'detect misconfigured autosetuprebase (no value)'>)} 
      {
        (SQ <'\n'> <'\tgit config --unset branch.autosetuprebase &&\n'> 
          <'\techo "[branch] autosetuprebase" >>.git/config &&\n'> <'\ttest_must_fail git branch &&\n'> <'\tgit config --unset branch.autosetuprebase\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'attempt to delete a branch without base and unmerged to HEAD'>)} 
      {
        (SQ <'\n'> <'\tgit checkout my9 &&\n'> <'\tgit config --unset branch.my8.merge &&\n'> 
          <'\ttest_must_fail git branch -d my8\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'attempt to delete a branch merged to its base'>)} 
      {
        (SQ <'\n'> <'\t# we are on my9 which is the initial commit; traditionally\n'> 
          <'\t# we would not have allowed deleting my8 that is not merged\n'> <'\t# to my9, but it is set to track master that already has my8\n'> 
          <'\tgit config branch.my8.merge refs/heads/master &&\n'> <'\tgit branch -d my8\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'attempt to delete a branch merged to its base'>)} 
      {
        (SQ <'\n'> <'\tgit checkout master &&\n'> <'\techo Third >>A &&\n'> 
          <'\tgit commit -m "Third commit" A &&\n'> <'\tgit branch -t my10 my9 &&\n'> <'\tgit branch -f my10 HEAD^ &&\n'> 
          <'\t# we are on master which is at the third commit, and my10\n'> <'\t# is behind us, so traditionally we would have allowed deleting\n'> 
          <'\t# it; but my10 is set to track my9 that is further behind.\n'> <'\ttest_must_fail git branch -d my10\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'use set-upstream on the current branch'>)} 
      {
        (SQ <'\n'> <'\tgit checkout master &&\n'> <'\tgit --bare init myupstream.git &&\n'> 
          <'\tgit push myupstream.git master:refs/heads/frotz &&\n'> <'\tgit remote add origin myupstream.git &&\n'> <'\tgit fetch &&\n'> 
          <'\tgit branch --set-upstream master origin/frotz &&\n'> <'\n'> <'\ttest "z$(git config branch.master.remote)" = "zorigin" &&\n'> 
          <'\ttest "z$(git config branch.master.merge)" = "zrefs/heads/frotz"\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'use --edit-description'>)} 
      {
        (SQ <'\n'> <'\twrite_script editor <<-\\EOF &&\n'> <'\t\techo "New contents" >"$1"\n'> 
          <'\tEOF\n'> <'\tEDITOR=./editor git branch --edit-description &&\n'> <'\t\twrite_script editor <<-\\EOF &&\n'> 
          <'\t\tgit stripspace -s <"$1" >"EDITOR_OUTPUT"\n'> <'\tEOF\n'> <'\tEDITOR=./editor git branch --edit-description &&\n'> 
          <'\techo "New contents" >expect &&\n'> <'\ttest_cmp EDITOR_OUTPUT expect\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'detect typo in branch name when using --edit-description'>)} 
      {
        (SQ <'\n'> <'\twrite_script editor <<-\\EOF &&\n'> <'\t\techo "New contents" >"$1"\n'> 
          <'\tEOF\n'> <'\ttest_must_fail env EDITOR=./editor git branch --edit-description no-such-branch\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'refuse --edit-description on unborn branch for now'>)} 
      {
        (SQ <'\n'> <'\twrite_script editor <<-\\EOF &&\n'> <'\t\techo "New contents" >"$1"\n'> 
          <'\tEOF\n'> <'\tgit checkout --orphan unborn &&\n'> 
          <'\ttest_must_fail env EDITOR=./editor git branch --edit-description\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'--merged catches invalid object names'>)} 
      {
        (SQ <'\n'> <'\ttest_must_fail git branch --merged 0000000000000000000000000000000000000000\n'>)
      }
    )
    (C {(test_expect_success)} {(SQ <'tracking with unexpected .fetch refspec'>)} 
      {
        (SQ <'\n'> <'\trm -rf a b c d &&\n'> <'\tgit init a &&\n'> <'\t(\n'> <'\t\tcd a &&\n'> 
          <'\t\ttest_commit a\n'> <'\t) &&\n'> <'\tgit init b &&\n'> <'\t(\n'> <'\t\tcd b &&\n'> <'\t\ttest_commit b\n'> <'\t) &&\n'> 
          <'\tgit init c &&\n'> <'\t(\n'> <'\t\tcd c &&\n'> <'\t\ttest_commit c &&\n'> <'\t\tgit remote add a ../a &&\n'> 
          <'\t\tgit remote add b ../b &&\n'> <'\t\tgit fetch --all\n'> <'\t) &&\n'> <'\tgit init d &&\n'> <'\t(\n'> <'\t\tcd d &&\n'> 
          <'\t\tgit remote add c ../c &&\n'> <'\t\tgit config remote.c.fetch "+refs/remotes/*:refs/remotes/*" &&\n'> <'\t\tgit fetch c &&\n'> 
          <'\t\tgit branch --track local/a/master remotes/a/master &&\n'> <'\t\ttest "$(git config branch.local/a/master.remote)" = "c" &&\n'> 
          <'\t\ttest "$(git config branch.local/a/master.merge)" = "refs/remotes/a/master" &&\n'> <'\t\tgit rev-parse --verify a >expect &&\n'> 
          <'\t\tgit rev-parse --verify local/a/master >actual &&\n'> <'\t\ttest_cmp expect actual\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)