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

object_format.go « repository « service « gitaly « internal - gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 4c89f96cd4b2c55ee9f1577845c0ec5bed9fd032 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package repository

import (
	"context"

	"gitlab.com/gitlab-org/gitaly/v15/internal/gitaly/service"
	"gitlab.com/gitlab-org/gitaly/v15/internal/structerr"
	"gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypb"
)

// ObjectFormat determines the object format of the Git repository.
func (s *server) ObjectFormat(ctx context.Context, request *gitalypb.ObjectFormatRequest) (*gitalypb.ObjectFormatResponse, error) {
	if err := service.ValidateRepository(request.Repository); err != nil {
		return nil, structerr.NewInvalidArgument("%w", err)
	}

	repo := s.localrepo(request.Repository)

	// Check for the path up-front so that we detect missing repositories early on.
	if _, err := repo.Path(); err != nil {
		return nil, structerr.New("%w", err)
	}

	objectHash, err := repo.ObjectHash(ctx)
	if err != nil {
		return nil, structerr.New("detecting object hash: %w", err)
	}

	return &gitalypb.ObjectFormatResponse{
		Format: objectHash.ProtoFormat,
	}, nil
}