(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 Mock LFS' span_id: 6 ) ) } spids: [4] ) ] ) (C {(.)} {(./lib-git-p4.sh)}) (command.ShFunction name: test_file_is_not_in_mock_lfs body: (command.BraceGroup children: [ (command.AndOr ops: [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: [23] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CONTENT) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [31] ) ] ) (command.Simple words: [{(echo)} {(DQ ($ Id.VSub_DollarName '$CONTENT'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:45) fd: -1 arg_word: {(expect_content)} ) ] ) (C {(test_path_is_file)} {(DQ ($ Id.VSub_DollarName '$FILE'))}) (C {(test_cmp)} {(expect_content)} {(DQ ($ Id.VSub_DollarName '$FILE'))}) ] ) ] ) ) (command.ShFunction name: test_file_is_in_mock_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 ] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FILE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [79] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CONTENT) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [87] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LOCAL_STORAGE) op: assign_op.Equal rhs: {(DQ (.git/mock-storage/local/) ($ Id.VSub_DollarName '$CONTENT'))} spids: [95] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SERVER_STORAGE) op: assign_op.Equal rhs: {(DQ (.git/mock-storage/remote/) ($ Id.VSub_DollarName '$CONTENT'))} spids: [104] ) ] ) (command.Simple words: [{(echo)} {(DQ (pointer-) ($ Id.VSub_DollarName '$CONTENT'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:120) fd: -1 arg_word: {(expect_pointer)} ) ] ) (command.Simple words: [{(echo)} {(DQ ($ Id.VSub_DollarName '$CONTENT'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:132) fd: -1 arg_word: {(expect_content)} ) ] ) (C {(test_path_is_file)} {(DQ ($ Id.VSub_DollarName '$FILE'))}) (C {(test_path_is_file)} {(DQ ($ Id.VSub_DollarName '$LOCAL_STORAGE'))}) (C {(test_path_is_file)} {(DQ ($ Id.VSub_DollarName '$SERVER_STORAGE'))}) (C {(test_cmp)} {(expect_pointer)} {(DQ ($ Id.VSub_DollarName '$FILE'))}) (C {(test_cmp)} {(expect_content)} {(DQ ($ Id.VSub_DollarName '$LOCAL_STORAGE'))}) (C {(test_cmp)} {(expect_content)} {(DQ ($ Id.VSub_DollarName '$SERVER_STORAGE'))}) ] ) ] ) ) (command.ShFunction name: test_file_is_deleted_in_mock_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 ] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FILE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [206] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CONTENT) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [214] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LOCAL_STORAGE) op: assign_op.Equal rhs: {(DQ (.git/mock-storage/local/) ($ Id.VSub_DollarName '$CONTENT'))} spids: [222] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SERVER_STORAGE) op: assign_op.Equal rhs: {(DQ (.git/mock-storage/remote/) ($ Id.VSub_DollarName '$CONTENT'))} spids: [231] ) ] ) (command.Simple words: [{(echo)} {(DQ (pointer-) ($ Id.VSub_DollarName '$CONTENT'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:247) fd: -1 arg_word: {(expect_pointer)} ) ] ) (command.Simple words: [{(echo)} {(DQ ($ Id.VSub_DollarName '$CONTENT'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:259) fd: -1 arg_word: {(expect_content)} ) ] ) (C {(test_path_is_missing)} {(DQ ($ Id.VSub_DollarName '$FILE'))}) (C {(test_path_is_file)} {(DQ ($ Id.VSub_DollarName '$LOCAL_STORAGE'))}) (C {(test_path_is_file)} {(DQ ($ Id.VSub_DollarName '$SERVER_STORAGE'))}) (C {(test_cmp)} {(expect_content)} {(DQ ($ Id.VSub_DollarName '$LOCAL_STORAGE'))}) (C {(test_cmp)} {(expect_content)} {(DQ ($ Id.VSub_DollarName '$SERVER_STORAGE'))}) ] ) ] ) ) (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: [322] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:EXPECTED_COUNT) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [330] ) ] ) (command.Simple words: [{(find)} {(DQ ($ Id.VSub_DollarName '$DIR'))} {(-type)} {(f)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:348) 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:368))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:372) (Token id:Id.Lit_Chars val:'\tstart_p4d\n' span_id:373) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Create repo with binary files' span_id:380))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:384) (Token id: Id.Lit_Chars val: '\tclient_view "//depot/... //client/..." &&\n' span_id: 385 ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:386) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:387) (Token id:Id.Lit_Chars val:'\n' span_id:388) (Token id: Id.Lit_Chars val: '\t\techo "content 1 txt 23 bytes" >file1.txt &&\n' span_id: 389 ) (Token id:Id.Lit_Chars val:'\t\tp4 add file1.txt &&\n' span_id:390) (Token id: Id.Lit_Chars val: '\t\techo "content 2-3 bin 25 bytes" >file2.dat &&\n' span_id: 391 ) (Token id:Id.Lit_Chars val:'\t\tp4 add file2.dat &&\n' span_id:392) (Token id: Id.Lit_Chars val: '\t\tp4 submit -d "Add text and binary file" &&\n' span_id: 393 ) (Token id:Id.Lit_Chars val:'\n' span_id:394) (Token id:Id.Lit_Chars val:'\t\tmkdir "path with spaces" &&\n' span_id:395) (Token id: Id.Lit_Chars val: '\t\techo "content 2-3 bin 25 bytes" >"path with spaces/file3.bin" &&\n' span_id: 396 ) (Token id:Id.Lit_Chars val:'\t\tp4 add "path with spaces/file3.bin" &&\n' span_id:397) (Token id: Id.Lit_Chars val: '\t\tp4 submit -d "Add another binary file with same content and spaces in path" &&\n' span_id: 398 ) (Token id:Id.Lit_Chars val:'\n' span_id:399) (Token id: Id.Lit_Chars val: '\t\techo "content 4 bin 26 bytes XX" >file4.bin &&\n' span_id: 400 ) (Token id:Id.Lit_Chars val:'\t\tp4 add file4.bin &&\n' span_id:401) (Token id: Id.Lit_Chars val: '\t\tp4 submit -d "Add another binary file with different content"\n' span_id: 402 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:403) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Store files in Mock LFS based on size (>24 bytes)' span_id: 410 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:414) (Token id: Id.Lit_Chars val: '\tclient_view "//depot/... //client/..." &&\n' span_id: 415 ) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:416) (Token id:Id.Lit_Chars val:'\t(\n' span_id:417) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:418) (Token id:Id.Lit_Chars val:'\t\tgit init . &&\n' span_id:419) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.useClientSpec true &&\n' span_id:420) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.largeFileSystem MockLFS &&\n' span_id: 421 ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.largeFileThreshold 24 &&\n' span_id:422) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.largeFilePush True &&\n' span_id: 423 ) (Token id:Id.Lit_Chars val:'\t\tgit p4 clone --destination="$git" //depot@all &&\n' span_id:424) (Token id:Id.Lit_Chars val:'\n' span_id:425) (Token id: Id.Lit_Chars val: '\t\ttest_file_is_not_in_mock_lfs file1.txt "content 1 txt 23 bytes" &&\n' span_id: 426 ) (Token id: Id.Lit_Chars val: '\t\ttest_file_is_in_mock_lfs file2.dat "content 2-3 bin 25 bytes" &&\n' span_id: 427 ) (Token id: Id.Lit_Chars val: '\t\ttest_file_is_in_mock_lfs "path with spaces/file3.bin" "content 2-3 bin 25 bytes" &&\n' span_id: 428 ) (Token id: Id.Lit_Chars val: '\t\ttest_file_is_in_mock_lfs file4.bin "content 4 bin 26 bytes XX" &&\n' span_id: 429 ) (Token id:Id.Lit_Chars val:'\n' span_id:430) (Token id: Id.Lit_Chars val: '\t\ttest_file_count_in_dir ".git/mock-storage/local" 2 &&\n' span_id: 431 ) (Token id:Id.Lit_Chars val:'\t\ttest_file_count_in_dir ".git/mock-storage/remote" 2\n' span_id:432) (Token id:Id.Lit_Chars val:'\t)\n' span_id:433) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Store files in Mock LFS based on extension (dat)' span_id: 440 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:444) (Token id: Id.Lit_Chars val: '\tclient_view "//depot/... //client/..." &&\n' span_id: 445 ) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:446) (Token id:Id.Lit_Chars val:'\t(\n' span_id:447) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:448) (Token id:Id.Lit_Chars val:'\t\tgit init . &&\n' span_id:449) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.useClientSpec true &&\n' span_id:450) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.largeFileSystem MockLFS &&\n' span_id: 451 ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.largeFileExtensions dat &&\n' span_id:452) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.largeFilePush True &&\n' span_id: 453 ) (Token id:Id.Lit_Chars val:'\t\tgit p4 clone --destination="$git" //depot@all &&\n' span_id:454) (Token id:Id.Lit_Chars val:'\n' span_id:455) (Token id: Id.Lit_Chars val: '\t\ttest_file_is_not_in_mock_lfs file1.txt "content 1 txt 23 bytes" &&\n' span_id: 456 ) (Token id: Id.Lit_Chars val: '\t\ttest_file_is_in_mock_lfs file2.dat "content 2-3 bin 25 bytes" &&\n' span_id: 457 ) (Token id: Id.Lit_Chars val: '\t\ttest_file_is_not_in_mock_lfs "path with spaces/file3.bin" "content 2-3 bin 25 bytes" &&\n' span_id: 458 ) (Token id: Id.Lit_Chars val: '\t\ttest_file_is_not_in_mock_lfs file4.bin "content 4 bin 26 bytes XX" &&\n' span_id: 459 ) (Token id:Id.Lit_Chars val:'\n' span_id:460) (Token id: Id.Lit_Chars val: '\t\ttest_file_count_in_dir ".git/mock-storage/local" 1 &&\n' span_id: 461 ) (Token id:Id.Lit_Chars val:'\t\ttest_file_count_in_dir ".git/mock-storage/remote" 1\n' span_id:462) (Token id:Id.Lit_Chars val:'\t)\n' span_id:463) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Store files in Mock LFS based on extension (dat) and use git p4 sync and no client spec' span_id: 470 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:474) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:475) (Token id:Id.Lit_Chars val:'\t(\n' span_id:476) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:477) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:478) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.useClientSpec true &&\n' span_id: 479 ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.largeFileSystem MockLFS &&\n' span_id:480) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.largeFileExtensions dat &&\n' span_id: 481 ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.largeFilePush True &&\n' span_id:482) (Token id:Id.Lit_Chars val:'\t\tgit p4 sync //depot &&\n' span_id:483) (Token id:Id.Lit_Chars val:'\t\tgit checkout p4/master &&\n' span_id:484) (Token id:Id.Lit_Chars val:'\n' span_id:485) (Token id: Id.Lit_Chars val: '\t\ttest_file_is_not_in_mock_lfs file1.txt "content 1 txt 23 bytes" &&\n' span_id: 486 ) (Token id: Id.Lit_Chars val: '\t\ttest_file_is_in_mock_lfs file2.dat "content 2-3 bin 25 bytes" &&\n' span_id: 487 ) (Token id: Id.Lit_Chars val: '\t\ttest_file_is_not_in_mock_lfs "path with spaces/file3.bin" "content 2-3 bin 25 bytes" &&\n' span_id: 488 ) (Token id: Id.Lit_Chars val: '\t\ttest_file_is_not_in_mock_lfs file4.bin "content 4 bin 26 bytes XX" &&\n' span_id: 489 ) (Token id:Id.Lit_Chars val:'\n' span_id:490) (Token id: Id.Lit_Chars val: '\t\ttest_file_count_in_dir ".git/mock-storage/local" 1 &&\n' span_id: 491 ) (Token id:Id.Lit_Chars val:'\t\ttest_file_count_in_dir ".git/mock-storage/remote" 1\n' span_id:492) (Token id:Id.Lit_Chars val:'\t)\n' span_id:493) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Remove file from repo and store files in Mock LFS based on size (>24 bytes)' span_id: 500 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:504) (Token id: Id.Lit_Chars val: '\tclient_view "//depot/... //client/..." &&\n' span_id: 505 ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:506) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:507) (Token id:Id.Lit_Chars val:'\t\tp4 delete file4.bin &&\n' span_id:508) (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "Remove file"\n' span_id:509) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:510) (Token id:Id.Lit_Chars val:'\n' span_id:511) (Token id: Id.Lit_Chars val: '\tclient_view "//depot/... //client/..." &&\n' span_id: 512 ) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:513) (Token id:Id.Lit_Chars val:'\t(\n' span_id:514) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:515) (Token id:Id.Lit_Chars val:'\t\tgit init . &&\n' span_id:516) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.useClientSpec true &&\n' span_id:517) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.largeFileSystem MockLFS &&\n' span_id: 518 ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.largeFileThreshold 24 &&\n' span_id:519) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.largeFilePush True &&\n' span_id: 520 ) (Token id:Id.Lit_Chars val:'\t\tgit p4 clone --destination="$git" //depot@all &&\n' span_id:521) (Token id:Id.Lit_Chars val:'\n' span_id:522) (Token id: Id.Lit_Chars val: '\t\ttest_file_is_not_in_mock_lfs file1.txt "content 1 txt 23 bytes" &&\n' span_id: 523 ) (Token id: Id.Lit_Chars val: '\t\ttest_file_is_in_mock_lfs file2.dat "content 2-3 bin 25 bytes" &&\n' span_id: 524 ) (Token id: Id.Lit_Chars val: '\t\ttest_file_is_in_mock_lfs "path with spaces/file3.bin" "content 2-3 bin 25 bytes" &&\n' span_id: 525 ) (Token id: Id.Lit_Chars val: '\t\ttest_file_is_deleted_in_mock_lfs file4.bin "content 4 bin 26 bytes XX" &&\n' span_id: 526 ) (Token id:Id.Lit_Chars val:'\n' span_id:527) (Token id: Id.Lit_Chars val: '\t\ttest_file_count_in_dir ".git/mock-storage/local" 2 &&\n' span_id: 528 ) (Token id:Id.Lit_Chars val:'\t\ttest_file_count_in_dir ".git/mock-storage/remote" 2\n' span_id:529) (Token id:Id.Lit_Chars val:'\t)\n' span_id:530) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Run git p4 submit in repo configured with large file system' span_id: 537 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:541) (Token id: Id.Lit_Chars val: '\tclient_view "//depot/... //client/..." &&\n' span_id: 542 ) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:543) (Token id:Id.Lit_Chars val:'\t(\n' span_id:544) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:545) (Token id:Id.Lit_Chars val:'\t\tgit init . &&\n' span_id:546) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.useClientSpec true &&\n' span_id:547) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.largeFileSystem MockLFS &&\n' span_id: 548 ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.largeFileThreshold 24 &&\n' span_id:549) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.largeFilePush True &&\n' span_id: 550 ) (Token id:Id.Lit_Chars val:'\t\tgit p4 clone --destination="$git" //depot@all &&\n' span_id:551) (Token id:Id.Lit_Chars val:'\n' span_id:552) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git p4 submit\n' span_id:553) (Token id:Id.Lit_Chars val:'\t)\n' span_id:554) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'kill p4d' span_id:561))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:565) (Token id:Id.Lit_Chars val:'\tkill_p4d\n' span_id:566) ) } ) (C {(test_done)}) ] )