(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"git p4 tests">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./lib-git-p4.sh)})
    (C {(test_expect_success)} {(SQ <"start p4d">)} {(SQ <"\n"> <"\tstart_p4d\n">)})
    (C {(test_expect_success)} {(SQ <"add p4 files">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tcd \"$cli\" &&\n"> <"\t\techo file1 >file1 &&\n"> 
          <"\t\tp4 add file1 &&\n"> <"\t\tp4 submit -d \"file1\" &&\n"> <"\t\techo file2 >file2 &&\n"> <"\t\tp4 add file2 &&\n"> 
          <"\t\tp4 submit -d \"file2\"\n"> <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"basic git p4 clone">)} 
      {
        (SQ <"\n"> <"\tgit p4 clone --dest=\"$git\" //depot &&\n"> 
          <"\ttest_when_finished cleanup_git &&\n"> <"\t(\n"> <"\t\tcd \"$git\" &&\n"> <"\t\tgit log --oneline >lines &&\n"> 
          <"\t\ttest_line_count = 1 lines\n"> <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"depot typo error">)} 
      {
        (SQ <"\n"> <"\ttest_must_fail git p4 clone --dest=\"$git\" /depot 2>errs &&\n"> 
          <"\tgrep \"Depot paths must start with\" errs\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"git p4 clone @all">)} 
      {
        (SQ <"\n"> <"\tgit p4 clone --dest=\"$git\" //depot@all &&\n"> 
          <"\ttest_when_finished cleanup_git &&\n"> <"\t(\n"> <"\t\tcd \"$git\" &&\n"> <"\t\tgit log --oneline >lines &&\n"> 
          <"\t\ttest_line_count = 2 lines\n"> <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"git p4 sync uninitialized repo">)} 
      {
        (SQ <"\n"> <"\ttest_create_repo \"$git\" &&\n"> <"\ttest_when_finished cleanup_git &&\n"> 
          <"\t(\n"> <"\t\tcd \"$git\" &&\n"> <"\t\ttest_must_fail git p4 sync 2>errs &&\n"> 
          <"\t\ttest_i18ngrep \"Perhaps you never did\" errs\n"> <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"git p4 sync new branch">)} 
      {
        (SQ <"\n"> <"\ttest_create_repo \"$git\" &&\n"> <"\ttest_when_finished cleanup_git &&\n"> 
          <"\t(\n"> <"\t\tcd \"$git\" &&\n"> <"\t\ttest_commit head &&\n"> 
          <"\t\tgit p4 sync --branch=refs/remotes/p4/depot //depot@all &&\n"> <"\t\tgit log --oneline p4/depot >lines &&\n"> <"\t\ttest_line_count = 2 lines\n"> <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"clone two dirs">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tcd \"$cli\" &&\n"> <"\t\tmkdir sub1 sub2 &&\n"> 
          <"\t\techo sub1/f1 >sub1/f1 &&\n"> <"\t\techo sub2/f2 >sub2/f2 &&\n"> <"\t\tp4 add sub1/f1 &&\n"> <"\t\tp4 submit -d \"sub1/f1\" &&\n"> 
          <"\t\tp4 add sub2/f2 &&\n"> <"\t\tp4 submit -d \"sub2/f2\"\n"> <"\t) &&\n"> 
          <"\tgit p4 clone --dest=\"$git\" //depot/sub1 //depot/sub2 &&\n"> <"\ttest_when_finished cleanup_git &&\n"> <"\t(\n"> <"\t\tcd \"$git\" &&\n"> 
          <"\t\tgit ls-files >lines &&\n"> <"\t\ttest_line_count = 2 lines &&\n"> <"\t\tgit log --oneline p4/master >lines &&\n"> 
          <"\t\ttest_line_count = 1 lines\n"> <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"clone two dirs, @all">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tcd \"$cli\" &&\n"> <"\t\techo sub1/f3 >sub1/f3 &&\n"> 
          <"\t\tp4 add sub1/f3 &&\n"> <"\t\tp4 submit -d \"sub1/f3\"\n"> <"\t) &&\n"> 
          <"\tgit p4 clone --dest=\"$git\" //depot/sub1@all //depot/sub2@all &&\n"> <"\ttest_when_finished cleanup_git &&\n"> <"\t(\n"> <"\t\tcd \"$git\" &&\n"> 
          <"\t\tgit ls-files >lines &&\n"> <"\t\ttest_line_count = 3 lines &&\n"> <"\t\tgit log --oneline p4/master >lines &&\n"> 
          <"\t\ttest_line_count = 3 lines\n"> <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"clone two dirs, @all, conflicting files">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tcd \"$cli\" &&\n"> <"\t\techo sub2/f3 >sub2/f3 &&\n"> 
          <"\t\tp4 add sub2/f3 &&\n"> <"\t\tp4 submit -d \"sub2/f3\"\n"> <"\t) &&\n"> 
          <"\tgit p4 clone --dest=\"$git\" //depot/sub1@all //depot/sub2@all &&\n"> <"\ttest_when_finished cleanup_git &&\n"> <"\t(\n"> <"\t\tcd \"$git\" &&\n"> 
          <"\t\tgit ls-files >lines &&\n"> <"\t\ttest_line_count = 3 lines &&\n"> <"\t\tgit log --oneline p4/master >lines &&\n"> 
          <"\t\ttest_line_count = 4 lines &&\n"> <"\t\techo sub2/f3 >expected &&\n"> <"\t\ttest_cmp expected f3\n"> <"\t)\n">
        )
      }
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:revision_ranges)
          op: Equal
          rhs: 
            {
              (DQ ("2000/01/01,#head ") ("\t\t 1,2080/01/01 ") ("\t\t 2000/01/01,2080/01/01 ") 
                ("\t\t 2000/01/01,1000 ") ("\t\t 1,1000")
              )
            }
          spids: [230]
        )
      ]
      spids: [230]
    )
    (C {(test_expect_success)} {(SQ <"clone using non-numeric revision ranges">)} 
      {
        (SQ <"\n"> <"\ttest_when_finished cleanup_git &&\n"> <"\tfor r in $revision_ranges\n"> 
          <"\tdo\n"> <"\t\trm -fr \"$git\" &&\n"> <"\t\ttest ! -d \"$git\" &&\n"> 
          <"\t\tgit p4 clone --dest=\"$git\" //depot@$r &&\n"> <"\t\t(\n"> <"\t\t\tcd \"$git\" &&\n"> <"\t\t\tgit ls-files >lines &&\n"> 
          <"\t\t\ttest_line_count = 6 lines\n"> <"\t\t)\n"> <"\tdone\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"clone with date range, excluding some changes">)} 
      {
        (SQ <"\n"> <"\ttest_when_finished cleanup_git &&\n"> 
          <"\tbefore=$(date +%Y/%m/%d:%H:%M:%S) &&\n"> <"\tsleep 2 &&\n"> <"\t(\n"> <"\t\tcd \"$cli\" &&\n"> <"\t\t:>date_range_test &&\n"> 
          <"\t\tp4 add date_range_test &&\n"> <"\t\tp4 submit -d \"Adding file\"\n"> <"\t) &&\n"> 
          <"\tgit p4 clone --dest=\"$git\" //depot@1,$before &&\n"> <"\t(\n"> <"\t\tcd \"$git\" &&\n"> <"\t\ttest_path_is_missing date_range_test\n"> <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"exit when p4 fails to produce marshaled output">)} 
      {
        (SQ <"\n"> <"\tmkdir badp4dir &&\n"> 
          <"\ttest_when_finished \"rm badp4dir/p4 && rmdir badp4dir\" &&\n"> <"\tcat >badp4dir/p4 <<-EOF &&\n"> <"\t#!$SHELL_PATH\n"> <"\texit 1\n"> <"\tEOF\n"> 
          <"\tchmod 755 badp4dir/p4 &&\n"> <"\t(\n"> <"\t\tPATH=\"$TRASH_DIRECTORY/badp4dir:$PATH\" &&\n"> <"\t\texport PATH &&\n"> 
          <"\t\ttest_expect_code 1 git p4 clone --dest=\"$git\" //depot >errs 2>&1\n"> <"\t) &&\n"> <"\tcat errs &&\n"> <"\ttest_i18ngrep ! Traceback errs\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"exit gracefully for p4 server errors">)} 
      {
        (SQ <"\n"> 
          <
"\ttest_when_finished \"mv \\\"$db\\\"/depot/file1,v,hidden \\\"$db\\\"/depot/file1,v\" &&\n"
          > <"\tmv \"$db\"/depot/file1,v \"$db\"/depot/file1,v,hidden &&\n"> 
          <"\ttest_when_finished cleanup_git &&\n"> <"\ttest_expect_code 1 git p4 clone --dest=\"$git\" //depot@1 >out 2>err &&\n"> 
          <"\ttest_i18ngrep \"Error from p4 print\" err\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"clone --bare should make a bare repository">)} 
      {
        (SQ <"\n"> <"\trm -rf \"$git\" &&\n"> <"\tgit p4 clone --dest=\"$git\" --bare //depot &&\n"> 
          <"\ttest_when_finished cleanup_git &&\n"> <"\t(\n"> <"\t\tcd \"$git\" &&\n"> <"\t\ttest_path_is_missing .git &&\n"> 
          <"\t\tgit config --get --bool core.bare true &&\n"> <"\t\tgit rev-parse --verify refs/remotes/p4/master &&\n"> 
          <"\t\tgit rev-parse --verify refs/remotes/p4/HEAD &&\n"> <"\t\tgit rev-parse --verify refs/heads/master &&\n"> <"\t\tgit rev-parse --verify HEAD\n"> <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"initial import time from top change time">)} 
      {
        (SQ <"\n"> <"\tp4change=$(p4 -G changes -m 1 //depot/... | marshal_dump change) &&\n"> 
          <"\tp4time=$(p4 -G changes -m 1 //depot/... | marshal_dump time) &&\n"> <"\tsleep 3 &&\n"> <"\tgit p4 clone --dest=\"$git\" //depot &&\n"> 
          <"\ttest_when_finished cleanup_git &&\n"> <"\t(\n"> <"\t\tcd \"$git\" &&\n"> <"\t\tgittime=$(git show -s --raw --pretty=format:%at HEAD) &&\n"> 
          <"\t\techo $p4time $gittime &&\n"> <"\t\ttest $p4time = $gittime\n"> <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"unresolvable host in P4PORT should display error">)} 
      {
        (SQ <"\n"> <"\ttest_when_finished cleanup_git &&\n"> 
          <"\tgit p4 clone --dest=\"$git\" //depot &&\n"> <"\t(\n"> <"\t\tcd \"$git\" &&\n"> <"\t\tP4PORT=nosuchhost:65537 &&\n"> <"\t\texport P4PORT &&\n"> 
          <"\t\ttest_expect_code 1 git p4 sync >out 2>err &&\n"> <"\t\tgrep \"connect to nosuchhost\" err\n"> <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"submit from detached head">)} 
      {
        (SQ <"\n"> <"\ttest_when_finished cleanup_git &&\n"> 
          <"\tgit p4 clone --dest=\"$git\" //depot &&\n"> <"\t(\n"> <"\t\tcd \"$git\" &&\n"> <"\t\tgit checkout p4/master &&\n"> <"\t\t>detached_head_test &&\n"> 
          <"\t\tgit add detached_head_test &&\n"> <"\t\tgit commit -m \"add detached_head\" &&\n"> <"\t\tgit config git-p4.skipSubmitEdit true &&\n"> 
          <"\t\tgit p4 submit &&\n"> <"\t\tgit p4 rebase &&\n"> <"\t\tgit log p4/master | grep detached_head\n"> <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"kill p4d">)} {(SQ <"\n"> <"\tkill_p4d\n">)})
    (C {(test_done)})
  ]
)