(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:prune span_id:15))} spids: [13] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:day) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Star left: (arith_expr.Binary op_id: Id.Arith_Star left: (arith_expr.ArithWord w:{(Id.Lit_Digits 60)}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 60)}) ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 24)}) ) ) } spids: [23] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:week) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Star left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$day')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 7)}) ) ) } spids: [33] ) ] ) (command.ShFunction name: add_blob body: (command.BraceGroup children: [ (command.AndOr ops: [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:before) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:50) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(git)} {(count-objects)}) (C {(sed)} {(DQ ('s/ .*//'))}) ] negated: F ) ] ) ) } spids: [49] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BLOB) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:68) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(aleph_0)}) (C {(git)} {(hash-object)} {(-w)} {(--stdin)}) ] negated: F ) ] ) ) } spids: [67] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BLOB_FILE) op: assign_op.Equal rhs: {(.git/objects/) (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:89) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {($ Id.VSub_DollarName '$BLOB')}) (C {(sed)} {(DQ ('s/^../&') (Id.Lit_Other '\\') (//))}) ] negated: F ) ] ) ) } spids: [87] ) ] ) (C {(verbose)} {(test)} { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$before')}) ) ) } {(Id.Lit_Equals '=')} { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:123) command_list: (command.CommandList children: [ (command.Pipeline children: [(C {(git)} {(count-objects)}) (C {(sed)} {(DQ ('s/ .*//'))})] negated: F ) ] ) ) } ) (C {(test_path_is_file)} {($ Id.VSub_DollarName '$BLOB_FILE')}) (C {(test-chmtime)} {(Id.Lit_Equals '=') (Id.Lit_Other '+') (0)} {($ Id.VSub_DollarName '$BLOB_FILE')} ) ] ) ] ) ) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:163) (Token id:Id.Lit_Chars val:'\n' span_id:164) (Token id:Id.Lit_Chars val:'\t: > file &&\n' span_id:165) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:166) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:167) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:168) (Token id:Id.Lit_Chars val:'\tgit gc\n' span_id:169) (Token id:Id.Lit_Chars val:'\n' span_id:170) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'prune stale packs' span_id:177))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:181) (Token id:Id.Lit_Chars val:'\n' span_id:182) (Token id: Id.Lit_Chars val: '\torig_pack=$(echo .git/objects/pack/*.pack) &&\n' span_id: 183 ) (Token id:Id.Lit_Chars val:'\t: > .git/objects/tmp_1.pack &&\n' span_id:184) (Token id:Id.Lit_Chars val:'\t: > .git/objects/tmp_2.pack &&\n' span_id:185) (Token id:Id.Lit_Chars val:'\ttest-chmtime =-86501 .git/objects/tmp_1.pack &&\n' span_id:186) (Token id:Id.Lit_Chars val:'\tgit prune --expire 1.day &&\n' span_id:187) (Token id:Id.Lit_Chars val:'\ttest_path_is_file $orig_pack &&\n' span_id:188) (Token id: Id.Lit_Chars val: '\ttest_path_is_file .git/objects/tmp_2.pack &&\n' span_id: 189 ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/objects/tmp_1.pack\n' span_id:190) (Token id:Id.Lit_Chars val:'\n' span_id:191) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'prune --expire' span_id:198))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:202) (Token id:Id.Lit_Chars val:'\n' span_id:203) (Token id:Id.Lit_Chars val:'\tadd_blob &&\n' span_id:204) (Token id:Id.Lit_Chars val:'\tgit prune --expire=1.hour.ago &&\n' span_id:205) (Token id: Id.Lit_Chars val: '\tverbose test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&\n' span_id: 206 ) (Token id:Id.Lit_Chars val:'\ttest_path_is_file $BLOB_FILE &&\n' span_id:207) (Token id:Id.Lit_Chars val:'\ttest-chmtime =-86500 $BLOB_FILE &&\n' span_id:208) (Token id:Id.Lit_Chars val:'\tgit prune --expire 1.day &&\n' span_id:209) (Token id: Id.Lit_Chars val: '\tverbose test $before = $(git count-objects | sed "s/ .*//") &&\n' span_id: 210 ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing $BLOB_FILE\n' span_id:211) (Token id:Id.Lit_Chars val:'\n' span_id:212) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'gc: implicit prune --expire' span_id:219))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:223) (Token id:Id.Lit_Chars val:'\n' span_id:224) (Token id:Id.Lit_Chars val:'\tadd_blob &&\n' span_id:225) (Token id:Id.Lit_Chars val:'\ttest-chmtime =-$((2*$week-30)) $BLOB_FILE &&\n' span_id:226) (Token id:Id.Lit_Chars val:'\tgit gc &&\n' span_id:227) (Token id: Id.Lit_Chars val: '\tverbose test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&\n' span_id: 228 ) (Token id:Id.Lit_Chars val:'\ttest_path_is_file $BLOB_FILE &&\n' span_id:229) (Token id: Id.Lit_Chars val: '\ttest-chmtime =-$((2*$week+1)) $BLOB_FILE &&\n' span_id: 230 ) (Token id:Id.Lit_Chars val:'\tgit gc &&\n' span_id:231) (Token id: Id.Lit_Chars val: '\tverbose test $before = $(git count-objects | sed "s/ .*//") &&\n' span_id: 232 ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing $BLOB_FILE\n' span_id:233) (Token id:Id.Lit_Chars val:'\n' span_id:234) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'gc: refuse to start with invalid gc.pruneExpire' span_id:241))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:245) (Token id:Id.Lit_Chars val:'\n' span_id:246) (Token id: Id.Lit_Chars val: '\tgit config gc.pruneExpire invalid &&\n' span_id: 247 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git gc\n' span_id:248) (Token id:Id.Lit_Chars val:'\n' span_id:249) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'gc: start with ok gc.pruneExpire' span_id:256))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:260) (Token id:Id.Lit_Chars val:'\n' span_id:261) (Token id: Id.Lit_Chars val: '\tgit config gc.pruneExpire 2.days.ago &&\n' span_id: 262 ) (Token id:Id.Lit_Chars val:'\tgit gc\n' span_id:263) (Token id:Id.Lit_Chars val:'\n' span_id:264) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'prune: prune nonsense parameters' span_id:271))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:275) (Token id:Id.Lit_Chars val:'\n' span_id:276) (Token id:Id.Lit_Chars val:'\ttest_must_fail git prune garbage &&\n' span_id:277) (Token id:Id.Lit_Chars val:'\ttest_must_fail git prune --- &&\n' span_id:278) (Token id: Id.Lit_Chars val: '\ttest_must_fail git prune --no-such-option\n' span_id: 279 ) (Token id:Id.Lit_Chars val:'\n' span_id:280) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'prune: prune unreachable heads' span_id:287))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:291) (Token id:Id.Lit_Chars val:'\n' span_id:292) (Token id: Id.Lit_Chars val: '\tgit config core.logAllRefUpdates false &&\n' span_id: 293 ) (Token id:Id.Lit_Chars val:'\tmv .git/logs .git/logs.old &&\n' span_id:294) (Token id:Id.Lit_Chars val:'\t: > file2 &&\n' span_id:295) (Token id:Id.Lit_Chars val:'\tgit add file2 &&\n' span_id:296) (Token id:Id.Lit_Chars val:'\tgit commit -m temporary &&\n' span_id:297) (Token id:Id.Lit_Chars val:'\ttmp_head=$(git rev-list -1 HEAD) &&\n' span_id:298) (Token id:Id.Lit_Chars val:'\tgit reset HEAD^ &&\n' span_id:299) (Token id:Id.Lit_Chars val:'\tgit prune &&\n' span_id:300) (Token id: Id.Lit_Chars val: '\ttest_must_fail git reset $tmp_head --\n' span_id: 301 ) (Token id:Id.Lit_Chars val:'\n' span_id:302) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'prune: do not prune detached HEAD with no reflog' span_id: 309 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:313) (Token id:Id.Lit_Chars val:'\n' span_id:314) (Token id:Id.Lit_Chars val:'\tgit checkout --detach --quiet &&\n' span_id:315) (Token id:Id.Lit_Chars val:'\tgit commit --allow-empty -m "detached commit" &&\n' span_id:316) (Token id:Id.Lit_Chars val:'\t# verify that there is no reflogs\n' span_id:317) (Token id:Id.Lit_Chars val:'\t# (should be removed and disabled by previous test)\n' span_id:318) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/logs &&\n' span_id:319) (Token id:Id.Lit_Chars val:'\tgit prune -n >prune_actual &&\n' span_id:320) (Token id:Id.Lit_Chars val:'\t: >prune_expected &&\n' span_id:321) (Token id:Id.Lit_Chars val:'\ttest_cmp prune_actual prune_expected\n' span_id:322) (Token id:Id.Lit_Chars val:'\n' span_id:323) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'prune: prune former HEAD after checking out branch' span_id: 330 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:334) (Token id:Id.Lit_Chars val:'\n' span_id:335) (Token id:Id.Lit_Chars val:'\thead_sha1=$(git rev-parse HEAD) &&\n' span_id:336) (Token id:Id.Lit_Chars val:'\tgit checkout --quiet master &&\n' span_id:337) (Token id:Id.Lit_Chars val:'\tgit prune -v >prune_actual &&\n' span_id:338) (Token id:Id.Lit_Chars val:'\tgrep "$head_sha1" prune_actual\n' span_id:339) (Token id:Id.Lit_Chars val:'\n' span_id:340) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'prune: do not prune heads listed as an argument' span_id:347))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:351) (Token id:Id.Lit_Chars val:'\n' span_id:352) (Token id:Id.Lit_Chars val:'\t: > file2 &&\n' span_id:353) (Token id:Id.Lit_Chars val:'\tgit add file2 &&\n' span_id:354) (Token id:Id.Lit_Chars val:'\tgit commit -m temporary &&\n' span_id:355) (Token id:Id.Lit_Chars val:'\ttmp_head=$(git rev-list -1 HEAD) &&\n' span_id:356) (Token id:Id.Lit_Chars val:'\tgit reset HEAD^ &&\n' span_id:357) (Token id:Id.Lit_Chars val:'\tgit prune -- $tmp_head &&\n' span_id:358) (Token id:Id.Lit_Chars val:'\tgit reset $tmp_head --\n' span_id:359) (Token id:Id.Lit_Chars val:'\n' span_id:360) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'gc --no-prune' span_id:367))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:371) (Token id:Id.Lit_Chars val:'\n' span_id:372) (Token id:Id.Lit_Chars val:'\tadd_blob &&\n' span_id:373) (Token id:Id.Lit_Chars val:'\ttest-chmtime =-$((5001*$day)) $BLOB_FILE &&\n' span_id:374) (Token id: Id.Lit_Chars val: '\tgit config gc.pruneExpire 2.days.ago &&\n' span_id: 375 ) (Token id:Id.Lit_Chars val:'\tgit gc --no-prune &&\n' span_id:376) (Token id: Id.Lit_Chars val: '\tverbose test 1 = $(git count-objects | sed "s/ .*//") &&\n' span_id: 377 ) (Token id:Id.Lit_Chars val:'\ttest_path_is_file $BLOB_FILE\n' span_id:378) (Token id:Id.Lit_Chars val:'\n' span_id:379) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'gc respects gc.pruneExpire' span_id:386))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:390) (Token id:Id.Lit_Chars val:'\n' span_id:391) (Token id: Id.Lit_Chars val: '\tgit config gc.pruneExpire 5002.days.ago &&\n' span_id: 392 ) (Token id:Id.Lit_Chars val:'\tgit gc &&\n' span_id:393) (Token id:Id.Lit_Chars val:'\ttest_path_is_file $BLOB_FILE &&\n' span_id:394) (Token id:Id.Lit_Chars val:'\tgit config gc.pruneExpire 5000.days.ago &&\n' span_id:395) (Token id:Id.Lit_Chars val:'\tgit gc &&\n' span_id:396) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing $BLOB_FILE\n' span_id:397) (Token id:Id.Lit_Chars val:'\n' span_id:398) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'gc --prune=<date>' span_id:405))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:409) (Token id:Id.Lit_Chars val:'\n' span_id:410) (Token id:Id.Lit_Chars val:'\tadd_blob &&\n' span_id:411) (Token id:Id.Lit_Chars val:'\ttest-chmtime =-$((5001*$day)) $BLOB_FILE &&\n' span_id:412) (Token id:Id.Lit_Chars val:'\tgit gc --prune=5002.days.ago &&\n' span_id:413) (Token id:Id.Lit_Chars val:'\ttest_path_is_file $BLOB_FILE &&\n' span_id:414) (Token id:Id.Lit_Chars val:'\tgit gc --prune=5000.days.ago &&\n' span_id:415) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing $BLOB_FILE\n' span_id:416) (Token id:Id.Lit_Chars val:'\n' span_id:417) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'gc --prune=never' span_id:424))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:428) (Token id:Id.Lit_Chars val:'\n' span_id:429) (Token id:Id.Lit_Chars val:'\tadd_blob &&\n' span_id:430) (Token id:Id.Lit_Chars val:'\tgit gc --prune=never &&\n' span_id:431) (Token id:Id.Lit_Chars val:'\ttest_path_is_file $BLOB_FILE &&\n' span_id:432) (Token id:Id.Lit_Chars val:'\tgit gc --prune=now &&\n' span_id:433) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing $BLOB_FILE\n' span_id:434) (Token id:Id.Lit_Chars val:'\n' span_id:435) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'gc respects gc.pruneExpire=never' span_id:442))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:446) (Token id:Id.Lit_Chars val:'\n' span_id:447) (Token id:Id.Lit_Chars val:'\tgit config gc.pruneExpire never &&\n' span_id:448) (Token id:Id.Lit_Chars val:'\tadd_blob &&\n' span_id:449) (Token id:Id.Lit_Chars val:'\tgit gc &&\n' span_id:450) (Token id:Id.Lit_Chars val:'\ttest_path_is_file $BLOB_FILE &&\n' span_id:451) (Token id:Id.Lit_Chars val:'\tgit config gc.pruneExpire now &&\n' span_id:452) (Token id:Id.Lit_Chars val:'\tgit gc &&\n' span_id:453) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing $BLOB_FILE\n' span_id:454) (Token id:Id.Lit_Chars val:'\n' span_id:455) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'prune --expire=never' span_id:462))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:466) (Token id:Id.Lit_Chars val:'\n' span_id:467) (Token id:Id.Lit_Chars val:'\tadd_blob &&\n' span_id:468) (Token id:Id.Lit_Chars val:'\tgit prune --expire=never &&\n' span_id:469) (Token id:Id.Lit_Chars val:'\ttest_path_is_file $BLOB_FILE &&\n' span_id:470) (Token id:Id.Lit_Chars val:'\tgit prune &&\n' span_id:471) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing $BLOB_FILE\n' span_id:472) (Token id:Id.Lit_Chars val:'\n' span_id:473) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'gc: prune old objects after local clone' span_id:480))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:484) (Token id:Id.Lit_Chars val:'\tadd_blob &&\n' span_id:485) (Token id:Id.Lit_Chars val:'\ttest-chmtime =-$((2*$week+1)) $BLOB_FILE &&\n' span_id:486) (Token id: Id.Lit_Chars val: '\tgit clone --no-hardlinks . aclone &&\n' span_id: 487 ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:488) (Token id:Id.Lit_Chars val:'\t\tcd aclone &&\n' span_id:489) (Token id: Id.Lit_Chars val: '\t\tverbose test 1 = $(git count-objects | sed "s/ .*//") &&\n' span_id: 490 ) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_file $BLOB_FILE &&\n' span_id:491) (Token id:Id.Lit_Chars val:'\t\tgit gc --prune &&\n' span_id:492) (Token id: Id.Lit_Chars val: '\t\tverbose test 0 = $(git count-objects | sed "s/ .*//") &&\n' span_id: 493 ) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_missing $BLOB_FILE\n' span_id:494) (Token id:Id.Lit_Chars val:'\t)\n' span_id:495) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'garbage report in count-objects -v' span_id:502))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:506) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -f .git/objects/pack/fake*" &&\n' span_id: 507 ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f .git/objects/pack/foo*" &&\n' span_id:508) (Token id:Id.Lit_Chars val:'\t: >.git/objects/pack/foo &&\n' span_id:509) (Token id:Id.Lit_Chars val:'\t: >.git/objects/pack/foo.bar &&\n' span_id:510) (Token id:Id.Lit_Chars val:'\t: >.git/objects/pack/foo.keep &&\n' span_id:511) (Token id:Id.Lit_Chars val:'\t: >.git/objects/pack/foo.pack &&\n' span_id:512) (Token id:Id.Lit_Chars val:'\t: >.git/objects/pack/fake.bar &&\n' span_id:513) (Token id:Id.Lit_Chars val:'\t: >.git/objects/pack/fake.keep &&\n' span_id:514) (Token id:Id.Lit_Chars val:'\t: >.git/objects/pack/fake.pack &&\n' span_id:515) (Token id:Id.Lit_Chars val:'\t: >.git/objects/pack/fake.idx &&\n' span_id:516) (Token id:Id.Lit_Chars val:'\t: >.git/objects/pack/fake2.keep &&\n' span_id:517) (Token id:Id.Lit_Chars val:'\t: >.git/objects/pack/fake3.idx &&\n' span_id:518) (Token id:Id.Lit_Chars val:'\tgit count-objects -v 2>stderr &&\n' span_id:519) (Token id: Id.Lit_Chars val: '\tgrep "index file .git/objects/pack/fake.idx is too small" stderr &&\n' span_id: 520 ) (Token id:Id.Lit_Chars val:'\tgrep "^warning:" stderr | sort >actual &&\n' span_id:521) (Token id:Id.Lit_Chars val:'\tcat >expected <<\\EOF &&\n' span_id:522) (Token id:Id.Lit_Chars val:'warning: garbage found: .git/objects/pack/fake.bar\n' span_id:523) (Token id: Id.Lit_Chars val: 'warning: garbage found: .git/objects/pack/foo\n' span_id: 524 ) (Token id:Id.Lit_Chars val:'warning: garbage found: .git/objects/pack/foo.bar\n' span_id:525) (Token id: Id.Lit_Chars val: 'warning: no corresponding .idx or .pack: .git/objects/pack/fake2.keep\n' span_id: 526 ) (Token id: Id.Lit_Chars val: 'warning: no corresponding .idx: .git/objects/pack/foo.keep\n' span_id: 527 ) (Token id: Id.Lit_Chars val: 'warning: no corresponding .idx: .git/objects/pack/foo.pack\n' span_id: 528 ) (Token id: Id.Lit_Chars val: 'warning: no corresponding .pack: .git/objects/pack/fake3.idx\n' span_id: 529 ) (Token id:Id.Lit_Chars val:'EOF\n' span_id:530) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:531) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'clean pack garbage with gc' span_id:538))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:542) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -f .git/objects/pack/fake*" &&\n' span_id: 543 ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f .git/objects/pack/foo*" &&\n' span_id:544) (Token id:Id.Lit_Chars val:'\t: >.git/objects/pack/foo.keep &&\n' span_id:545) (Token id:Id.Lit_Chars val:'\t: >.git/objects/pack/foo.pack &&\n' span_id:546) (Token id:Id.Lit_Chars val:'\t: >.git/objects/pack/fake.idx &&\n' span_id:547) (Token id:Id.Lit_Chars val:'\t: >.git/objects/pack/fake2.keep &&\n' span_id:548) (Token id:Id.Lit_Chars val:'\t: >.git/objects/pack/fake2.idx &&\n' span_id:549) (Token id:Id.Lit_Chars val:'\t: >.git/objects/pack/fake3.keep &&\n' span_id:550) (Token id:Id.Lit_Chars val:'\tgit gc &&\n' span_id:551) (Token id:Id.Lit_Chars val:'\tgit count-objects -v 2>stderr &&\n' span_id:552) (Token id: Id.Lit_Chars val: '\tgrep "^warning:" stderr | sort >actual &&\n' span_id: 553 ) (Token id:Id.Lit_Chars val:'\tcat >expected <<\\EOF &&\n' span_id:554) (Token id: Id.Lit_Chars val: 'warning: no corresponding .idx or .pack: .git/objects/pack/fake3.keep\n' span_id: 555 ) (Token id: Id.Lit_Chars val: 'warning: no corresponding .idx: .git/objects/pack/foo.keep\n' span_id: 556 ) (Token id: Id.Lit_Chars val: 'warning: no corresponding .idx: .git/objects/pack/foo.pack\n' span_id: 557 ) (Token id:Id.Lit_Chars val:'EOF\n' span_id:558) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:559) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'prune .git/shallow' span_id:566))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:570) (Token id: Id.Lit_Chars val: '\tSHA1=$(echo hi|git commit-tree HEAD^{tree}) &&\n' span_id: 571 ) (Token id:Id.Lit_Chars val:'\techo $SHA1 >.git/shallow &&\n' span_id:572) (Token id:Id.Lit_Chars val:'\tgit prune --dry-run >out &&\n' span_id:573) (Token id:Id.Lit_Chars val:'\tgrep $SHA1 .git/shallow &&\n' span_id:574) (Token id:Id.Lit_Chars val:'\tgrep $SHA1 out &&\n' span_id:575) (Token id:Id.Lit_Chars val:'\tgit prune &&\n' span_id:576) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/shallow\n' span_id:577) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'prune: handle alternate object database' span_id:584))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:588) (Token id:Id.Lit_Chars val:'\ttest_create_repo A &&\n' span_id:589) (Token id:Id.Lit_Chars val:'\tgit -C A commit --allow-empty -m "initial commit" &&\n' span_id:590) (Token id:Id.Lit_Chars val:'\tgit clone --shared A B &&\n' span_id:591) (Token id:Id.Lit_Chars val:'\tgit -C B commit --allow-empty -m "next commit" &&\n' span_id:592) (Token id:Id.Lit_Chars val:'\tgit -C B prune\n' span_id:593) ) } ) (C {(test_done)}) ] )