dir.c: fix match_pathname()
[gitweb.git] / t / t1401-symbolic-ref.sh
index e6c5830d70e9de7ea61c91d2ddc157dfd5fc9734..417eecc3af2a30c3544ddd2f83b7ccecc540eaf1 100755 (executable)
@@ -92,4 +92,41 @@ test_expect_success LONG_REF 'we can parse long symbolic ref' '
        test_cmp expect actual
 '
 
+test_expect_success 'symbolic-ref reports failure in exit code' '
+       test_when_finished "rm -f .git/HEAD.lock" &&
+       >.git/HEAD.lock &&
+       test_must_fail git symbolic-ref HEAD refs/heads/whatever
+'
+
+test_expect_success 'symbolic-ref writes reflog entry' '
+       git checkout -b log1 &&
+       test_commit one &&
+       git checkout -b log2  &&
+       test_commit two &&
+       git checkout --orphan orphan &&
+       git symbolic-ref -m create HEAD refs/heads/log1 &&
+       git symbolic-ref -m update HEAD refs/heads/log2 &&
+       cat >expect <<-\EOF &&
+       update
+       create
+       EOF
+       git log --format=%gs -g >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'symbolic-ref does not create ref d/f conflicts' '
+       git checkout -b df &&
+       test_commit df &&
+       test_must_fail git symbolic-ref refs/heads/df/conflict refs/heads/df &&
+       git pack-refs --all --prune &&
+       test_must_fail git symbolic-ref refs/heads/df/conflict refs/heads/df
+'
+
+test_expect_success 'symbolic-ref handles existing pointer to invalid name' '
+       head=$(git rev-parse HEAD) &&
+       git symbolic-ref HEAD refs/heads/outer &&
+       git update-ref refs/heads/outer/inner $head &&
+       git symbolic-ref HEAD refs/heads/unrelated
+'
+
 test_done