mirror of
https://github.com/crawlab-team/crawlab.git
synced 2026-01-21 17:21:09 +01:00
257 lines
4.9 KiB
Go
257 lines
4.9 KiB
Go
package vcs
|
|
|
|
import (
|
|
"github.com/go-git/go-git/v5"
|
|
"github.com/go-git/go-git/v5/config"
|
|
"github.com/go-git/go-git/v5/plumbing"
|
|
"github.com/go-git/go-git/v5/plumbing/object"
|
|
"github.com/go-git/go-git/v5/plumbing/transport"
|
|
"strings"
|
|
)
|
|
|
|
type GitOption func(c *GitClient)
|
|
|
|
func WithPath(path string) GitOption {
|
|
return func(c *GitClient) {
|
|
c.path = path
|
|
}
|
|
}
|
|
|
|
func WithRemoteUrl(url string) GitOption {
|
|
return func(c *GitClient) {
|
|
c.remoteUrl = url
|
|
}
|
|
}
|
|
|
|
func WithIsMem() GitOption {
|
|
return func(c *GitClient) {
|
|
c.isMem = true
|
|
}
|
|
}
|
|
|
|
func WithAuthType(authType GitAuthType) GitOption {
|
|
return func(c *GitClient) {
|
|
c.authType = authType
|
|
}
|
|
}
|
|
|
|
func WithUsername(username string) GitOption {
|
|
return func(c *GitClient) {
|
|
c.username = username
|
|
}
|
|
}
|
|
|
|
func WithPassword(password string) GitOption {
|
|
return func(c *GitClient) {
|
|
c.password = password
|
|
}
|
|
}
|
|
|
|
func WithPrivateKey(key string) GitOption {
|
|
return func(c *GitClient) {
|
|
c.privateKey = key
|
|
}
|
|
}
|
|
|
|
func WithDefaultBranch(branch string) GitOption {
|
|
return func(c *GitClient) {
|
|
c.defaultBranch = branch
|
|
}
|
|
}
|
|
|
|
func WithDefaultInit(init bool) GitOption {
|
|
return func(c *GitClient) {
|
|
c.defaultInit = init
|
|
}
|
|
}
|
|
|
|
func WithPrivateKeyPath(path string) GitOption {
|
|
return func(c *GitClient) {
|
|
c.privateKeyPath = path
|
|
}
|
|
}
|
|
|
|
type GitCloneOption func(o *git.CloneOptions)
|
|
|
|
func WithURL(url string) GitCloneOption {
|
|
return func(o *git.CloneOptions) {
|
|
o.URL = url
|
|
}
|
|
}
|
|
|
|
func WithAuthClone(auth transport.AuthMethod) GitCloneOption {
|
|
return func(o *git.CloneOptions) {
|
|
o.Auth = auth
|
|
}
|
|
}
|
|
|
|
func WithRemoteName(name string) GitCloneOption {
|
|
return func(o *git.CloneOptions) {
|
|
o.RemoteName = name
|
|
}
|
|
}
|
|
|
|
func WithSingleBranch(singleBranch bool) GitCloneOption {
|
|
return func(o *git.CloneOptions) {
|
|
o.SingleBranch = singleBranch
|
|
}
|
|
}
|
|
|
|
func WithNoCheckout(noCheckout bool) GitCloneOption {
|
|
return func(o *git.CloneOptions) {
|
|
o.NoCheckout = noCheckout
|
|
}
|
|
}
|
|
|
|
func WithDepthClone(depth int) GitCloneOption {
|
|
return func(o *git.CloneOptions) {
|
|
o.Depth = depth
|
|
}
|
|
}
|
|
|
|
func WithRecurseSubmodules(recurseSubmodules git.SubmoduleRescursivity) GitCloneOption {
|
|
return func(o *git.CloneOptions) {
|
|
o.RecurseSubmodules = recurseSubmodules
|
|
}
|
|
}
|
|
|
|
func WithTags(tags git.TagMode) GitCloneOption {
|
|
return func(o *git.CloneOptions) {
|
|
o.Tags = tags
|
|
}
|
|
}
|
|
|
|
type GitCheckoutOption func(o *git.CheckoutOptions)
|
|
|
|
func WithBranch(branch string) GitCheckoutOption {
|
|
return func(o *git.CheckoutOptions) {
|
|
if strings.HasPrefix(branch, "refs/heads") {
|
|
o.Branch = plumbing.ReferenceName(branch)
|
|
} else {
|
|
o.Branch = plumbing.NewBranchReferenceName(branch)
|
|
}
|
|
}
|
|
}
|
|
|
|
func WithHash(hash string) GitCheckoutOption {
|
|
return func(o *git.CheckoutOptions) {
|
|
h := plumbing.NewHash(hash)
|
|
if h.IsZero() {
|
|
return
|
|
}
|
|
o.Hash = h
|
|
}
|
|
}
|
|
|
|
type GitCommitOption func(o *git.CommitOptions)
|
|
|
|
func WithAll(all bool) GitCommitOption {
|
|
return func(o *git.CommitOptions) {
|
|
o.All = all
|
|
}
|
|
}
|
|
|
|
func WithAuthor(author *object.Signature) GitCommitOption {
|
|
return func(o *git.CommitOptions) {
|
|
o.Author = author
|
|
}
|
|
}
|
|
|
|
func WithCommitter(committer *object.Signature) GitCommitOption {
|
|
return func(o *git.CommitOptions) {
|
|
o.Committer = committer
|
|
}
|
|
}
|
|
|
|
func WithParents(parents []plumbing.Hash) GitCommitOption {
|
|
return func(o *git.CommitOptions) {
|
|
o.Parents = parents
|
|
}
|
|
}
|
|
|
|
type GitPullOption func(o *git.PullOptions)
|
|
|
|
func WithRemoteNamePull(name string) GitPullOption {
|
|
return func(o *git.PullOptions) {
|
|
o.RemoteName = name
|
|
}
|
|
}
|
|
|
|
func WithBranchNamePull(branch string) GitPullOption {
|
|
return func(o *git.PullOptions) {
|
|
o.ReferenceName = plumbing.NewBranchReferenceName(branch)
|
|
}
|
|
}
|
|
|
|
func WithDepthPull(depth int) GitPullOption {
|
|
return func(o *git.PullOptions) {
|
|
o.Depth = depth
|
|
}
|
|
}
|
|
|
|
func WithAuthPull(auth transport.AuthMethod) GitPullOption {
|
|
return func(o *git.PullOptions) {
|
|
if auth != nil {
|
|
o.Auth = auth
|
|
}
|
|
}
|
|
}
|
|
|
|
func WithRecurseSubmodulesPull(recurseSubmodules git.SubmoduleRescursivity) GitPullOption {
|
|
return func(o *git.PullOptions) {
|
|
o.RecurseSubmodules = recurseSubmodules
|
|
}
|
|
}
|
|
|
|
func WithForcePull(force bool) GitPullOption {
|
|
return func(o *git.PullOptions) {
|
|
o.Force = force
|
|
}
|
|
}
|
|
|
|
type GitPushOption func(o *git.PushOptions)
|
|
|
|
func WithRemoteNamePush(name string) GitPushOption {
|
|
return func(o *git.PushOptions) {
|
|
o.RemoteName = name
|
|
}
|
|
}
|
|
|
|
func WithRefSpecs(specs []config.RefSpec) GitPushOption {
|
|
return func(o *git.PushOptions) {
|
|
o.RefSpecs = specs
|
|
}
|
|
}
|
|
|
|
func WithAuthPush(auth transport.AuthMethod) GitPushOption {
|
|
return func(o *git.PushOptions) {
|
|
o.Auth = auth
|
|
}
|
|
}
|
|
|
|
func WithPrune(prune bool) GitPushOption {
|
|
return func(o *git.PushOptions) {
|
|
o.Prune = prune
|
|
}
|
|
}
|
|
|
|
func WithForcePush(force bool) GitPushOption {
|
|
return func(o *git.PushOptions) {
|
|
o.Force = force
|
|
}
|
|
}
|
|
|
|
type GitResetOption func(o *git.ResetOptions)
|
|
|
|
func WithCommit(commit plumbing.Hash) GitResetOption {
|
|
return func(o *git.ResetOptions) {
|
|
o.Commit = commit
|
|
}
|
|
}
|
|
|
|
func WithMode(mode git.ResetMode) GitResetOption {
|
|
return func(o *git.ResetOptions) {
|
|
o.Mode = mode
|
|
}
|
|
}
|