(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 store files in Git LFS'
                  span_id: 6
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./lib-git-p4.sh)})
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (command.Simple
          words: [{(git)} {(lfs)} {(help)}]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'>' span_id:21)
              fd: -1
              arg_word: {(/dev/null)}
            )
            (redir.Redir
              op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:24)
              fd: 2
              arg_word: {(1)}
            )
          ]
        )
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skip_all)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (SQ 
                        (Token
                          id: Id.Lit_Chars
                          val: 'skipping git p4 Git LFS tests; Git LFS not found'
                          span_id: 34
                        )
                      )
                    }
                  spids: [32]
                )
              ]
            )
            (C {(test_done)})
          ]
        )
      ]
    )
    (command.ShFunction
      name: test_file_in_lfs
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
              ]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:FILE)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number '$1'))}
                      spids: [51]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:SIZE)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number '$2'))}
                      spids: [59]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:EXPECTED_CONTENT)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number '$3'))}
                      spids: [67]
                    )
                  ]
                )
                (command.Pipeline
                  children: [
                    (C {(sed)} {(-n)} {(SQ (Token id:Id.Lit_Chars val:'1,1 p' span_id:80))} 
                      {(DQ ($ Id.VSub_DollarName '$FILE'))}
                    )
                    (C {(grep)} {(DQ ('^version '))})
                  ]
                  negated: F
                )
                (command.Pipeline
                  children: [
                    (C {(sed)} {(-n)} {(SQ (Token id:Id.Lit_Chars val:'2,2 p' span_id:103))} 
                      {(DQ ($ Id.VSub_DollarName '$FILE'))}
                    )
                    (C {(grep)} {(DQ ('^oid '))})
                  ]
                  negated: F
                )
                (command.Pipeline
                  children: [
                    (C {(sed)} {(-n)} {(SQ (Token id:Id.Lit_Chars val:'3,3 p' span_id:126))} 
                      {(DQ ($ Id.VSub_DollarName '$FILE'))}
                    )
                    (C {(grep)} {(DQ ('^size '))})
                  ]
                  negated: F
                )
                (C {(test_line_count)} {(Id.Lit_Equals '=')} {(3)} {(DQ ($ Id.VSub_DollarName '$FILE'))})
                (command.Pipeline
                  children: [
                    (C {(cat)} {(DQ ($ Id.VSub_DollarName '$FILE'))})
                    (C {(grep)} {(DQ ('size ') ($ Id.VSub_DollarName '$SIZE'))})
                  ]
                  negated: F
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:HASH)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:176)
                            command_list: 
                              (command.CommandList
                                children: [
                                  (command.Pipeline
                                    children: [
                                      (C {(cat)} {(DQ ($ Id.VSub_DollarName '$FILE'))})
                                      (C {(grep)} {(DQ ('oid sha256:'))})
                                      (C {(sed)} {(-e)} {(DQ ('s/oid sha256://g'))})
                                    ]
                                    negated: F
                                  )
                                ]
                              )
                          )
                        }
                      spids: [175]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:LFS_FILE)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ (.git/lfs/objects/) 
                            (command_sub
                              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:208)
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (command.Pipeline
                                      children: [
                                        (C {(echo)} {(DQ ($ Id.VSub_DollarName '$HASH'))})
                                        (C {(cut)} {(-c1-2)})
                                      ]
                                      negated: F
                                    )
                                  ]
                                )
                            ) (/) 
                            (command_sub
                              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:222)
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (command.Pipeline
                                      children: [
                                        (C {(echo)} {(DQ ($ Id.VSub_DollarName '$HASH'))})
                                        (C {(cut)} {(-c3-4)})
                                      ]
                                      negated: F
                                    )
                                  ]
                                )
                            ) (/) ($ Id.VSub_DollarName '$HASH')
                          )
                        }
                      spids: [205]
                    )
                  ]
                )
                (command.Simple
                  words: [{(echo)} {($ Id.VSub_DollarName '$EXPECTED_CONTENT')}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:246)
                      fd: -1
                      arg_word: {(expect)}
                    )
                  ]
                )
                (C {(test_path_is_file)} {(DQ ($ Id.VSub_DollarName '$FILE'))})
                (C {(test_path_is_file)} {(DQ ($ Id.VSub_DollarName '$LFS_FILE'))})
                (C {(test_cmp)} {(expect)} {(DQ ($ Id.VSub_DollarName '$LFS_FILE'))})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_file_count_in_dir
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:DIR)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number '$1'))}
                      spids: [289]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:EXPECTED_COUNT)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number '$2'))}
                      spids: [297]
                    )
                  ]
                )
                (command.Simple
                  words: [{(find)} {(DQ ($ Id.VSub_DollarName '$DIR'))} {(-type)} {(f)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:315)
                      fd: -1
                      arg_word: {(actual)}
                    )
                  ]
                )
                (C {(test_line_count)} {(Id.Lit_Equals '=')} {($ Id.VSub_DollarName '$EXPECTED_COUNT')} 
                  {(actual)}
                )
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'start p4d' span_id:335))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:339) 
          (Token id:Id.Lit_Chars val:'\tstart_p4d\n' span_id:340)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Create repo with binary files' span_id:347))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:351) 
          (Token
            id: Id.Lit_Chars
            val: '\tclient_view "//depot/... //client/..." &&\n'
            span_id: 352
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:353) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:354) (Token id:Id.Lit_Chars val:'\n' span_id:355) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "content 1 txt 23 bytes" >file1.txt &&\n'
            span_id: 356
          ) (Token id:Id.Lit_Chars val:'\t\tp4 add file1.txt &&\n' span_id:357) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "content 2-3 bin 25 bytes" >file2.dat &&\n'
            span_id: 358
          ) (Token id:Id.Lit_Chars val:'\t\tp4 add file2.dat &&\n' span_id:359) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tp4 submit -d "Add text and binary file" &&\n'
            span_id: 360
          ) (Token id:Id.Lit_Chars val:'\n' span_id:361) 
          (Token id:Id.Lit_Chars val:'\t\tmkdir "path with spaces" &&\n' span_id:362) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "content 2-3 bin 25 bytes" >"path with spaces/file3.bin" &&\n'
            span_id: 363
          ) (Token id:Id.Lit_Chars val:'\t\tp4 add "path with spaces/file3.bin" &&\n' span_id:364) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tp4 submit -d "Add another binary file with same content and spaces in path" &&\n'
            span_id: 365
          ) (Token id:Id.Lit_Chars val:'\n' span_id:366) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "content 4 bin 26 bytes XX" >file4.bin &&\n'
            span_id: 367
          ) (Token id:Id.Lit_Chars val:'\t\tp4 add file4.bin &&\n' span_id:368) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tp4 submit -d "Add another binary file with different content"\n'
            span_id: 369
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:370)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Store files in LFS based on size (>24 bytes)' span_id:377))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:381) 
          (Token
            id: Id.Lit_Chars
            val: '\tclient_view "//depot/... //client/..." &&\n'
            span_id: 382
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:383) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:384) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:385) 
          (Token id:Id.Lit_Chars val:'\t\tgit init . &&\n' span_id:386) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.useClientSpec true &&\n' span_id:387) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config git-p4.largeFileSystem GitLFS &&\n'
            span_id: 388
          ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.largeFileThreshold 24 &&\n' span_id:389) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit p4 clone --destination="$git" //depot@all &&\n'
            span_id: 390
          ) (Token id:Id.Lit_Chars val:'\n' span_id:391) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_file_in_lfs file2.dat 25 "content 2-3 bin 25 bytes" &&\n'
            span_id: 392
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\ttest_file_in_lfs "path with spaces/file3.bin" 25 "content 2-3 bin 25 bytes" &&\n'
            span_id: 393
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_file_in_lfs file4.bin 26 "content 4 bin 26 bytes XX" &&\n'
            span_id: 394
          ) (Token id:Id.Lit_Chars val:'\n' span_id:395) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_file_count_in_dir ".git/lfs/objects" 2 &&\n'
            span_id: 396
          ) (Token id:Id.Lit_Chars val:'\n' span_id:397) 
          (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-\\EOF &&\n' span_id:398) (Token id:Id.Lit_Chars val:'\n' span_id:399) (Token id:Id.Lit_Chars val:'\t\t#\n' span_id:400) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Git LFS (see https://git-lfs.github.com/)\n'
            span_id: 401
          ) (Token id:Id.Lit_Chars val:'\t\t#\n' span_id:402) 
          (Token id:Id.Lit_Chars val:'\t\t/file2.dat filter=lfs -text\n' span_id:403) (Token id:Id.Lit_Chars val:'\t\t/file4.bin filter=lfs -text\n' span_id:404) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t/path[[:space:]]with[[:space:]]spaces/file3.bin filter=lfs -text\n'
            span_id: 405
          ) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:406) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_path_is_file .gitattributes &&\n'
            span_id: 407
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect .gitattributes\n' span_id:408) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:409)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Store files in LFS based on size (>25 bytes)' span_id:416))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:420) 
          (Token
            id: Id.Lit_Chars
            val: '\tclient_view "//depot/... //client/..." &&\n'
            span_id: 421
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:422) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:423) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:424) 
          (Token id:Id.Lit_Chars val:'\t\tgit init . &&\n' span_id:425) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.useClientSpec true &&\n' span_id:426) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config git-p4.largeFileSystem GitLFS &&\n'
            span_id: 427
          ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.largeFileThreshold 25 &&\n' span_id:428) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit p4 clone --destination="$git" //depot@all &&\n'
            span_id: 429
          ) (Token id:Id.Lit_Chars val:'\n' span_id:430) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_file_in_lfs file4.bin 26 "content 4 bin 26 bytes XX" &&\n'
            span_id: 431
          ) (Token id:Id.Lit_Chars val:'\t\ttest_file_count_in_dir ".git/lfs/objects" 1 &&\n' span_id:432) 
          (Token id:Id.Lit_Chars val:'\n' span_id:433) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-\\EOF &&\n' span_id:434) 
          (Token id:Id.Lit_Chars val:'\n' span_id:435) (Token id:Id.Lit_Chars val:'\t\t#\n' span_id:436) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Git LFS (see https://git-lfs.github.com/)\n'
            span_id: 437
          ) (Token id:Id.Lit_Chars val:'\t\t#\n' span_id:438) 
          (Token id:Id.Lit_Chars val:'\t\t/file4.bin filter=lfs -text\n' span_id:439) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:440) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_path_is_file .gitattributes &&\n'
            span_id: 441
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect .gitattributes\n' span_id:442) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:443)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Store files in LFS based on extension (dat)' span_id:450))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:454) 
          (Token
            id: Id.Lit_Chars
            val: '\tclient_view "//depot/... //client/..." &&\n'
            span_id: 455
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:456) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:457) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:458) 
          (Token id:Id.Lit_Chars val:'\t\tgit init . &&\n' span_id:459) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.useClientSpec true &&\n' span_id:460) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config git-p4.largeFileSystem GitLFS &&\n'
            span_id: 461
          ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.largeFileExtensions dat &&\n' span_id:462) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit p4 clone --destination="$git" //depot@all &&\n'
            span_id: 463
          ) (Token id:Id.Lit_Chars val:'\n' span_id:464) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_file_in_lfs file2.dat 25 "content 2-3 bin 25 bytes" &&\n'
            span_id: 465
          ) (Token id:Id.Lit_Chars val:'\t\ttest_file_count_in_dir ".git/lfs/objects" 1 &&\n' span_id:466) 
          (Token id:Id.Lit_Chars val:'\n' span_id:467) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-\\EOF &&\n' span_id:468) 
          (Token id:Id.Lit_Chars val:'\n' span_id:469) (Token id:Id.Lit_Chars val:'\t\t#\n' span_id:470) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Git LFS (see https://git-lfs.github.com/)\n'
            span_id: 471
          ) (Token id:Id.Lit_Chars val:'\t\t#\n' span_id:472) 
          (Token id:Id.Lit_Chars val:'\t\t*.dat filter=lfs -text\n' span_id:473) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:474) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_path_is_file .gitattributes &&\n'
            span_id: 475
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect .gitattributes\n' span_id:476) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:477)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Store files in LFS based on size (>25 bytes) and extension (dat)'
            span_id: 484
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:488) 
          (Token
            id: Id.Lit_Chars
            val: '\tclient_view "//depot/... //client/..." &&\n'
            span_id: 489
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:490) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:491) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:492) 
          (Token id:Id.Lit_Chars val:'\t\tgit init . &&\n' span_id:493) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.useClientSpec true &&\n' span_id:494) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config git-p4.largeFileSystem GitLFS &&\n'
            span_id: 495
          ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.largeFileExtensions dat &&\n' span_id:496) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config git-p4.largeFileThreshold 25 &&\n'
            span_id: 497
          ) (Token id:Id.Lit_Chars val:'\t\tgit p4 clone --destination="$git" //depot@all &&\n' span_id:498) 
          (Token id:Id.Lit_Chars val:'\n' span_id:499) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_file_in_lfs file2.dat 25 "content 2-3 bin 25 bytes" &&\n'
            span_id: 500
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_file_in_lfs file4.bin 26 "content 4 bin 26 bytes XX" &&\n'
            span_id: 501
          ) (Token id:Id.Lit_Chars val:'\t\ttest_file_count_in_dir ".git/lfs/objects" 2 &&\n' span_id:502) 
          (Token id:Id.Lit_Chars val:'\n' span_id:503) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-\\EOF &&\n' span_id:504) 
          (Token id:Id.Lit_Chars val:'\n' span_id:505) (Token id:Id.Lit_Chars val:'\t\t#\n' span_id:506) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Git LFS (see https://git-lfs.github.com/)\n'
            span_id: 507
          ) (Token id:Id.Lit_Chars val:'\t\t#\n' span_id:508) 
          (Token id:Id.Lit_Chars val:'\t\t*.dat filter=lfs -text\n' span_id:509) (Token id:Id.Lit_Chars val:'\t\t/file4.bin filter=lfs -text\n' span_id:510) 
          (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:511) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_file .gitattributes &&\n' span_id:512) 
          (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect .gitattributes\n' span_id:513) (Token id:Id.Lit_Chars val:'\t)\n' span_id:514)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Remove file from repo and store files in LFS based on size (>24 bytes)'
            span_id: 521
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:525) 
          (Token
            id: Id.Lit_Chars
            val: '\tclient_view "//depot/... //client/..." &&\n'
            span_id: 526
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:527) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:528) (Token id:Id.Lit_Chars val:'\t\tp4 delete file4.bin &&\n' span_id:529) 
          (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "Remove file"\n' span_id:530) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:531) (Token id:Id.Lit_Chars val:'\n' span_id:532) 
          (Token
            id: Id.Lit_Chars
            val: '\tclient_view "//depot/... //client/..." &&\n'
            span_id: 533
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:534) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:535) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:536) 
          (Token id:Id.Lit_Chars val:'\t\tgit init . &&\n' span_id:537) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.useClientSpec true &&\n' span_id:538) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config git-p4.largeFileSystem GitLFS &&\n'
            span_id: 539
          ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.largeFileThreshold 24 &&\n' span_id:540) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit p4 clone --destination="$git" //depot@all &&\n'
            span_id: 541
          ) (Token id:Id.Lit_Chars val:'\n' span_id:542) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_file_in_lfs file2.dat 25 "content 2-3 bin 25 bytes" &&\n'
            span_id: 543
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\ttest_file_in_lfs "path with spaces/file3.bin" 25 "content 2-3 bin 25 bytes" &&\n'
            span_id: 544
          ) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_missing file4.bin &&\n' span_id:545) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_file_count_in_dir ".git/lfs/objects" 2 &&\n'
            span_id: 546
          ) (Token id:Id.Lit_Chars val:'\n' span_id:547) 
          (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-\\EOF &&\n' span_id:548) (Token id:Id.Lit_Chars val:'\n' span_id:549) (Token id:Id.Lit_Chars val:'\t\t#\n' span_id:550) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Git LFS (see https://git-lfs.github.com/)\n'
            span_id: 551
          ) (Token id:Id.Lit_Chars val:'\t\t#\n' span_id:552) 
          (Token id:Id.Lit_Chars val:'\t\t/file2.dat filter=lfs -text\n' span_id:553) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t/path[[:space:]]with[[:space:]]spaces/file3.bin filter=lfs -text\n'
            span_id: 554
          ) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:555) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_path_is_file .gitattributes &&\n'
            span_id: 556
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect .gitattributes\n' span_id:557) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:558)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Add .gitattributes and store files in LFS based on size (>24 bytes)'
            span_id: 565
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:569) 
          (Token
            id: Id.Lit_Chars
            val: '\tclient_view "//depot/... //client/..." &&\n'
            span_id: 570
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:571) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:572) (Token id:Id.Lit_Chars val:'\t\techo "*.txt text" >.gitattributes &&\n' span_id:573) 
          (Token id:Id.Lit_Chars val:'\t\tp4 add .gitattributes &&\n' span_id:574) (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "Add .gitattributes"\n' span_id:575) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:576) (Token id:Id.Lit_Chars val:'\n' span_id:577) 
          (Token
            id: Id.Lit_Chars
            val: '\tclient_view "//depot/... //client/..." &&\n'
            span_id: 578
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:579) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:580) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:581) 
          (Token id:Id.Lit_Chars val:'\t\tgit init . &&\n' span_id:582) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.useClientSpec true &&\n' span_id:583) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config git-p4.largeFileSystem GitLFS &&\n'
            span_id: 584
          ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.largeFileThreshold 24 &&\n' span_id:585) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit p4 clone --destination="$git" //depot@all &&\n'
            span_id: 586
          ) (Token id:Id.Lit_Chars val:'\n' span_id:587) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_file_in_lfs file2.dat 25 "content 2-3 bin 25 bytes" &&\n'
            span_id: 588
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\ttest_file_in_lfs "path with spaces/file3.bin" 25 "content 2-3 bin 25 bytes" &&\n'
            span_id: 589
          ) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_missing file4.bin &&\n' span_id:590) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_file_count_in_dir ".git/lfs/objects" 2 &&\n'
            span_id: 591
          ) (Token id:Id.Lit_Chars val:'\n' span_id:592) 
          (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-\\EOF &&\n' span_id:593) (Token id:Id.Lit_Chars val:'\t\t*.txt text\n' span_id:594) 
          (Token id:Id.Lit_Chars val:'\n' span_id:595) (Token id:Id.Lit_Chars val:'\t\t#\n' span_id:596) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Git LFS (see https://git-lfs.github.com/)\n'
            span_id: 597
          ) (Token id:Id.Lit_Chars val:'\t\t#\n' span_id:598) 
          (Token id:Id.Lit_Chars val:'\t\t/file2.dat filter=lfs -text\n' span_id:599) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t/path[[:space:]]with[[:space:]]spaces/file3.bin filter=lfs -text\n'
            span_id: 600
          ) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:601) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_path_is_file .gitattributes &&\n'
            span_id: 602
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect .gitattributes\n' span_id:603) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:604)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Add big files to repo and store files in LFS based on compressed size (>28 bytes)'
            span_id: 611
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:615) 
          (Token
            id: Id.Lit_Chars
            val: '\tclient_view "//depot/... //client/..." &&\n'
            span_id: 616
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:617) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:618) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "content 5 bin 40 bytes XXXXXXXXXXXXXXXX" >file5.bin &&\n'
            span_id: 619
          ) (Token id:Id.Lit_Chars val:'\t\tp4 add file5.bin &&\n' span_id:620) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tp4 submit -d "Add file with small footprint after compression" &&\n'
            span_id: 621
          ) (Token id:Id.Lit_Chars val:'\n' span_id:622) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "content 6 bin 39 bytes XXXXXYYYYYZZZZZ" >file6.bin &&\n'
            span_id: 623
          ) (Token id:Id.Lit_Chars val:'\t\tp4 add file6.bin &&\n' span_id:624) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tp4 submit -d "Add file with large footprint after compression"\n'
            span_id: 625
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:626) (Token id:Id.Lit_Chars val:'\n' span_id:627) 
          (Token
            id: Id.Lit_Chars
            val: '\tclient_view "//depot/... //client/..." &&\n'
            span_id: 628
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:629) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:630) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:631) 
          (Token id:Id.Lit_Chars val:'\t\tgit init . &&\n' span_id:632) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.useClientSpec true &&\n' span_id:633) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config git-p4.largeFileSystem GitLFS &&\n'
            span_id: 634
          ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.largeFileCompressedThreshold 28 &&\n' span_id:635) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# We only import HEAD here ("@all" is missing!)\n'
            span_id: 636
          ) (Token id:Id.Lit_Chars val:'\t\tgit p4 clone --destination="$git" //depot &&\n' span_id:637) 
          (Token id:Id.Lit_Chars val:'\n' span_id:638) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_file_in_lfs file6.bin 39 "content 6 bin 39 bytes XXXXXYYYYYZZZZZ" &&\n'
            span_id: 639
          ) (Token id:Id.Lit_Chars val:'\t\ttest_file_count_in_dir ".git/lfs/objects" 1 &&\n' span_id:640) 
          (Token id:Id.Lit_Chars val:'\n' span_id:641) (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-\\EOF &&\n' span_id:642) 
          (Token id:Id.Lit_Chars val:'\t\t*.txt text\n' span_id:643) (Token id:Id.Lit_Chars val:'\n' span_id:644) (Token id:Id.Lit_Chars val:'\t\t#\n' span_id:645) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Git LFS (see https://git-lfs.github.com/)\n'
            span_id: 646
          ) (Token id:Id.Lit_Chars val:'\t\t#\n' span_id:647) 
          (Token id:Id.Lit_Chars val:'\t\t/file6.bin filter=lfs -text\n' span_id:648) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:649) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_path_is_file .gitattributes &&\n'
            span_id: 650
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect .gitattributes\n' span_id:651) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:652)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'kill p4d' span_id:659))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:663) 
          (Token id:Id.Lit_Chars val:'\tkill_p4d\n' span_id:664)
        )
      }
    )
    (C {(test_done)})
  ]
)