]> git.ipfire.org Git - thirdparty/git.git/blobdiff - t/t3210-pack-refs.sh
refs: speed up is_refname_available
[thirdparty/git.git] / t / t3210-pack-refs.sh
index cd04361df811d329e269ac1d5eb0b0f03baa74d8..3d5cb4c089f110a18d60c5ff8e5357055503d4ad 100755 (executable)
@@ -11,7 +11,9 @@ semantic is still the same.
 '
 . ./test-lib.sh
 
-echo '[core] logallrefupdates = true' >>.git/config
+test_expect_success 'enable reflogs' '
+       git config core.logallrefupdates true
+'
 
 test_expect_success \
     'prepare a trivial repository' \
@@ -118,4 +120,64 @@ test_expect_success 'pack, prune and repack' '
        test_cmp all-of-them again
 '
 
+test_expect_success 'explicit pack-refs with dangling packed reference' '
+       git commit --allow-empty -m "soon to be garbage-collected" &&
+       git pack-refs --all &&
+       git reset --hard HEAD^ &&
+       git reflog expire --expire=all --all &&
+       git prune --expire=all &&
+       git pack-refs --all 2>result &&
+       test_cmp /dev/null result
+'
+
+test_expect_success 'delete ref with dangling packed version' '
+       git checkout -b lamb &&
+       git commit --allow-empty -m "future garbage" &&
+       git pack-refs --all &&
+       git reset --hard HEAD^ &&
+       git checkout master &&
+       git reflog expire --expire=all --all &&
+       git prune --expire=all &&
+       git branch -d lamb 2>result &&
+       test_cmp /dev/null result
+'
+
+test_expect_success 'delete ref while another dangling packed ref' '
+       git branch lamb &&
+       git commit --allow-empty -m "future garbage" &&
+       git pack-refs --all &&
+       git reset --hard HEAD^ &&
+       git reflog expire --expire=all --all &&
+       git prune --expire=all &&
+       git branch -d lamb 2>result &&
+       test_cmp /dev/null result
+'
+
+test_expect_success 'disable reflogs' '
+       git config core.logallrefupdates false &&
+       rm -rf .git/logs
+'
+
+test_expect_success 'create packed foo/bar/baz branch' '
+       git branch foo/bar/baz &&
+       git pack-refs --all --prune &&
+       test_path_is_missing .git/refs/heads/foo/bar/baz &&
+       test_path_is_missing .git/logs/refs/heads/foo/bar/baz
+'
+
+test_expect_success 'notice d/f conflict with existing directory' '
+       test_must_fail git branch foo &&
+       test_must_fail git branch foo/bar
+'
+
+test_expect_success 'existing directory reports concrete ref' '
+       test_must_fail git branch foo 2>stderr &&
+       grep refs/heads/foo/bar/baz stderr
+'
+
+test_expect_success 'notice d/f conflict with existing ref' '
+       test_must_fail git branch foo/bar/baz/extra &&
+       test_must_fail git branch foo/bar/baz/lots/of/extra/components
+'
+
 test_done