diff options
Diffstat (limited to 't/t5612-clone-refspec.sh')
-rwxr-xr-x | t/t5612-clone-refspec.sh | 238 |
1 files changed, 238 insertions, 0 deletions
diff --git a/t/t5612-clone-refspec.sh b/t/t5612-clone-refspec.sh new file mode 100755 index 0000000..3126cfd --- /dev/null +++ b/t/t5612-clone-refspec.sh @@ -0,0 +1,238 @@ +#!/bin/sh + +test_description='test refspec written by clone-command' +GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main +export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME + +. ./test-lib.sh + +test_expect_success 'setup' ' + # Make two branches, "main" 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 main && + 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=main + git clone --single-branch . dir_main && + + # default --single that follows HEAD=main with no tags + git clone --single-branch --no-tags . dir_main_no_tags && + + # default --single that follows HEAD=side + git checkout side && + git clone --single-branch . dir_side && + + # explicit --single that follows side + git checkout main && + 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 "main" and "side" branches + git checkout side && + echo five >file && + git commit -a -m five && + git checkout main && + 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 >refs && + sed -e "/HEAD$/d" \ + -e "s|/remotes/origin/|/heads/|" refs >../actual + ) && + # follow both main 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_cmp expect actual && + test_line_count = 2 actual +' + +test_expect_success 'clone with --no-tags' ' + ( + cd dir_all_no_tags && + grep tagOpt .git/config && + git fetch && + git for-each-ref refs/tags >../actual + ) && + test_must_be_empty actual +' + +test_expect_success '--single-branch while HEAD pointing at main' ' + ( + cd dir_main && + git fetch --force && + git for-each-ref refs/remotes/origin >refs && + sed -e "/HEAD$/d" \ + -e "s|/remotes/origin/|/heads/|" refs >../actual + ) && + # only follow main + git for-each-ref refs/heads/main >expect && + # get & check latest tags + test_cmp expect actual && + ( + cd dir_main && + 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 main and --no-tags' ' + ( + cd dir_main_no_tags && + git fetch && + git for-each-ref refs/remotes/origin >refs && + sed -e "/HEAD$/d" \ + -e "s|/remotes/origin/|/heads/|" refs >../actual + ) && + # only follow main + git for-each-ref refs/heads/main >expect && + test_cmp expect actual && + # get tags (noop) + ( + cd dir_main_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_main_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 >refs && + sed -e "/HEAD$/d" \ + -e "s|/remotes/origin/|/heads/|" refs >../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 >refs && + sed -e "/HEAD$/d" \ + -e "s|/remotes/origin/|/heads/|" refs >../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 >refs && + sed -e "/HEAD$/d" \ + -e "s|/remotes/origin/|/heads/|" refs >../actual + ) && + # nothing + test_must_be_empty actual +' + +test_done |