// Copyright 2017 Drone.IO Inc. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package gitea import ( "bytes" "context" "fmt" "git.awesome-for.me/liuzhiguo/go-scm/scm" ) type contentService struct { client *wrapper } func (s *contentService) Find(ctx context.Context, repo, path, ref string) (*scm.Content, *scm.Response, error) { endpoint := fmt.Sprintf("api/v1/repos/%s/raw/%s/%s", repo, scm.TrimRef(ref), path) out := new(bytes.Buffer) res, err := s.client.do(ctx, "GET", endpoint, nil, out) return &scm.Content{ Path: path, Data: out.Bytes(), }, res, err } func (s *contentService) Create(ctx context.Context, repo, path string, params *scm.ContentParams) (*scm.Response, error) { return nil, scm.ErrNotSupported } func (s *contentService) Update(ctx context.Context, repo, path string, params *scm.ContentParams) (*scm.Response, error) { return nil, scm.ErrNotSupported } func (s *contentService) Delete(ctx context.Context, repo, path string, params *scm.ContentParams) (*scm.Response, error) { return nil, scm.ErrNotSupported } func (s *contentService) List(ctx context.Context, repo, path, ref string, _ scm.ListOptions) ([]*scm.ContentInfo, *scm.Response, error) { endpoint := fmt.Sprintf("api/v1/repos/%s/contents/%s?ref=%s", repo, path, ref) out := []*content{} res, err := s.client.do(ctx, "GET", endpoint, nil, &out) return convertContentInfoList(out), res, err } type content struct { Path string `json:"path"` Type string `json:"type"` Sha string `json:"sha"` } func convertContentInfoList(from []*content) []*scm.ContentInfo { to := []*scm.ContentInfo{} for _, v := range from { to = append(to, convertContentInfo(v)) } return to } func convertContentInfo(from *content) *scm.ContentInfo { to := &scm.ContentInfo{Path: from.Path, BlobID: from.Sha} switch from.Type { case "file": to.Kind = scm.ContentKindFile case "dir": to.Kind = scm.ContentKindDirectory case "symlink": to.Kind = scm.ContentKindSymlink case "submodule": to.Kind = scm.ContentKindGitlink default: to.Kind = scm.ContentKindUnsupported } return to }