Skip to content

Commit 6e23506

Browse files
committed
repository: Fix RefSpec for a single tag. Fixes src-d#960
Signed-off-by: Fedor Korotkov <[email protected]>
1 parent cd64b4d commit 6e23506

File tree

1 file changed

+19
-15
lines changed

1 file changed

+19
-15
lines changed

repository.go

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -640,16 +640,17 @@ func (r *Repository) clone(ctx context.Context, o *CloneOptions) error {
640640
}
641641

642642
c := &config.RemoteConfig{
643-
Name: o.RemoteName,
644-
URLs: []string{o.URL},
643+
Name: o.RemoteName,
644+
URLs: []string{o.URL},
645+
Fetch: r.cloneRefSpec(o),
645646
}
646647

647648
if _, err := r.CreateRemote(c); err != nil {
648649
return err
649650
}
650651

651652
ref, err := r.fetchAndUpdateReferences(ctx, &FetchOptions{
652-
RefSpecs: r.cloneRefSpec(o, c),
653+
RefSpecs: c.Fetch,
653654
Depth: o.Depth,
654655
Auth: o.Auth,
655656
Progress: o.Progress,
@@ -719,21 +720,26 @@ const (
719720
refspecSingleBranchHEAD = "+HEAD:refs/remotes/%s/HEAD"
720721
)
721722

722-
func (r *Repository) cloneRefSpec(o *CloneOptions, c *config.RemoteConfig) []config.RefSpec {
723-
var rs string
724-
723+
func (r *Repository) cloneRefSpec(o *CloneOptions) []config.RefSpec {
725724
switch {
726725
case o.ReferenceName.IsTag():
727-
rs = fmt.Sprintf(refspecTag, o.ReferenceName.Short())
726+
return []config.RefSpec{
727+
config.RefSpec(fmt.Sprintf(refspecTag, o.ReferenceName.Short())),
728+
}
728729
case o.SingleBranch && o.ReferenceName == plumbing.HEAD:
729-
rs = fmt.Sprintf(refspecSingleBranchHEAD, c.Name)
730+
return []config.RefSpec{
731+
config.RefSpec(fmt.Sprintf(refspecSingleBranchHEAD, o.RemoteName)),
732+
config.RefSpec(fmt.Sprintf(refspecSingleBranch, plumbing.Master.Short(), o.RemoteName)),
733+
}
730734
case o.SingleBranch:
731-
rs = fmt.Sprintf(refspecSingleBranch, o.ReferenceName.Short(), c.Name)
735+
return []config.RefSpec{
736+
config.RefSpec(fmt.Sprintf(refspecSingleBranch, o.ReferenceName.Short(), o.RemoteName)),
737+
}
732738
default:
733-
return c.Fetch
739+
return []config.RefSpec{
740+
config.RefSpec(fmt.Sprintf(config.DefaultFetchRefSpec, o.RemoteName)),
741+
}
734742
}
735-
736-
return []config.RefSpec{config.RefSpec(rs)}
737743
}
738744

739745
func (r *Repository) setIsBare(isBare bool) error {
@@ -751,9 +757,7 @@ func (r *Repository) updateRemoteConfigIfNeeded(o *CloneOptions, c *config.Remot
751757
return nil
752758
}
753759

754-
c.Fetch = []config.RefSpec{config.RefSpec(fmt.Sprintf(
755-
refspecSingleBranch, head.Name().Short(), c.Name,
756-
))}
760+
c.Fetch = r.cloneRefSpec(o)
757761

758762
cfg, err := r.Storer.Config()
759763
if err != nil {

0 commit comments

Comments
 (0)