factor out unmanaged checkout into its own functions
Signed-off-by: Sanskar Jaiswal <jaiswalsanskar078@gmail.com>
This commit is contained in:
parent
94c50fa3a8
commit
5152721ae0
|
@ -184,35 +184,39 @@ func (c *CheckoutBranch) Checkout(ctx context.Context, path, url string, opts *g
|
||||||
|
|
||||||
return buildCommit(cc, "refs/heads/"+c.Branch), nil
|
return buildCommit(cc, "refs/heads/"+c.Branch), nil
|
||||||
} else {
|
} else {
|
||||||
repo, err := git2go.Clone(url, path, &git2go.CloneOptions{
|
return c.checkoutUnmanaged(ctx, path, url, opts)
|
||||||
FetchOptions: git2go.FetchOptions{
|
|
||||||
DownloadTags: git2go.DownloadTagsNone,
|
|
||||||
RemoteCallbacks: RemoteCallbacks(ctx, opts),
|
|
||||||
ProxyOptions: git2go.ProxyOptions{Type: git2go.ProxyTypeAuto},
|
|
||||||
},
|
|
||||||
CheckoutOptions: git2go.CheckoutOptions{
|
|
||||||
Strategy: git2go.CheckoutForce,
|
|
||||||
},
|
|
||||||
CheckoutBranch: c.Branch,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("unable to clone '%s': %w", managed.EffectiveURL(url), gitutil.LibGit2Error(err))
|
|
||||||
}
|
|
||||||
defer repo.Free()
|
|
||||||
head, err := repo.Head()
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("git resolve HEAD error: %w", err)
|
|
||||||
}
|
|
||||||
defer head.Free()
|
|
||||||
cc, err := repo.LookupCommit(head.Target())
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("failed to lookup HEAD commit '%s' for branch '%s': %w", head.Target(), c.Branch, err)
|
|
||||||
}
|
|
||||||
defer cc.Free()
|
|
||||||
return buildCommit(cc, "refs/heads/"+c.Branch), nil
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *CheckoutBranch) checkoutUnmanaged(ctx context.Context, path, url string, opts *git.AuthOptions) (_ *git.Commit, err error) {
|
||||||
|
repo, err := git2go.Clone(url, path, &git2go.CloneOptions{
|
||||||
|
FetchOptions: git2go.FetchOptions{
|
||||||
|
DownloadTags: git2go.DownloadTagsNone,
|
||||||
|
RemoteCallbacks: RemoteCallbacks(ctx, opts),
|
||||||
|
ProxyOptions: git2go.ProxyOptions{Type: git2go.ProxyTypeAuto},
|
||||||
|
},
|
||||||
|
CheckoutOptions: git2go.CheckoutOptions{
|
||||||
|
Strategy: git2go.CheckoutForce,
|
||||||
|
},
|
||||||
|
CheckoutBranch: c.Branch,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("unable to clone '%s': %w", managed.EffectiveURL(url), gitutil.LibGit2Error(err))
|
||||||
|
}
|
||||||
|
defer repo.Free()
|
||||||
|
head, err := repo.Head()
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("git resolve HEAD error: %w", err)
|
||||||
|
}
|
||||||
|
defer head.Free()
|
||||||
|
cc, err := repo.LookupCommit(head.Target())
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to lookup HEAD commit '%s' for branch '%s': %w", head.Target(), c.Branch, err)
|
||||||
|
}
|
||||||
|
defer cc.Free()
|
||||||
|
return buildCommit(cc, "refs/heads/"+c.Branch), nil
|
||||||
|
}
|
||||||
|
|
||||||
type CheckoutTag struct {
|
type CheckoutTag struct {
|
||||||
Tag string
|
Tag string
|
||||||
LastRevision string
|
LastRevision string
|
||||||
|
@ -305,26 +309,30 @@ func (c *CheckoutTag) Checkout(ctx context.Context, path, url string, opts *git.
|
||||||
defer cc.Free()
|
defer cc.Free()
|
||||||
return buildCommit(cc, "refs/tags/"+c.Tag), nil
|
return buildCommit(cc, "refs/tags/"+c.Tag), nil
|
||||||
} else {
|
} else {
|
||||||
repo, err := git2go.Clone(url, path, &git2go.CloneOptions{
|
return c.checkoutUnmanaged(ctx, path, url, opts)
|
||||||
FetchOptions: git2go.FetchOptions{
|
|
||||||
DownloadTags: git2go.DownloadTagsAll,
|
|
||||||
RemoteCallbacks: RemoteCallbacks(ctx, opts),
|
|
||||||
ProxyOptions: git2go.ProxyOptions{Type: git2go.ProxyTypeAuto},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("unable to clone '%s': %w", managed.EffectiveURL(url), gitutil.LibGit2Error(err))
|
|
||||||
}
|
|
||||||
defer repo.Free()
|
|
||||||
cc, err := checkoutDetachedDwim(repo, c.Tag)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
defer cc.Free()
|
|
||||||
return buildCommit(cc, "refs/tags/"+c.Tag), nil
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *CheckoutTag) checkoutUnmanaged(ctx context.Context, path, url string, opts *git.AuthOptions) (_ *git.Commit, err error) {
|
||||||
|
repo, err := git2go.Clone(url, path, &git2go.CloneOptions{
|
||||||
|
FetchOptions: git2go.FetchOptions{
|
||||||
|
DownloadTags: git2go.DownloadTagsAll,
|
||||||
|
RemoteCallbacks: RemoteCallbacks(ctx, opts),
|
||||||
|
ProxyOptions: git2go.ProxyOptions{Type: git2go.ProxyTypeAuto},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("unable to clone '%s': %w", managed.EffectiveURL(url), gitutil.LibGit2Error(err))
|
||||||
|
}
|
||||||
|
defer repo.Free()
|
||||||
|
cc, err := checkoutDetachedDwim(repo, c.Tag)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer cc.Free()
|
||||||
|
return buildCommit(cc, "refs/tags/"+c.Tag), nil
|
||||||
|
}
|
||||||
|
|
||||||
type CheckoutCommit struct {
|
type CheckoutCommit struct {
|
||||||
Commit string
|
Commit string
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ import (
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCheckoutBranch_Checkout(t *testing.T) {
|
func TestCheckoutBranch_checkoutUnmanaged(t *testing.T) {
|
||||||
repo, err := initBareRepo(t)
|
repo, err := initBareRepo(t)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
@ -126,7 +126,7 @@ func TestCheckoutBranch_Checkout(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCheckoutTag_Checkout(t *testing.T) {
|
func TestCheckoutTag_checkoutUnmanaged(t *testing.T) {
|
||||||
type testTag struct {
|
type testTag struct {
|
||||||
name string
|
name string
|
||||||
annotated bool
|
annotated bool
|
||||||
|
|
Loading…
Reference in New Issue