mirror of
https://github.com/harness/drone.git
synced 2025-05-04 07:29:21 +08:00

* Apply suggestion from code review * updating images for signin and register page. * fix: lint * fix: logo update * revert golangci * Adding more strings and updated the logo. Still need to update the signin page images * Apply suggestion from code review Updating harness logo to use Open Source logo * Update all occurences of 'gitness' to 'harness' within comments and markdown. Updated the logo reference (did not delete the Gitness logo directory yet). No active code changes except display strings.
196 lines
4.9 KiB
Go
196 lines
4.9 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 controller
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/harness/gitness/app/auth"
|
|
"github.com/harness/gitness/app/githook"
|
|
"github.com/harness/gitness/app/url"
|
|
"github.com/harness/gitness/git"
|
|
"github.com/harness/gitness/types"
|
|
)
|
|
|
|
// createRPCWriteParams creates base write parameters for git write operations.
|
|
// TODO: this function should be in git package and should accept params as interface (contract)
|
|
func createRPCWriteParams(
|
|
ctx context.Context,
|
|
urlProvider url.Provider,
|
|
session *auth.Session,
|
|
repo *types.Repository,
|
|
isInternal bool,
|
|
) (git.WriteParams, error) {
|
|
// generate envars (add everything githook CLI needs for execution)
|
|
envVars, err := githook.GenerateEnvironmentVariables(
|
|
ctx,
|
|
urlProvider.GetInternalAPIURL(ctx),
|
|
repo.ID,
|
|
session.Principal.ID,
|
|
false,
|
|
isInternal,
|
|
)
|
|
if err != nil {
|
|
return git.WriteParams{}, fmt.Errorf("failed to generate git hook environment variables: %w", err)
|
|
}
|
|
|
|
return git.WriteParams{
|
|
Actor: git.Identity{
|
|
Name: session.Principal.DisplayName,
|
|
Email: session.Principal.Email,
|
|
},
|
|
RepoUID: repo.GitUID,
|
|
EnvVars: envVars,
|
|
}, nil
|
|
}
|
|
|
|
// CreateRPCExternalWriteParams creates base write parameters for git external write operations.
|
|
// External write operations are direct git pushes.
|
|
func CreateRPCExternalWriteParams(
|
|
ctx context.Context,
|
|
urlProvider url.Provider,
|
|
session *auth.Session,
|
|
repo *types.Repository,
|
|
) (git.WriteParams, error) {
|
|
return createRPCWriteParams(ctx, urlProvider, session, repo, false)
|
|
}
|
|
|
|
// CreateRPCInternalWriteParams creates base write parameters for git internal write operations.
|
|
// Internal write operations are git pushes that originate from the Harness server.
|
|
func CreateRPCInternalWriteParams(
|
|
ctx context.Context,
|
|
urlProvider url.Provider,
|
|
session *auth.Session,
|
|
repo *types.Repository,
|
|
) (git.WriteParams, error) {
|
|
return createRPCWriteParams(ctx, urlProvider, session, repo, true)
|
|
}
|
|
|
|
func MapBranch(b git.Branch) (types.Branch, error) {
|
|
var commit *types.Commit
|
|
if b.Commit != nil {
|
|
var err error
|
|
commit, err = MapCommit(b.Commit)
|
|
if err != nil {
|
|
return types.Branch{}, err
|
|
}
|
|
}
|
|
return types.Branch{
|
|
Name: b.Name,
|
|
SHA: b.SHA.String(),
|
|
Commit: commit,
|
|
}, nil
|
|
}
|
|
|
|
func MapCommit(c *git.Commit) (*types.Commit, error) {
|
|
if c == nil {
|
|
return nil, fmt.Errorf("commit is nil")
|
|
}
|
|
|
|
author, err := MapSignature(&c.Author)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to map author: %w", err)
|
|
}
|
|
|
|
committer, err := MapSignature(&c.Committer)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to map committer: %w", err)
|
|
}
|
|
|
|
parentSHAs := make([]string, len(c.ParentSHAs))
|
|
for i, sha := range c.ParentSHAs {
|
|
parentSHAs[i] = sha.String()
|
|
}
|
|
|
|
return &types.Commit{
|
|
SHA: c.SHA.String(),
|
|
ParentSHAs: parentSHAs,
|
|
Title: c.Title,
|
|
Message: c.Message,
|
|
Author: *author,
|
|
Committer: *committer,
|
|
Stats: mapStats(c),
|
|
},
|
|
nil
|
|
}
|
|
|
|
func mapStats(c *git.Commit) *types.CommitStats {
|
|
if len(c.FileStats) == 0 {
|
|
return nil
|
|
}
|
|
|
|
var insertions int64
|
|
var deletions int64
|
|
for _, stat := range c.FileStats {
|
|
insertions += stat.Insertions
|
|
deletions += stat.Deletions
|
|
}
|
|
|
|
return &types.CommitStats{
|
|
Total: types.ChangeStats{
|
|
Insertions: insertions,
|
|
Deletions: deletions,
|
|
Changes: insertions + deletions,
|
|
},
|
|
Files: mapFileStats(c),
|
|
}
|
|
}
|
|
|
|
func mapFileStats(c *git.Commit) []types.CommitFileStats {
|
|
fileStats := make([]types.CommitFileStats, len(c.FileStats))
|
|
|
|
for i, fStat := range c.FileStats {
|
|
fileStats[i] = types.CommitFileStats{
|
|
Path: fStat.Path,
|
|
OldPath: fStat.OldPath,
|
|
Status: fStat.Status,
|
|
ChangeStats: types.ChangeStats{
|
|
Insertions: fStat.Insertions,
|
|
Deletions: fStat.Deletions,
|
|
Changes: fStat.Insertions + fStat.Deletions,
|
|
},
|
|
}
|
|
}
|
|
|
|
return fileStats
|
|
}
|
|
|
|
func MapRenameDetails(c *git.RenameDetails) *types.RenameDetails {
|
|
if c == nil {
|
|
return nil
|
|
}
|
|
return &types.RenameDetails{
|
|
OldPath: c.OldPath,
|
|
NewPath: c.NewPath,
|
|
CommitShaBefore: c.CommitShaBefore.String(),
|
|
CommitShaAfter: c.CommitShaAfter.String(),
|
|
}
|
|
}
|
|
|
|
func MapSignature(s *git.Signature) (*types.Signature, error) {
|
|
if s == nil {
|
|
return nil, fmt.Errorf("signature is nil")
|
|
}
|
|
|
|
return &types.Signature{
|
|
Identity: types.Identity{
|
|
Name: s.Identity.Name,
|
|
Email: s.Identity.Email,
|
|
},
|
|
When: s.When,
|
|
}, nil
|
|
}
|