Merge branch 'mh/notes-allow-reading-treeish'
[gitweb.git] / t / t1401-symbolic-ref.sh
index 36378b0e3f5b271388fd0935149eea406caea0d0..1f0dff3a0b1cedb95b900a01de972e8a02e29f90 100755 (executable)
@@ -63,4 +63,55 @@ test_expect_success 'symbolic-ref fails to delete real ref' '
 '
 reset_to_sane
 
+test_expect_success 'create large ref name' '
+       # make 256+ character ref; some systems may not handle that,
+       # so be gentle
+       long=0123456789abcdef &&
+       long=$long/$long/$long/$long &&
+       long=$long/$long/$long/$long &&
+       long_ref=refs/heads/$long &&
+       tree=$(git write-tree) &&
+       commit=$(echo foo | git commit-tree $tree) &&
+       if git update-ref $long_ref $commit; then
+               test_set_prereq LONG_REF
+       else
+               echo >&2 "long refs not supported"
+       fi
+'
+
+test_expect_success LONG_REF 'symbolic-ref can point to large ref name' '
+       git symbolic-ref HEAD $long_ref &&
+       echo $long_ref >expect &&
+       git symbolic-ref HEAD >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success LONG_REF 'we can parse long symbolic ref' '
+       echo $commit >expect &&
+       git rev-parse --verify HEAD >actual &&
+       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_done