-
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.
clone --single: limit the fetch refspec to fetched branch
After running "git clone --single", the resulting repository has the usual default "+refs/heads/*:refs/remotes/origin/*" wildcard fetch refspec installed, which means that a subsequent "git fetch" will end up grabbing all the other branches. Update the fetch refspec to cover only the singly cloned ref instead to correct this. That means: If "--single" is used without "--branch" or "--mirror", the fetch refspec covers the branch on which remote's HEAD points to. If "--single" is used with "--branch", it'll cover only the branch specified in the "--branch" option. If "--single" is combined with "--mirror", then it'll cover all refs of the cloned repository. If "--single" is used with "--branch" that specifies a tag, then it'll cover only the ref for this tag. Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Ralf Thielow
authored and
Junio C Hamano
committed
Sep 20, 2012
1 parent
1403db4
commit 31b808a
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 |