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:
authorShinya Maeda <shinya@gitlab.com>2019-06-25 11:32:31 +0300
committerShinya Maeda <shinya@gitlab.com>2019-06-25 11:32:31 +0300
commitf12dca1862b5fbe117a77ee1825d7e5bc51e44fd (patch)
tree1ac720a601b571b4715f864813e198f2436a3d0c
parent85f696729f973c0fdba553f6590c26bc2de722ec (diff)
Create new RPC 'FindRef'create-new-rpc-find-ref
-rw-r--r--internal/service/ref/refs.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/internal/service/ref/refs.go b/internal/service/ref/refs.go
index 789c3653a..ec5121066 100644
--- a/internal/service/ref/refs.go
+++ b/internal/service/ref/refs.go
@@ -143,6 +143,44 @@ func (s *server) FindAllTags(in *gitalypb.FindAllTagsRequest, stream gitalypb.Re
return nil
}
+func (s *server) FindRef(ctx context.Context, req *gitalypb.FindRefRequest) (*gitalypb.FindRefResponse, error) {
+ refPath := string(req.GetRefPath())
+ if len(refPath) == 0 {
+ return nil, status.Errorf(codes.InvalidArgument, "Ref path cannot be empty")
+ }
+ repo := req.GetRepository()
+
+ cmd, err := git.Command(ctx, repo, "for-each-ref", "--format", "%(objectname)", refPath)
+ if err != nil {
+ return nil, err
+ }
+
+ reader := bufio.NewReader(cmd)
+ revision, _, err := reader.ReadLine()
+ if err != nil {
+ if err == io.EOF {
+ return &gitalypb.FindRefResponse{}, nil
+ }
+ return nil, err
+ }
+
+ commit, err := log.GetCommit(ctx, repo, string(revision))
+ if err != nil {
+ return nil, err
+ }
+
+ if err := cmd.Wait(); err != nil {
+ return nil, err
+ }
+
+ return &gitalypb.FindRefResponse{
+ Ref: &gitalypb.Ref{
+ RefPath: []byte(refPath),
+ TargetCommit: commit,
+ },
+ }, nil
+}
+
func validateFindAllTagsRequest(request *gitalypb.FindAllTagsRequest) error {
if request.GetRepository() == nil {
return errors.New("empty Repository")