(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:'fetch/push involving alternates' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: count_objects body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:loose) op: assign_op.Equal rhs: {(0)} spids: [22] ) (assign_pair lhs: (sh_lhs_expr.Name name:inpack) op: assign_op.Equal rhs: {(0)} spids: [25] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(eval)} { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:32) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(git)} {(count-objects)} {(-v)}) (C {(sed)} {(-n)} {(-e)} { (SQ (Token id: Id.Lit_Chars val: 's/^count: \\(.*\\)/loose=\\1/p' span_id: 51 ) ) } {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/^in-pack: \\(.*\\)/inpack=\\1/p' span_id:59))} ) ] negated: F ) ] ) ) ) } ) (C {(echo)} { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$loose')}) right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$inpack')}) ) ) } ) ] ) ] ) ) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:91) (Token id:Id.Lit_Chars val:'\t(\n' span_id:92) (Token id:Id.Lit_Chars val:'\t\tgit init original &&\n' span_id:93) (Token id:Id.Lit_Chars val:'\t\tcd original &&\n' span_id:94) (Token id:Id.Lit_Chars val:'\t\ti=0 &&\n' span_id:95) (Token id:Id.Lit_Chars val:'\t\twhile test $i -le 100\n' span_id:96) (Token id:Id.Lit_Chars val:'\t\tdo\n' span_id:97) (Token id:Id.Lit_Chars val:'\t\t\techo "$i" >count &&\n' span_id:98) (Token id:Id.Lit_Chars val:'\t\t\tgit add count &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\t\t\tgit commit -m "$i" || exit\n' span_id:100) (Token id:Id.Lit_Chars val:'\t\t\ti=$(($i + 1))\n' span_id:101) (Token id:Id.Lit_Chars val:'\t\tdone\n' span_id:102) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:103) (Token id:Id.Lit_Chars val:'\t(\n' span_id:104) (Token id: Id.Lit_Chars val: '\t\tgit clone --reference=original "file://$(pwd)/original" one &&\n' span_id: 105 ) (Token id:Id.Lit_Chars val:'\t\tcd one &&\n' span_id:106) (Token id:Id.Lit_Chars val:'\t\techo Z >count &&\n' span_id:107) (Token id:Id.Lit_Chars val:'\t\tgit add count &&\n' span_id:108) (Token id:Id.Lit_Chars val:'\t\tgit commit -m Z &&\n' span_id:109) (Token id:Id.Lit_Chars val:'\t\tcount_objects >../one.count\n' span_id:110) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:111) (Token id:Id.Lit_Chars val:'\tA=$(pwd)/original/.git/objects &&\n' span_id:112) (Token id:Id.Lit_Chars val:'\tgit init receiver &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\techo "$A" >receiver/.git/objects/info/alternates &&\n' span_id:114) (Token id:Id.Lit_Chars val:'\tgit init fetcher &&\n' span_id:115) (Token id:Id.Lit_Chars val:'\techo "$A" >fetcher/.git/objects/info/alternates\n' span_id:116) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'pushing into a repository with the same alternate' span_id: 123 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:127) (Token id:Id.Lit_Chars val:'\t(\n' span_id:128) (Token id:Id.Lit_Chars val:'\t\tcd one &&\n' span_id:129) (Token id: Id.Lit_Chars val: '\t\tgit push ../receiver master:refs/heads/it\n' span_id: 130 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\t(\n' span_id:132) (Token id:Id.Lit_Chars val:'\t\tcd receiver &&\n' span_id:133) (Token id:Id.Lit_Chars val:'\t\tcount_objects >../receiver.count\n' span_id:134) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:135) (Token id:Id.Lit_Chars val:'\ttest_cmp one.count receiver.count\n' span_id:136) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'fetching from a repository with the same alternate' span_id: 143 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:147) (Token id:Id.Lit_Chars val:'\t(\n' span_id:148) (Token id:Id.Lit_Chars val:'\t\tcd fetcher &&\n' span_id:149) (Token id: Id.Lit_Chars val: '\t\tgit fetch ../one master:refs/heads/it &&\n' span_id: 150 ) (Token id:Id.Lit_Chars val:'\t\tcount_objects >../fetcher.count\n' span_id:151) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:152) (Token id:Id.Lit_Chars val:'\ttest_cmp one.count fetcher.count\n' span_id:153) ) } ) (C {(test_done)}) ] )