#!/bin/sh setglobal test_description = ''test refspec written by clone-command'' source ./test-lib.sh test_expect_success 'setup' ' # Make two branches, "master" and "side" 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 && git checkout -b side && echo four >file && git commit -a -m four && git checkout master && # default clone git clone . dir_all && # default --single that follows HEAD=master git clone --single-branch . dir_master && # default --single that follows HEAD=side git checkout side && git clone --single-branch . dir_side && # explicit --single that follows side git checkout master && git clone --single-branch --branch side . dir_side2 && # default --single with --mirror git clone --single-branch --mirror . dir_mirror && # default --single with --branch and --mirror git clone --single-branch --mirror --branch side . dir_mirror_side && # --single that does not know what branch to follow git checkout two^ && git clone --single-branch . dir_detached && # explicit --single with tag git clone --single-branch --branch two . dir_tag && # advance both "master" and "side" branches git checkout side && echo five >file && git commit -a -m five && git checkout master && echo six >file && git commit -a -m six && # update tag git tag -d two && git tag two ' test_expect_success 'by default all branches will be kept updated' ' ( cd dir_all && git fetch && git for-each-ref refs/remotes/origin | sed -e "/HEAD$/d" \ -e "s|/remotes/origin/|/heads/|" >../actual ) && # follow both master and side git for-each-ref refs/heads >expect && test_cmp expect actual ' test_expect_success 'by default no tags will be kept updated' ' ( cd dir_all && git fetch && git for-each-ref refs/tags >../actual ) && git for-each-ref refs/tags >expect && test_must_fail test_cmp expect actual ' test_expect_success '--single-branch while HEAD pointing at master' ' ( cd dir_master && git fetch && git for-each-ref refs/remotes/origin | sed -e "/HEAD$/d" \ -e "s|/remotes/origin/|/heads/|" >../actual ) && # only follow master git for-each-ref refs/heads/master >expect && test_cmp expect actual ' test_expect_success '--single-branch while HEAD pointing at side' ' ( cd dir_side && git fetch && git for-each-ref refs/remotes/origin | sed -e "/HEAD$/d" \ -e "s|/remotes/origin/|/heads/|" >../actual ) && # only follow side git for-each-ref refs/heads/side >expect && test_cmp expect actual ' test_expect_success '--single-branch with explicit --branch side' ' ( cd dir_side2 && git fetch && git for-each-ref refs/remotes/origin | sed -e "/HEAD$/d" \ -e "s|/remotes/origin/|/heads/|" >../actual ) && # only follow side git for-each-ref refs/heads/side >expect && test_cmp expect actual ' test_expect_success '--single-branch with explicit --branch with tag fetches updated tag' ' ( cd dir_tag && git fetch && git for-each-ref refs/tags >../actual ) && git for-each-ref refs/tags >expect && test_cmp expect actual ' test_expect_success '--single-branch with --mirror' ' ( cd dir_mirror && git fetch && git for-each-ref refs > ../actual ) && git for-each-ref refs >expect && test_cmp expect actual ' test_expect_success '--single-branch with explicit --branch and --mirror' ' ( cd dir_mirror_side && git fetch && git for-each-ref refs > ../actual ) && git for-each-ref refs >expect && test_cmp expect actual ' test_expect_success '--single-branch with detached' ' ( cd dir_detached && git fetch && git for-each-ref refs/remotes/origin | sed -e "/HEAD$/d" \ -e "s|/remotes/origin/|/heads/|" >../actual ) && # nothing >expect && test_cmp expect actual ' test_done