#!/bin/sh setglobal test_description = ''test cloning a repository with detached HEAD'' source ./test-lib.sh proc head_is_detached { git --git-dir=$1/.git rev-parse --verify HEAD && test_must_fail git --git-dir=$1/.git symbolic-ref HEAD } test_expect_success 'setup' ' echo one >file && git add file && git commit -m one && echo two >file && git commit -a -m two && git tag two && echo three >file && git commit -a -m three ' test_expect_success 'clone repo (detached HEAD points to branch)' ' git checkout master^0 && git clone "file://$PWD" detached-branch ' test_expect_success 'cloned HEAD matches' ' echo three >expect && git --git-dir=detached-branch/.git log -1 --format=%s >actual && test_cmp expect actual ' test_expect_failure 'cloned HEAD is detached' ' head_is_detached detached-branch ' test_expect_success 'clone repo (detached HEAD points to tag)' ' git checkout two^0 && git clone "file://$PWD" detached-tag ' test_expect_success 'cloned HEAD matches' ' echo two >expect && git --git-dir=detached-tag/.git log -1 --format=%s >actual && test_cmp expect actual ' test_expect_success 'cloned HEAD is detached' ' head_is_detached detached-tag ' test_expect_success 'clone repo (detached HEAD points to history)' ' git checkout two^ && git clone "file://$PWD" detached-history ' test_expect_success 'cloned HEAD matches' ' echo one >expect && git --git-dir=detached-history/.git log -1 --format=%s >actual && test_cmp expect actual ' test_expect_success 'cloned HEAD is detached' ' head_is_detached detached-history ' test_expect_success 'clone repo (orphan detached HEAD)' ' git checkout master^0 && echo four >file && git commit -a -m four && git clone "file://$PWD" detached-orphan ' test_expect_success 'cloned HEAD matches' ' echo four >expect && git --git-dir=detached-orphan/.git log -1 --format=%s >actual && test_cmp expect actual ' test_expect_success 'cloned HEAD is detached' ' head_is_detached detached-orphan ' test_done