diff options
author | Ahmad Sherif <me@ahmadsherif.com> | 2017-09-15 21:48:40 +0300 |
---|---|---|
committer | Ahmad Sherif <me@ahmadsherif.com> | 2017-09-20 14:08:26 +0300 |
commit | 8c119dcb8d36e248c45fa3df0e2bd485da90980b (patch) | |
tree | 30b8da4b4270f87792d628f21876a2796fbd33cb /internal/middleware | |
parent | f5b7feea6012cb9505b919042f3e2c9ae58bf6d8 (diff) |
Change how we set git object dir attributes
Fixes #564
Diffstat (limited to 'internal/middleware')
-rw-r--r-- | internal/middleware/objectdirhandler/objectdirhandler.go | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/internal/middleware/objectdirhandler/objectdirhandler.go b/internal/middleware/objectdirhandler/objectdirhandler.go deleted file mode 100644 index 0eb40933e..000000000 --- a/internal/middleware/objectdirhandler/objectdirhandler.go +++ /dev/null @@ -1,90 +0,0 @@ -package objectdirhandler - -import ( - "sync" - - pb "gitlab.com/gitlab-org/gitaly-proto/go" - - "golang.org/x/net/context" - "google.golang.org/grpc" -) - -type requestWithRepository interface { - GetRepository() *pb.Repository -} - -type ctxObjectDirMarker struct{} -type ctxAltObjectDirsMarker struct{} - -var ( - ctxObjectDirMarkerKey = &ctxObjectDirMarker{} - ctxAltObjectDirsMarkerKey = &ctxAltObjectDirsMarker{} -) - -type recvWrapper struct { - grpc.ServerStream - wrappedContext context.Context - wrapOnce sync.Once -} - -// Unary sets Git object dir attributes for unary RPCs -func Unary(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { - return handler(newContextWithDirValues(ctx, req), req) -} - -// Stream sets Git object dir attributes for streaming RPCs -func Stream(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { - return handler(srv, &recvWrapper{ServerStream: stream, wrappedContext: stream.Context()}) -} - -// ObjectDir returns the value for Repository.GitObjectDirectory -func ObjectDir(ctx context.Context) (string, bool) { - dir1 := ctx.Value(ctxObjectDirMarkerKey) - if dir1 == nil { - return "", false - } - - dir2, ok := dir1.(string) - return dir2, ok -} - -// AltObjectDirs returns the value for Repository.GitAlternateObjectDirectories -func AltObjectDirs(ctx context.Context) ([]string, bool) { - dirs1 := ctx.Value(ctxAltObjectDirsMarkerKey) - if dirs1 == nil { - return nil, false - } - - dirs2, ok := dirs1.([]string) - return dirs2, ok -} - -func newContextWithDirValues(ctx context.Context, req interface{}) context.Context { - if repo, ok := req.(requestWithRepository); ok { - if dir := repo.GetRepository().GetGitObjectDirectory(); dir != "" { - ctx = context.WithValue(ctx, ctxObjectDirMarkerKey, dir) - } - - if dirs := repo.GetRepository().GetGitAlternateObjectDirectories(); len(dirs) > 0 { - ctx = context.WithValue(ctx, ctxAltObjectDirsMarkerKey, dirs) - } - } - - return ctx -} - -func (s *recvWrapper) RecvMsg(m interface{}) error { - if err := s.ServerStream.RecvMsg(m); err != nil { - return err - } - - s.wrapOnce.Do(func() { - s.wrappedContext = newContextWithDirValues(s.wrappedContext, m) - }) - - return nil -} - -func (s *recvWrapper) Context() context.Context { - return s.wrappedContext -} |