(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:'Clone repositories and keep empty commits' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./lib-git-p4.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'start p4d' span_id:18))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:22) 
          (Token id:Id.Lit_Chars val:'\tstart_p4d\n' span_id:23)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Create a repo' span_id:30))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:34) 
          (Token
            id: Id.Lit_Chars
            val: '\tclient_view "//depot/... //client/..." &&\n'
            span_id: 35
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:36) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:37) (Token id:Id.Lit_Chars val:'\n' span_id:38) 
          (Token id:Id.Lit_Chars val:'\t\tmkdir -p subdir &&\n' span_id:39) (Token id:Id.Lit_Chars val:'\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\t\t>subdir/file1.txt &&\n' span_id:41) (Token id:Id.Lit_Chars val:'\t\tp4 add subdir/file1.txt &&\n' span_id:42) 
          (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "Add file 1" &&\n' span_id:43) (Token id:Id.Lit_Chars val:'\n' span_id:44) 
          (Token id:Id.Lit_Chars val:'\t\t>file2.txt &&\n' span_id:45) (Token id:Id.Lit_Chars val:'\t\tp4 add file2.txt &&\n' span_id:46) 
          (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "Add file 2" &&\n' span_id:47) (Token id:Id.Lit_Chars val:'\n' span_id:48) 
          (Token id:Id.Lit_Chars val:'\t\t>subdir/file3.txt &&\n' span_id:49) (Token id:Id.Lit_Chars val:'\t\tp4 add subdir/file3.txt &&\n' span_id:50) 
          (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "Add file 3" &&\n' span_id:51) (Token id:Id.Lit_Chars val:'\n' span_id:52) 
          (Token id:Id.Lit_Chars val:'\t\t>file4.txt &&\n' span_id:53) (Token id:Id.Lit_Chars val:'\t\tp4 add file4.txt &&\n' span_id:54) 
          (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "Add file 4" &&\n' span_id:55) (Token id:Id.Lit_Chars val:'\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\t\tp4 delete subdir/file3.txt &&\n' span_id:57) (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "Remove file 3" &&\n' span_id:58) 
          (Token id:Id.Lit_Chars val:'\n' span_id:59) (Token id:Id.Lit_Chars val:'\t\tp4 delete file4.txt &&\n' span_id:60) 
          (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "Remove file 4"\n' span_id:61) (Token id:Id.Lit_Chars val:'\t)\n' span_id:62)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Clone repo root path with all history' span_id:69))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:73) 
          (Token
            id: Id.Lit_Chars
            val: '\tclient_view "//depot/... //client/..." &&\n'
            span_id: 74
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:75) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:76) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:77) 
          (Token id:Id.Lit_Chars val:'\t\tgit init . &&\n' span_id:78) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit p4 clone --use-client-spec --destination="$git" //depot@all &&\n'
            span_id: 79
          ) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-\\EOF &&\n' span_id:80) 
          (Token id:Id.Lit_Chars val:'\t\tRemove file 4\n' span_id:81) (Token id:Id.Lit_Chars val:'\t\t[git-p4: depot-paths = "//depot/": change = 6]\n' span_id:82) 
          (Token id:Id.Lit_Chars val:'\n' span_id:83) (Token id:Id.Lit_Chars val:'\t\tRemove file 3\n' span_id:84) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t[git-p4: depot-paths = "//depot/": change = 5]\n'
            span_id: 85
          ) (Token id:Id.Lit_Chars val:'\n' span_id:86) (Token id:Id.Lit_Chars val:'\t\tAdd file 4\n' span_id:87) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t[git-p4: depot-paths = "//depot/": change = 4]\n'
            span_id: 88
          ) (Token id:Id.Lit_Chars val:'\n' span_id:89) (Token id:Id.Lit_Chars val:'\t\tAdd file 3\n' span_id:90) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t[git-p4: depot-paths = "//depot/": change = 3]\n'
            span_id: 91
          ) (Token id:Id.Lit_Chars val:'\n' span_id:92) (Token id:Id.Lit_Chars val:'\t\tAdd file 2\n' span_id:93) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t[git-p4: depot-paths = "//depot/": change = 2]\n'
            span_id: 94
          ) (Token id:Id.Lit_Chars val:'\n' span_id:95) (Token id:Id.Lit_Chars val:'\t\tAdd file 1\n' span_id:96) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t[git-p4: depot-paths = "//depot/": change = 1]\n'
            span_id: 97
          ) (Token id:Id.Lit_Chars val:'\n' span_id:98) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:99) 
          (Token id:Id.Lit_Chars val:'\t\tgit log --format=%B >actual &&\n' span_id:100) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:101) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:102)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Clone repo subdir with all history but keep empty commits'
            span_id: 109
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:113) 
          (Token
            id: Id.Lit_Chars
            val: '\tclient_view "//depot/subdir/... //client/subdir/..." &&\n'
            span_id: 114
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:115) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:116) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:117) 
          (Token id:Id.Lit_Chars val:'\t\tgit init . &&\n' span_id:118) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.keepEmptyCommits true &&\n' span_id:119) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit p4 clone --use-client-spec --destination="$git" //depot@all &&\n'
            span_id: 120
          ) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-\\EOF &&\n' span_id:121) 
          (Token id:Id.Lit_Chars val:'\t\tRemove file 4\n' span_id:122) (Token id:Id.Lit_Chars val:'\t\t[git-p4: depot-paths = "//depot/": change = 6]\n' span_id:123) 
          (Token id:Id.Lit_Chars val:'\n' span_id:124) (Token id:Id.Lit_Chars val:'\t\tRemove file 3\n' span_id:125) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t[git-p4: depot-paths = "//depot/": change = 5]\n'
            span_id: 126
          ) (Token id:Id.Lit_Chars val:'\n' span_id:127) 
          (Token id:Id.Lit_Chars val:'\t\tAdd file 4\n' span_id:128) (Token id:Id.Lit_Chars val:'\t\t[git-p4: depot-paths = "//depot/": change = 4]\n' span_id:129) 
          (Token id:Id.Lit_Chars val:'\n' span_id:130) (Token id:Id.Lit_Chars val:'\t\tAdd file 3\n' span_id:131) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t[git-p4: depot-paths = "//depot/": change = 3]\n'
            span_id: 132
          ) (Token id:Id.Lit_Chars val:'\n' span_id:133) 
          (Token id:Id.Lit_Chars val:'\t\tAdd file 2\n' span_id:134) (Token id:Id.Lit_Chars val:'\t\t[git-p4: depot-paths = "//depot/": change = 2]\n' span_id:135) 
          (Token id:Id.Lit_Chars val:'\n' span_id:136) (Token id:Id.Lit_Chars val:'\t\tAdd file 1\n' span_id:137) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t[git-p4: depot-paths = "//depot/": change = 1]\n'
            span_id: 138
          ) (Token id:Id.Lit_Chars val:'\n' span_id:139) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:140) 
          (Token id:Id.Lit_Chars val:'\t\tgit log --format=%B >actual &&\n' span_id:141) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:142) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:143)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Clone repo subdir with all history' span_id:150))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:154) 
          (Token
            id: Id.Lit_Chars
            val: '\tclient_view "//depot/subdir/... //client/subdir/..." &&\n'
            span_id: 155
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:156) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:157) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:158) 
          (Token id:Id.Lit_Chars val:'\t\tgit init . &&\n' span_id:159) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit p4 clone --use-client-spec --destination="$git" --verbose //depot@all &&\n'
            span_id: 160
          ) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-\\EOF &&\n' span_id:161) 
          (Token id:Id.Lit_Chars val:'\t\tRemove file 3\n' span_id:162) (Token id:Id.Lit_Chars val:'\t\t[git-p4: depot-paths = "//depot/": change = 5]\n' span_id:163) 
          (Token id:Id.Lit_Chars val:'\n' span_id:164) (Token id:Id.Lit_Chars val:'\t\tAdd file 3\n' span_id:165) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t[git-p4: depot-paths = "//depot/": change = 3]\n'
            span_id: 166
          ) (Token id:Id.Lit_Chars val:'\n' span_id:167) 
          (Token id:Id.Lit_Chars val:'\t\tAdd file 1\n' span_id:168) (Token id:Id.Lit_Chars val:'\t\t[git-p4: depot-paths = "//depot/": change = 1]\n' span_id:169) 
          (Token id:Id.Lit_Chars val:'\n' span_id:170) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:171) 
          (Token id:Id.Lit_Chars val:'\t\tgit log --format=%B >actual &&\n' span_id:172) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:173) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:174)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'kill p4d' span_id:181))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:185) 
          (Token id:Id.Lit_Chars val:'\tkill_p4d\n' span_id:186)
        )
      }
    )
    (C {(test_done)})
  ]
)