operations/garbage-collect.go (42 lines of code) (raw):
package operations
import (
"context"
"flag"
"google.golang.org/grpc"
pb "gitlab.com/gitlab-org/gitaly-proto/go/gitalypb"
)
type gc struct {
repository *pb.Repository
conn *grpc.ClientConn
client pb.RepositoryServiceClient
f func(gc) error
}
// GCFlagSet are flags used by GC and Repack
var GCFlagSet = flag.NewFlagSet("gc", flag.ExitOnError)
var bitmapFlag = GCFlagSet.Bool("bitmap", false, "Create bitmap")
func (b gc) Run() error {
return b.f(b)
}
func garbageCollect(b gc) error {
request := &pb.GarbageCollectRequest{
Repository: b.repository,
CreateBitmap: *bitmapFlag,
}
_, err := b.client.GarbageCollect(context.Background(), request)
return err
}
func repackFullBenchmark(b gc) error {
request := &pb.RepackFullRequest{
Repository: b.repository,
CreateBitmap: *bitmapFlag,
}
_, err := b.client.RepackFull(context.Background(), request)
return err
}
// NewGC creates a new benchmark operation
func NewGC(repository *pb.Repository, conn *grpc.ClientConn) BenchmarkOperation {
client := pb.NewRepositoryServiceClient(conn)
return gc{repository: repository, conn: conn, client: client, f: garbageCollect}
}
// NewRepackFull creates a new benchmark operation
func NewRepackFull(repository *pb.Repository, conn *grpc.ClientConn) BenchmarkOperation {
client := pb.NewRepositoryServiceClient(conn)
return gc{repository: repository, conn: conn, client: client, f: repackFullBenchmark}
}