-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'rt/maint-clone-single' into maint
A repository created with "git clone --single" had its fetch refspecs set up just like a clone without "--single", leading the subsequent "git fetch" to slurp all the other branches, defeating the whole point of specifying "only this branch". * rt/maint-clone-single: clone --single: limit the fetch refspec to fetched branch
- Loading branch information
Showing
3 changed files
with
218 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,156 @@ | ||
#!/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 && | ||
# 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 |