(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: 'Compatibility with $XDG_CONFIG_HOME/git/ files' span_id: 21 ) ) } spids: [19] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'read config: xdg file exists and ~/.gitconfig doesn' span_id: 33 ) ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:35)) (SQ (Token id:Id.Lit_Chars val:t span_id:37)) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:41) (Token id:Id.Lit_Chars val:'\tmkdir -p .config/git &&\n' span_id:42) (Token id:Id.Lit_Chars val:'\techo "[alias]" >.config/git/config &&\n' span_id:43) (Token id: Id.Lit_Chars val: '\techo "\tmyalias = !echo in_config" >>.config/git/config &&\n' span_id: 44 ) (Token id:Id.Lit_Chars val:'\techo in_config >expected &&\n' span_id:45) (Token id:Id.Lit_Chars val:'\tgit myalias >actual &&\n' span_id:46) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:47) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'read config: xdg file exists and ~/.gitconfig exists' span_id: 55 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:59) (Token id:Id.Lit_Chars val:'\t>.gitconfig &&\n' span_id:60) (Token id:Id.Lit_Chars val:'\techo "[alias]" >.gitconfig &&\n' span_id:61) (Token id: Id.Lit_Chars val: '\techo "\tmyalias = !echo in_gitconfig" >>.gitconfig &&\n' span_id: 62 ) (Token id:Id.Lit_Chars val:'\techo in_gitconfig >expected &&\n' span_id:63) (Token id:Id.Lit_Chars val:'\tgit myalias >actual &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:65) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'read with --get: xdg file exists and ~/.gitconfig doesn' span_id: 73 ) ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:75)) (SQ (Token id:Id.Lit_Chars val:t span_id:77)) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:81) (Token id:Id.Lit_Chars val:'\trm .gitconfig &&\n' span_id:82) (Token id:Id.Lit_Chars val:'\techo "[user]" >.config/git/config &&\n' span_id:83) (Token id: Id.Lit_Chars val: '\techo "\tname = read_config" >>.config/git/config &&\n' span_id: 84 ) (Token id:Id.Lit_Chars val:'\techo read_config >expected &&\n' span_id:85) (Token id: Id.Lit_Chars val: '\tgit config --get user.name >actual &&\n' span_id: 86 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:87) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'"$XDG_CONFIG_HOME overrides $HOME/.config/git' span_id:94))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:98) (Token id:Id.Lit_Chars val:'\tmkdir -p "$HOME"/xdg/git &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\techo "[user]name = in_xdg" >"$HOME"/xdg/git/config &&\n' span_id:100) (Token id:Id.Lit_Chars val:'\techo in_xdg >expected &&\n' span_id:101) (Token id: Id.Lit_Chars val: '\tXDG_CONFIG_HOME="$HOME"/xdg git config --get-all user.name >actual &&\n' span_id: 102 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:103) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'read with --get: xdg file exists and ~/.gitconfig exists' span_id: 110 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:114) (Token id:Id.Lit_Chars val:'\t>.gitconfig &&\n' span_id:115) (Token id:Id.Lit_Chars val:'\techo "[user]" >.gitconfig &&\n' span_id:116) (Token id: Id.Lit_Chars val: '\techo "\tname = read_gitconfig" >>.gitconfig &&\n' span_id: 117 ) (Token id:Id.Lit_Chars val:'\techo read_gitconfig >expected &&\n' span_id:118) (Token id: Id.Lit_Chars val: '\tgit config --get user.name >actual &&\n' span_id: 119 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:120) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'read with --list: xdg file exists and ~/.gitconfig doesn' span_id: 128 ) ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:130)) (SQ (Token id:Id.Lit_Chars val:t span_id:132)) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:136) (Token id:Id.Lit_Chars val:'\trm .gitconfig &&\n' span_id:137) (Token id:Id.Lit_Chars val:'\techo user.name=read_config >expected &&\n' span_id:138) (Token id: Id.Lit_Chars val: '\tgit config --global --list >actual &&\n' span_id: 139 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:140) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'read with --list: xdg file exists and ~/.gitconfig exists' span_id: 148 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:152) (Token id:Id.Lit_Chars val:'\t>.gitconfig &&\n' span_id:153) (Token id:Id.Lit_Chars val:'\techo "[user]" >.gitconfig &&\n' span_id:154) (Token id: Id.Lit_Chars val: '\techo "\tname = read_gitconfig" >>.gitconfig &&\n' span_id: 155 ) (Token id:Id.Lit_Chars val:'\techo user.name=read_gitconfig >expected &&\n' span_id:156) (Token id: Id.Lit_Chars val: '\tgit config --global --list >actual &&\n' span_id: 157 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:158) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:Setup span_id:166))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:170) (Token id:Id.Lit_Chars val:'\tgit init git &&\n' span_id:171) (Token id:Id.Lit_Chars val:'\tcd git &&\n' span_id:172) (Token id:Id.Lit_Chars val:'\techo foo >to_be_excluded\n' span_id:173) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Exclusion of a file in the XDG ignore file' span_id:181))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:185) (Token id:Id.Lit_Chars val:'\tmkdir -p "$HOME"/.config/git/ &&\n' span_id:186) (Token id:Id.Lit_Chars val:'\techo to_be_excluded >"$HOME"/.config/git/ignore &&\n' span_id:187) (Token id: Id.Lit_Chars val: '\ttest_must_fail git add to_be_excluded\n' span_id: 188 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '$XDG_CONFIG_HOME overrides $HOME/.config/git/ignore' span_id: 195 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:199) (Token id:Id.Lit_Chars val:'\tmkdir -p "$HOME"/xdg/git &&\n' span_id:200) (Token id:Id.Lit_Chars val:'\techo content >excluded_by_xdg_only &&\n' span_id:201) (Token id: Id.Lit_Chars val: '\techo excluded_by_xdg_only >"$HOME"/xdg/git/ignore &&\n' span_id: 202 ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git read-tree --empty" &&\n' span_id:203) (Token id:Id.Lit_Chars val:'\t(XDG_CONFIG_HOME="$HOME/xdg" &&\n' span_id:204) (Token id:Id.Lit_Chars val:'\t export XDG_CONFIG_HOME &&\n' span_id:205) (Token id:Id.Lit_Chars val:'\t git add to_be_excluded &&\n' span_id:206) (Token id:Id.Lit_Chars val:'\t test_must_fail git add excluded_by_xdg_only\n' span_id:207) (Token id:Id.Lit_Chars val:'\t)\n' span_id:208) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Exclusion in both XDG and local ignore files' span_id:215))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:219) (Token id:Id.Lit_Chars val:'\techo to_be_excluded >.gitignore &&\n' span_id:220) (Token id:Id.Lit_Chars val:'\ttest_must_fail git add to_be_excluded\n' span_id:221) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Exclusion in a non-XDG global ignore file' span_id:229))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:233) (Token id:Id.Lit_Chars val:'\trm .gitignore &&\n' span_id:234) (Token id:Id.Lit_Chars val:'\techo >"$HOME"/.config/git/ignore &&\n' span_id:235) (Token id: Id.Lit_Chars val: '\techo to_be_excluded >"$HOME"/my_gitignore &&\n' span_id: 236 ) (Token id:Id.Lit_Chars val:'\tgit config core.excludesfile "$HOME"/my_gitignore &&\n' span_id:237) (Token id: Id.Lit_Chars val: '\ttest_must_fail git add to_be_excluded\n' span_id: 238 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Checking XDG ignore file when HOME is unset' span_id:245))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:249) (Token id:Id.Lit_Chars val:'\t>expected &&\n' span_id:250) (Token id:Id.Lit_Chars val:'\t(sane_unset HOME &&\n' span_id:251) (Token id: Id.Lit_Chars val: '\t git config --unset core.excludesfile &&\n' span_id: 252 ) (Token id:Id.Lit_Chars val:'\t git ls-files --exclude-standard --ignored >actual) &&\n' span_id:253) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:254) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Checking attributes in the XDG attributes file' span_id:261))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:265) (Token id:Id.Lit_Chars val:'\techo foo >f &&\n' span_id:266) (Token id:Id.Lit_Chars val:'\tgit check-attr -a f >actual &&\n' span_id:267) (Token id:Id.Lit_Chars val:'\ttest_line_count -eq 0 actual &&\n' span_id:268) (Token id:Id.Lit_Chars val:'\techo "f attr_f" >"$HOME"/.config/git/attributes &&\n' span_id:269) (Token id:Id.Lit_Chars val:'\techo "f: attr_f: set" >expected &&\n' span_id:270) (Token id:Id.Lit_Chars val:'\tgit check-attr -a f >actual &&\n' span_id:271) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:272) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Checking XDG attributes when HOME is unset' span_id:279))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:283) (Token id:Id.Lit_Chars val:'\t>expected &&\n' span_id:284) (Token id:Id.Lit_Chars val:'\t(sane_unset HOME &&\n' span_id:285) (Token id:Id.Lit_Chars val:'\t git check-attr -a f >actual) &&\n' span_id:286) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:287) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '$XDG_CONFIG_HOME overrides $HOME/.config/git/attributes' span_id: 294 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:298) (Token id:Id.Lit_Chars val:'\tmkdir -p "$HOME"/xdg/git &&\n' span_id:299) (Token id:Id.Lit_Chars val:'\techo "f attr_f=xdg" >"$HOME"/xdg/git/attributes &&\n' span_id:300) (Token id:Id.Lit_Chars val:'\techo "f: attr_f: xdg" >expected &&\n' span_id:301) (Token id: Id.Lit_Chars val: '\tXDG_CONFIG_HOME="$HOME/xdg" git check-attr -a f >actual &&\n' span_id: 302 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:303) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Checking attributes in both XDG and local attributes files' span_id: 310 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:314) (Token id:Id.Lit_Chars val:'\techo "f -attr_f" >.gitattributes &&\n' span_id:315) (Token id:Id.Lit_Chars val:'\techo "f: attr_f: unset" >expected &&\n' span_id:316) (Token id:Id.Lit_Chars val:'\tgit check-attr -a f >actual &&\n' span_id:317) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:318) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Checking attributes in a non-XDG global attributes file' span_id: 326 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:330) (Token id: Id.Lit_Chars val: '\ttest_might_fail rm .gitattributes &&\n' span_id: 331 ) (Token id:Id.Lit_Chars val:'\techo "f attr_f=test" >"$HOME"/my_gitattributes &&\n' span_id:332) (Token id: Id.Lit_Chars val: '\tgit config core.attributesfile "$HOME"/my_gitattributes &&\n' span_id: 333 ) (Token id:Id.Lit_Chars val:'\techo "f: attr_f: test" >expected &&\n' span_id:334) (Token id:Id.Lit_Chars val:'\tgit check-attr -a f >actual &&\n' span_id:335) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:336) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'write: xdg file exists and ~/.gitconfig doesn' span_id:344)) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:346)) (SQ (Token id:Id.Lit_Chars val:t span_id:348)) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:352) (Token id:Id.Lit_Chars val:'\tmkdir -p "$HOME"/.config/git &&\n' span_id:353) (Token id:Id.Lit_Chars val:'\t>"$HOME"/.config/git/config &&\n' span_id:354) (Token id: Id.Lit_Chars val: '\ttest_might_fail rm "$HOME"/.gitconfig &&\n' span_id: 355 ) (Token id:Id.Lit_Chars val:'\tgit config --global user.name "write_config" &&\n' span_id:356) (Token id:Id.Lit_Chars val:'\techo "[user]" >expected &&\n' span_id:357) (Token id:Id.Lit_Chars val:'\techo "\tname = write_config" >>expected &&\n' span_id:358) (Token id: Id.Lit_Chars val: '\ttest_cmp expected "$HOME"/.config/git/config\n' span_id: 359 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'write: xdg file exists and ~/.gitconfig exists' span_id:367))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:371) (Token id:Id.Lit_Chars val:'\t>"$HOME"/.gitconfig &&\n' span_id:372) (Token id:Id.Lit_Chars val:'\tgit config --global user.name "write_gitconfig" &&\n' span_id:373) (Token id:Id.Lit_Chars val:'\techo "[user]" >expected &&\n' span_id:374) (Token id:Id.Lit_Chars val:'\techo "\tname = write_gitconfig" >>expected &&\n' span_id:375) (Token id: Id.Lit_Chars val: '\ttest_cmp expected "$HOME"/.gitconfig\n' span_id: 376 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'write: ~/.config/git/ exists and config file doesn' span_id: 384 ) ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:386)) (SQ (Token id:Id.Lit_Chars val:t span_id:388)) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:392) (Token id: Id.Lit_Chars val: '\ttest_might_fail rm "$HOME"/.gitconfig &&\n' span_id: 393 ) (Token id:Id.Lit_Chars val:'\ttest_might_fail rm "$HOME"/.config/git/config &&\n' span_id:394) (Token id: Id.Lit_Chars val: '\tgit config --global user.name "write_gitconfig" &&\n' span_id: 395 ) (Token id:Id.Lit_Chars val:'\techo "[user]" >expected &&\n' span_id:396) (Token id: Id.Lit_Chars val: '\techo "\tname = write_gitconfig" >>expected &&\n' span_id: 397 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$HOME"/.gitconfig\n' span_id:398) ) } ) (C {(test_done)}) ] )