(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ 
                (Token
                  id: Id.Lit_Chars
                  val: 
'Test that adding/removing many notes triggers automatic fanout restructuring'
                  span_id: 6
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'creating many notes with git-notes' span_id:18))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:22) 
          (Token id:Id.Lit_Chars val:'\tnum_notes=300 &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\ti=0 &&\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\twhile test $i -lt $num_notes\n' span_id:25) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\t\ti=$(($i + 1)) &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\t\ttest_tick &&\n' span_id:28) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "file for commit #$i" > file &&\n'
            span_id: 29
          ) (Token id:Id.Lit_Chars val:'\t\tgit add file &&\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -q -m "commit #$i" &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\t\tgit notes add -m "note #$i" || return 1\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'\tdone\n' span_id:33)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'many notes created correctly with git-notes' span_id:40))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:44) 
          (Token id:Id.Lit_Chars val:'\tgit log | grep "^    " > output &&\n' span_id:45) (Token id:Id.Lit_Chars val:'\ti=300 &&\n' span_id:46) 
          (Token id:Id.Lit_Chars val:'\twhile test $i -gt 0\n' span_id:47) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:48) 
          (Token id:Id.Lit_Chars val:'\t\techo "    commit #$i" &&\n' span_id:49) (Token id:Id.Lit_Chars val:'\t\techo "    note #$i" &&\n' span_id:50) 
          (Token id:Id.Lit_Chars val:'\t\ti=$(($i - 1));\n' span_id:51) (Token id:Id.Lit_Chars val:'\tdone > expect &&\n' span_id:52) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect output\n' span_id:53)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'many notes created with git-notes triggers fanout'
            span_id: 60
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:64) 
          (Token
            id: Id.Lit_Chars
            val: '\t# Expect entire notes tree to have a fanout == 1\n'
            span_id: 65
          ) (Token id:Id.Lit_Chars val:'\tgit ls-tree -r --name-only refs/notes/commits |\n' span_id:66) 
          (Token id:Id.Lit_Chars val:'\twhile read path\n' span_id:67) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:68) 
          (Token id:Id.Lit_Chars val:'\t\tcase "$path" in\n' span_id:69) (Token id:Id.Lit_Chars val:'\t\t??/??????????????????????????????????????)\n' span_id:70) 
          (Token id:Id.Lit_Chars val:'\t\t\t: true\n' span_id:71) (Token id:Id.Lit_Chars val:'\t\t\t;;\n' span_id:72) (Token id:Id.Lit_Chars val:'\t\t*)\n' span_id:73) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\techo "Invalid path \\"$path\\"" &&\n'
            span_id: 74
          ) (Token id:Id.Lit_Chars val:'\t\t\treturn 1\n' span_id:75) 
          (Token id:Id.Lit_Chars val:'\t\t\t;;\n' span_id:76) (Token id:Id.Lit_Chars val:'\t\tesac\n' span_id:77) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:78)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'deleting most notes with git-notes' span_id:85))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:89) 
          (Token id:Id.Lit_Chars val:'\tnum_notes=250 &&\n' span_id:90) (Token id:Id.Lit_Chars val:'\ti=0 &&\n' span_id:91) 
          (Token id:Id.Lit_Chars val:'\tgit rev-list HEAD |\n' span_id:92) (Token id:Id.Lit_Chars val:'\twhile test $i -lt $num_notes && read sha1\n' span_id:93) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:94) (Token id:Id.Lit_Chars val:'\t\ti=$(($i + 1)) &&\n' span_id:95) 
          (Token id:Id.Lit_Chars val:'\t\ttest_tick &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\t\tgit notes remove "$sha1" ||\n' span_id:97) 
          (Token id:Id.Lit_Chars val:'\t\texit 1\n' span_id:98) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:99)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'most notes deleted correctly with git-notes' span_id:106))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:110) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log HEAD~250 | grep "^    " > output &&\n'
            span_id: 111
          ) (Token id:Id.Lit_Chars val:'\ti=50 &&\n' span_id:112) 
          (Token id:Id.Lit_Chars val:'\twhile test $i -gt 0\n' span_id:113) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:114) 
          (Token id:Id.Lit_Chars val:'\t\techo "    commit #$i" &&\n' span_id:115) (Token id:Id.Lit_Chars val:'\t\techo "    note #$i" &&\n' span_id:116) 
          (Token id:Id.Lit_Chars val:'\t\ti=$(($i - 1));\n' span_id:117) (Token id:Id.Lit_Chars val:'\tdone > expect &&\n' span_id:118) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect output\n' span_id:119)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'deleting most notes triggers fanout consolidation'
            span_id: 126
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:130) 
          (Token
            id: Id.Lit_Chars
            val: '\t# Expect entire notes tree to have a fanout == 0\n'
            span_id: 131
          ) (Token id:Id.Lit_Chars val:'\tgit ls-tree -r --name-only refs/notes/commits |\n' span_id:132) 
          (Token id:Id.Lit_Chars val:'\twhile read path\n' span_id:133) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:134) 
          (Token id:Id.Lit_Chars val:'\t\tcase "$path" in\n' span_id:135) (Token id:Id.Lit_Chars val:'\t\t????????????????????????????????????????)\n' span_id:136) 
          (Token id:Id.Lit_Chars val:'\t\t\t: true\n' span_id:137) (Token id:Id.Lit_Chars val:'\t\t\t;;\n' span_id:138) 
          (Token id:Id.Lit_Chars val:'\t\t*)\n' span_id:139) (Token id:Id.Lit_Chars val:'\t\t\techo "Invalid path \\"$path\\"" &&\n' span_id:140) 
          (Token id:Id.Lit_Chars val:'\t\t\treturn 1\n' span_id:141) (Token id:Id.Lit_Chars val:'\t\t\t;;\n' span_id:142) 
          (Token id:Id.Lit_Chars val:'\t\tesac\n' span_id:143) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:144)
        )
      }
    )
    (C {(test_done)})
  ]
)