(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: 'Revision traversal vs grafts and path limiter' span_id: 6 ) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:20) (Token id:Id.Lit_Chars val:'\tmkdir subdir &&\n' span_id:21) (Token id:Id.Lit_Chars val:'\techo >fileA fileA &&\n' span_id:22) (Token id:Id.Lit_Chars val:'\techo >subdir/fileB fileB &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\tgit add fileA subdir/fileB &&\n' span_id:24) (Token id: Id.Lit_Chars val: '\tgit commit -a -m "Initial in one history." &&\n' span_id: 25 ) (Token id:Id.Lit_Chars val:'\tA0=$(git rev-parse --verify HEAD) &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\n' span_id:27) (Token id:Id.Lit_Chars val:'\techo >fileA fileA modified &&\n' span_id:28) (Token id: Id.Lit_Chars val: '\tgit commit -a -m "Second in one history." &&\n' span_id: 29 ) (Token id:Id.Lit_Chars val:'\tA1=$(git rev-parse --verify HEAD) &&\n' span_id:30) (Token id:Id.Lit_Chars val:'\n' span_id:31) (Token id:Id.Lit_Chars val:'\techo >subdir/fileB fileB modified &&\n' span_id:32) (Token id: Id.Lit_Chars val: '\tgit commit -a -m "Third in one history." &&\n' span_id: 33 ) (Token id:Id.Lit_Chars val:'\tA2=$(git rev-parse --verify HEAD) &&\n' span_id:34) (Token id:Id.Lit_Chars val:'\n' span_id:35) (Token id:Id.Lit_Chars val:'\trm -f .git/refs/heads/master .git/index &&\n' span_id:36) (Token id:Id.Lit_Chars val:'\n' span_id:37) (Token id:Id.Lit_Chars val:'\techo >fileA fileA again &&\n' span_id:38) (Token id:Id.Lit_Chars val:'\techo >subdir/fileB fileB again &&\n' span_id:39) (Token id:Id.Lit_Chars val:'\tgit add fileA subdir/fileB &&\n' span_id:40) (Token id: Id.Lit_Chars val: '\tgit commit -a -m "Initial in alternate history." &&\n' span_id: 41 ) (Token id:Id.Lit_Chars val:'\tB0=$(git rev-parse --verify HEAD) &&\n' span_id:42) (Token id:Id.Lit_Chars val:'\n' span_id:43) (Token id:Id.Lit_Chars val:'\techo >fileA fileA modified in alternate history &&\n' span_id:44) (Token id: Id.Lit_Chars val: '\tgit commit -a -m "Second in alternate history." &&\n' span_id: 45 ) (Token id:Id.Lit_Chars val:'\tB1=$(git rev-parse --verify HEAD) &&\n' span_id:46) (Token id:Id.Lit_Chars val:'\n' span_id:47) (Token id: Id.Lit_Chars val: '\techo >subdir/fileB fileB modified in alternate history &&\n' span_id: 48 ) (Token id:Id.Lit_Chars val:'\tgit commit -a -m "Third in alternate history." &&\n' span_id:49) (Token id:Id.Lit_Chars val:'\tB2=$(git rev-parse --verify HEAD) &&\n' span_id:50) (Token id:Id.Lit_Chars val:'\t: done\n' span_id:51) ) } ) (command.ShFunction name: check body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:type) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [63] ) ] ) (C {(shift)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:arg) op: assign_op.Equal rhs: (word.Empty) spids: [71] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:which) op: assign_op.Equal rhs: {(arg)} spids: [74] ) ] ) (C {(rm)} {(-f)} {(test.expect)}) (command.ForEach iter_name: a do_arg_iter: T body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ (z) ($ Id.VSub_DollarName '$a'))} {(Id.Lit_Equals '=')} {(z--)} ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:which) op: assign_op.Equal rhs: {(expect)} spids: [110] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:child) op: assign_op.Equal rhs: (word.Empty) spids: [114] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:117) ) ] spids: [93 107] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$which'))} {(Id.Lit_Equals '=')} {(arg)} ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:arg) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$arg') ($ Id.VSub_DollarName '$a') (' ') ) } spids: [139] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:147) ) ] spids: [123 136] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$type'))} {(Id.Lit_Equals '=')} {(basic)} ) ] action: [(C {(echo)} {(DQ ($ Id.VSub_DollarName '$a'))})] spids: [153 166] ) ] else_action: [ (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ (z) ($ Id.VSub_DollarName '$child'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(z)} ) ] action: [ (C {(echo)} { (DQ ($ Id.VSub_DollarName '$child') (' ') ($ Id.VSub_DollarName '$a') ) } ) ] spids: [179 194] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:child) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$a'))} spids: [209] ) ] ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:220) fd: -1 arg_word: {(test.expect)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$type'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(basic)} ) (C {(test)} {(DQ (z) ($ Id.VSub_DollarName '$child'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(z)} ) ] ) ] action: [ (command.Simple words: [{(echo)} {($ Id.VSub_DollarName '$child')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:257) fd: -1 arg_word: {(test.expect)} ) ] ) ] spids: [224 252] ) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {($ Id.VSub_DollarName '$type')} {(Id.Lit_Equals '=')} {(basic)})] action: [ (command.Simple words: [{(git)} {(rev-list)} {($ Id.VSub_DollarName '$arg')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:286) fd: -1 arg_word: {(test.actual)} ) ] ) ] spids: [266 277] ) (if_arm cond: [ (C {(test)} {($ Id.VSub_DollarName '$type')} {(Id.Lit_Equals '=')} {(parents)}) ] action: [ (command.Simple words: [{(git)} {(rev-list)} {(--parents)} {($ Id.VSub_DollarName '$arg')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:312) fd: -1 arg_word: {(test.actual)} ) ] ) ] spids: [290 301] ) (if_arm cond: [ (C {(test)} {($ Id.VSub_DollarName '$type')} {(Id.Lit_Equals '=')} {(parents-raw)}) ] action: [ (command.Pipeline children: [ (C {(git)} {(rev-list)} {(--parents)} {(--pretty) (Id.Lit_Equals '=') (raw)} {($ Id.VSub_DollarName '$arg')} ) (command.Simple words: [ {(sed)} {(-n)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/^commit //p' span_id:352))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:355) fd: -1 arg_word: {(test.actual)} ) ] ) ] negated: F ) ] spids: [316 327] ) ] ) (C {(test_cmp)} {(test.expect)} {(test.actual)}) ] ) ) (command.ForEach iter_name: type iter_words: [{(basic)} {(parents)} {(parents-raw)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'without grafts' span_id:389))} { (DQ ('\n') ('\t\trm -f .git/info/grafts &&\n') ('\t\tcheck ') ($ Id.VSub_DollarName '$type') (' ') ($ Id.VSub_DollarName '$B2') (' -- ') ($ Id.VSub_DollarName '$B2') (' ') ($ Id.VSub_DollarName '$B1') (' ') ($ Id.VSub_DollarName '$B0') ('\n') ('\t') ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'with grafts' span_id:414))} { (DQ ('\n') ("\t\techo '") ($ Id.VSub_DollarName '$B0') (' ') ($ Id.VSub_DollarName '$A2') ("' >.git/info/grafts &&\n") ('\t\tcheck ') ($ Id.VSub_DollarName '$type') (' ') ($ Id.VSub_DollarName '$B2') (' -- ') ($ Id.VSub_DollarName '$B2') (' ') ($ Id.VSub_DollarName '$B1') (' ') ($ Id.VSub_DollarName '$B0') (' ') ($ Id.VSub_DollarName '$A2') (' ') ($ Id.VSub_DollarName '$A1') (' ') ($ Id.VSub_DollarName '$A0') ('\n') ('\t') ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'without grafts, with pathlimit' span_id:449))} { (DQ ('\n') ('\t\trm -f .git/info/grafts &&\n') ('\t\tcheck ') ($ Id.VSub_DollarName '$type') (' ') ($ Id.VSub_DollarName '$B2') (' subdir -- ') ($ Id.VSub_DollarName '$B2') (' ') ($ Id.VSub_DollarName '$B0') ('\n') ('\t') ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'with grafts, with pathlimit' span_id:472))} { (DQ ('\n') ("\t\techo '") ($ Id.VSub_DollarName '$B0') (' ') ($ Id.VSub_DollarName '$A2') ("' >.git/info/grafts &&\n") ('\t\tcheck ') ($ Id.VSub_DollarName '$type') (' ') ($ Id.VSub_DollarName '$B2') (' subdir -- ') ($ Id.VSub_DollarName '$B2') (' ') ($ Id.VSub_DollarName '$B0') (' ') ($ Id.VSub_DollarName '$A2') (' ') ($ Id.VSub_DollarName '$A0') ('\n') ('\t') ) } ) ] ) ) (C {(test_done)}) ] )