(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)}) ] )