Skip to content

Commit

Permalink
repository: Fix RefSpec for a single tag. Fixes src-d#960
Browse files Browse the repository at this point in the history
Signed-off-by: Fedor Korotkov <fedor.korotkov@gmail.com>
  • Loading branch information
fkorotkov committed Nov 6, 2018
1 parent cd64b4d commit 6e23506
Showing 1 changed file with 19 additions and 15 deletions.
34 changes: 19 additions & 15 deletions repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -640,16 +640,17 @@ func (r *Repository) clone(ctx context.Context, o *CloneOptions) error {
}

c := &config.RemoteConfig{
Name: o.RemoteName,
URLs: []string{o.URL},
Name: o.RemoteName,
URLs: []string{o.URL},
Fetch: r.cloneRefSpec(o),
}

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

ref, err := r.fetchAndUpdateReferences(ctx, &FetchOptions{
RefSpecs: r.cloneRefSpec(o, c),
RefSpecs: c.Fetch,
Depth: o.Depth,
Auth: o.Auth,
Progress: o.Progress,
Expand Down Expand Up @@ -719,21 +720,26 @@ const (
refspecSingleBranchHEAD = "+HEAD:refs/remotes/%s/HEAD"
)

func (r *Repository) cloneRefSpec(o *CloneOptions, c *config.RemoteConfig) []config.RefSpec {
var rs string

func (r *Repository) cloneRefSpec(o *CloneOptions) []config.RefSpec {
switch {
case o.ReferenceName.IsTag():
rs = fmt.Sprintf(refspecTag, o.ReferenceName.Short())
return []config.RefSpec{
config.RefSpec(fmt.Sprintf(refspecTag, o.ReferenceName.Short())),
}
case o.SingleBranch && o.ReferenceName == plumbing.HEAD:
rs = fmt.Sprintf(refspecSingleBranchHEAD, c.Name)
return []config.RefSpec{
config.RefSpec(fmt.Sprintf(refspecSingleBranchHEAD, o.RemoteName)),
config.RefSpec(fmt.Sprintf(refspecSingleBranch, plumbing.Master.Short(), o.RemoteName)),
}
case o.SingleBranch:
rs = fmt.Sprintf(refspecSingleBranch, o.ReferenceName.Short(), c.Name)
return []config.RefSpec{
config.RefSpec(fmt.Sprintf(refspecSingleBranch, o.ReferenceName.Short(), o.RemoteName)),
}
default:
return c.Fetch
return []config.RefSpec{
config.RefSpec(fmt.Sprintf(config.DefaultFetchRefSpec, o.RemoteName)),
}
}

return []config.RefSpec{config.RefSpec(rs)}
}

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

c.Fetch = []config.RefSpec{config.RefSpec(fmt.Sprintf(
refspecSingleBranch, head.Name().Short(), c.Name,
))}
c.Fetch = r.cloneRefSpec(o)

cfg, err := r.Storer.Config()
if err != nil {
Expand Down

0 comments on commit 6e23506

Please sign in to comment.