(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:'Various filesystem issues' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:auml) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:16) command_list: (command.CommandList children: [(C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'\\303\\244' span_id:20))})] ) ) } spids: [15] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:aumlcdiar) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:25) command_list: (command.CommandList children: [ (C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'\\141\\314\\210' span_id:29))}) ] ) ) } spids: [24] ) ] ) (command.If arms: [ (if_arm cond: [(C {(test_have_prereq)} {(CASE_INSENSITIVE_FS)})] action: [ (C {(say)} {(DQ ('will test on a case insensitive filesystem'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_case) op: assign_op.Equal rhs: {(test_expect_failure)} spids: [50] ) ] ) ] spids: [34 40] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_case) op: assign_op.Equal rhs: {(test_expect_success)} spids: [56] ) ] ) ] ) (command.If arms: [ (if_arm cond: [(C {(test_have_prereq)} {(UTF8_NFD_TO_NFC)})] action: [ (C {(say)} {(DQ ('will test on a unicode corrupting filesystem'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_unicode) op: assign_op.Equal rhs: {(test_expect_failure)} spids: [78] ) ] ) ] spids: [62 68] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_unicode) op: assign_op.Equal rhs: {(test_expect_success)} spids: [84] ) ] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test_have_prereq)} {(SYMLINKS)}) (C {(say)} {(DQ ('will test on a filesystem lacking symbolic links'))}) ] ) (command.If arms: [ (if_arm cond: [(C {(test_have_prereq)} {(CASE_INSENSITIVE_FS)})] action: [ (C {(test_expect_success)} {(DQ ('detection of case insensitive filesystem during repo init'))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:119) (Token id: Id.Lit_Chars val: '\ttest $(git config --bool core.ignorecase) = true\n' span_id: 120 ) ) } ) ] spids: [104 110] ) ] else_action: [ (C {(test_expect_success)} {(DQ ('detection of case insensitive filesystem during repo init'))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:132) (Token id:Id.Lit_Chars val:'\t{\n' span_id:133) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail git config --bool core.ignorecase >/dev/null ||\n' span_id: 134 ) (Token id:Id.Lit_Chars val:'\t\t\ttest $(git config --bool core.ignorecase) = false\n' span_id:135) (Token id:Id.Lit_Chars val:'\t}\n' span_id:136) ) } ) ] ) (command.If arms: [ (if_arm cond: [(C {(test_have_prereq)} {(SYMLINKS)})] action: [ (C {(test_expect_success)} {(DQ ('detection of filesystem w/o symlink support during repo init'))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:157) (Token id:Id.Lit_Chars val:'\t{\n' span_id:158) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git config --bool core.symlinks ||\n' span_id:159) (Token id: Id.Lit_Chars val: '\t\ttest "$(git config --bool core.symlinks)" = true\n' span_id: 160 ) (Token id:Id.Lit_Chars val:'\t}\n' span_id:161) ) } ) ] spids: [142 148] ) ] else_action: [ (C {(test_expect_success)} {(DQ ('detection of filesystem w/o symlink support during repo init'))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:173) (Token id: Id.Lit_Chars val: '\tv=$(git config --bool core.symlinks) &&\n' span_id: 174 ) (Token id:Id.Lit_Chars val:'\ttest "$v" = false\n' span_id:175) ) } ) ] ) (C {(test_expect_success)} {(DQ ('setup case tests'))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:188) (Token id:Id.Lit_Chars val:'\tgit config core.ignorecase true &&\n' span_id:189) (Token id:Id.Lit_Chars val:'\ttouch camelcase &&\n' span_id:190) (Token id:Id.Lit_Chars val:'\tgit add camelcase &&\n' span_id:191) (Token id:Id.Lit_Chars val:'\tgit commit -m "initial" &&\n' span_id:192) (Token id:Id.Lit_Chars val:'\tgit tag initial &&\n' span_id:193) (Token id:Id.Lit_Chars val:'\tgit checkout -b topic &&\n' span_id:194) (Token id:Id.Lit_Chars val:'\tgit mv camelcase tmp &&\n' span_id:195) (Token id:Id.Lit_Chars val:'\tgit mv tmp CamelCase &&\n' span_id:196) (Token id:Id.Lit_Chars val:'\tgit commit -m "rename" &&\n' span_id:197) (Token id:Id.Lit_Chars val:'\tgit checkout -f master\n' span_id:198) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rename (case change)' span_id:205))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:209) (Token id:Id.Lit_Chars val:'\tgit mv camelcase CamelCase &&\n' span_id:210) (Token id:Id.Lit_Chars val:'\tgit commit -m "rename"\n' span_id:211) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge (case change)' span_id:218))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:222) (Token id:Id.Lit_Chars val:'\trm -f CamelCase &&\n' span_id:223) (Token id:Id.Lit_Chars val:'\trm -f camelcase &&\n' span_id:224) (Token id:Id.Lit_Chars val:'\tgit reset --hard initial &&\n' span_id:225) (Token id:Id.Lit_Chars val:'\tgit merge topic\n' span_id:226) ) } ) (C {(test_expect_failure)} {(CASE_INSENSITIVE_FS)} {(SQ (Token id:Id.Lit_Chars val:'add (with different case)' span_id:237))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:241) (Token id:Id.Lit_Chars val:'\tgit reset --hard initial &&\n' span_id:242) (Token id:Id.Lit_Chars val:'\trm camelcase &&\n' span_id:243) (Token id:Id.Lit_Chars val:'\techo 1 >CamelCase &&\n' span_id:244) (Token id:Id.Lit_Chars val:'\tgit add CamelCase &&\n' span_id:245) (Token id: Id.Lit_Chars val: '\tcamel=$(git ls-files | grep -i camelcase) &&\n' span_id: 246 ) (Token id:Id.Lit_Chars val:'\ttest $(echo "$camel" | wc -l) = 1 &&\n' span_id:247) (Token id: Id.Lit_Chars val: '\ttest "z$(git cat-file blob :$camel)" = z1\n' span_id: 248 ) ) } ) (C {(test_expect_success)} {(DQ ('setup unicode normalization tests'))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:259) (Token id:Id.Lit_Chars val:'\ttest_create_repo unicode &&\n' span_id:260) (Token id:Id.Lit_Chars val:'\tcd unicode &&\n' span_id:261) (Token id: Id.Lit_Chars val: '\tgit config core.precomposeunicode false &&\n' span_id: 262 ) (Token id:Id.Lit_Chars val:'\ttouch "$aumlcdiar" &&\n' span_id:263) (Token id:Id.Lit_Chars val:'\tgit add "$aumlcdiar" &&\n' span_id:264) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:265) (Token id:Id.Lit_Chars val:'\tgit tag initial &&\n' span_id:266) (Token id:Id.Lit_Chars val:'\tgit checkout -b topic &&\n' span_id:267) (Token id:Id.Lit_Chars val:'\tgit mv $aumlcdiar tmp &&\n' span_id:268) (Token id:Id.Lit_Chars val:'\tgit mv tmp "$auml" &&\n' span_id:269) (Token id:Id.Lit_Chars val:'\tgit commit -m rename &&\n' span_id:270) (Token id:Id.Lit_Chars val:'\tgit checkout -f master\n' span_id:271) ) } ) (C {($ Id.VSub_DollarName '$test_unicode')} {(SQ (Token id:Id.Lit_Chars val:'rename (silent unicode normalization)' span_id:278))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:282) (Token id:Id.Lit_Chars val:'\tgit mv "$aumlcdiar" "$auml" &&\n' span_id:283) (Token id:Id.Lit_Chars val:'\tgit commit -m rename\n' span_id:284) ) } ) (C {($ Id.VSub_DollarName '$test_unicode')} {(SQ (Token id:Id.Lit_Chars val:'merge (silent unicode normalization)' span_id:291))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:295) (Token id:Id.Lit_Chars val:'\tgit reset --hard initial &&\n' span_id:296) (Token id:Id.Lit_Chars val:'\tgit merge topic\n' span_id:297) ) } ) (C {(test_done)}) ] )