#!/bin/sh test_description='test refspec written by clone-command' . ./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 && git tag five && # default clone git clone . dir_all && # default clone --no-tags git clone --no-tags . dir_all_no_tags && # default --single that follows HEAD=master git clone --single-branch . dir_master && # default --single that follows HEAD=master with no tags git clone --single-branch --no-tags . dir_master_no_tags && # 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 && # explicit --single with tag and --no-tags git clone --single-branch --no-tags --branch two . dir_tag_no_tags && # 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_line_count = 2 actual ' test_expect_success 'clone with --no-tags' ' ( cd dir_all_no_tags && git fetch && git for-each-ref refs/tags >../actual ) && test_must_be_empty actual ' test_expect_success '--single-branch while HEAD pointing at master' ' ( cd dir_master && git fetch --force && 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 && # get & check latest tags test_cmp expect actual && ( cd dir_master && git fetch --tags --force && git for-each-ref refs/tags >../actual ) && git for-each-ref refs/tags >expect && test_cmp expect actual && test_line_count = 2 actual ' test_expect_success '--single-branch while HEAD pointing at master and --no-tags' ' ( cd dir_master_no_tags && 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 && # get tags (noop) ( cd dir_master_no_tags && git fetch && git for-each-ref refs/tags >../actual ) && test_must_be_empty actual && test_line_count = 0 actual && # get tags with --tags overrides tagOpt ( cd dir_master_no_tags && git fetch --tags && git for-each-ref refs/tags >../actual ) && git for-each-ref refs/tags >expect && test_cmp expect actual && test_line_count = 2 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 explicit --branch with tag fetches updated tag despite --no-tags' ' ( cd dir_tag_no_tags && git fetch && git for-each-ref refs/tags >../actual ) && git for-each-ref refs/tags/two >expect && test_cmp expect actual && test_line_count = 1 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 test_must_be_empty actual ' test_done