#!/bin/sh setvar test_description = ''selecting remote repo in ambiguous cases'' source ./test-lib.sh proc reset { rm -rf foo foo.git fetch clone } proc make_tree { git init $1 && shell {cd $1 && test_commit $1} } proc make_bare { git init --bare $1 && shell {cd $1 && setvar tree = $(git hash-object -w -t tree /dev/null) && setvar commit = $(echo "$1" | git commit-tree $tree) && git update-ref HEAD $commit } } proc get { git init --bare fetch && shell {cd fetch && git fetch "../$1"} && git clone $1 clone } proc check { echo $1 >expect && shell {cd fetch && git log -1 --format=%s FETCH_HEAD} >actual.fetch && shell {cd clone && git log -1 --format=%s HEAD} >actual.clone && test_cmp expect actual.fetch && test_cmp expect actual.clone } test_expect_success 'find .git dir in worktree' ' reset && make_tree foo && get foo && check foo ' test_expect_success 'automagically add .git suffix' ' reset && make_bare foo.git && get foo && check foo.git ' test_expect_success 'automagically add .git suffix to worktree' ' reset && make_tree foo.git && get foo && check foo.git ' test_expect_success 'prefer worktree foo over bare foo.git' ' reset && make_tree foo && make_bare foo.git && get foo && check foo ' test_expect_success 'prefer bare foo over bare foo.git' ' reset && make_bare foo && make_bare foo.git && get foo && check foo ' test_expect_success 'disambiguate with full foo.git' ' reset && make_bare foo && make_bare foo.git && get foo.git && check foo.git ' test_expect_success 'we are not fooled by non-git foo directory' ' reset && make_bare foo.git && mkdir foo && get foo && check foo.git ' test_expect_success 'prefer inner .git over outer bare' ' reset && make_tree foo && make_bare foo.git && mv foo/.git foo.git && get foo.git && check foo ' test_done