(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'Test merging of notes trees in multiple worktrees'>)}
          spids: [13]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (C {<test_expect_success>} {(SQ <'setup commit'>)} {(SQ <'\n'> <'\ttest_commit tantrum\n'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:commit_tantrum)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<git>} {<rev-parse>} 
                    {<tantrum> <Id.Lit_Other '^'> <Id.Lit_LBrace '{'> <commit> <Id.Lit_RBrace '}'>}
                  )
              )
            }
          spids: [36]
        )
      ]
    )
    (C {<test_expect_success>} {(SQ <'setup notes ref (x)'>)} 
      {
        (SQ <'\n'> <'\tgit config core.notesRef refs/notes/x &&\n'> 
          <'\tgit notes add -m "x notes on tantrum" tantrum\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'setup local branch (y)'>)} 
      {
        (SQ <'\n'> <'\tgit update-ref refs/notes/y refs/notes/x &&\n'> 
          <'\tgit config core.notesRef refs/notes/y &&\n'> <'\tgit notes remove tantrum\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'setup remote branch (z)'>)} 
      {
        (SQ <'\n'> <'\tgit update-ref refs/notes/z refs/notes/x &&\n'> 
          <'\tgit config core.notesRef refs/notes/z &&\n'> <'\tgit notes add -f -m "conflicting notes on tantrum" tantrum\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'modify notes ref ourselves (x)'>)} 
      {
        (SQ <'\n'> <'\tgit config core.notesRef refs/notes/x &&\n'> 
          <'\tgit notes add -f -m "more conflicting notes on tantrum" tantrum\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'create some new worktrees'>)} 
      {
        (SQ <'\n'> <'\tgit worktree add -b newbranch worktree master &&\n'> 
          <'\tgit worktree add -b newbranch2 worktree2 master\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'merge z into y fails and sets NOTES_MERGE_REF'>)} 
      {
        (SQ <'\n'> <'\tgit config core.notesRef refs/notes/y &&\n'> 
          <'\ttest_must_fail git notes merge z &&\n'> <'\techo "ref: refs/notes/y" >expect &&\n'> <'\ttest_cmp .git/NOTES_MERGE_REF expect\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'merge z into y while mid-merge in another workdir fails'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd worktree &&\n'> <'\t\tgit config core.notesRef refs/notes/y &&\n'> 
          <'\t\ttest_must_fail git notes merge z 2>err &&\n'> <'\t\ttest_i18ngrep "a notes merge into refs/notes/y is already in-progress at" err\n'> <'\t) &&\n'> 
          <'\ttest_path_is_missing .git/worktrees/worktree/NOTES_MERGE_REF\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'merge z into x while mid-merge on y succeeds'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd worktree2 &&\n'> 
          <'\t\tgit config core.notesRef refs/notes/x &&\n'> <'\t\ttest_must_fail git notes merge z 2>&1 >out &&\n'> 
          <'\t\ttest_i18ngrep "Automatic notes merge failed" out &&\n'> <'\t\tgrep -v "A notes merge into refs/notes/x is already in-progress in" out\n'> <'\t) &&\n'> 
          <'\techo "ref: refs/notes/x" >expect &&\n'> <'\ttest_cmp .git/worktrees/worktree2/NOTES_MERGE_REF expect\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)