diff --git a/gitrpc/internal/gitea/tag.go b/gitrpc/internal/gitea/tag.go index f5eed3f82..fe0e25f06 100644 --- a/gitrpc/internal/gitea/tag.go +++ b/gitrpc/internal/gitea/tag.go @@ -14,10 +14,8 @@ import ( "strings" "time" - "github.com/harness/gitness/gitrpc/internal/types" - "github.com/harness/gitness/gitrpc/rpc" - gitea "code.gitea.io/gitea/modules/git" + "github.com/harness/gitness/gitrpc/internal/types" ) const ( @@ -65,10 +63,13 @@ func (g Adapter) GetAnnotatedTags(ctx context.Context, repoPath string, shas []s func (g Adapter) CreateAnnotatedTag( ctx context.Context, repoPath string, - request *rpc.CreateTagRequest, - env []string, + request *types.CreateTagRequest, ) error { - cmd := gitea.NewCommand(ctx, "tag", "-a", "-m", request.GetMessage(), "--", request.GetTagName(), request.GetSha()) + cmd := gitea.NewCommand(ctx, "tag", "-a", "-m", request.Message, "--", request.Name, request.TargetSha) + env := []string{ + "GIT_COMMITTER_NAME=" + request.TaggerName, + "GIT_COMMITTER_EMAIL=" + request.TaggerEmail, + } _, _, err := cmd.RunStdString(&gitea.RunOpts{Dir: repoPath, Env: env}) if err != nil { return processGiteaErrorf(err, "Service failed to create a tag") @@ -76,15 +77,6 @@ func (g Adapter) CreateAnnotatedTag( return nil } -func (g Adapter) DeleteTag(ctx context.Context, repoPath string, ref string, env []string) error { - cmd := gitea.NewCommand(ctx, "tag", "-d", ref) - _, stdErr, err := cmd.RunStdString(&gitea.RunOpts{Dir: repoPath, Env: env}) - if err != nil { - return processGiteaErrorf(err, "Service failed to delete tag with error: %v", stdErr) - } - return nil -} - // giteaGetAnnotatedTag is a custom implementation to retrieve an annotated tag from a sha. // The code is following parts of the gitea implementation. // diff --git a/gitrpc/internal/service/interface.go b/gitrpc/internal/service/interface.go index a8c091f8e..8fbb1f6e2 100644 --- a/gitrpc/internal/service/interface.go +++ b/gitrpc/internal/service/interface.go @@ -10,7 +10,6 @@ import ( "github.com/harness/gitness/gitrpc/enum" "github.com/harness/gitness/gitrpc/internal/types" - "github.com/harness/gitness/gitrpc/rpc" ) // GitAdapter for accessing git commands from gitea. @@ -40,8 +39,7 @@ type GitAdapter interface { GetFullCommitID(ctx context.Context, repoPath, shortID string) (string, error) GetAnnotatedTag(ctx context.Context, repoPath string, sha string) (*types.Tag, error) GetAnnotatedTags(ctx context.Context, repoPath string, shas []string) ([]types.Tag, error) - CreateAnnotatedTag(ctx context.Context, repoPath string, request *rpc.CreateTagRequest, env []string) error - DeleteTag(ctx context.Context, repoPath string, ref string, env []string) error + CreateAnnotatedTag(ctx context.Context, repoPath string, request *types.CreateTagRequest) error GetBranch(ctx context.Context, repoPath string, branchName string) (*types.Branch, error) GetCommitDivergences(ctx context.Context, repoPath string, requests []types.CommitDivergenceRequest, max int32) ([]types.CommitDivergence, error) diff --git a/gitrpc/internal/service/shared_repo.go b/gitrpc/internal/service/shared_repo.go index 028750fee..289b230f3 100644 --- a/gitrpc/internal/service/shared_repo.go +++ b/gitrpc/internal/service/shared_repo.go @@ -321,6 +321,12 @@ func (r *SharedRepo) PushTag(ctx context.Context, writeRequest *rpc.WriteRequest return r.push(ctx, writeRequest, refTag, refTag) } +func (r *SharedRepo) PushDeleteTag(ctx context.Context, writeRequest *rpc.WriteRequest, + tagName string) error { + refTag := GetReferenceFromTagName(tagName) + return r.push(ctx, writeRequest, "", refTag) +} + // push pushes the provided references to the provided branch in the original repository. func (r *SharedRepo) push(ctx context.Context, writeRequest *rpc.WriteRequest, sourceRef, destinationRef string) error { diff --git a/gitrpc/internal/service/tag.go b/gitrpc/internal/service/tag.go index 97e4a2793..21108ce8a 100644 --- a/gitrpc/internal/service/tag.go +++ b/gitrpc/internal/service/tag.go @@ -200,7 +200,6 @@ func (s ReferenceService) CreateTag( if err != nil { return nil, processGitErrorf(err, "failed to open repo") } - defer repo.Close() sharedRepo, err := NewSharedRepo(s.tmpDir, base.GetRepoUid(), repo) if err != nil { @@ -214,12 +213,14 @@ func (s ReferenceService) CreateTag( return nil, processGitErrorf(err, "failed to clone shared repo with branch '%s'", request.GetSha()) } actor := request.GetBase().GetActor() - env := append(CreateEnvironmentForPush(ctx, base), - "GIT_COMMITTER_NAME="+actor.GetName(), - "GIT_COMMITTER_EMAIL="+actor.GetEmail(), - ) - - err = s.adapter.CreateAnnotatedTag(ctx, sharedRepo.repo.Path, request, env) + createTagRequest := types.CreateTagRequest{ + Name: request.GetTagName(), + TargetSha: request.GetSha(), + Message: request.GetMessage(), + TaggerEmail: actor.GetEmail(), + TaggerName: actor.GetName(), + } + err = s.adapter.CreateAnnotatedTag(ctx, sharedRepo.tmpPath, &createTagRequest) if err != nil { return nil, processGitErrorf(err, "Failed to create tag %s - %s", request.GetTagName(), err.Error()) @@ -253,7 +254,6 @@ func (s ReferenceService) DeleteTag( if err != nil { return nil, processGitErrorf(err, "failed to open repo") } - defer repo.Close() sharedRepo, err := NewSharedRepo(s.tmpDir, base.GetRepoUid(), repo) if err != nil { @@ -262,22 +262,12 @@ func (s ReferenceService) DeleteTag( defer sharedRepo.Close(ctx) - err = sharedRepo.Clone(ctx, "") + err = sharedRepo.Clone(ctx, request.GetTagName()) if err != nil { return nil, processGitErrorf(err, "failed to clone shared repo with tag '%s'", request.GetTagName()) } - actor := request.GetBase().GetActor() - env := append(CreateEnvironmentForPush(ctx, base), - "GIT_COMMITTER_NAME="+actor.GetName(), - "GIT_COMMITTER_EMAIL="+actor.GetEmail(), - ) - err = s.adapter.DeleteTag(ctx, repoPath, request.TagName, env) - if err != nil { - return nil, processGitErrorf(err, "Failed to delete tag '%s' from remote repo", request.GetTagName()) - } - - if err = sharedRepo.push(ctx, base, "", GetReferenceFromTagName(request.GetTagName())); err != nil { + if err = sharedRepo.PushDeleteTag(ctx, base, request.GetTagName()); err != nil { return nil, processGitErrorf(err, "Failed to push the tag %s to remote", request.GetTagName()) } diff --git a/gitrpc/internal/types/types.go b/gitrpc/internal/types/types.go index 4e4222a56..0fb3a04ae 100644 --- a/gitrpc/internal/types/types.go +++ b/gitrpc/internal/types/types.go @@ -150,6 +150,14 @@ type Tag struct { Tagger Signature } +type CreateTagRequest struct { + Name string + TargetSha string + Message string + TaggerName string + TaggerEmail string +} + // Signature represents the Author or Committer information. type Signature struct { Identity Identity