operations/commit-diff.go (63 lines of code) (raw):
package operations
import (
"context"
"flag"
"io"
"google.golang.org/grpc"
pb "gitlab.com/gitlab-org/gitaly-proto/go/gitalypb"
)
type cd struct {
repository *pb.Repository
conn *grpc.ClientConn
client pb.DiffServiceClient
f func(cd) error
}
// CommitDiffFlagSet are flags used by CommitDiff
var CommitDiffFlagSet = flag.NewFlagSet("cd", flag.ExitOnError)
var commitDiffLeftCommitID = CommitDiffFlagSet.String("left", "", "LeftCommitID")
var commitDiffRightCommitID = CommitDiffFlagSet.String("right", "", "RightCommitID")
var commitDiffIgnoreWhitespaceChange = CommitDiffFlagSet.Bool("ignore-whitespace", true, "IgnoreWhitespaceChange")
var commitDiffCollapseDiffs = CommitDiffFlagSet.Bool("collapse-diffs", true, "CollapseDiffs")
var commitDiffEnforceLimits = CommitDiffFlagSet.Bool("enforce-limits", true, "EnforceLimits")
var commitDiffMaxFiles = CommitDiffFlagSet.Int("max-files", 0, "MaxFiles")
var commitDiffMaxLines = CommitDiffFlagSet.Int("max-lines", 0, "MaxLines")
var commitDiffMaxBytes = CommitDiffFlagSet.Int("max-bytes", 0, "MaxBytes")
var commitDiffSafeMaxFiles = CommitDiffFlagSet.Int("safe-max-files", 0, "SafeMaxFiles")
var commitDiffSafeMaxLines = CommitDiffFlagSet.Int("safe-max-lines", 0, "SafeMaxLines")
var commitDiffSafeMaxBytes = CommitDiffFlagSet.Int("safe-max-bytes", 0, "SafeMaxBytes")
func (b cd) Run() error {
return b.f(b)
}
func commitDiff(b cd) error {
request := &pb.CommitDiffRequest{
Repository: b.repository,
LeftCommitId: *commitDiffLeftCommitID,
RightCommitId: *commitDiffRightCommitID,
IgnoreWhitespaceChange: *commitDiffIgnoreWhitespaceChange,
Paths: nil,
CollapseDiffs: *commitDiffCollapseDiffs,
EnforceLimits: *commitDiffEnforceLimits,
MaxFiles: int32(*commitDiffMaxFiles),
MaxLines: int32(*commitDiffMaxLines),
MaxBytes: int32(*commitDiffMaxBytes),
SafeMaxFiles: int32(*commitDiffSafeMaxFiles),
SafeMaxLines: int32(*commitDiffSafeMaxLines),
SafeMaxBytes: int32(*commitDiffSafeMaxBytes),
}
stream, err := b.client.CommitDiff(context.Background(), request)
if err != nil {
return err
}
for {
_, err := stream.Recv()
if err == io.EOF {
return nil
}
if err != nil {
return err
}
}
}
// NewCommitDiff creates a new benchmark operation
func NewCommitDiff(repository *pb.Repository, conn *grpc.ClientConn) BenchmarkOperation {
client := pb.NewDiffServiceClient(conn)
return cd{repository: repository, conn: conn, client: client, f: commitDiff}
}