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:
Diffstat (limited to 'internal/gitaly/service/commit')
-rw-r--r--internal/gitaly/service/commit/commit_signatures.go64
-rw-r--r--internal/gitaly/service/commit/find_commits.go2
-rw-r--r--internal/gitaly/service/commit/last_commit_for_path.go2
-rw-r--r--internal/gitaly/service/commit/list_all_commits.go2
-rw-r--r--internal/gitaly/service/commit/list_commits.go2
-rw-r--r--internal/gitaly/service/commit/list_commits_by_oid.go2
-rw-r--r--internal/gitaly/service/commit/list_commits_by_ref_name.go2
-rw-r--r--internal/gitaly/service/commit/list_last_commits_for_tree.go2
8 files changed, 18 insertions, 60 deletions
diff --git a/internal/gitaly/service/commit/commit_signatures.go b/internal/gitaly/service/commit/commit_signatures.go
index 9dc5a9819..122f48c45 100644
--- a/internal/gitaly/service/commit/commit_signatures.go
+++ b/internal/gitaly/service/commit/commit_signatures.go
@@ -1,7 +1,6 @@
package commit
import (
- "bufio"
"bytes"
"errors"
"fmt"
@@ -47,6 +46,7 @@ func (s *server) GetCommitSignatures(request *gitalypb.GetCommitSignaturesReques
}
}
+ parser := catfile.NewParser()
for _, commitID := range request.CommitIds {
commitObj, err := objectReader.Object(ctx, git.Revision(commitID)+"^{commit}")
if err != nil {
@@ -56,19 +56,26 @@ func (s *server) GetCommitSignatures(request *gitalypb.GetCommitSignaturesReques
return structerr.NewInternal("%w", err)
}
- signatureKey, commitText, err := extractSignature(commitObj)
+ commit, err := parser.ParseCommit(commitObj)
if err != nil {
return structerr.NewInternal("%w", err)
}
+ signature := []byte{}
+ if len(commit.SignatureData.Signatures) > 0 {
+ // While there could be potentially multiple signatures in a Git
+ // commit, like Git, we only consider the first.
+ signature = commit.SignatureData.Signatures[0]
+ }
+
signer := gitalypb.GetCommitSignaturesResponse_SIGNER_USER
if signingKeys != nil {
- if err := signingKeys.Verify(signatureKey, commitText); err == nil {
+ if err := signingKeys.Verify(signature, commit.SignatureData.Payload); err == nil {
signer = gitalypb.GetCommitSignaturesResponse_SIGNER_SYSTEM
}
}
- if err = sendResponse(commitID, signatureKey, commitText, signer, stream); err != nil {
+ if err = sendResponse(commitID, signature, commit.SignatureData.Payload, signer, stream); err != nil {
return structerr.NewInternal("%w", err)
}
}
@@ -76,55 +83,6 @@ func (s *server) GetCommitSignatures(request *gitalypb.GetCommitSignaturesReques
return nil
}
-func extractSignature(reader io.Reader) ([]byte, []byte, error) {
- commitText := []byte{}
- signatureKey := []byte{}
- sawSignature := false
- inSignature := false
- lineBreak := []byte("\n")
- whiteSpace := []byte(" ")
- bufferedReader := bufio.NewReader(reader)
-
- for {
- line, err := bufferedReader.ReadBytes('\n')
-
- if errors.Is(err, io.EOF) {
- commitText = append(commitText, line...)
- break
- }
- if err != nil {
- return nil, nil, err
- }
-
- if !sawSignature && !inSignature {
- for _, signatureField := range [][]byte{[]byte("gpgsig "), []byte("gpgsig-sha256 ")} {
- if !bytes.HasPrefix(line, signatureField) {
- continue
- }
-
- sawSignature, inSignature = true, true
- line = bytes.TrimPrefix(line, signatureField)
- break
- }
- }
-
- if inSignature && !bytes.Equal(line, lineBreak) {
- line = bytes.TrimPrefix(line, whiteSpace)
- signatureKey = append(signatureKey, line...)
- } else if inSignature {
- inSignature = false
- commitText = append(commitText, line...)
- } else {
- commitText = append(commitText, line...)
- }
- }
-
- // Remove last line break from signature
- signatureKey = bytes.TrimSuffix(signatureKey, lineBreak)
-
- return signatureKey, commitText, nil
-}
-
func sendResponse(
commitID string,
signatureKey []byte,
diff --git a/internal/gitaly/service/commit/find_commits.go b/internal/gitaly/service/commit/find_commits.go
index e2d717b25..15425330c 100644
--- a/internal/gitaly/service/commit/find_commits.go
+++ b/internal/gitaly/service/commit/find_commits.go
@@ -195,7 +195,7 @@ func (g *GetCommits) Commit(ctx context.Context, trailers, shortStat, refs bool)
}
}
- return commit, nil
+ return commit.GitCommit, nil
}
func streamCommits(getCommits *GetCommits, stream gitalypb.CommitService_FindCommitsServer, trailers, shortStat bool, refs bool) error {
diff --git a/internal/gitaly/service/commit/last_commit_for_path.go b/internal/gitaly/service/commit/last_commit_for_path.go
index e0f69a97c..555a34e77 100644
--- a/internal/gitaly/service/commit/last_commit_for_path.go
+++ b/internal/gitaly/service/commit/last_commit_for_path.go
@@ -57,7 +57,7 @@ func (s *server) lastCommitForPath(ctx context.Context, in *gitalypb.LastCommitF
return &gitalypb.LastCommitForPathResponse{}, nil
}
- return &gitalypb.LastCommitForPathResponse{Commit: commit}, err
+ return &gitalypb.LastCommitForPathResponse{Commit: commit.GitCommit}, err
}
func validateLastCommitForPathRequest(locator storage.Locator, in *gitalypb.LastCommitForPathRequest) error {
diff --git a/internal/gitaly/service/commit/list_all_commits.go b/internal/gitaly/service/commit/list_all_commits.go
index 0ee326c23..62633d6e5 100644
--- a/internal/gitaly/service/commit/list_all_commits.go
+++ b/internal/gitaly/service/commit/list_all_commits.go
@@ -79,7 +79,7 @@ func (s *server) ListAllCommits(
return structerr.NewInternal("parsing commit: %w", err)
}
- if err := chunker.Send(commit); err != nil {
+ if err := chunker.Send(commit.GitCommit); err != nil {
return structerr.NewInternal("sending commit: %w", err)
}
}
diff --git a/internal/gitaly/service/commit/list_commits.go b/internal/gitaly/service/commit/list_commits.go
index 1a16158a5..09f627873 100644
--- a/internal/gitaly/service/commit/list_commits.go
+++ b/internal/gitaly/service/commit/list_commits.go
@@ -139,7 +139,7 @@ func (s *server) ListCommits(
return structerr.NewInternal("parsing commit: %w", err)
}
- if err := chunker.Send(commit); err != nil {
+ if err := chunker.Send(commit.GitCommit); err != nil {
return structerr.NewInternal("sending commit: %w", err)
}
}
diff --git a/internal/gitaly/service/commit/list_commits_by_oid.go b/internal/gitaly/service/commit/list_commits_by_oid.go
index 3175c4307..f97c2aca5 100644
--- a/internal/gitaly/service/commit/list_commits_by_oid.go
+++ b/internal/gitaly/service/commit/list_commits_by_oid.go
@@ -50,7 +50,7 @@ func (s *server) ListCommitsByOid(in *gitalypb.ListCommitsByOidRequest, stream g
return err
}
- if err := sender.Send(commit); err != nil {
+ if err := sender.Send(commit.GitCommit); err != nil {
return err
}
}
diff --git a/internal/gitaly/service/commit/list_commits_by_ref_name.go b/internal/gitaly/service/commit/list_commits_by_ref_name.go
index e77c9f916..6c6d25b07 100644
--- a/internal/gitaly/service/commit/list_commits_by_ref_name.go
+++ b/internal/gitaly/service/commit/list_commits_by_ref_name.go
@@ -37,7 +37,7 @@ func (s *server) ListCommitsByRefName(in *gitalypb.ListCommitsByRefNameRequest,
}
commitByRef := &gitalypb.ListCommitsByRefNameResponse_CommitForRef{
- Commit: commit, RefName: refName,
+ Commit: commit.GitCommit, RefName: refName,
}
if err := sender.Send(commitByRef); err != nil {
diff --git a/internal/gitaly/service/commit/list_last_commits_for_tree.go b/internal/gitaly/service/commit/list_last_commits_for_tree.go
index fa7e7d0f7..85a5d2a69 100644
--- a/internal/gitaly/service/commit/list_last_commits_for_tree.go
+++ b/internal/gitaly/service/commit/list_last_commits_for_tree.go
@@ -74,7 +74,7 @@ func (s *server) listLastCommitsForTree(in *gitalypb.ListLastCommitsForTreeReque
commitForTree := &gitalypb.ListLastCommitsForTreeResponse_CommitForTree{
PathBytes: []byte(entry.Path),
- Commit: commit,
+ Commit: commit.GitCommit,
}
batch = append(batch, commitForTree)