summaryrefslogtreecommitdiffstats
path: root/modules/git
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2024-04-26 10:53:30 +0800
committerGitHub <noreply@github.com>2024-04-26 02:53:30 +0000
commited8c63cea3da0d0ba3cdec58f6c6d61c73205afe (patch)
tree4bc917716509320cc88933e44623cbc683938803 /modules/git
parent2a3906d75532ba8689338247d794f21dceb4d359 (diff)
downloadgitea-ed8c63cea3da0d0ba3cdec58f6c6d61c73205afe.tar.gz
gitea-ed8c63cea3da0d0ba3cdec58f6c6d61c73205afe.zip
Deduplicate lfs common code (#30704)
Diffstat (limited to 'modules/git')
-rw-r--r--modules/git/pipeline/lfs_common.go32
-rw-r--r--modules/git/pipeline/lfs_gogit.go (renamed from modules/git/pipeline/lfs.go)25
-rw-r--r--modules/git/pipeline/lfs_nogogit.go33
3 files changed, 42 insertions, 48 deletions
diff --git a/modules/git/pipeline/lfs_common.go b/modules/git/pipeline/lfs_common.go
new file mode 100644
index 0000000000..188e7d4d65
--- /dev/null
+++ b/modules/git/pipeline/lfs_common.go
@@ -0,0 +1,32 @@
+// Copyright 2024 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package pipeline
+
+import (
+ "fmt"
+ "time"
+
+ "code.gitea.io/gitea/modules/git"
+)
+
+// LFSResult represents commits found using a provided pointer file hash
+type LFSResult struct {
+ Name string
+ SHA string
+ Summary string
+ When time.Time
+ ParentHashes []git.ObjectID
+ BranchName string
+ FullCommitName string
+}
+
+type lfsResultSlice []*LFSResult
+
+func (a lfsResultSlice) Len() int { return len(a) }
+func (a lfsResultSlice) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
+func (a lfsResultSlice) Less(i, j int) bool { return a[j].When.After(a[i].When) }
+
+func lfsError(msg string, err error) error {
+ return fmt.Errorf("LFS error occurred, %s: err: %w", msg, err)
+}
diff --git a/modules/git/pipeline/lfs.go b/modules/git/pipeline/lfs_gogit.go
index 6dfca24f29..adcf8ed09c 100644
--- a/modules/git/pipeline/lfs.go
+++ b/modules/git/pipeline/lfs_gogit.go
@@ -7,12 +7,10 @@ package pipeline
import (
"bufio"
- "fmt"
"io"
"sort"
"strings"
"sync"
- "time"
"code.gitea.io/gitea/modules/git"
@@ -21,23 +19,6 @@ import (
"github.com/go-git/go-git/v5/plumbing/object"
)
-// LFSResult represents commits found using a provided pointer file hash
-type LFSResult struct {
- Name string
- SHA string
- Summary string
- When time.Time
- ParentHashes []git.ObjectID
- BranchName string
- FullCommitName string
-}
-
-type lfsResultSlice []*LFSResult
-
-func (a lfsResultSlice) Len() int { return len(a) }
-func (a lfsResultSlice) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
-func (a lfsResultSlice) Less(i, j int) bool { return a[j].When.After(a[i].When) }
-
// FindLFSFile finds commits that contain a provided pointer file hash
func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, error) {
resultsMap := map[string]*LFSResult{}
@@ -51,7 +32,7 @@ func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, err
All: true,
})
if err != nil {
- return nil, fmt.Errorf("Failed to get GoGit CommitsIter. Error: %w", err)
+ return nil, lfsError("failed to get GoGit CommitsIter", err)
}
err = commitsIter.ForEach(func(gitCommit *object.Commit) error {
@@ -85,7 +66,7 @@ func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, err
return nil
})
if err != nil && err != io.EOF {
- return nil, fmt.Errorf("Failure in CommitIter.ForEach: %w", err)
+ return nil, lfsError("failure in CommitIter.ForEach", err)
}
for _, result := range resultsMap {
@@ -156,7 +137,7 @@ func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, err
select {
case err, has := <-errChan:
if has {
- return nil, fmt.Errorf("Unable to obtain name for LFS files. Error: %w", err)
+ return nil, lfsError("unable to obtain name for LFS files", err)
}
default:
}
diff --git a/modules/git/pipeline/lfs_nogogit.go b/modules/git/pipeline/lfs_nogogit.go
index fe320f39f3..349cfbd9ce 100644
--- a/modules/git/pipeline/lfs_nogogit.go
+++ b/modules/git/pipeline/lfs_nogogit.go
@@ -8,33 +8,14 @@ package pipeline
import (
"bufio"
"bytes"
- "fmt"
"io"
"sort"
"strings"
"sync"
- "time"
"code.gitea.io/gitea/modules/git"
)
-// LFSResult represents commits found using a provided pointer file hash
-type LFSResult struct {
- Name string
- SHA string
- Summary string
- When time.Time
- ParentIDs []git.ObjectID
- BranchName string
- FullCommitName string
-}
-
-type lfsResultSlice []*LFSResult
-
-func (a lfsResultSlice) Len() int { return len(a) }
-func (a lfsResultSlice) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
-func (a lfsResultSlice) Less(i, j int) bool { return a[j].When.After(a[i].When) }
-
// FindLFSFile finds commits that contain a provided pointer file hash
func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, error) {
resultsMap := map[string]*LFSResult{}
@@ -137,11 +118,11 @@ func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, err
n += int64(count)
if bytes.Equal(binObjectID, objectID.RawValue()) {
result := LFSResult{
- Name: curPath + string(fname),
- SHA: curCommit.ID.String(),
- Summary: strings.Split(strings.TrimSpace(curCommit.CommitMessage), "\n")[0],
- When: curCommit.Author.When,
- ParentIDs: curCommit.Parents,
+ Name: curPath + string(fname),
+ SHA: curCommit.ID.String(),
+ Summary: strings.Split(strings.TrimSpace(curCommit.CommitMessage), "\n")[0],
+ When: curCommit.Author.When,
+ ParentHashes: curCommit.Parents,
}
resultsMap[curCommit.ID.String()+":"+curPath+string(fname)] = &result
} else if string(mode) == git.EntryModeTree.String() {
@@ -183,7 +164,7 @@ func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, err
for _, result := range resultsMap {
hasParent := false
- for _, parentID := range result.ParentIDs {
+ for _, parentID := range result.ParentHashes {
if _, hasParent = resultsMap[parentID.String()+":"+result.Name]; hasParent {
break
}
@@ -240,7 +221,7 @@ func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, err
select {
case err, has := <-errChan:
if has {
- return nil, fmt.Errorf("Unable to obtain name for LFS files. Error: %w", err)
+ return nil, lfsError("unable to obtain name for LFS files", err)
}
default:
}