(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'Test merging of notes trees in multiple worktrees'>)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <'setup commit'>)} {(SQ <'\n'> <'\ttest_commit tantrum\n'>)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:commit_tantrum)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (C {(git)} {(rev-parse)} 
                        {(tantrum) (Lit_Other '^') (Lit_LBrace '{') (commit) (Lit_RBrace '}')}
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [37 47]
              )
            }
          spids: [36]
        )
      ]
      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)})
  ]
)