mirror of https://github.com/harness/drone.git
253 lines
5.7 KiB
Go
253 lines
5.7 KiB
Go
// Copyright 2023 Harness, Inc.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package git
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/harness/gitness/git/api"
|
|
"github.com/harness/gitness/git/parser"
|
|
)
|
|
|
|
func mapBranch(b *api.Branch) (*Branch, error) {
|
|
if b == nil {
|
|
return nil, fmt.Errorf("rpc branch is nil")
|
|
}
|
|
|
|
var commit *Commit
|
|
if b.Commit != nil {
|
|
var err error
|
|
commit, err = mapCommit(b.Commit)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return &Branch{
|
|
Name: b.Name,
|
|
SHA: b.SHA,
|
|
Commit: commit,
|
|
}, nil
|
|
}
|
|
|
|
func mapCommit(c *api.Commit) (*Commit, error) {
|
|
if c == nil {
|
|
return nil, fmt.Errorf("rpc commit is nil")
|
|
}
|
|
|
|
author, err := mapSignature(&c.Author)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to map rpc author: %w", err)
|
|
}
|
|
|
|
comitter, err := mapSignature(&c.Committer)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to map rpc committer: %w", err)
|
|
}
|
|
|
|
return &Commit{
|
|
SHA: c.SHA,
|
|
ParentSHAs: c.ParentSHAs,
|
|
Title: c.Title,
|
|
Message: c.Message,
|
|
Author: *author,
|
|
Committer: *comitter,
|
|
FileStats: mapFileStats(c.FileStats),
|
|
}, nil
|
|
}
|
|
|
|
func mapFileStats(typeStats []api.CommitFileStats) []CommitFileStats {
|
|
var stats = make([]CommitFileStats, len(typeStats))
|
|
|
|
for i, tStat := range typeStats {
|
|
stats[i] = CommitFileStats{
|
|
Status: tStat.ChangeType,
|
|
Path: tStat.Path,
|
|
OldPath: tStat.OldPath,
|
|
Insertions: tStat.Insertions,
|
|
Deletions: tStat.Deletions,
|
|
}
|
|
}
|
|
|
|
return stats
|
|
}
|
|
|
|
func mapSignature(s *api.Signature) (*Signature, error) {
|
|
if s == nil {
|
|
return nil, fmt.Errorf("rpc signature is nil")
|
|
}
|
|
|
|
identity, err := mapIdentity(&s.Identity)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to map rpc identity: %w", err)
|
|
}
|
|
|
|
return &Signature{
|
|
Identity: identity,
|
|
When: s.When,
|
|
}, nil
|
|
}
|
|
|
|
func mapIdentity(id *api.Identity) (Identity, error) {
|
|
if id == nil {
|
|
return Identity{}, fmt.Errorf("rpc identity is nil")
|
|
}
|
|
|
|
return Identity{
|
|
Name: id.Name,
|
|
Email: id.Email,
|
|
}, nil
|
|
}
|
|
|
|
func mapBranchesSortOption(o BranchSortOption) api.GitReferenceField {
|
|
switch o {
|
|
case BranchSortOptionName:
|
|
return api.GitReferenceFieldObjectName
|
|
case BranchSortOptionDate:
|
|
return api.GitReferenceFieldCreatorDate
|
|
case BranchSortOptionDefault:
|
|
fallthrough
|
|
default:
|
|
// no need to error out - just use default for sorting
|
|
return ""
|
|
}
|
|
}
|
|
|
|
func mapAnnotatedTag(tag *api.Tag) *CommitTag {
|
|
tagger, _ := mapSignature(&tag.Tagger)
|
|
return &CommitTag{
|
|
Name: tag.Name,
|
|
SHA: tag.Sha,
|
|
Title: tag.Title,
|
|
Message: tag.Message,
|
|
Tagger: tagger,
|
|
IsAnnotated: true,
|
|
Commit: nil,
|
|
}
|
|
}
|
|
|
|
func mapListCommitTagsSortOption(s TagSortOption) api.GitReferenceField {
|
|
switch s {
|
|
case TagSortOptionDate:
|
|
return api.GitReferenceFieldCreatorDate
|
|
case TagSortOptionName:
|
|
return api.GitReferenceFieldRefName
|
|
case TagSortOptionDefault:
|
|
return api.GitReferenceFieldRefName
|
|
default:
|
|
// no need to error out - just use default for sorting
|
|
return api.GitReferenceFieldRefName
|
|
}
|
|
}
|
|
|
|
func mapTreeNode(n *api.TreeNode) (TreeNode, error) {
|
|
if n == nil {
|
|
return TreeNode{}, fmt.Errorf("rpc tree node is nil")
|
|
}
|
|
|
|
nodeType, err := mapTreeNodeType(n.NodeType)
|
|
if err != nil {
|
|
return TreeNode{}, err
|
|
}
|
|
|
|
mode, err := mapTreeNodeMode(n.Mode)
|
|
if err != nil {
|
|
return TreeNode{}, err
|
|
}
|
|
|
|
return TreeNode{
|
|
Type: nodeType,
|
|
Mode: mode,
|
|
SHA: n.SHA.String(),
|
|
Name: n.Name,
|
|
Path: n.Path,
|
|
}, nil
|
|
}
|
|
|
|
func mapTreeNodeType(t api.TreeNodeType) (TreeNodeType, error) {
|
|
switch t {
|
|
case api.TreeNodeTypeBlob:
|
|
return TreeNodeTypeBlob, nil
|
|
case api.TreeNodeTypeCommit:
|
|
return TreeNodeTypeCommit, nil
|
|
case api.TreeNodeTypeTree:
|
|
return TreeNodeTypeTree, nil
|
|
default:
|
|
return TreeNodeTypeBlob, fmt.Errorf("unknown rpc tree node type: %d", t)
|
|
}
|
|
}
|
|
|
|
func mapTreeNodeMode(m api.TreeNodeMode) (TreeNodeMode, error) {
|
|
switch m {
|
|
case api.TreeNodeModeFile:
|
|
return TreeNodeModeFile, nil
|
|
case api.TreeNodeModeExec:
|
|
return TreeNodeModeExec, nil
|
|
case api.TreeNodeModeSymlink:
|
|
return TreeNodeModeSymlink, nil
|
|
case api.TreeNodeModeCommit:
|
|
return TreeNodeModeCommit, nil
|
|
case api.TreeNodeModeTree:
|
|
return TreeNodeModeTree, nil
|
|
default:
|
|
return TreeNodeModeFile, fmt.Errorf("unknown rpc tree node mode: %d", m)
|
|
}
|
|
}
|
|
|
|
func mapRenameDetails(c []api.PathRenameDetails) []*RenameDetails {
|
|
renameDetailsList := make([]*RenameDetails, len(c))
|
|
for i, detail := range c {
|
|
renameDetailsList[i] = &RenameDetails{
|
|
OldPath: detail.OldPath,
|
|
NewPath: detail.Path,
|
|
CommitShaBefore: detail.CommitSHABefore,
|
|
CommitShaAfter: detail.CommitSHAAfter,
|
|
}
|
|
}
|
|
return renameDetailsList
|
|
}
|
|
|
|
func mapToSortOrder(o SortOrder) api.SortOrder {
|
|
switch o {
|
|
case SortOrderAsc:
|
|
return api.SortOrderAsc
|
|
case SortOrderDesc:
|
|
return api.SortOrderDesc
|
|
case SortOrderDefault:
|
|
return api.SortOrderDefault
|
|
default:
|
|
// no need to error out - just use default for sorting
|
|
return api.SortOrderDefault
|
|
}
|
|
}
|
|
|
|
func mapHunkHeader(h *parser.HunkHeader) HunkHeader {
|
|
return HunkHeader{
|
|
OldLine: h.OldLine,
|
|
OldSpan: h.OldSpan,
|
|
NewLine: h.NewLine,
|
|
NewSpan: h.NewSpan,
|
|
Text: h.Text,
|
|
}
|
|
}
|
|
|
|
func mapDiffFileHeader(h *parser.DiffFileHeader) DiffFileHeader {
|
|
return DiffFileHeader{
|
|
OldName: h.OldFileName,
|
|
NewName: h.NewFileName,
|
|
Extensions: h.Extensions,
|
|
}
|
|
}
|