(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:'for-each-ref test' span_id:15))} spids: [13] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/lib-gpg.sh)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:datestamp) op: assign_op.Equal rhs: {(1151968723)} spids: [34] ) ] ) (command.ShFunction name: setdate_and_increment body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_COMMITTER_DATE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$datestamp') (' +0200'))} spids: [45] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:datestamp) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:53) command_list: (command.CommandList children: [ (C {(expr)} {(DQ ($ Id.VSub_DollarName '$datestamp'))} {(Id.Lit_Other '+')} {(1)} ) ] ) ) } spids: [52] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_AUTHOR_DATE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$datestamp') (' +0200'))} spids: [66] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:datestamp) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:74) command_list: (command.CommandList children: [ (C {(expr)} {(DQ ($ Id.VSub_DollarName '$datestamp'))} {(Id.Lit_Other '+')} {(1)} ) ] ) ) } spids: [73] ) ] ) (C {(export)} {(GIT_COMMITTER_DATE)} {(GIT_AUTHOR_DATE)}) ] ) ) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:101) (Token id:Id.Lit_Chars val:'\tsetdate_and_increment &&\n' span_id:102) (Token id:Id.Lit_Chars val:'\techo "Using $datestamp" > one &&\n' span_id:103) (Token id:Id.Lit_Chars val:'\tgit add one &&\n' span_id:104) (Token id:Id.Lit_Chars val:'\tgit commit -m "Initial" &&\n' span_id:105) (Token id:Id.Lit_Chars val:'\tsetdate_and_increment &&\n' span_id:106) (Token id:Id.Lit_Chars val:'\tgit tag -a -m "Tagging at $datestamp" testtag &&\n' span_id:107) (Token id: Id.Lit_Chars val: '\tgit update-ref refs/remotes/origin/master master &&\n' span_id: 108 ) (Token id:Id.Lit_Chars val:'\tgit remote add origin nowhere &&\n' span_id:109) (Token id: Id.Lit_Chars val: '\tgit config branch.master.remote origin &&\n' span_id: 110 ) (Token id:Id.Lit_Chars val:'\tgit config branch.master.merge refs/heads/master &&\n' span_id:111) (Token id:Id.Lit_Chars val:'\tgit remote add myfork elsewhere &&\n' span_id:112) (Token id:Id.Lit_Chars val:'\tgit config remote.pushdefault myfork &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\tgit config push.default current\n' span_id:114) ) } ) (command.ShFunction name: test_atom body: (command.BraceGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_Number '$1'))} arms: [ (case_arm pat_list: [{(head)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ref) op: assign_op.Equal rhs: {(refs/heads/master)} spids: [137] ) ] ) ] spids: [134 135 140 -1] ) (case_arm pat_list: [{(tag)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ref) op: assign_op.Equal rhs: {(refs/tags/testtag)} spids: [146] ) ] ) ] spids: [143 144 149 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ref) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [155] ) ] ) ] spids: [152 153 158 -1] ) ] ) (command.Simple words: [ {(printf)} {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:167))} {(DQ ($ Id.VSub_Number '$3'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:174) fd: -1 arg_word: {(expected)} ) ] ) (C {(test_expect_) (braced_var_sub token: (Token id:Id.VSub_Number val:4 span_id:180) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(success)}) ) } {($ Id.VSub_DollarName '$PREREQ')} {(DQ ('basic atom: ') ($ Id.VSub_Number '$1') (' ') ($ Id.VSub_Number '$2'))} { (DQ ('\n') ("\t\tgit for-each-ref --format='%(") ($ Id.VSub_Number '$2') (")' ") ($ Id.VSub_DollarName '$ref') (' >actual &&\n') ('\t\tsanitize_pgp <actual >actual.clean &&\n') ('\t\ttest_cmp expected actual.clean\n') ('\t') ) } ) ] ) ) (C {(test_atom)} {(head)} {(refname)} {(refs/heads/master)}) (C {(test_atom)} {(head)} {(refname) (Id.Lit_Other ':') (short)} {(master)}) (C {(test_atom)} {(head)} {(refname) (Id.Lit_Other ':') (Id.Lit_VarLike 'strip=') (1)} {(heads/master)} ) (C {(test_atom)} {(head)} {(refname) (Id.Lit_Other ':') (Id.Lit_VarLike 'strip=') (2)} {(master)}) (C {(test_atom)} {(head)} {(upstream)} {(refs/remotes/origin/master)}) (C {(test_atom)} {(head)} {(upstream) (Id.Lit_Other ':') (short)} {(origin/master)}) (C {(test_atom)} {(head)} {(push)} {(refs/remotes/myfork/master)}) (C {(test_atom)} {(head)} {(push) (Id.Lit_Other ':') (short)} {(myfork/master)}) (C {(test_atom)} {(head)} {(objecttype)} {(commit)}) (C {(test_atom)} {(head)} {(objectsize)} {(171)}) (C {(test_atom)} {(head)} {(objectname)} { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:307) command_list: (command.CommandList children: [(C {(git)} {(rev-parse)} {(refs/heads/master)})] ) ) } ) (C {(test_atom)} {(head)} {(objectname) (Id.Lit_Other ':') (short)} { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:323) command_list: (command.CommandList children: [(C {(git)} {(rev-parse)} {(--short)} {(refs/heads/master)})] ) ) } ) (C {(test_atom)} {(head)} {(tree)} { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:339) command_list: (command.CommandList children: [ (C {(git)} {(rev-parse)} {(refs/heads/master) (Id.Lit_Other '^') (Id.Lit_LBrace '{') (tree) (Id.Lit_RBrace '}')} ) ] ) ) } ) (C {(test_atom)} {(head)} {(parent)} {(SQ )}) (C {(test_atom)} {(head)} {(numparent)} {(0)}) (C {(test_atom)} {(head)} {(object)} {(SQ )}) (C {(test_atom)} {(head)} {(type)} {(SQ )}) (C {(test_atom)} {(head)} {(SQ (Token id:Id.Lit_Chars val:'*objectname' span_id:391))} {(SQ )}) (C {(test_atom)} {(head)} {(SQ (Token id:Id.Lit_Chars val:'*objecttype' span_id:402))} {(SQ )}) (C {(test_atom)} {(head)} {(author)} {(SQ (Token id:Id.Lit_Chars val:'A U Thor <author@example.com> 1151968724 +0200' span_id:415))} ) (C {(test_atom)} {(head)} {(authorname)} {(SQ (Token id:Id.Lit_Chars val:'A U Thor' span_id:425))}) (C {(test_atom)} {(head)} {(authoremail)} {(SQ (Token id:Id.Lit_Chars val:'<author@example.com>' span_id:435))} ) (C {(test_atom)} {(head)} {(authordate)} {(SQ (Token id:Id.Lit_Chars val:'Tue Jul 4 01:18:44 2006 +0200' span_id:445))} ) (C {(test_atom)} {(head)} {(committer)} { (SQ (Token id: Id.Lit_Chars val: 'C O Mitter <committer@example.com> 1151968723 +0200' span_id: 455 ) ) } ) (C {(test_atom)} {(head)} {(committername)} {(SQ (Token id:Id.Lit_Chars val:'C O Mitter' span_id:465))} ) (C {(test_atom)} {(head)} {(committeremail)} {(SQ (Token id:Id.Lit_Chars val:'<committer@example.com>' span_id:475))} ) (C {(test_atom)} {(head)} {(committerdate)} {(SQ (Token id:Id.Lit_Chars val:'Tue Jul 4 01:18:43 2006 +0200' span_id:485))} ) (C {(test_atom)} {(head)} {(tag)} {(SQ )}) (C {(test_atom)} {(head)} {(tagger)} {(SQ )}) (C {(test_atom)} {(head)} {(taggername)} {(SQ )}) (C {(test_atom)} {(head)} {(taggeremail)} {(SQ )}) (C {(test_atom)} {(head)} {(taggerdate)} {(SQ )}) (C {(test_atom)} {(head)} {(creator)} { (SQ (Token id: Id.Lit_Chars val: 'C O Mitter <committer@example.com> 1151968723 +0200' span_id: 540 ) ) } ) (C {(test_atom)} {(head)} {(creatordate)} {(SQ (Token id:Id.Lit_Chars val:'Tue Jul 4 01:18:43 2006 +0200' span_id:550))} ) (C {(test_atom)} {(head)} {(subject)} {(SQ (Token id:Id.Lit_Chars val:Initial span_id:560))}) (C {(test_atom)} {(head)} {(contents) (Id.Lit_Other ':') (subject)} {(SQ (Token id:Id.Lit_Chars val:Initial span_id:572))} ) (C {(test_atom)} {(head)} {(body)} {(SQ )}) (C {(test_atom)} {(head)} {(contents) (Id.Lit_Other ':') (body)} {(SQ )}) (C {(test_atom)} {(head)} {(contents) (Id.Lit_Other ':') (signature)} {(SQ )}) (C {(test_atom)} {(head)} {(contents)} {(SQ (Token id:Id.Lit_Chars val:'Initial\n' span_id:613))}) (C {(test_atom)} {(head)} {(HEAD)} {(SQ (Token id:Id.Lit_Chars val:'*' span_id:623))}) (C {(test_atom)} {(tag)} {(refname)} {(refs/tags/testtag)}) (C {(test_atom)} {(tag)} {(refname) (Id.Lit_Other ':') (short)} {(testtag)}) (C {(test_atom)} {(tag)} {(upstream)} {(SQ )}) (C {(test_atom)} {(tag)} {(push)} {(SQ )}) (C {(test_atom)} {(tag)} {(objecttype)} {(tag)}) (C {(test_atom)} {(tag)} {(objectsize)} {(154)}) (C {(test_atom)} {(tag)} {(objectname)} { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:685) command_list: (command.CommandList children: [(C {(git)} {(rev-parse)} {(refs/tags/testtag)})] ) ) } ) (C {(test_atom)} {(tag)} {(objectname) (Id.Lit_Other ':') (short)} { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:701) command_list: (command.CommandList children: [(C {(git)} {(rev-parse)} {(--short)} {(refs/tags/testtag)})] ) ) } ) (C {(test_atom)} {(tag)} {(tree)} {(SQ )}) (C {(test_atom)} {(tag)} {(parent)} {(SQ )}) (C {(test_atom)} {(tag)} {(numparent)} {(SQ )}) (C {(test_atom)} {(tag)} {(object)} { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:744) command_list: (command.CommandList children: [(C {(git)} {(rev-parse)} {(refs/tags/testtag) (Id.Lit_Other '^') (0)})] ) ) } ) (C {(test_atom)} {(tag)} {(type)} {(SQ (Token id:Id.Lit_Chars val:commit span_id:761))}) (C {(test_atom)} {(tag)} {(SQ (Token id:Id.Lit_Chars val:'*objectname' span_id:769))} {(SQ (Token id:Id.Lit_Chars val:ea122842f48be4afb2d1fc6a4b96c05885ab7463 span_id:773))} ) (C {(test_atom)} {(tag)} {(SQ (Token id:Id.Lit_Chars val:'*objecttype' span_id:781))} {(SQ (Token id:Id.Lit_Chars val:commit span_id:785))} ) (C {(test_atom)} {(tag)} {(author)} {(SQ )}) (C {(test_atom)} {(tag)} {(authorname)} {(SQ )}) (C {(test_atom)} {(tag)} {(authoremail)} {(SQ )}) (C {(test_atom)} {(tag)} {(authordate)} {(SQ )}) (C {(test_atom)} {(tag)} {(committer)} {(SQ )}) (C {(test_atom)} {(tag)} {(committername)} {(SQ )}) (C {(test_atom)} {(tag)} {(committeremail)} {(SQ )}) (C {(test_atom)} {(tag)} {(committerdate)} {(SQ )}) (C {(test_atom)} {(tag)} {(tag)} {(SQ (Token id:Id.Lit_Chars val:testtag span_id:867))}) (C {(test_atom)} {(tag)} {(tagger)} { (SQ (Token id: Id.Lit_Chars val: 'C O Mitter <committer@example.com> 1151968725 +0200' span_id: 877 ) ) } ) (C {(test_atom)} {(tag)} {(taggername)} {(SQ (Token id:Id.Lit_Chars val:'C O Mitter' span_id:887))}) (C {(test_atom)} {(tag)} {(taggeremail)} {(SQ (Token id:Id.Lit_Chars val:'<committer@example.com>' span_id:897))} ) (C {(test_atom)} {(tag)} {(taggerdate)} {(SQ (Token id:Id.Lit_Chars val:'Tue Jul 4 01:18:45 2006 +0200' span_id:907))} ) (C {(test_atom)} {(tag)} {(creator)} { (SQ (Token id: Id.Lit_Chars val: 'C O Mitter <committer@example.com> 1151968725 +0200' span_id: 917 ) ) } ) (C {(test_atom)} {(tag)} {(creatordate)} {(SQ (Token id:Id.Lit_Chars val:'Tue Jul 4 01:18:45 2006 +0200' span_id:927))} ) (C {(test_atom)} {(tag)} {(subject)} {(SQ (Token id:Id.Lit_Chars val:'Tagging at 1151968727' span_id:937))} ) (C {(test_atom)} {(tag)} {(contents) (Id.Lit_Other ':') (subject)} {(SQ (Token id:Id.Lit_Chars val:'Tagging at 1151968727' span_id:949))} ) (C {(test_atom)} {(tag)} {(body)} {(SQ )}) (C {(test_atom)} {(tag)} {(contents) (Id.Lit_Other ':') (body)} {(SQ )}) (C {(test_atom)} {(tag)} {(contents) (Id.Lit_Other ':') (signature)} {(SQ )}) (C {(test_atom)} {(tag)} {(contents)} {(SQ (Token id:Id.Lit_Chars val:'Tagging at 1151968727\n' span_id:990))} ) (C {(test_atom)} {(tag)} {(HEAD)} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:1000))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check invalid atoms names are errors' span_id:1007))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1011) (Token id: Id.Lit_Chars val: '\ttest_must_fail git for-each-ref --format="%(INVALID)" refs/heads\n' span_id: 1012 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'arguments to :strip must be positive integers' span_id:1019))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1023) (Token id: Id.Lit_Chars val: '\ttest_must_fail git for-each-ref --format="%(refname:strip=0)" &&\n' span_id: 1024 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git for-each-ref --format="%(refname:strip=-1)" &&\n' span_id: 1025 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git for-each-ref --format="%(refname:strip=foo)"\n' span_id: 1026 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'stripping refnames too far gives an error' span_id:1033))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1037) (Token id: Id.Lit_Chars val: '\ttest_must_fail git for-each-ref --format="%(refname:strip=3)"\n' span_id: 1038 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Check format specifiers are ignored in naming date atoms' span_id: 1045 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1049) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format="%(authordate)" refs/heads &&\n' span_id: 1050 ) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format="%(authordate:default) %(authordate)" refs/heads &&\n' span_id: 1051 ) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format="%(authordate) %(authordate:default)" refs/heads &&\n' span_id: 1052 ) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format="%(authordate:default) %(authordate:default)" refs/heads\n' span_id: 1053 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check valid format specifiers for date fields' span_id:1060))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1064) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format="%(authordate:default)" refs/heads &&\n' span_id: 1065 ) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format="%(authordate:relative)" refs/heads &&\n' span_id: 1066 ) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format="%(authordate:short)" refs/heads &&\n' span_id: 1067 ) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format="%(authordate:local)" refs/heads &&\n' span_id: 1068 ) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format="%(authordate:iso8601)" refs/heads &&\n' span_id: 1069 ) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format="%(authordate:rfc2822)" refs/heads\n' span_id: 1070 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check invalid format specifiers are errors' span_id:1077))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1081) (Token id: Id.Lit_Chars val: '\ttest_must_fail git for-each-ref --format="%(authordate:INVALID)" refs/heads\n' span_id: 1082 ) ) } ) (command.ShFunction name: test_date 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] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:f) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [1094] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:committer_date) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [1100] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:author_date) op: assign_op.Equal rhs: {($ Id.VSub_Number '$3')} spids: [1106] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tagger_date) op: assign_op.Equal rhs: {($ Id.VSub_Number '$4')} spids: [1112] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1120) fd: -1 arg_word: {(expected)} ) (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:1123) fd: -1 here_begin: {(EOF)} here_end_span_id: 1137 stdin_parts: [ ("'refs/heads/master' '") ($ Id.VSub_DollarName '$committer_date') ("' '") ($ Id.VSub_DollarName '$author_date') ("'\n") ("'refs/tags/testtag' '") ($ Id.VSub_DollarName '$tagger_date') ("'\n") ] ) ] ) (command.Subshell command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(git)} {(for-each-ref)} {(--shell)} {(--format) (Id.Lit_Equals '=') (DQ ('%(refname) %(committerdate') (braced_var_sub token: (Token id:Id.VSub_Name val:f span_id:1155) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonPlus arg_word: {(':') ($ Id.VSub_DollarName '$f')} ) ) (') %(authordate') (braced_var_sub token: (Token id:Id.VSub_Name val:f span_id:1162) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonPlus arg_word: {(':') ($ Id.VSub_DollarName '$f')} ) ) (')') ) } {(refs/heads)} ) (C {(git)} {(for-each-ref)} {(--shell)} {(--format) (Id.Lit_Equals '=') (DQ ('%(refname) %(taggerdate') (braced_var_sub token: (Token id:Id.VSub_Name val:f span_id:1190) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonPlus arg_word: {(':') ($ Id.VSub_DollarName '$f')} ) ) (')') ) } {(refs/tags)} ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1205) fd: -1 arg_word: {(actual)} ) ] ) (C {(test_cmp)} {(expected)} {(actual)}) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check unformatted date fields output' span_id:1223))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1227) (Token id:Id.Lit_Chars val:'\ttest_date "" \\\n' span_id:1228) (Token id:Id.Lit_Chars val:'\t\t"Tue Jul 4 01:18:43 2006 +0200" \\\n' span_id:1229) (Token id: Id.Lit_Chars val: '\t\t"Tue Jul 4 01:18:44 2006 +0200" \\\n' span_id: 1230 ) (Token id:Id.Lit_Chars val:'\t\t"Tue Jul 4 01:18:45 2006 +0200"\n' span_id:1231) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Check format "default" formatted date fields output' span_id: 1238 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1242) (Token id:Id.Lit_Chars val:'\ttest_date default \\\n' span_id:1243) (Token id:Id.Lit_Chars val:'\t\t"Tue Jul 4 01:18:43 2006 +0200" \\\n' span_id:1244) (Token id: Id.Lit_Chars val: '\t\t"Tue Jul 4 01:18:44 2006 +0200" \\\n' span_id: 1245 ) (Token id:Id.Lit_Chars val:'\t\t"Tue Jul 4 01:18:45 2006 +0200"\n' span_id:1246) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Check format "default-local" date fields output' span_id: 1253 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1257) (Token id: Id.Lit_Chars val: '\ttest_date default-local "Mon Jul 3 23:18:43 2006" "Mon Jul 3 23:18:44 2006" "Mon Jul 3 23:18:45 2006"\n' span_id: 1258 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check format "relative" date fields output' span_id:1277))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1281) (Token id:Id.Lit_Chars val:'\tf=relative &&\n' span_id:1282) (Token id: Id.Lit_Chars val: '\t(git for-each-ref --shell --format="%(refname) %(committerdate:$f) %(authordate:$f)" refs/heads &&\n' span_id: 1283 ) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --shell --format="%(refname) %(taggerdate:$f)" refs/tags) >actual\n' span_id: 1284 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Check format "relative-local" date fields output' span_id: 1294 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1298) (Token id:Id.Lit_Chars val:'\ttest_date relative-local \\\n' span_id:1299) (Token id: Id.Lit_Chars val: '\t\t"$(git for-each-ref --format="%(committerdate:relative)" refs/heads)" \\\n' span_id: 1300 ) (Token id: Id.Lit_Chars val: '\t\t"$(git for-each-ref --format="%(authordate:relative)" refs/heads)" \\\n' span_id: 1301 ) (Token id: Id.Lit_Chars val: '\t\t"$(git for-each-ref --format="%(taggerdate:relative)" refs/tags)"\n' span_id: 1302 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check format "short" date fields output' span_id:1309))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1313) (Token id: Id.Lit_Chars val: '\ttest_date short 2006-07-04 2006-07-04 2006-07-04\n' span_id: 1314 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check format "short-local" date fields output' span_id:1321))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1325) (Token id: Id.Lit_Chars val: '\ttest_date short-local 2006-07-03 2006-07-03 2006-07-03\n' span_id: 1326 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check format "local" date fields output' span_id:1333))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1337) (Token id:Id.Lit_Chars val:'\ttest_date local \\\n' span_id:1338) (Token id:Id.Lit_Chars val:'\t\t"Mon Jul 3 23:18:43 2006" \\\n' span_id:1339) (Token id:Id.Lit_Chars val:'\t\t"Mon Jul 3 23:18:44 2006" \\\n' span_id:1340) (Token id:Id.Lit_Chars val:'\t\t"Mon Jul 3 23:18:45 2006"\n' span_id:1341) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check format "iso8601" date fields output' span_id:1348))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1352) (Token id:Id.Lit_Chars val:'\ttest_date iso8601 \\\n' span_id:1353) (Token id:Id.Lit_Chars val:'\t\t"2006-07-04 01:18:43 +0200" \\\n' span_id:1354) (Token id:Id.Lit_Chars val:'\t\t"2006-07-04 01:18:44 +0200" \\\n' span_id:1355) (Token id:Id.Lit_Chars val:'\t\t"2006-07-04 01:18:45 +0200"\n' span_id:1356) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Check format "iso8601-local" date fields output' span_id: 1363 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1367) (Token id: Id.Lit_Chars val: '\ttest_date iso8601-local "2006-07-03 23:18:43 +0000" "2006-07-03 23:18:44 +0000" "2006-07-03 23:18:45 +0000"\n' span_id: 1368 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check format "rfc2822" date fields output' span_id:1375))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1379) (Token id:Id.Lit_Chars val:'\ttest_date rfc2822 \\\n' span_id:1380) (Token id:Id.Lit_Chars val:'\t\t"Tue, 4 Jul 2006 01:18:43 +0200" \\\n' span_id:1381) (Token id: Id.Lit_Chars val: '\t\t"Tue, 4 Jul 2006 01:18:44 +0200" \\\n' span_id: 1382 ) (Token id:Id.Lit_Chars val:'\t\t"Tue, 4 Jul 2006 01:18:45 +0200"\n' span_id:1383) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Check format "rfc2822-local" date fields output' span_id: 1390 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1394) (Token id: Id.Lit_Chars val: '\ttest_date rfc2822-local "Mon, 3 Jul 2006 23:18:43 +0000" "Mon, 3 Jul 2006 23:18:44 +0000" "Mon, 3 Jul 2006 23:18:45 +0000"\n' span_id: 1395 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check format "raw" date fields output' span_id:1402))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1406) (Token id: Id.Lit_Chars val: '\ttest_date raw "1151968723 +0200" "1151968724 +0200" "1151968725 +0200"\n' span_id: 1407 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check format "raw-local" date fields output' span_id:1414))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1418) (Token id: Id.Lit_Chars val: '\ttest_date raw-local "1151968723 +0000" "1151968724 +0000" "1151968725 +0000"\n' span_id: 1419 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check format of strftime date fields' span_id:1426))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1430) (Token id: Id.Lit_Chars val: '\techo "my date is 2006-07-04" >expected &&\n' span_id: 1431 ) (Token id:Id.Lit_Chars val:'\tgit for-each-ref \\\n' span_id:1432) (Token id: Id.Lit_Chars val: '\t --format="%(authordate:format:my date is %Y-%m-%d)" \\\n' span_id: 1433 ) (Token id:Id.Lit_Chars val:'\t refs/heads >actual &&\n' span_id:1434) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1435) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check format of strftime-local date fields' span_id:1442))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1446) (Token id: Id.Lit_Chars val: '\techo "my date is 2006-07-03" >expected &&\n' span_id: 1447 ) (Token id:Id.Lit_Chars val:'\tgit for-each-ref \\\n' span_id:1448) (Token id: Id.Lit_Chars val: '\t --format="%(authordate:format-local:my date is %Y-%m-%d)" \\\n' span_id: 1449 ) (Token id:Id.Lit_Chars val:'\t refs/heads >actual &&\n' span_id:1450) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1451) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'exercise strftime with odd fields' span_id:1458))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1462) (Token id:Id.Lit_Chars val:'\techo >expected &&\n' span_id:1463) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format="%(authordate:format:)" refs/heads >actual &&\n' span_id: 1464 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual &&\n' span_id:1465) (Token id: Id.Lit_Chars val: '\tlong="long format -- $_z40$_z40$_z40$_z40$_z40$_z40$_z40" &&\n' span_id: 1466 ) (Token id:Id.Lit_Chars val:'\techo $long >expected &&\n' span_id:1467) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format="%(authordate:format:$long)" refs/heads >actual &&\n' span_id: 1468 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1469) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1475) fd: -1 arg_word: {(expected)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1478) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1479)) (OF) } here_end_span_id: 1485 stdin_parts: [ ('refs/heads/master\n') ('refs/remotes/origin/master\n') ('refs/tags/testtag\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Verify ascending sort' span_id:1490))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1494) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format="%(refname)" --sort=refname >actual &&\n' span_id: 1495 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1496) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1503) fd: -1 arg_word: {(expected)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1506) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1507)) (OF) } here_end_span_id: 1513 stdin_parts: [ ('refs/tags/testtag\n') ('refs/remotes/origin/master\n') ('refs/heads/master\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Verify descending sort' span_id:1518))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1522) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format="%(refname)" --sort=-refname >actual &&\n' span_id: 1523 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1524) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1530) fd: -1 arg_word: {(expected)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1533) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1534)) (OF) } here_end_span_id: 1540 stdin_parts: [ ("'refs/heads/master'\n") ("'refs/remotes/origin/master'\n") ("'refs/tags/testtag'\n") ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Quoting style: shell' span_id:1545))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1549) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --shell --format="%(refname)" >actual &&\n' span_id: 1550 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1551) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Quoting style: perl' span_id:1558))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1562) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --perl --format="%(refname)" >actual &&\n' span_id: 1563 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1564) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Quoting style: python' span_id:1571))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1575) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --python --format="%(refname)" >actual &&\n' span_id: 1576 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1577) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1583) fd: -1 arg_word: {(expected)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1586) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1587)) (OF) } here_end_span_id: 1593 stdin_parts: [ ('"refs/heads/master"\n') ('"refs/remotes/origin/master"\n') ('"refs/tags/testtag"\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Quoting style: tcl' span_id:1598))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1602) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --tcl --format="%(refname)" >actual &&\n' span_id: 1603 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1604) ) } ) (command.ForEach iter_name: i iter_words: [ {(DQ ('--perl --shell'))} {(DQ ('-s --python'))} {(DQ ('--python --tcl'))} {(DQ ('--tcl --perl'))} ] do_arg_iter: F body: (command.DoGroup children: [ (C {(test_expect_success)} {(DQ ('more than one quoting style: ') ($ Id.VSub_DollarName '$i'))} { (DQ ('\n') ('\t\tgit for-each-ref ') ($ Id.VSub_DollarName '$i') (' 2>&1 | (read line &&\n') ('\t\tcase ') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:1647)) ('line in\n') ('\t\t') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:1650)) ('error: more than one quoting style') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:1652)) ('*) : happy;;\n') ('\t\t*) false\n') ('\t\tesac)\n') ('\t') ) } ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup for upstream:track[short]' span_id:1665))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1669) (Token id:Id.Lit_Chars val:'\ttest_commit two\n' span_id:1670) ) } ) (C {(test_atom)} {(head)} {(upstream) (Id.Lit_Other ':') (track)} {(SQ (Token id:Id.Lit_Chars val:'[ahead 1]' span_id:1683))} ) (C {(test_atom)} {(head)} {(upstream) (Id.Lit_Other ':') (trackshort)} {(SQ (Token id:Id.Lit_Chars val:'>' span_id:1695))} ) (C {(test_atom)} {(head)} {(push) (Id.Lit_Other ':') (track)} {(SQ (Token id:Id.Lit_Chars val:'[ahead 1]' span_id:1707))} ) (C {(test_atom)} {(head)} {(push) (Id.Lit_Other ':') (trackshort)} {(SQ (Token id:Id.Lit_Chars val:'>' span_id:1719))} ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Check that :track[short] cannot be used with other atoms' span_id: 1726 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1730) (Token id: Id.Lit_Chars val: '\ttest_must_fail git for-each-ref --format="%(refname:track)" 2>/dev/null &&\n' span_id: 1731 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git for-each-ref --format="%(refname:trackshort)" 2>/dev/null\n' span_id: 1732 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Check that :track[short] works when upstream is invalid' span_id: 1739 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1743) (Token id:Id.Lit_Chars val:'\tcat >expected <<-\\EOF &&\n' span_id:1744) (Token id:Id.Lit_Chars val:'\n' span_id:1745) (Token id:Id.Lit_Chars val:'\n' span_id:1746) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1747) (Token id: Id.Lit_Chars val: '\ttest_when_finished "git config branch.master.merge refs/heads/master" &&\n' span_id: 1748 ) (Token id: Id.Lit_Chars val: '\tgit config branch.master.merge refs/heads/does-not-exist &&\n' span_id: 1749 ) (Token id:Id.Lit_Chars val:'\tgit for-each-ref \\\n' span_id:1750) (Token id: Id.Lit_Chars val: '\t\t--format="%(upstream:track)$LF%(upstream:trackshort)" \\\n' span_id: 1751 ) (Token id:Id.Lit_Chars val:'\t\trefs/heads >actual &&\n' span_id:1752) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1753) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check for invalid refname format' span_id:1760))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1764) (Token id: Id.Lit_Chars val: '\ttest_must_fail git for-each-ref --format="%(refname:INVALID)"\n' span_id: 1765 ) ) } ) (command.ShFunction name: get_color body: (command.BraceGroup children: [ (C {(git)} {(config)} {(--get-color)} {(no.such.slot)} {(DQ ($ Id.VSub_Number '$1'))}) ] ) ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1794) fd: -1 arg_word: {(expected)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1797) fd: -1 here_begin: {(EOF)} here_end_span_id: 1889 stdin_parts: [ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1800) command_list: (command.CommandList children: [(C {(git)} {(rev-parse)} {(--short)} {(refs/heads/master)})] ) ) (' ') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1810) command_list: (command.CommandList children:[(C {(get_color)} {(green)})]) ) (master) (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1816) command_list: (command.CommandList children:[(C {(get_color)} {(reset)})]) ) ('\n') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1822) command_list: (command.CommandList children: [(C {(git)} {(rev-parse)} {(--short)} {(refs/remotes/origin/master)})] ) ) (' ') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1832) command_list: (command.CommandList children:[(C {(get_color)} {(green)})]) ) (origin/master) (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1838) command_list: (command.CommandList children:[(C {(get_color)} {(reset)})]) ) ('\n') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1844) command_list: (command.CommandList children: [(C {(git)} {(rev-parse)} {(--short)} {(refs/tags/testtag)})] ) ) (' ') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1854) command_list: (command.CommandList children:[(C {(get_color)} {(green)})]) ) (testtag) (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1860) command_list: (command.CommandList children:[(C {(get_color)} {(reset)})]) ) ('\n') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1866) command_list: (command.CommandList children: [(C {(git)} {(rev-parse)} {(--short)} {(refs/tags/two)})] ) ) (' ') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1876) command_list: (command.CommandList children:[(C {(get_color)} {(green)})]) ) (two) (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1882) command_list: (command.CommandList children:[(C {(get_color)} {(reset)})]) ) ('\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check %(color:...) ' span_id:1894))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1898) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format="%(objectname:short) %(color:green)%(refname:short)" >actual &&\n' span_id: 1899 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1900) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1906) fd: -1 arg_word: {(expected)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1909) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1910)) (OF) } here_end_span_id: 1915 stdin_parts: [('heads/master\n') ('tags/master\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check ambiguous head and tag refs (strict)' span_id:1920))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1924) (Token id: Id.Lit_Chars val: '\tgit config --bool core.warnambiguousrefs true &&\n' span_id: 1925 ) (Token id:Id.Lit_Chars val:'\tgit checkout -b newtag &&\n' span_id:1926) (Token id:Id.Lit_Chars val:'\techo "Using $datestamp" > one &&\n' span_id:1927) (Token id:Id.Lit_Chars val:'\tgit add one &&\n' span_id:1928) (Token id:Id.Lit_Chars val:'\tgit commit -m "Branch" &&\n' span_id:1929) (Token id:Id.Lit_Chars val:'\tsetdate_and_increment &&\n' span_id:1930) (Token id: Id.Lit_Chars val: '\tgit tag -m "Tagging at $datestamp" master &&\n' span_id: 1931 ) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format "%(refname:short)" refs/heads/master refs/tags/master >actual &&\n' span_id: 1932 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1933) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1939) fd: -1 arg_word: {(expected)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1942) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1943)) (OF) } here_end_span_id: 1948 stdin_parts: [('heads/master\n') ('master\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check ambiguous head and tag refs (loose)' span_id:1953))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1957) (Token id: Id.Lit_Chars val: '\tgit config --bool core.warnambiguousrefs false &&\n' span_id: 1958 ) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format "%(refname:short)" refs/heads/master refs/tags/master >actual &&\n' span_id: 1959 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1960) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1966) fd: -1 arg_word: {(expected)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1969) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1970)) (OF) } here_end_span_id: 1975 stdin_parts: [('heads/ambiguous\n') ('ambiguous\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Check ambiguous head and tag refs II (loose)' span_id:1980))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1984) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:1985) (Token id:Id.Lit_Chars val:'\tgit tag ambiguous testtag^0 &&\n' span_id:1986) (Token id:Id.Lit_Chars val:'\tgit branch ambiguous testtag^0 &&\n' span_id:1987) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format "%(refname:short)" refs/heads/ambiguous refs/tags/ambiguous >actual &&\n' span_id: 1988 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1989) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'an unusual tag with an incomplete line' span_id:1996))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2000) (Token id:Id.Lit_Chars val:'\n' span_id:2001) (Token id:Id.Lit_Chars val:'\tgit tag -m "bogo" bogo &&\n' span_id:2002) (Token id:Id.Lit_Chars val:'\tbogo=$(git cat-file tag bogo) &&\n' span_id:2003) (Token id:Id.Lit_Chars val:'\tbogo=$(printf "%s" "$bogo" | git mktag) &&\n' span_id:2004) (Token id:Id.Lit_Chars val:'\tgit tag -f bogo "$bogo" &&\n' span_id:2005) (Token id:Id.Lit_Chars val:'\tgit for-each-ref --format "%(body)" refs/tags/bogo\n' span_id:2006) (Token id:Id.Lit_Chars val:'\n' span_id:2007) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'create tag with subject and body content' span_id:2014))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2018) (Token id:Id.Lit_Chars val:'\tcat >>msg <<-\\EOF &&\n' span_id:2019) (Token id:Id.Lit_Chars val:'\t\tthe subject line\n' span_id:2020) (Token id:Id.Lit_Chars val:'\n' span_id:2021) (Token id:Id.Lit_Chars val:'\t\tfirst body line\n' span_id:2022) (Token id:Id.Lit_Chars val:'\t\tsecond body line\n' span_id:2023) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2024) (Token id:Id.Lit_Chars val:'\tgit tag -F msg subject-body\n' span_id:2025) ) } ) (C {(test_atom)} {(refs/tags/subject-body)} {(subject)} {(SQ (Token id:Id.Lit_Chars val:'the subject line' span_id:2035))} ) (C {(test_atom)} {(refs/tags/subject-body)} {(body)} { (SQ (Token id:Id.Lit_Chars val:'first body line\n' span_id:2045) (Token id:Id.Lit_Chars val:'second body line\n' span_id:2046) ) } ) (C {(test_atom)} {(refs/tags/subject-body)} {(contents)} { (SQ (Token id:Id.Lit_Chars val:'the subject line\n' span_id:2056) (Token id:Id.Lit_Chars val:'\n' span_id:2057) (Token id:Id.Lit_Chars val:'first body line\n' span_id:2058) (Token id:Id.Lit_Chars val:'second body line\n' span_id:2059) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'create tag with multiline subject' span_id:2066))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2070) (Token id:Id.Lit_Chars val:'\tcat >msg <<-\\EOF &&\n' span_id:2071) (Token id:Id.Lit_Chars val:'\t\tfirst subject line\n' span_id:2072) (Token id:Id.Lit_Chars val:'\t\tsecond subject line\n' span_id:2073) (Token id:Id.Lit_Chars val:'\n' span_id:2074) (Token id:Id.Lit_Chars val:'\t\tfirst body line\n' span_id:2075) (Token id:Id.Lit_Chars val:'\t\tsecond body line\n' span_id:2076) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2077) (Token id:Id.Lit_Chars val:'\tgit tag -F msg multiline\n' span_id:2078) ) } ) (C {(test_atom)} {(refs/tags/multiline)} {(subject)} {(SQ (Token id:Id.Lit_Chars val:'first subject line second subject line' span_id:2088))} ) (C {(test_atom)} {(refs/tags/multiline)} {(contents) (Id.Lit_Other ':') (subject)} {(SQ (Token id:Id.Lit_Chars val:'first subject line second subject line' span_id:2100))} ) (C {(test_atom)} {(refs/tags/multiline)} {(body)} { (SQ (Token id:Id.Lit_Chars val:'first body line\n' span_id:2110) (Token id:Id.Lit_Chars val:'second body line\n' span_id:2111) ) } ) (C {(test_atom)} {(refs/tags/multiline)} {(contents) (Id.Lit_Other ':') (body)} { (SQ (Token id:Id.Lit_Chars val:'first body line\n' span_id:2123) (Token id:Id.Lit_Chars val:'second body line\n' span_id:2124) ) } ) (C {(test_atom)} {(refs/tags/multiline)} {(contents) (Id.Lit_Other ':') (signature)} {(SQ )}) (C {(test_atom)} {(refs/tags/multiline)} {(contents)} { (SQ (Token id:Id.Lit_Chars val:'first subject line\n' span_id:2145) (Token id:Id.Lit_Chars val:'second subject line\n' span_id:2146) (Token id:Id.Lit_Chars val:'\n' span_id:2147) (Token id:Id.Lit_Chars val:'first body line\n' span_id:2148) (Token id:Id.Lit_Chars val:'second body line\n' span_id:2149) ) } ) (C {(test_expect_success)} {(GPG)} {(SQ (Token id:Id.Lit_Chars val:'create signed tags' span_id:2158))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2162) (Token id:Id.Lit_Chars val:'\tgit tag -s -m "" signed-empty &&\n' span_id:2163) (Token id:Id.Lit_Chars val:'\tgit tag -s -m "subject line" signed-short &&\n' span_id:2164) (Token id:Id.Lit_Chars val:'\tcat >msg <<-\\EOF &&\n' span_id:2165) (Token id:Id.Lit_Chars val:'\tsubject line\n' span_id:2166) (Token id:Id.Lit_Chars val:'\n' span_id:2167) (Token id:Id.Lit_Chars val:'\tbody contents\n' span_id:2168) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2169) (Token id:Id.Lit_Chars val:'\tgit tag -s -F msg signed-long\n' span_id:2170) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:sig) op: assign_op.Equal rhs: { (SQ (Token id:Id.Lit_Chars val:'-----BEGIN PGP SIGNATURE-----\n' span_id:2176) (Token id: Id.Lit_Chars val: '-----END PGP SIGNATURE-----\n' span_id: 2177 ) ) } spids: [2174] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PREREQ) op: assign_op.Equal rhs: {(GPG)} spids: [2181] ) ] ) (C {(test_atom)} {(refs/tags/signed-empty)} {(subject)} {(SQ )}) (C {(test_atom)} {(refs/tags/signed-empty)} {(contents) (Id.Lit_Other ':') (subject)} {(SQ )}) (C {(test_atom)} {(refs/tags/signed-empty)} {(body)} {(DQ ($ Id.VSub_DollarName '$sig'))}) (C {(test_atom)} {(refs/tags/signed-empty)} {(contents) (Id.Lit_Other ':') (body)} {(SQ )}) (C {(test_atom)} {(refs/tags/signed-empty)} {(contents) (Id.Lit_Other ':') (signature)} {(DQ ($ Id.VSub_DollarName '$sig'))} ) (C {(test_atom)} {(refs/tags/signed-empty)} {(contents)} {(DQ ($ Id.VSub_DollarName '$sig'))}) (C {(test_atom)} {(refs/tags/signed-short)} {(subject)} {(SQ (Token id:Id.Lit_Chars val:'subject line' span_id:2255))} ) (C {(test_atom)} {(refs/tags/signed-short)} {(contents) (Id.Lit_Other ':') (subject)} {(SQ (Token id:Id.Lit_Chars val:'subject line' span_id:2267))} ) (C {(test_atom)} {(refs/tags/signed-short)} {(body)} {(DQ ($ Id.VSub_DollarName '$sig'))}) (C {(test_atom)} {(refs/tags/signed-short)} {(contents) (Id.Lit_Other ':') (body)} {(SQ )}) (C {(test_atom)} {(refs/tags/signed-short)} {(contents) (Id.Lit_Other ':') (signature)} {(DQ ($ Id.VSub_DollarName '$sig'))} ) (C {(test_atom)} {(refs/tags/signed-short)} {(contents)} {(DQ ('subject line\n') ($ Id.VSub_DollarName '$sig'))} ) (C {(test_atom)} {(refs/tags/signed-long)} {(subject)} {(SQ (Token id:Id.Lit_Chars val:'subject line' span_id:2322))} ) (C {(test_atom)} {(refs/tags/signed-long)} {(contents) (Id.Lit_Other ':') (subject)} {(SQ (Token id:Id.Lit_Chars val:'subject line' span_id:2334))} ) (C {(test_atom)} {(refs/tags/signed-long)} {(body)} {(DQ ('body contents\n') ($ Id.VSub_DollarName '$sig'))} ) (C {(test_atom)} {(refs/tags/signed-long)} {(contents) (Id.Lit_Other ':') (body)} {(SQ (Token id:Id.Lit_Chars val:'body contents\n' span_id:2357))} ) (C {(test_atom)} {(refs/tags/signed-long)} {(contents) (Id.Lit_Other ':') (signature)} {(DQ ($ Id.VSub_DollarName '$sig'))} ) (C {(test_atom)} {(refs/tags/signed-long)} {(contents)} {(DQ ('subject line\n') ('\n') ('body contents\n') ($ Id.VSub_DollarName '$sig'))} ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2388) fd: -1 arg_word: {(expected)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:2391) fd: -1 here_begin: {(EOF)} here_end_span_id: 2411 stdin_parts: [ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2394) command_list: (command.CommandList children: [(C {(git)} {(rev-parse)} {(refs/tags/bogo)})] ) ) (' <committer@example.com> refs/tags/bogo\n') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2402) command_list: (command.CommandList children: [(C {(git)} {(rev-parse)} {(refs/tags/master)})] ) ) (' <committer@example.com> refs/tags/master\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Verify sort with multiple keys' span_id:2416))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2420) (Token id: Id.Lit_Chars val: '\tgit for-each-ref --format="%(objectname) %(taggeremail) %(refname)" --sort=objectname --sort=taggeremail \\\n' span_id: 2421 ) (Token id:Id.Lit_Chars val:'\t\trefs/tags/bogo refs/tags/master > actual &&\n' span_id:2422) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2423) ) } ) (C {(test_done)}) ] )