(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: { (SQ <'git pack-refs should not change the branch semantic\n'> <'\n'> <'This test runs git pack-refs and git show-ref and checks that the branch\n'> <'semantic is still the same.\n'> ) } spids: [16] ) ] spids: [16] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ <'enable reflogs'>)} {(SQ <'\n'> <'\tgit config core.logallrefupdates true\n'>)} ) (C {(test_expect_success)} {(SQ <'prepare a trivial repository'>)} { (SQ <'echo Hello > A &&\n'> <' git update-index --add A &&\n'> <' git commit -m "Initial commit." &&\n'> <' HEAD=$(git rev-parse --verify HEAD)'> ) } ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:SHA1) op:Equal rhs:{(SQ )} spids:[59])] spids: [59] ) (C {(test_expect_success)} {(SQ <'see if git show-ref works as expected'>)} { (SQ <'git branch a &&\n'> <' SHA1=$(cat .git/refs/heads/a) &&\n'> <' echo "$SHA1 refs/heads/a" >expect &&\n'> <' git show-ref a >result &&\n'> <' test_cmp expect result'> ) } ) (C {(test_expect_success)} {(SQ <'see if a branch still exists when packed'>)} { (SQ <'git branch b &&\n'> <' git pack-refs --all &&\n'> <' rm -f .git/refs/heads/b &&\n'> <' echo "$SHA1 refs/heads/b" >expect &&\n'> <' git show-ref b >result &&\n'> <' test_cmp expect result'> ) } ) (C {(test_expect_success)} {(SQ <'git branch c/d should barf if branch c exists'>)} { (SQ <'\n'> <' git branch c &&\n'> <' git pack-refs --all &&\n'> <' rm -f .git/refs/heads/c &&\n'> <' test_must_fail git branch c/d\n'> ) } ) (C {(test_expect_success)} {(SQ <'see if a branch still exists after git pack-refs --prune'>)} { (SQ <'git branch e &&\n'> <' git pack-refs --all --prune &&\n'> <' echo "$SHA1 refs/heads/e" >expect &&\n'> <' git show-ref e >result &&\n'> <' test_cmp expect result'> ) } ) (C {(test_expect_success)} {(SQ <'see if git pack-refs --prune remove ref files'>)} { (SQ <'\n'> <' git branch f &&\n'> <' git pack-refs --all --prune &&\n'> <' ! test -f .git/refs/heads/f\n'> ) } ) (C {(test_expect_success)} {(SQ <'see if git pack-refs --prune removes empty dirs'>)} { (SQ <'\n'> <' git branch r/s/t &&\n'> <' git pack-refs --all --prune &&\n'> <' ! test -e .git/refs/heads/r\n'> ) } ) (C {(test_expect_success)} {(SQ <'git branch g should work when git branch g/h has been deleted'>)} { (SQ <'git branch g/h &&\n'> <' git pack-refs --all --prune &&\n'> <' git branch -d g/h &&\n'> <' git branch g &&\n'> <' git pack-refs --all &&\n'> <' git branch -d g'> ) } ) (C {(test_expect_success)} {(SQ <'git branch i/j/k should barf if branch i exists'>)} { (SQ <'\n'> <' git branch i &&\n'> <' git pack-refs --all --prune &&\n'> <' test_must_fail git branch i/j/k\n'> ) } ) (C {(test_expect_success)} {(SQ <'test git branch k after branch k/l/m and k/lm have been deleted'>)} { (SQ <'git branch k/l &&\n'> <' git branch k/lm &&\n'> <' git branch -d k/l &&\n'> <' git branch k/l/m &&\n'> <' git branch -d k/l/m &&\n'> <' git branch -d k/lm &&\n'> <' git branch k'> ) } ) (C {(test_expect_success)} {(SQ <'test git branch n after some branch deletion and pruning'>)} { (SQ <'git branch n/o &&\n'> <' git branch n/op &&\n'> <' git branch -d n/o &&\n'> <' git branch n/o/p &&\n'> <' git branch -d n/op &&\n'> <' git pack-refs --all --prune &&\n'> <' git branch -d n/o/p &&\n'> <' git branch n'> ) } ) (C {(test_expect_success)} {(SQ <'see if up-to-date packed refs are preserved'>)} { (SQ <'git branch q &&\n'> <'\t git pack-refs --all --prune &&\n'> <'\t git update-ref refs/heads/q refs/heads/q &&\n'> <'\t ! test -f .git/refs/heads/q'> ) } ) (C {(test_expect_success)} {(SQ <'pack, prune and repack'>)} { (SQ <'\n'> <'\tgit tag foo &&\n'> <'\tgit pack-refs --all --prune &&\n'> <'\tgit show-ref >all-of-them &&\n'> <'\tgit pack-refs &&\n'> <'\tgit show-ref >again &&\n'> <'\ttest_cmp all-of-them again\n'> ) } ) (C {(test_expect_success)} {(SQ <'explicit pack-refs with dangling packed reference'>)} { (SQ <'\n'> <'\tgit commit --allow-empty -m "soon to be garbage-collected" &&\n'> <'\tgit pack-refs --all &&\n'> <'\tgit reset --hard HEAD^ &&\n'> <'\tgit reflog expire --expire=all --all &&\n'> <'\tgit prune --expire=all &&\n'> <'\tgit pack-refs --all 2>result &&\n'> <'\ttest_cmp /dev/null result\n'> ) } ) (C {(test_expect_success)} {(SQ <'delete ref with dangling packed version'>)} { (SQ <'\n'> <'\tgit checkout -b lamb &&\n'> <'\tgit commit --allow-empty -m "future garbage" &&\n'> <'\tgit pack-refs --all &&\n'> <'\tgit reset --hard HEAD^ &&\n'> <'\tgit checkout master &&\n'> <'\tgit reflog expire --expire=all --all &&\n'> <'\tgit prune --expire=all &&\n'> <'\tgit branch -d lamb 2>result &&\n'> <'\ttest_cmp /dev/null result\n'> ) } ) (C {(test_expect_success)} {(SQ <'delete ref while another dangling packed ref'>)} { (SQ <'\n'> <'\tgit branch lamb &&\n'> <'\tgit commit --allow-empty -m "future garbage" &&\n'> <'\tgit pack-refs --all &&\n'> <'\tgit reset --hard HEAD^ &&\n'> <'\tgit reflog expire --expire=all --all &&\n'> <'\tgit prune --expire=all &&\n'> <'\tgit branch -d lamb 2>result &&\n'> <'\ttest_cmp /dev/null result\n'> ) } ) (C {(test_expect_success)} {(SQ <'pack ref directly below refs/'>)} { (SQ <'\n'> <'\tgit update-ref refs/top HEAD &&\n'> <'\tgit pack-refs --all --prune &&\n'> <'\tgrep refs/top .git/packed-refs &&\n'> <'\ttest_path_is_missing .git/refs/top\n'> ) } ) (C {(test_expect_success)} {(SQ <'do not pack ref in refs/bisect'>)} { (SQ <'\n'> <'\tgit update-ref refs/bisect/local HEAD &&\n'> <'\tgit pack-refs --all --prune &&\n'> <'\t! grep refs/bisect/local .git/packed-refs >/dev/null &&\n'> <'\ttest_path_is_file .git/refs/bisect/local\n'> ) } ) (C {(test_expect_success)} {(SQ <'disable reflogs'>)} {(SQ <'\n'> <'\tgit config core.logallrefupdates false &&\n'> <'\trm -rf .git/logs\n'>)} ) (C {(test_expect_success)} {(SQ <'create packed foo/bar/baz branch'>)} { (SQ <'\n'> <'\tgit branch foo/bar/baz &&\n'> <'\tgit pack-refs --all --prune &&\n'> <'\ttest_path_is_missing .git/refs/heads/foo/bar/baz &&\n'> <'\ttest_must_fail git reflog exists refs/heads/foo/bar/baz\n'> ) } ) (C {(test_expect_success)} {(SQ <'notice d/f conflict with existing directory'>)} { (SQ <'\n'> <'\ttest_must_fail git branch foo &&\n'> <'\ttest_must_fail git branch foo/bar\n'>) } ) (C {(test_expect_success)} {(SQ <'existing directory reports concrete ref'>)} { (SQ <'\n'> <'\ttest_must_fail git branch foo 2>stderr &&\n'> <'\tgrep refs/heads/foo/bar/baz stderr\n'> ) } ) (C {(test_expect_success)} {(SQ <'notice d/f conflict with existing ref'>)} { (SQ <'\n'> <'\ttest_must_fail git branch foo/bar/baz/extra &&\n'> <'\ttest_must_fail git branch foo/bar/baz/lots/of/extra/components\n'> ) } ) (C {(test_expect_success)} {(SQ <'timeout if packed-refs.lock exists'>)} { (SQ <'\n'> <'\tLOCK=.git/packed-refs.lock &&\n'> <'\t>"$LOCK" &&\n'> <'\ttest_when_finished "rm -f $LOCK" &&\n'> <'\ttest_must_fail git pack-refs --all --prune\n'> ) } ) (C {(test_expect_success)} {(SQ <'retry acquiring packed-refs.lock'>)} { (SQ <'\n'> <'\tLOCK=.git/packed-refs.lock &&\n'> <'\t>"$LOCK" &&\n'> <'\ttest_when_finished "wait; rm -f $LOCK" &&\n'> <'\t{\n'> <'\t\t( sleep 1 ; rm -f $LOCK ) &\n'> <'\t} &&\n'> <'\tgit -c core.packedrefstimeout=3000 pack-refs --all --prune\n'> ) } ) (C {(test_done)}) ] )