Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Vosmaer (GitLab) <jacob@gitlab.com>2018-05-22 17:02:25 +0300
committerJacob Vosmaer (GitLab) <jacob@gitlab.com>2018-05-22 17:02:25 +0300
commit331752d9e1c73585d3eeada10c519bf69997e8f9 (patch)
tree549bb9cdcb304da0b71f4112d0fc398cc08e0b6a
parent950d2f5e8c28597af1891d1f6015f7d1e0ece8b6 (diff)
Add StorageService::DeleteAllRepositories RPC
-rw-r--r--changelogs/unreleased/delete-all-repositories.yml5
-rw-r--r--internal/helper/fieldextractors/fieldextractor.go14
-rw-r--r--internal/service/register.go2
-rw-r--r--internal/service/storage/.gitignore1
-rw-r--r--internal/service/storage/deleteall.go69
-rw-r--r--internal/service/storage/deleteall_test.go133
-rw-r--r--internal/service/storage/server.go12
-rw-r--r--internal/service/storage/testhelper_test.go74
-rw-r--r--internal/tempdir/tempdir.go45
-rw-r--r--internal/tempdir/tempdir_test.go4
-rw-r--r--vendor/gitlab.com/gitlab-org/gitaly-proto/go/VERSION2
-rw-r--r--vendor/gitlab.com/gitlab-org/gitaly-proto/go/blob.pb.go3
-rw-r--r--vendor/gitlab.com/gitlab-org/gitaly-proto/go/storage.pb.go135
-rw-r--r--vendor/gitlab.com/gitlab-org/gitaly-proto/go/wiki.pb.go42
-rw-r--r--vendor/vendor.json10
15 files changed, 509 insertions, 42 deletions
diff --git a/changelogs/unreleased/delete-all-repositories.yml b/changelogs/unreleased/delete-all-repositories.yml
new file mode 100644
index 000000000..b60f0f458
--- /dev/null
+++ b/changelogs/unreleased/delete-all-repositories.yml
@@ -0,0 +1,5 @@
+---
+title: Add StorageService::DeleteAllRepositories RPC
+merge_request: 726
+author:
+type: added
diff --git a/internal/helper/fieldextractors/fieldextractor.go b/internal/helper/fieldextractors/fieldextractor.go
index 350829bb6..07e51e20d 100644
--- a/internal/helper/fieldextractors/fieldextractor.go
+++ b/internal/helper/fieldextractors/fieldextractor.go
@@ -11,10 +11,14 @@ type repositoryBasedRequest interface {
}
type namespaceBasedRequest interface {
- GetStorageName() string
+ storageBasedRequest
GetName() string
}
+type storageBasedRequest interface {
+ GetStorageName() string
+}
+
func formatRepoRequest(repo *pb.Repository) map[string]interface{} {
if repo == nil {
// Signals that the client did not send a repo through, which
@@ -46,6 +50,12 @@ func getTopLevelGroupFromRepoPath(repoPath string) string {
return parts[0]
}
+func formatStorageRequest(storageReq storageBasedRequest) map[string]interface{} {
+ return map[string]interface{}{
+ "StorageName": storageReq.GetStorageName(),
+ }
+}
+
func formatNamespaceRequest(namespaceReq namespaceBasedRequest) map[string]interface{} {
return map[string]interface{}{
"StorageName": namespaceReq.GetStorageName(),
@@ -74,6 +84,8 @@ func FieldExtractor(fullMethod string, req interface{}) map[string]interface{} {
return formatRepoRequest(req.(repositoryBasedRequest).GetRepository())
case namespaceBasedRequest:
return formatNamespaceRequest(req.(namespaceBasedRequest))
+ case storageBasedRequest:
+ return formatStorageRequest(req.(storageBasedRequest))
}
return nil
diff --git a/internal/service/register.go b/internal/service/register.go
index 82d792557..35db56c2e 100644
--- a/internal/service/register.go
+++ b/internal/service/register.go
@@ -16,6 +16,7 @@ import (
"gitlab.com/gitlab-org/gitaly/internal/service/server"
"gitlab.com/gitlab-org/gitaly/internal/service/smarthttp"
"gitlab.com/gitlab-org/gitaly/internal/service/ssh"
+ "gitlab.com/gitlab-org/gitaly/internal/service/storage"
"gitlab.com/gitlab-org/gitaly/internal/service/wiki"
"google.golang.org/grpc"
@@ -40,6 +41,7 @@ func RegisterAll(grpcServer *grpc.Server, rubyServer *rubyserver.Server) {
pb.RegisterConflictsServiceServer(grpcServer, conflicts.NewServer(rubyServer))
pb.RegisterRemoteServiceServer(grpcServer, remote.NewServer(rubyServer))
pb.RegisterServerServiceServer(grpcServer, server.NewServer())
+ pb.RegisterStorageServiceServer(grpcServer, storage.NewServer())
healthpb.RegisterHealthServer(grpcServer, health.NewServer())
}
diff --git a/internal/service/storage/.gitignore b/internal/service/storage/.gitignore
new file mode 100644
index 000000000..2743e47ce
--- /dev/null
+++ b/internal/service/storage/.gitignore
@@ -0,0 +1 @@
+/testdata/repositories
diff --git a/internal/service/storage/deleteall.go b/internal/service/storage/deleteall.go
new file mode 100644
index 000000000..74951466f
--- /dev/null
+++ b/internal/service/storage/deleteall.go
@@ -0,0 +1,69 @@
+package storage
+
+import (
+ "io"
+ "os"
+ "path"
+
+ "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus"
+ log "github.com/sirupsen/logrus"
+ pb "gitlab.com/gitlab-org/gitaly-proto/go"
+ "gitlab.com/gitlab-org/gitaly/internal/helper"
+ "gitlab.com/gitlab-org/gitaly/internal/tempdir"
+ "golang.org/x/net/context"
+ "google.golang.org/grpc/codes"
+ "google.golang.org/grpc/status"
+)
+
+func (s *server) DeleteAllRepositories(ctx context.Context, req *pb.DeleteAllRepositoriesRequest) (*pb.DeleteAllRepositoriesResponse, error) {
+ storageDir, err := helper.GetStorageByName(req.StorageName)
+ if err != nil {
+ return nil, status.Errorf(codes.InvalidArgument, "storage lookup failed: %v", err)
+ }
+
+ trashDir, err := tempdir.ForDeleteAllRepositories(req.StorageName)
+ if err != nil {
+ return nil, status.Errorf(codes.Internal, "create trash dir: %v", err)
+ }
+
+ dir, err := os.Open(storageDir)
+ if err != nil {
+ return nil, status.Errorf(codes.Internal, "open storage dir: %v", err)
+ }
+ defer dir.Close()
+
+ grpc_logrus.Extract(ctx).WithFields(log.Fields{
+ "trashDir": trashDir,
+ "storage": req.StorageName,
+ }).Warn("moving all repositories in storage to trash")
+
+ count := 0
+ for done := false; !done; {
+ dirents, err := dir.Readdir(100)
+ if err == io.EOF {
+ done = true
+ } else if err != nil {
+ return nil, status.Errorf(codes.Internal, "read storage dir: %v", err)
+ }
+
+ for _, d := range dirents {
+ if d.Name() == tempdir.GitalyDataPrefix {
+ continue
+ }
+
+ count++
+
+ if err := os.Rename(path.Join(storageDir, d.Name()), path.Join(trashDir, d.Name())); err != nil {
+ return nil, status.Errorf(codes.Internal, "move dir: %v", err)
+ }
+ }
+ }
+
+ grpc_logrus.Extract(ctx).WithFields(log.Fields{
+ "trashDir": trashDir,
+ "storage": req.StorageName,
+ "numDirectories": count,
+ }).Warn("directories moved to trash")
+
+ return &pb.DeleteAllRepositoriesResponse{}, nil
+}
diff --git a/internal/service/storage/deleteall_test.go b/internal/service/storage/deleteall_test.go
new file mode 100644
index 000000000..4d51fbee3
--- /dev/null
+++ b/internal/service/storage/deleteall_test.go
@@ -0,0 +1,133 @@
+package storage
+
+import (
+ "fmt"
+ "io/ioutil"
+ "os"
+ "os/exec"
+ "path"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ pb "gitlab.com/gitlab-org/gitaly-proto/go"
+ "gitlab.com/gitlab-org/gitaly/internal/config"
+ "gitlab.com/gitlab-org/gitaly/internal/tempdir"
+ "gitlab.com/gitlab-org/gitaly/internal/testhelper"
+ "google.golang.org/grpc/codes"
+ "google.golang.org/grpc/status"
+)
+
+func TestDeleteAllSuccess(t *testing.T) {
+ require.NoError(t, os.RemoveAll(testStorage.Path))
+
+ gitalyDataFile := path.Join(testStorage.Path, tempdir.GitalyDataPrefix+"/foobar")
+ require.NoError(t, os.MkdirAll(path.Dir(gitalyDataFile), 0755))
+ require.NoError(t, ioutil.WriteFile(gitalyDataFile, nil, 0644))
+
+ repoPaths := []string{
+ "foo/bar1.git",
+ "foo/bar2.git",
+ "baz/foo/qux3.git",
+ "baz/foo/bar1.git",
+ }
+
+ for _, p := range repoPaths {
+ fullPath := path.Join(testStorage.Path, p)
+ require.NoError(t, os.MkdirAll(fullPath, 0755))
+ require.NoError(t, exec.Command("git", "init", "--bare", fullPath).Run())
+ }
+
+ dirents := storageDirents(t, testStorage)
+ expectedNames := []string{"+gitaly", "baz", "foo"}
+ require.Len(t, dirents, len(expectedNames))
+ for i, expected := range expectedNames {
+ require.Equal(t, expected, dirents[i].Name())
+ }
+
+ server, socketPath := runStorageServer(t)
+ defer server.Stop()
+
+ client, conn := newStorageClient(t, socketPath)
+ defer conn.Close()
+
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+ _, err := client.DeleteAllRepositories(ctx, &pb.DeleteAllRepositoriesRequest{StorageName: testStorage.Name})
+ require.NoError(t, err)
+
+ dirents = storageDirents(t, testStorage)
+ require.Len(t, dirents, 1)
+ require.Equal(t, "+gitaly", dirents[0].Name())
+
+ _, err = os.Stat(gitalyDataFile)
+ require.NoError(t, err, "unrelated data file should still exist")
+}
+
+func storageDirents(t *testing.T, st config.Storage) []os.FileInfo {
+ dirents, err := ioutil.ReadDir(st.Path)
+ require.NoError(t, err)
+ return dirents
+}
+
+func TestDeleteAllFail(t *testing.T) {
+ server, socketPath := runStorageServer(t)
+ defer server.Stop()
+
+ client, conn := newStorageClient(t, socketPath)
+ defer conn.Close()
+
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
+ testCases := []struct {
+ desc string
+ req *pb.DeleteAllRepositoriesRequest
+ setup func(t *testing.T)
+ code codes.Code
+ }{
+ {
+ desc: "empty storage name",
+ req: &pb.DeleteAllRepositoriesRequest{},
+ code: codes.InvalidArgument,
+ },
+ {
+ desc: "unknown storage name",
+ req: &pb.DeleteAllRepositoriesRequest{StorageName: "does not exist"},
+ code: codes.InvalidArgument,
+ },
+ {
+ desc: "cannot create trash dir",
+ req: &pb.DeleteAllRepositoriesRequest{StorageName: testStorage.Name},
+ setup: func(t *testing.T) {
+ dataDir := path.Join(testStorage.Path, tempdir.GitalyDataPrefix)
+ require.NoError(t, os.RemoveAll(dataDir))
+ require.NoError(t, ioutil.WriteFile(dataDir, nil, 0644), "write file where there should be a directory")
+
+ lsOut, err := exec.Command("ls", "-l", testStorage.Path).CombinedOutput()
+ require.NoError(t, err)
+ fmt.Printf("%s\n", lsOut)
+ },
+ code: codes.Internal,
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.desc, func(t *testing.T) {
+ require.NoError(t, os.RemoveAll(testStorage.Path))
+ require.NoError(t, os.MkdirAll(testStorage.Path, 0755))
+
+ repoPath := path.Join(testStorage.Path, "foobar.git")
+ require.NoError(t, exec.Command("git", "init", "--bare", repoPath).Run())
+
+ if tc.setup != nil {
+ tc.setup(t)
+ }
+
+ _, err := client.DeleteAllRepositories(ctx, tc.req)
+ require.Equal(t, tc.code, status.Code(err), "expected grpc status code")
+
+ _, err = os.Stat(repoPath)
+ require.NoError(t, err, "repo must still exist")
+ })
+ }
+}
diff --git a/internal/service/storage/server.go b/internal/service/storage/server.go
new file mode 100644
index 000000000..76d051a6a
--- /dev/null
+++ b/internal/service/storage/server.go
@@ -0,0 +1,12 @@
+package storage
+
+import (
+ pb "gitlab.com/gitlab-org/gitaly-proto/go"
+)
+
+type server struct{}
+
+// NewServer creates a new instance of a gRPC storage server
+func NewServer() pb.StorageServiceServer {
+ return &server{}
+}
diff --git a/internal/service/storage/testhelper_test.go b/internal/service/storage/testhelper_test.go
new file mode 100644
index 000000000..3f245e0dd
--- /dev/null
+++ b/internal/service/storage/testhelper_test.go
@@ -0,0 +1,74 @@
+package storage
+
+import (
+ "net"
+ "os"
+ "path/filepath"
+ "testing"
+ "time"
+
+ pb "gitlab.com/gitlab-org/gitaly-proto/go"
+ "gitlab.com/gitlab-org/gitaly/internal/config"
+ "gitlab.com/gitlab-org/gitaly/internal/testhelper"
+
+ "google.golang.org/grpc"
+ "google.golang.org/grpc/reflection"
+)
+
+var testStorage config.Storage
+
+func TestMain(m *testing.M) {
+ configureTestStorage()
+ os.Exit(m.Run())
+}
+
+func configureTestStorage() {
+ storagePath, err := filepath.Abs("testdata/repositories/storage1")
+ if err != nil {
+ panic(err)
+ }
+
+ if err := os.RemoveAll(storagePath); err != nil {
+ panic(err)
+ }
+
+ if err := os.MkdirAll(storagePath, 0755); err != nil {
+ panic(err)
+ }
+
+ testStorage = config.Storage{Name: "storage-will-be-deleted", Path: storagePath}
+
+ config.Config.Storages = []config.Storage{testStorage}
+}
+
+func runStorageServer(t *testing.T) (*grpc.Server, string) {
+ server := testhelper.NewTestGrpcServer(t, nil, nil)
+ serverSocketPath := testhelper.GetTemporaryGitalySocketFileName()
+
+ listener, err := net.Listen("unix", serverSocketPath)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ pb.RegisterStorageServiceServer(server, NewServer())
+ reflection.Register(server)
+
+ go server.Serve(listener)
+
+ return server, serverSocketPath
+}
+
+func newStorageClient(t *testing.T, serverSocketPath string) (pb.StorageServiceClient, *grpc.ClientConn) {
+ connOpts := []grpc.DialOption{
+ grpc.WithInsecure(),
+ grpc.WithDialer(func(addr string, timeout time.Duration) (net.Conn, error) {
+ return net.DialTimeout("unix", addr, timeout)
+ }),
+ }
+ conn, err := grpc.Dial(serverSocketPath, connOpts...)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ return pb.NewStorageServiceClient(conn), conn
+}
diff --git a/internal/tempdir/tempdir.go b/internal/tempdir/tempdir.go
index 649a91f0b..18b4e7bb9 100644
--- a/internal/tempdir/tempdir.go
+++ b/internal/tempdir/tempdir.go
@@ -2,6 +2,7 @@ package tempdir
import (
"context"
+ "fmt"
"io/ioutil"
"os"
"path/filepath"
@@ -17,14 +18,30 @@ import (
)
const (
- // We need to be careful that this path does not clash with any
- // directory name that could be provided by a user. The '+' character is
- // not allowed in GitLab namespaces or repositories.
- tmpRootPrefix = "+gitaly/tmp"
-
- maxAge = 7 * 24 * time.Hour
+ // GitalyDataPrefix is the top-level directory we use to store system
+ // (non-user) data. We need to be careful that this path does not clash
+ // with any directory name that could be provided by a user. The '+'
+ // character is not allowed in GitLab namespaces or repositories.
+ GitalyDataPrefix = "+gitaly"
+
+ // TmpRootPrefix is the directory in which we store temporary
+ // directories.
+ TmpRootPrefix = GitalyDataPrefix + "/tmp"
+
+ // MaxAge is used by ForDeleteAllRepositories. It is also a fallback
+ // for the context-scoped temporary directories, to ensure they get
+ // cleaned up if the cleanup at the end of the context failed to run.
+ MaxAge = 7 * 24 * time.Hour
)
+// ForDeleteAllRepositories returns a temporary directory for the given storage. It is not context-scoped but it will get removed eventuall (after MaxAge).
+func ForDeleteAllRepositories(storageName string) (string, error) {
+ prefix := fmt.Sprintf("%s-repositories.old.%d.", storageName, time.Now().Unix())
+ _, path, err := newAsRepository(context.Background(), storageName, prefix)
+
+ return path, err
+}
+
// New returns the path of a new temporary directory for use with the
// repository. The directory is removed with os.RemoveAll when ctx
// expires.
@@ -40,7 +57,11 @@ func New(ctx context.Context, repo *pb.Repository) (string, error) {
// NewAsRepository is the same as New, but it returns a *pb.Repository for the
// created directory as well as the bare path as a string
func NewAsRepository(ctx context.Context, repo *pb.Repository) (*pb.Repository, string, error) {
- storageDir, err := helper.GetStorageByName(repo.StorageName)
+ return newAsRepository(ctx, repo.StorageName, "repo")
+}
+
+func newAsRepository(ctx context.Context, storageName string, prefix string) (*pb.Repository, string, error) {
+ storageDir, err := helper.GetStorageByName(storageName)
if err != nil {
return nil, "", err
}
@@ -50,7 +71,7 @@ func NewAsRepository(ctx context.Context, repo *pb.Repository) (*pb.Repository,
return nil, "", err
}
- tempDir, err := ioutil.TempDir(root, "repo")
+ tempDir, err := ioutil.TempDir(root, prefix)
if err != nil {
return nil, "", err
}
@@ -60,13 +81,13 @@ func NewAsRepository(ctx context.Context, repo *pb.Repository) (*pb.Repository,
os.RemoveAll(tempDir)
}()
- newAsRepo := &pb.Repository{StorageName: repo.StorageName}
+ newAsRepo := &pb.Repository{StorageName: storageName}
newAsRepo.RelativePath, err = filepath.Rel(storageDir, tempDir)
return newAsRepo, tempDir, err
}
func tmpRoot(storageRoot string) string {
- return filepath.Join(storageRoot, tmpRootPrefix)
+ return filepath.Join(storageRoot, TmpRootPrefix)
}
// StartCleaning starts tempdir cleanup goroutines.
@@ -95,7 +116,7 @@ type invalidCleanRoot string
func clean(dir string) error {
// If we start "cleaning up" the wrong directory we may delete user data
// which is Really Bad.
- if !strings.HasSuffix(dir, tmpRootPrefix) {
+ if !strings.HasSuffix(dir, TmpRootPrefix) {
log.Print(dir)
panic(invalidCleanRoot("invalid tempdir clean root: panicking to prevent data loss"))
}
@@ -109,7 +130,7 @@ func clean(dir string) error {
}
for _, info := range entries {
- if time.Since(info.ModTime()) < maxAge {
+ if time.Since(info.ModTime()) < MaxAge {
continue
}
diff --git a/internal/tempdir/tempdir_test.go b/internal/tempdir/tempdir_test.go
index 112659473..4f1311151 100644
--- a/internal/tempdir/tempdir_test.go
+++ b/internal/tempdir/tempdir_test.go
@@ -53,7 +53,7 @@ func TestNewAsRepositoryFailStorageUnknown(t *testing.T) {
require.Error(t, err)
}
-var cleanRoot = path.Join("testdata/clean", tmpRootPrefix)
+var cleanRoot = path.Join("testdata/clean", TmpRootPrefix)
func TestCleanerSafety(t *testing.T) {
defer func() {
@@ -135,7 +135,7 @@ func makeDir(t *testing.T, dirPath string, mtime time.Time) {
func TestCleanNoTmpExists(t *testing.T) {
// This directory is valid because it ends in the special prefix
- dir := path.Join("testdata", "does-not-exist", tmpRootPrefix)
+ dir := path.Join("testdata", "does-not-exist", TmpRootPrefix)
require.NoError(t, clean(dir))
}
diff --git a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/VERSION b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/VERSION
index 01781720c..897e21587 100644
--- a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/VERSION
+++ b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/VERSION
@@ -1 +1 @@
-0.99.0
+0.100.0
diff --git a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/blob.pb.go b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/blob.pb.go
index d3e3209ca..999e12a08 100644
--- a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/blob.pb.go
+++ b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/blob.pb.go
@@ -20,6 +20,7 @@ It is generated from these files:
shared.proto
smarthttp.proto
ssh.proto
+ storage.proto
wiki.proto
It has these top-level messages:
@@ -250,6 +251,8 @@ It has these top-level messages:
SSHReceivePackResponse
SSHUploadArchiveRequest
SSHUploadArchiveResponse
+ DeleteAllRepositoriesRequest
+ DeleteAllRepositoriesResponse
WikiCommitDetails
WikiPageVersion
WikiPage
diff --git a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/storage.pb.go b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/storage.pb.go
new file mode 100644
index 000000000..e106695e2
--- /dev/null
+++ b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/storage.pb.go
@@ -0,0 +1,135 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: storage.proto
+
+package gitaly
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+import (
+ context "golang.org/x/net/context"
+ grpc "google.golang.org/grpc"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+type DeleteAllRepositoriesRequest struct {
+ StorageName string `protobuf:"bytes,1,opt,name=storage_name,json=storageName" json:"storage_name,omitempty"`
+}
+
+func (m *DeleteAllRepositoriesRequest) Reset() { *m = DeleteAllRepositoriesRequest{} }
+func (m *DeleteAllRepositoriesRequest) String() string { return proto.CompactTextString(m) }
+func (*DeleteAllRepositoriesRequest) ProtoMessage() {}
+func (*DeleteAllRepositoriesRequest) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{0} }
+
+func (m *DeleteAllRepositoriesRequest) GetStorageName() string {
+ if m != nil {
+ return m.StorageName
+ }
+ return ""
+}
+
+type DeleteAllRepositoriesResponse struct {
+}
+
+func (m *DeleteAllRepositoriesResponse) Reset() { *m = DeleteAllRepositoriesResponse{} }
+func (m *DeleteAllRepositoriesResponse) String() string { return proto.CompactTextString(m) }
+func (*DeleteAllRepositoriesResponse) ProtoMessage() {}
+func (*DeleteAllRepositoriesResponse) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{1} }
+
+func init() {
+ proto.RegisterType((*DeleteAllRepositoriesRequest)(nil), "gitaly.DeleteAllRepositoriesRequest")
+ proto.RegisterType((*DeleteAllRepositoriesResponse)(nil), "gitaly.DeleteAllRepositoriesResponse")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// Client API for StorageService service
+
+type StorageServiceClient interface {
+ DeleteAllRepositories(ctx context.Context, in *DeleteAllRepositoriesRequest, opts ...grpc.CallOption) (*DeleteAllRepositoriesResponse, error)
+}
+
+type storageServiceClient struct {
+ cc *grpc.ClientConn
+}
+
+func NewStorageServiceClient(cc *grpc.ClientConn) StorageServiceClient {
+ return &storageServiceClient{cc}
+}
+
+func (c *storageServiceClient) DeleteAllRepositories(ctx context.Context, in *DeleteAllRepositoriesRequest, opts ...grpc.CallOption) (*DeleteAllRepositoriesResponse, error) {
+ out := new(DeleteAllRepositoriesResponse)
+ err := grpc.Invoke(ctx, "/gitaly.StorageService/DeleteAllRepositories", in, out, c.cc, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// Server API for StorageService service
+
+type StorageServiceServer interface {
+ DeleteAllRepositories(context.Context, *DeleteAllRepositoriesRequest) (*DeleteAllRepositoriesResponse, error)
+}
+
+func RegisterStorageServiceServer(s *grpc.Server, srv StorageServiceServer) {
+ s.RegisterService(&_StorageService_serviceDesc, srv)
+}
+
+func _StorageService_DeleteAllRepositories_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(DeleteAllRepositoriesRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(StorageServiceServer).DeleteAllRepositories(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/gitaly.StorageService/DeleteAllRepositories",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(StorageServiceServer).DeleteAllRepositories(ctx, req.(*DeleteAllRepositoriesRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+var _StorageService_serviceDesc = grpc.ServiceDesc{
+ ServiceName: "gitaly.StorageService",
+ HandlerType: (*StorageServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "DeleteAllRepositories",
+ Handler: _StorageService_DeleteAllRepositories_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "storage.proto",
+}
+
+func init() { proto.RegisterFile("storage.proto", fileDescriptor15) }
+
+var fileDescriptor15 = []byte{
+ // 159 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x2d, 0x2e, 0xc9, 0x2f,
+ 0x4a, 0x4c, 0x4f, 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x4b, 0xcf, 0x2c, 0x49, 0xcc,
+ 0xa9, 0x54, 0x72, 0xe4, 0x92, 0x71, 0x49, 0xcd, 0x49, 0x2d, 0x49, 0x75, 0xcc, 0xc9, 0x09, 0x4a,
+ 0x2d, 0xc8, 0x2f, 0xce, 0x2c, 0xc9, 0x2f, 0xca, 0x4c, 0x2d, 0x0e, 0x4a, 0x2d, 0x2c, 0x4d, 0x2d,
+ 0x2e, 0x11, 0x52, 0xe4, 0xe2, 0x81, 0x6a, 0x8c, 0xcf, 0x4b, 0xcc, 0x4d, 0x95, 0x60, 0x54, 0x60,
+ 0xd4, 0xe0, 0x0c, 0xe2, 0x86, 0x8a, 0xf9, 0x25, 0xe6, 0xa6, 0x2a, 0xc9, 0x73, 0xc9, 0xe2, 0x30,
+ 0xa2, 0xb8, 0x20, 0x3f, 0xaf, 0x38, 0xd5, 0xa8, 0x82, 0x8b, 0x2f, 0x18, 0xa2, 0x3e, 0x38, 0xb5,
+ 0xa8, 0x2c, 0x33, 0x39, 0x55, 0x28, 0x8d, 0x4b, 0x14, 0xab, 0x16, 0x21, 0x15, 0x3d, 0x88, 0xbb,
+ 0xf4, 0xf0, 0x39, 0x4a, 0x4a, 0x95, 0x80, 0x2a, 0x88, 0xbd, 0x4a, 0x0c, 0x49, 0x6c, 0x60, 0xcf,
+ 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x3d, 0x21, 0xd8, 0x88, 0xfd, 0x00, 0x00, 0x00,
+}
diff --git a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/wiki.pb.go b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/wiki.pb.go
index 4401f204d..3cebea71a 100644
--- a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/wiki.pb.go
+++ b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/wiki.pb.go
@@ -28,7 +28,7 @@ type WikiCommitDetails struct {
func (m *WikiCommitDetails) Reset() { *m = WikiCommitDetails{} }
func (m *WikiCommitDetails) String() string { return proto.CompactTextString(m) }
func (*WikiCommitDetails) ProtoMessage() {}
-func (*WikiCommitDetails) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{0} }
+func (*WikiCommitDetails) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{0} }
func (m *WikiCommitDetails) GetName() []byte {
if m != nil {
@@ -73,7 +73,7 @@ type WikiPageVersion struct {
func (m *WikiPageVersion) Reset() { *m = WikiPageVersion{} }
func (m *WikiPageVersion) String() string { return proto.CompactTextString(m) }
func (*WikiPageVersion) ProtoMessage() {}
-func (*WikiPageVersion) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{1} }
+func (*WikiPageVersion) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{1} }
func (m *WikiPageVersion) GetCommit() *GitCommit {
if m != nil {
@@ -105,7 +105,7 @@ type WikiPage struct {
func (m *WikiPage) Reset() { *m = WikiPage{} }
func (m *WikiPage) String() string { return proto.CompactTextString(m) }
func (*WikiPage) ProtoMessage() {}
-func (*WikiPage) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{2} }
+func (*WikiPage) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{2} }
func (m *WikiPage) GetVersion() *WikiPageVersion {
if m != nil {
@@ -173,7 +173,7 @@ type WikiGetPageVersionsRequest struct {
func (m *WikiGetPageVersionsRequest) Reset() { *m = WikiGetPageVersionsRequest{} }
func (m *WikiGetPageVersionsRequest) String() string { return proto.CompactTextString(m) }
func (*WikiGetPageVersionsRequest) ProtoMessage() {}
-func (*WikiGetPageVersionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{3} }
+func (*WikiGetPageVersionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{3} }
func (m *WikiGetPageVersionsRequest) GetRepository() *Repository {
if m != nil {
@@ -210,7 +210,7 @@ type WikiGetPageVersionsResponse struct {
func (m *WikiGetPageVersionsResponse) Reset() { *m = WikiGetPageVersionsResponse{} }
func (m *WikiGetPageVersionsResponse) String() string { return proto.CompactTextString(m) }
func (*WikiGetPageVersionsResponse) ProtoMessage() {}
-func (*WikiGetPageVersionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{4} }
+func (*WikiGetPageVersionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{4} }
func (m *WikiGetPageVersionsResponse) GetVersions() []*WikiPageVersion {
if m != nil {
@@ -233,7 +233,7 @@ type WikiWritePageRequest struct {
func (m *WikiWritePageRequest) Reset() { *m = WikiWritePageRequest{} }
func (m *WikiWritePageRequest) String() string { return proto.CompactTextString(m) }
func (*WikiWritePageRequest) ProtoMessage() {}
-func (*WikiWritePageRequest) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{5} }
+func (*WikiWritePageRequest) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{5} }
func (m *WikiWritePageRequest) GetRepository() *Repository {
if m != nil {
@@ -277,7 +277,7 @@ type WikiWritePageResponse struct {
func (m *WikiWritePageResponse) Reset() { *m = WikiWritePageResponse{} }
func (m *WikiWritePageResponse) String() string { return proto.CompactTextString(m) }
func (*WikiWritePageResponse) ProtoMessage() {}
-func (*WikiWritePageResponse) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{6} }
+func (*WikiWritePageResponse) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{6} }
func (m *WikiWritePageResponse) GetDuplicateError() []byte {
if m != nil {
@@ -300,7 +300,7 @@ type WikiUpdatePageRequest struct {
func (m *WikiUpdatePageRequest) Reset() { *m = WikiUpdatePageRequest{} }
func (m *WikiUpdatePageRequest) String() string { return proto.CompactTextString(m) }
func (*WikiUpdatePageRequest) ProtoMessage() {}
-func (*WikiUpdatePageRequest) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{7} }
+func (*WikiUpdatePageRequest) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{7} }
func (m *WikiUpdatePageRequest) GetRepository() *Repository {
if m != nil {
@@ -351,7 +351,7 @@ type WikiUpdatePageResponse struct {
func (m *WikiUpdatePageResponse) Reset() { *m = WikiUpdatePageResponse{} }
func (m *WikiUpdatePageResponse) String() string { return proto.CompactTextString(m) }
func (*WikiUpdatePageResponse) ProtoMessage() {}
-func (*WikiUpdatePageResponse) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{8} }
+func (*WikiUpdatePageResponse) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{8} }
func (m *WikiUpdatePageResponse) GetError() []byte {
if m != nil {
@@ -369,7 +369,7 @@ type WikiDeletePageRequest struct {
func (m *WikiDeletePageRequest) Reset() { *m = WikiDeletePageRequest{} }
func (m *WikiDeletePageRequest) String() string { return proto.CompactTextString(m) }
func (*WikiDeletePageRequest) ProtoMessage() {}
-func (*WikiDeletePageRequest) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{9} }
+func (*WikiDeletePageRequest) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{9} }
func (m *WikiDeletePageRequest) GetRepository() *Repository {
if m != nil {
@@ -398,7 +398,7 @@ type WikiDeletePageResponse struct {
func (m *WikiDeletePageResponse) Reset() { *m = WikiDeletePageResponse{} }
func (m *WikiDeletePageResponse) String() string { return proto.CompactTextString(m) }
func (*WikiDeletePageResponse) ProtoMessage() {}
-func (*WikiDeletePageResponse) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{10} }
+func (*WikiDeletePageResponse) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{10} }
type WikiFindPageRequest struct {
Repository *Repository `protobuf:"bytes,1,opt,name=repository" json:"repository,omitempty"`
@@ -410,7 +410,7 @@ type WikiFindPageRequest struct {
func (m *WikiFindPageRequest) Reset() { *m = WikiFindPageRequest{} }
func (m *WikiFindPageRequest) String() string { return proto.CompactTextString(m) }
func (*WikiFindPageRequest) ProtoMessage() {}
-func (*WikiFindPageRequest) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{11} }
+func (*WikiFindPageRequest) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{11} }
func (m *WikiFindPageRequest) GetRepository() *Repository {
if m != nil {
@@ -449,7 +449,7 @@ type WikiFindPageResponse struct {
func (m *WikiFindPageResponse) Reset() { *m = WikiFindPageResponse{} }
func (m *WikiFindPageResponse) String() string { return proto.CompactTextString(m) }
func (*WikiFindPageResponse) ProtoMessage() {}
-func (*WikiFindPageResponse) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{12} }
+func (*WikiFindPageResponse) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{12} }
func (m *WikiFindPageResponse) GetPage() *WikiPage {
if m != nil {
@@ -468,7 +468,7 @@ type WikiFindFileRequest struct {
func (m *WikiFindFileRequest) Reset() { *m = WikiFindFileRequest{} }
func (m *WikiFindFileRequest) String() string { return proto.CompactTextString(m) }
func (*WikiFindFileRequest) ProtoMessage() {}
-func (*WikiFindFileRequest) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{13} }
+func (*WikiFindFileRequest) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{13} }
func (m *WikiFindFileRequest) GetRepository() *Repository {
if m != nil {
@@ -502,7 +502,7 @@ type WikiFindFileResponse struct {
func (m *WikiFindFileResponse) Reset() { *m = WikiFindFileResponse{} }
func (m *WikiFindFileResponse) String() string { return proto.CompactTextString(m) }
func (*WikiFindFileResponse) ProtoMessage() {}
-func (*WikiFindFileResponse) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{14} }
+func (*WikiFindFileResponse) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{14} }
func (m *WikiFindFileResponse) GetName() []byte {
if m != nil {
@@ -539,7 +539,7 @@ type WikiGetAllPagesRequest struct {
func (m *WikiGetAllPagesRequest) Reset() { *m = WikiGetAllPagesRequest{} }
func (m *WikiGetAllPagesRequest) String() string { return proto.CompactTextString(m) }
func (*WikiGetAllPagesRequest) ProtoMessage() {}
-func (*WikiGetAllPagesRequest) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{15} }
+func (*WikiGetAllPagesRequest) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{15} }
func (m *WikiGetAllPagesRequest) GetRepository() *Repository {
if m != nil {
@@ -558,7 +558,7 @@ type WikiGetAllPagesResponse struct {
func (m *WikiGetAllPagesResponse) Reset() { *m = WikiGetAllPagesResponse{} }
func (m *WikiGetAllPagesResponse) String() string { return proto.CompactTextString(m) }
func (*WikiGetAllPagesResponse) ProtoMessage() {}
-func (*WikiGetAllPagesResponse) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{16} }
+func (*WikiGetAllPagesResponse) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{16} }
func (m *WikiGetAllPagesResponse) GetPage() *WikiPage {
if m != nil {
@@ -584,7 +584,7 @@ type WikiGetFormattedDataRequest struct {
func (m *WikiGetFormattedDataRequest) Reset() { *m = WikiGetFormattedDataRequest{} }
func (m *WikiGetFormattedDataRequest) String() string { return proto.CompactTextString(m) }
func (*WikiGetFormattedDataRequest) ProtoMessage() {}
-func (*WikiGetFormattedDataRequest) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{17} }
+func (*WikiGetFormattedDataRequest) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{17} }
func (m *WikiGetFormattedDataRequest) GetRepository() *Repository {
if m != nil {
@@ -621,7 +621,7 @@ type WikiGetFormattedDataResponse struct {
func (m *WikiGetFormattedDataResponse) Reset() { *m = WikiGetFormattedDataResponse{} }
func (m *WikiGetFormattedDataResponse) String() string { return proto.CompactTextString(m) }
func (*WikiGetFormattedDataResponse) ProtoMessage() {}
-func (*WikiGetFormattedDataResponse) Descriptor() ([]byte, []int) { return fileDescriptor15, []int{18} }
+func (*WikiGetFormattedDataResponse) Descriptor() ([]byte, []int) { return fileDescriptor16, []int{18} }
func (m *WikiGetFormattedDataResponse) GetData() []byte {
if m != nil {
@@ -1161,9 +1161,9 @@ var _WikiService_serviceDesc = grpc.ServiceDesc{
Metadata: "wiki.proto",
}
-func init() { proto.RegisterFile("wiki.proto", fileDescriptor15) }
+func init() { proto.RegisterFile("wiki.proto", fileDescriptor16) }
-var fileDescriptor15 = []byte{
+var fileDescriptor16 = []byte{
// 928 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0xdd, 0x6e, 0xdc, 0x44,
0x14, 0xae, 0xb3, 0x7f, 0xde, 0x93, 0x34, 0xa5, 0x43, 0x69, 0x5c, 0x27, 0x84, 0x68, 0xa8, 0x44,
diff --git a/vendor/vendor.json b/vendor/vendor.json
index f35e07303..6ee7cacdb 100644
--- a/vendor/vendor.json
+++ b/vendor/vendor.json
@@ -297,12 +297,12 @@
"revisionTime": "2015-12-15T15:34:51Z"
},
{
- "checksumSHA1": "2MLcT+TD1llBP8wYuTzN5yUUlys=",
+ "checksumSHA1": "yweNy6QdSvamPWCaHDB4JUu6Plo=",
"path": "gitlab.com/gitlab-org/gitaly-proto/go",
- "revision": "7e89ea626eab9efab35f0346d41bb7585e8a11c5",
- "revisionTime": "2018-05-02T12:27:22Z",
- "version": "v0.99.0",
- "versionExact": "v0.99.0"
+ "revision": "d2a0710dea59eb1617fbea21bec27a987b18c498",
+ "revisionTime": "2018-05-22T09:12:59Z",
+ "version": "v0.100.0",
+ "versionExact": "v0.100.0"
},
{
"checksumSHA1": "TT1rac6kpQp2vz24m5yDGUNQ/QQ=",