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:
authorAhmad Sherif <ahmad.m.sherif@gmail.com>2017-09-28 13:20:42 +0300
committerAhmad Sherif <ahmad.m.sherif@gmail.com>2017-09-28 13:20:42 +0300
commit4d6180ee9d65e3bed74c27100d9d53a1414f3a20 (patch)
treecff152be573e69a0ddd916493ffab8475b0b552e
parent2c3e7ff85739577bbde2c7de8b0a604ee1a81ac1 (diff)
parentf0bcc809a4ae904c0f60656b2ac5e7395d8a0df9 (diff)
Merge branch 'zj-no-overwrite-namespaces' into 'master'
Don't overwrite namespaces while renaming See merge request gitlab-org/gitaly!375
-rw-r--r--CHANGELOG.md2
-rw-r--r--internal/service/namespace/namespace.go9
-rw-r--r--internal/service/namespace/namespace_test.go9
3 files changed, 20 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5592f91d6..b4948e5c4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,8 @@ v0.42.0
https://gitlab.com/gitlab-org/gitaly/merge_requests/374
- Return pre-receive errors in UserDeleteTag response
https://gitlab.com/gitlab-org/gitaly/merge_requests/378
+- Check if we don't overwrite a namespace moved to gitaly
+ https://gitlab.com/gitlab-org/gitaly/merge_requests/375
v0.41.0
diff --git a/internal/service/namespace/namespace.go b/internal/service/namespace/namespace.go
index 0f8c6d645..ebd284067 100644
--- a/internal/service/namespace/namespace.go
+++ b/internal/service/namespace/namespace.go
@@ -66,6 +66,15 @@ func (s *server) RenameNamespace(ctx context.Context, in *pb.RenameNamespaceRequ
return nil, grpc.Errorf(codes.InvalidArgument, "from and to cannot be empty")
}
+ // No need to check if the from path exists, if it doesn't, we'd later get an
+ // os.LinkError
+ toExistsCheck := &pb.NamespaceExistsRequest{StorageName: in.StorageName, Name: in.GetTo()}
+ if exists, err := s.NamespaceExists(ctx, toExistsCheck); err != nil {
+ return nil, err
+ } else if exists.Exists {
+ return nil, grpc.Errorf(codes.InvalidArgument, "to directory %s already exists", in.GetTo())
+ }
+
err = os.Rename(namespacePath(storagePath, in.GetFrom()), namespacePath(storagePath, in.GetTo()))
if _, ok := err.(*os.LinkError); ok {
return nil, grpc.Errorf(codes.InvalidArgument, "from directory not found")
diff --git a/internal/service/namespace/namespace_test.go b/internal/service/namespace/namespace_test.go
index ca8875ddc..c051289a3 100644
--- a/internal/service/namespace/namespace_test.go
+++ b/internal/service/namespace/namespace_test.go
@@ -265,6 +265,15 @@ func TestRenameNamespace(t *testing.T) {
},
errorCode: codes.InvalidArgument,
},
+ {
+ desc: "existing destination namespace",
+ request: &pb.RenameNamespaceRequest{
+ From: "existing",
+ To: "existing",
+ StorageName: "default",
+ },
+ errorCode: codes.InvalidArgument,
+ },
}
_, err := client.AddNamespace(ctx, &pb.AddNamespaceRequest{"default", "existing"})