schnutibox/vendor/github.com/bufbuild/buf/internal/pkg/git/git.go

93 lines
2.6 KiB
Go
Raw Normal View History

// Copyright 2020-2021 Buf Technologies, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package git
import (
"context"
"github.com/bufbuild/buf/internal/pkg/app"
"github.com/bufbuild/buf/internal/pkg/storage"
"github.com/bufbuild/buf/internal/pkg/storage/storageos"
"go.uber.org/zap"
)
// Name is a name identifiable by git.
type Name interface {
// If cloneBranch returns a non-empty string, any clones will be performed with --branch set to the value.
cloneBranch() string
// If checkout returns a non-empty string, a checkout of the value will be performed after cloning.
checkout() string
}
// NewBranchName returns a new Name for the branch.
func NewBranchName(branch string) Name {
return newBranch(branch)
}
// NewTagName returns a new Name for the tag.
func NewTagName(tag string) Name {
return newBranch(tag)
}
// NewRefName returns a new Name for the ref.
func NewRefName(ref string) Name {
return newRef(ref)
}
// NewRefNameWithBranch returns a new Name for the ref while setting branch as the clone target.
func NewRefNameWithBranch(ref string, branch string) Name {
return newRefWithBranch(ref, branch)
}
// Cloner clones git repositories to buckets.
type Cloner interface {
// CloneToBucket clones the repository to the bucket.
//
// The url must contain the scheme, including file:// if necessary.
// depth must be > 0.
CloneToBucket(
ctx context.Context,
envContainer app.EnvContainer,
url string,
depth uint32,
writeBucket storage.WriteBucket,
options CloneToBucketOptions,
) error
}
// CloneToBucketOptions are options for Clone.
type CloneToBucketOptions struct {
Mapper storage.Mapper
Name Name
RecurseSubmodules bool
}
// NewCloner returns a new Cloner.
func NewCloner(
logger *zap.Logger,
storageosProvider storageos.Provider,
options ClonerOptions,
) Cloner {
return newCloner(logger, storageosProvider, options)
}
// ClonerOptions are options for a new Cloner.
type ClonerOptions struct {
HTTPSUsernameEnvKey string
HTTPSPasswordEnvKey string
SSHKeyFileEnvKey string
SSHKnownHostsFilesEnvKey string
}