(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(gitattributes)} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: attr_check body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:path) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [21] ) (assign_pair lhs: (sh_lhs_expr.Name name:expect) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [26] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (command.Simple words: [ {(git)} {($ Id.VSub_Number '$3')} {(check-attr)} {(test)} {(--)} {(DQ ($ Id.VSub_DollarName '$path'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:47) fd: -1 arg_word: {(actual)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:50) fd: 2 arg_word: {(err)} ) ] ) (command.Simple words: [ {(echo)} {(DQ ($ Id.VSub_DollarName '$path') (': test: ') ($ Id.VSub_Number '$2'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:64) fd: -1 arg_word: {(expect)} ) ] ) (C {(test_cmp)} {(expect)} {(actual)}) (C {(test_line_count)} {(Id.Lit_Equals '=')} {(0)} {(err)}) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:93))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:97) (Token id:Id.Lit_Chars val:'\tmkdir -p a/b/d a/c b &&\n' span_id:98) (Token id:Id.Lit_Chars val:'\t(\n' span_id:99) (Token id:Id.Lit_Chars val:'\t\techo "[attr]notest !test"\n' span_id:100) (Token id:Id.Lit_Chars val:'\t\techo "f\ttest=f"\n' span_id:101) (Token id:Id.Lit_Chars val:'\t\techo "a/i test=a/i"\n' span_id:102) (Token id:Id.Lit_Chars val:'\t\techo "onoff test -test"\n' span_id:103) (Token id:Id.Lit_Chars val:'\t\techo "offon -test test"\n' span_id:104) (Token id:Id.Lit_Chars val:'\t\techo "no notest"\n' span_id:105) (Token id:Id.Lit_Chars val:'\t\techo "A/e/F test=A/e/F"\n' span_id:106) (Token id:Id.Lit_Chars val:'\t) >.gitattributes &&\n' span_id:107) (Token id:Id.Lit_Chars val:'\t(\n' span_id:108) (Token id:Id.Lit_Chars val:'\t\techo "g test=a/g" &&\n' span_id:109) (Token id:Id.Lit_Chars val:'\t\techo "b/g test=a/b/g"\n' span_id:110) (Token id:Id.Lit_Chars val:'\t) >a/.gitattributes &&\n' span_id:111) (Token id:Id.Lit_Chars val:'\t(\n' span_id:112) (Token id:Id.Lit_Chars val:'\t\techo "h test=a/b/h" &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\t\techo "d/* test=a/b/d/*"\n' span_id:114) (Token id:Id.Lit_Chars val:'\t\techo "d/yes notest"\n' span_id:115) (Token id:Id.Lit_Chars val:'\t) >a/b/.gitattributes &&\n' span_id:116) (Token id:Id.Lit_Chars val:'\t(\n' span_id:117) (Token id:Id.Lit_Chars val:'\t\techo "global test=global"\n' span_id:118) (Token id:Id.Lit_Chars val:'\t) >"$HOME"/global-gitattributes &&\n' span_id:119) (Token id:Id.Lit_Chars val:'\tcat <<-EOF >expect-all\n' span_id:120) (Token id:Id.Lit_Chars val:'\tf: test: f\n' span_id:121) (Token id:Id.Lit_Chars val:'\ta/f: test: f\n' span_id:122) (Token id:Id.Lit_Chars val:'\ta/c/f: test: f\n' span_id:123) (Token id:Id.Lit_Chars val:'\ta/g: test: a/g\n' span_id:124) (Token id:Id.Lit_Chars val:'\ta/b/g: test: a/b/g\n' span_id:125) (Token id:Id.Lit_Chars val:'\tb/g: test: unspecified\n' span_id:126) (Token id:Id.Lit_Chars val:'\ta/b/h: test: a/b/h\n' span_id:127) (Token id:Id.Lit_Chars val:'\ta/b/d/g: test: a/b/d/*\n' span_id:128) (Token id:Id.Lit_Chars val:'\tonoff: test: unset\n' span_id:129) (Token id:Id.Lit_Chars val:'\toffon: test: set\n' span_id:130) (Token id:Id.Lit_Chars val:'\tno: notest: set\n' span_id:131) (Token id:Id.Lit_Chars val:'\tno: test: unspecified\n' span_id:132) (Token id:Id.Lit_Chars val:'\ta/b/d/no: notest: set\n' span_id:133) (Token id:Id.Lit_Chars val:'\ta/b/d/no: test: a/b/d/*\n' span_id:134) (Token id:Id.Lit_Chars val:'\ta/b/d/yes: notest: set\n' span_id:135) (Token id:Id.Lit_Chars val:'\ta/b/d/yes: test: unspecified\n' span_id:136) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:137) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'command line checks' span_id:144))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:148) (Token id:Id.Lit_Chars val:'\ttest_must_fail git check-attr &&\n' span_id:149) (Token id:Id.Lit_Chars val:'\ttest_must_fail git check-attr -- &&\n' span_id:150) (Token id: Id.Lit_Chars val: '\ttest_must_fail git check-attr test &&\n' span_id: 151 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git check-attr test -- &&\n' span_id:152) (Token id: Id.Lit_Chars val: '\ttest_must_fail git check-attr -- f &&\n' span_id: 153 ) (Token id:Id.Lit_Chars val:'\techo "f" | test_must_fail git check-attr --stdin &&\n' span_id:154) (Token id: Id.Lit_Chars val: '\techo "f" | test_must_fail git check-attr --stdin -- f &&\n' span_id: 155 ) (Token id: Id.Lit_Chars val: '\techo "f" | test_must_fail git check-attr --stdin test -- f &&\n' span_id: 156 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git check-attr "" -- f\n' span_id:157) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'attribute test' span_id:164))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:168) (Token id:Id.Lit_Chars val:'\tattr_check f f &&\n' span_id:169) (Token id:Id.Lit_Chars val:'\tattr_check a/f f &&\n' span_id:170) (Token id:Id.Lit_Chars val:'\tattr_check a/c/f f &&\n' span_id:171) (Token id:Id.Lit_Chars val:'\tattr_check a/g a/g &&\n' span_id:172) (Token id:Id.Lit_Chars val:'\tattr_check a/b/g a/b/g &&\n' span_id:173) (Token id:Id.Lit_Chars val:'\tattr_check b/g unspecified &&\n' span_id:174) (Token id:Id.Lit_Chars val:'\tattr_check a/b/h a/b/h &&\n' span_id:175) (Token id:Id.Lit_Chars val:'\tattr_check a/b/d/g "a/b/d/*" &&\n' span_id:176) (Token id:Id.Lit_Chars val:'\tattr_check onoff unset &&\n' span_id:177) (Token id:Id.Lit_Chars val:'\tattr_check offon set &&\n' span_id:178) (Token id:Id.Lit_Chars val:'\tattr_check no unspecified &&\n' span_id:179) (Token id:Id.Lit_Chars val:'\tattr_check a/b/d/no "a/b/d/*" &&\n' span_id:180) (Token id:Id.Lit_Chars val:'\tattr_check a/b/d/yes unspecified\n' span_id:181) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'attribute matching is case sensitive when core.ignorecase=0' span_id: 188 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:192) (Token id:Id.Lit_Chars val:'\n' span_id:193) (Token id: Id.Lit_Chars val: '\ttest_must_fail attr_check F f "-c core.ignorecase=0" &&\n' span_id: 194 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail attr_check a/F f "-c core.ignorecase=0" &&\n' span_id: 195 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail attr_check a/c/F f "-c core.ignorecase=0" &&\n' span_id: 196 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail attr_check a/G a/g "-c core.ignorecase=0" &&\n' span_id: 197 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail attr_check a/B/g a/b/g "-c core.ignorecase=0" &&\n' span_id: 198 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail attr_check a/b/G a/b/g "-c core.ignorecase=0" &&\n' span_id: 199 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail attr_check a/b/H a/b/h "-c core.ignorecase=0" &&\n' span_id: 200 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail attr_check a/b/D/g "a/b/d/*" "-c core.ignorecase=0" &&\n' span_id: 201 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail attr_check oNoFf unset "-c core.ignorecase=0" &&\n' span_id: 202 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail attr_check oFfOn set "-c core.ignorecase=0" &&\n' span_id: 203 ) (Token id:Id.Lit_Chars val:'\tattr_check NO unspecified "-c core.ignorecase=0" &&\n' span_id:204) (Token id: Id.Lit_Chars val: '\ttest_must_fail attr_check a/b/D/NO "a/b/d/*" "-c core.ignorecase=0" &&\n' span_id: 205 ) (Token id:Id.Lit_Chars val:'\tattr_check a/b/d/YES a/b/d/* "-c core.ignorecase=0" &&\n' span_id:206) (Token id: Id.Lit_Chars val: '\ttest_must_fail attr_check a/E/f "A/e/F" "-c core.ignorecase=0"\n' span_id: 207 ) (Token id:Id.Lit_Chars val:'\n' span_id:208) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'attribute matching is case insensitive when core.ignorecase=1' span_id: 215 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:219) (Token id:Id.Lit_Chars val:'\n' span_id:220) (Token id: Id.Lit_Chars val: '\tattr_check F f "-c core.ignorecase=1" &&\n' span_id: 221 ) (Token id:Id.Lit_Chars val:'\tattr_check a/F f "-c core.ignorecase=1" &&\n' span_id:222) (Token id: Id.Lit_Chars val: '\tattr_check a/c/F f "-c core.ignorecase=1" &&\n' span_id: 223 ) (Token id:Id.Lit_Chars val:'\tattr_check a/G a/g "-c core.ignorecase=1" &&\n' span_id:224) (Token id: Id.Lit_Chars val: '\tattr_check a/B/g a/b/g "-c core.ignorecase=1" &&\n' span_id: 225 ) (Token id:Id.Lit_Chars val:'\tattr_check a/b/G a/b/g "-c core.ignorecase=1" &&\n' span_id:226) (Token id: Id.Lit_Chars val: '\tattr_check a/b/H a/b/h "-c core.ignorecase=1" &&\n' span_id: 227 ) (Token id:Id.Lit_Chars val:'\tattr_check a/b/D/g "a/b/d/*" "-c core.ignorecase=1" &&\n' span_id:228) (Token id: Id.Lit_Chars val: '\tattr_check oNoFf unset "-c core.ignorecase=1" &&\n' span_id: 229 ) (Token id:Id.Lit_Chars val:'\tattr_check oFfOn set "-c core.ignorecase=1" &&\n' span_id:230) (Token id: Id.Lit_Chars val: '\tattr_check NO unspecified "-c core.ignorecase=1" &&\n' span_id: 231 ) (Token id:Id.Lit_Chars val:'\tattr_check a/b/D/NO "a/b/d/*" "-c core.ignorecase=1" &&\n' span_id:232) (Token id: Id.Lit_Chars val: '\tattr_check a/b/d/YES unspecified "-c core.ignorecase=1" &&\n' span_id: 233 ) (Token id:Id.Lit_Chars val:'\tattr_check a/E/f "A/e/F" "-c core.ignorecase=1"\n' span_id:234) (Token id:Id.Lit_Chars val:'\n' span_id:235) ) } ) (C {(test_expect_success)} {(CASE_INSENSITIVE_FS)} {(SQ (Token id:Id.Lit_Chars val:'additional case insensitivity tests' span_id:244))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:248) (Token id: Id.Lit_Chars val: '\ttest_must_fail attr_check a/B/D/g "a/b/d/*" "-c core.ignorecase=0" &&\n' span_id: 249 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail attr_check A/B/D/NO "a/b/d/*" "-c core.ignorecase=0" &&\n' span_id: 250 ) (Token id:Id.Lit_Chars val:'\tattr_check A/b/h a/b/h "-c core.ignorecase=1" &&\n' span_id:251) (Token id: Id.Lit_Chars val: '\tattr_check a/B/D/g "a/b/d/*" "-c core.ignorecase=1" &&\n' span_id: 252 ) (Token id:Id.Lit_Chars val:'\tattr_check A/B/D/NO "a/b/d/*" "-c core.ignorecase=1"\n' span_id:253) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'unnormalized paths' span_id:260))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:264) (Token id:Id.Lit_Chars val:'\tattr_check ./f f &&\n' span_id:265) (Token id:Id.Lit_Chars val:'\tattr_check ./a/g a/g &&\n' span_id:266) (Token id:Id.Lit_Chars val:'\tattr_check a/./g a/g &&\n' span_id:267) (Token id:Id.Lit_Chars val:'\tattr_check a/c/../b/g a/b/g\n' span_id:268) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'relative paths' span_id:275))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:279) (Token id:Id.Lit_Chars val:'\t(cd a && attr_check ../f f) &&\n' span_id:280) (Token id:Id.Lit_Chars val:'\t(cd a && attr_check f f) &&\n' span_id:281) (Token id:Id.Lit_Chars val:'\t(cd a && attr_check i a/i) &&\n' span_id:282) (Token id:Id.Lit_Chars val:'\t(cd a && attr_check g a/g) &&\n' span_id:283) (Token id:Id.Lit_Chars val:'\t(cd a && attr_check b/g a/b/g) &&\n' span_id:284) (Token id:Id.Lit_Chars val:'\t(cd b && attr_check ../a/f f) &&\n' span_id:285) (Token id:Id.Lit_Chars val:'\t(cd b && attr_check ../a/g a/g) &&\n' span_id:286) (Token id:Id.Lit_Chars val:'\t(cd b && attr_check ../a/b/g a/b/g)\n' span_id:287) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'prefixes are not confused with leading directories' span_id: 294 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:298) (Token id:Id.Lit_Chars val:'\tattr_check a_plus/g unspecified &&\n' span_id:299) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:300) (Token id:Id.Lit_Chars val:'\ta/g: test: a/g\n' span_id:301) (Token id:Id.Lit_Chars val:'\ta_plus/g: test: unspecified\n' span_id:302) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:303) (Token id:Id.Lit_Chars val:'\tgit check-attr test a/g a_plus/g >actual &&\n' span_id:304) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:305) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:core.attributesfile span_id:312))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:316) (Token id:Id.Lit_Chars val:'\tattr_check global unspecified &&\n' span_id:317) (Token id: Id.Lit_Chars val: '\tgit config core.attributesfile "$HOME/global-gitattributes" &&\n' span_id: 318 ) (Token id:Id.Lit_Chars val:'\tattr_check global global &&\n' span_id:319) (Token id: Id.Lit_Chars val: '\tgit config core.attributesfile "~/global-gitattributes" &&\n' span_id: 320 ) (Token id:Id.Lit_Chars val:'\tattr_check global global &&\n' span_id:321) (Token id: Id.Lit_Chars val: '\techo "global test=precedence" >>.gitattributes &&\n' span_id: 322 ) (Token id:Id.Lit_Chars val:'\tattr_check global precedence\n' span_id:323) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'attribute test: read paths from stdin' span_id:330))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:334) (Token id: Id.Lit_Chars val: '\tgrep -v notest <expect-all >expect &&\n' span_id: 335 ) (Token id: Id.Lit_Chars val: '\tsed -e "s/:.*//" <expect | git check-attr --stdin test >actual &&\n' span_id: 336 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:337) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'attribute test: --all option' span_id:344))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:348) (Token id: Id.Lit_Chars val: '\tgrep -v unspecified <expect-all | sort >specified-all &&\n' span_id: 349 ) (Token id:Id.Lit_Chars val:'\tsed -e "s/:.*//" <expect-all | uniq >stdin-all &&\n' span_id:350) (Token id: Id.Lit_Chars val: '\tgit check-attr --stdin --all <stdin-all | sort >actual &&\n' span_id: 351 ) (Token id:Id.Lit_Chars val:'\ttest_cmp specified-all actual\n' span_id:352) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'attribute test: --cached option' span_id:359))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:363) (Token id:Id.Lit_Chars val:'\t: >empty &&\n' span_id:364) (Token id: Id.Lit_Chars val: '\tgit check-attr --cached --stdin --all <stdin-all | sort >actual &&\n' span_id: 365 ) (Token id:Id.Lit_Chars val:'\ttest_cmp empty actual &&\n' span_id:366) (Token id: Id.Lit_Chars val: '\tgit add .gitattributes a/.gitattributes a/b/.gitattributes &&\n' span_id: 367 ) (Token id: Id.Lit_Chars val: '\tgit check-attr --cached --stdin --all <stdin-all | sort >actual &&\n' span_id: 368 ) (Token id:Id.Lit_Chars val:'\ttest_cmp specified-all actual\n' span_id:369) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'root subdir attribute test' span_id:376))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:380) (Token id:Id.Lit_Chars val:'\tattr_check a/i a/i &&\n' span_id:381) (Token id:Id.Lit_Chars val:'\tattr_check subdir/a/i unspecified\n' span_id:382) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'negative patterns' span_id:389))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:393) (Token id: Id.Lit_Chars val: '\techo "!f test=bar" >.gitattributes &&\n' span_id: 394 ) (Token id:Id.Lit_Chars val:'\tgit check-attr test -- ' span_id:395) ) (DQ ("'")) (SQ (Token id:Id.Lit_Chars val:'!f' span_id:401)) (DQ ("'")) (SQ (Token id:Id.Lit_Chars val:' 2>errors &&\n' span_id:407) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "Negative patterns are ignored" errors\n' span_id: 408 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'patterns starting with exclamation' span_id:415))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:419) (Token id: Id.Lit_Chars val: '\techo "\\!f test=foo" >.gitattributes &&\n' span_id: 420 ) (Token id:Id.Lit_Chars val:'\tattr_check "!f" foo\n' span_id:421) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'"**" test' span_id:428))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:432) (Token id: Id.Lit_Chars val: '\techo "**/f foo=bar" >.gitattributes &&\n' span_id: 433 ) (Token id:Id.Lit_Chars val:'\tcat <<\\EOF >expect &&\n' span_id:434) (Token id:Id.Lit_Chars val:'f: foo: bar\n' span_id:435) (Token id:Id.Lit_Chars val:'a/f: foo: bar\n' span_id:436) (Token id:Id.Lit_Chars val:'a/b/f: foo: bar\n' span_id:437) (Token id:Id.Lit_Chars val:'a/b/c/f: foo: bar\n' span_id:438) (Token id:Id.Lit_Chars val:'EOF\n' span_id:439) (Token id:Id.Lit_Chars val:'\tgit check-attr foo -- "f" >actual 2>err &&\n' span_id:440) (Token id: Id.Lit_Chars val: '\tgit check-attr foo -- "a/f" >>actual 2>>err &&\n' span_id: 441 ) (Token id:Id.Lit_Chars val:'\tgit check-attr foo -- "a/b/f" >>actual 2>>err &&\n' span_id:442) (Token id: Id.Lit_Chars val: '\tgit check-attr foo -- "a/b/c/f" >>actual 2>>err &&\n' span_id: 443 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:444) (Token id:Id.Lit_Chars val:'\ttest_line_count = 0 err\n' span_id:445) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'"**" with no slashes test' span_id:452))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:456) (Token id: Id.Lit_Chars val: '\techo "a**f foo=bar" >.gitattributes &&\n' span_id: 457 ) (Token id:Id.Lit_Chars val:'\tgit check-attr foo -- "f" >actual &&\n' span_id:458) (Token id:Id.Lit_Chars val:'\tcat <<\\EOF >expect &&\n' span_id:459) (Token id:Id.Lit_Chars val:'f: foo: unspecified\n' span_id:460) (Token id:Id.Lit_Chars val:'af: foo: bar\n' span_id:461) (Token id:Id.Lit_Chars val:'axf: foo: bar\n' span_id:462) (Token id:Id.Lit_Chars val:'a/f: foo: unspecified\n' span_id:463) (Token id:Id.Lit_Chars val:'a/b/f: foo: unspecified\n' span_id:464) (Token id:Id.Lit_Chars val:'a/b/c/f: foo: unspecified\n' span_id:465) (Token id:Id.Lit_Chars val:'EOF\n' span_id:466) (Token id: Id.Lit_Chars val: '\tgit check-attr foo -- "f" >actual 2>err &&\n' span_id: 467 ) (Token id:Id.Lit_Chars val:'\tgit check-attr foo -- "af" >>actual 2>err &&\n' span_id:468) (Token id: Id.Lit_Chars val: '\tgit check-attr foo -- "axf" >>actual 2>err &&\n' span_id: 469 ) (Token id:Id.Lit_Chars val:'\tgit check-attr foo -- "a/f" >>actual 2>>err &&\n' span_id:470) (Token id: Id.Lit_Chars val: '\tgit check-attr foo -- "a/b/f" >>actual 2>>err &&\n' span_id: 471 ) (Token id:Id.Lit_Chars val:'\tgit check-attr foo -- "a/b/c/f" >>actual 2>>err &&\n' span_id:472) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:473) (Token id:Id.Lit_Chars val:'\ttest_line_count = 0 err\n' span_id:474) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'using --git-dir and --work-tree' span_id:481))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:485) (Token id:Id.Lit_Chars val:'\tmkdir unreal real &&\n' span_id:486) (Token id:Id.Lit_Chars val:'\tgit init real &&\n' span_id:487) (Token id: Id.Lit_Chars val: '\techo "file test=in-real" >real/.gitattributes &&\n' span_id: 488 ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:489) (Token id:Id.Lit_Chars val:'\t\tcd unreal &&\n' span_id:490) (Token id: Id.Lit_Chars val: '\t\tattr_check file in-real "--git-dir ../real/.git --work-tree ../real"\n' span_id: 491 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:492) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup bare' span_id:499))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:503) (Token id:Id.Lit_Chars val:'\tgit clone --bare . bare.git\n' span_id:504) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'bare repository: check that .gitattribute is ignored' span_id: 511 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:515) (Token id:Id.Lit_Chars val:'\t(\n' span_id:516) (Token id:Id.Lit_Chars val:'\t\tcd bare.git &&\n' span_id:517) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:518) (Token id:Id.Lit_Chars val:'\t\t\techo "f\ttest=f"\n' span_id:519) (Token id:Id.Lit_Chars val:'\t\t\techo "a/i test=a/i"\n' span_id:520) (Token id:Id.Lit_Chars val:'\t\t) >.gitattributes &&\n' span_id:521) (Token id:Id.Lit_Chars val:'\t\tattr_check f unspecified &&\n' span_id:522) (Token id:Id.Lit_Chars val:'\t\tattr_check a/f unspecified &&\n' span_id:523) (Token id:Id.Lit_Chars val:'\t\tattr_check a/c/f unspecified &&\n' span_id:524) (Token id:Id.Lit_Chars val:'\t\tattr_check a/i unspecified &&\n' span_id:525) (Token id:Id.Lit_Chars val:'\t\tattr_check subdir/a/i unspecified\n' span_id:526) (Token id:Id.Lit_Chars val:'\t)\n' span_id:527) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'bare repository: check that --cached honors index' span_id: 534 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:538) (Token id:Id.Lit_Chars val:'\t(\n' span_id:539) (Token id:Id.Lit_Chars val:'\t\tcd bare.git &&\n' span_id:540) (Token id:Id.Lit_Chars val:'\t\tGIT_INDEX_FILE=../.git/index \\\n' span_id:541) (Token id:Id.Lit_Chars val:'\t\tgit check-attr --cached --stdin --all <../stdin-all |\n' span_id:542) (Token id:Id.Lit_Chars val:'\t\tsort >actual &&\n' span_id:543) (Token id:Id.Lit_Chars val:'\t\ttest_cmp ../specified-all actual\n' span_id:544) (Token id:Id.Lit_Chars val:'\t)\n' span_id:545) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bare repository: test info/attributes' span_id:552))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:556) (Token id:Id.Lit_Chars val:'\t(\n' span_id:557) (Token id:Id.Lit_Chars val:'\t\tcd bare.git &&\n' span_id:558) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:559) (Token id:Id.Lit_Chars val:'\t\t\techo "f\ttest=f"\n' span_id:560) (Token id:Id.Lit_Chars val:'\t\t\techo "a/i test=a/i"\n' span_id:561) (Token id:Id.Lit_Chars val:'\t\t) >info/attributes &&\n' span_id:562) (Token id:Id.Lit_Chars val:'\t\tattr_check f f &&\n' span_id:563) (Token id:Id.Lit_Chars val:'\t\tattr_check a/f f &&\n' span_id:564) (Token id:Id.Lit_Chars val:'\t\tattr_check a/c/f f &&\n' span_id:565) (Token id:Id.Lit_Chars val:'\t\tattr_check a/i a/i &&\n' span_id:566) (Token id:Id.Lit_Chars val:'\t\tattr_check subdir/a/i unspecified\n' span_id:567) (Token id:Id.Lit_Chars val:'\t)\n' span_id:568) ) } ) (C {(test_done)}) ] )