Skip to content

Commit a8f2999

Browse files
authored
Merge pull request #6 from zeripath/fix-git-legacy
Refactor CheckAttributeReader to make a *git.Repository version
2 parents 334e5d2 + 038929e commit a8f2999

File tree

4 files changed

+40
-94
lines changed

4 files changed

+40
-94
lines changed

modules/git/repo_attribute.go

+34
Original file line numberDiff line numberDiff line change
@@ -392,3 +392,37 @@ func (wr *lineSeparatedAttributeWriter) Close() error {
392392
close(wr.closed)
393393
return nil
394394
}
395+
396+
// Create a check attribute reader for the current repository and provided commit ID
397+
func (repo *Repository) CheckAttributeReader(commitID string) (*CheckAttributeReader, context.CancelFunc) {
398+
indexFilename, worktree, deleteTemporaryFile, err := repo.ReadTreeToTemporaryIndex(commitID)
399+
if err != nil {
400+
return nil, func() {}
401+
}
402+
403+
checker := &CheckAttributeReader{
404+
Attributes: []string{"linguist-vendored", "linguist-generated", "linguist-language", "gitlab-language"},
405+
Repo: repo,
406+
IndexFile: indexFilename,
407+
WorkTree: worktree,
408+
}
409+
ctx, cancel := context.WithCancel(repo.Ctx)
410+
if err := checker.Init(ctx); err != nil {
411+
log.Error("Unable to open checker for %s. Error: %v", commitID, err)
412+
} else {
413+
go func() {
414+
err := checker.Run()
415+
if err != nil && err != ctx.Err() {
416+
log.Error("Unable to open checker for %s. Error: %v", commitID, err)
417+
}
418+
cancel()
419+
}()
420+
}
421+
deferable := func() {
422+
_ = checker.Close()
423+
cancel()
424+
deleteTemporaryFile()
425+
}
426+
427+
return checker, deferable
428+
}

modules/git/repo_language_stats_gogit.go

+2-30
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,10 @@ package git
88

99
import (
1010
"bytes"
11-
"context"
1211
"io"
1312
"strings"
1413

1514
"code.gitea.io/gitea/modules/analyze"
16-
"code.gitea.io/gitea/modules/log"
1715

1816
"github.com/go-enry/go-enry/v2"
1917
"github.com/go-git/go-git/v5"
@@ -43,34 +41,8 @@ func (repo *Repository) GetLanguageStats(commitID string) (map[string]int64, err
4341
return nil, err
4442
}
4543

46-
var checker *CheckAttributeReader
47-
48-
// this code block is refactored from old code "if (git version ...)", keep the block to limit the variable scope
49-
{
50-
indexFilename, workTree, deleteTemporaryFile, err := repo.ReadTreeToTemporaryIndex(commitID)
51-
if err == nil {
52-
defer deleteTemporaryFile()
53-
checker = &CheckAttributeReader{
54-
Attributes: []string{"linguist-vendored", "linguist-generated", "linguist-language", "gitlab-language"},
55-
Repo: repo,
56-
IndexFile: indexFilename,
57-
WorkTree: workTree,
58-
}
59-
ctx, cancel := context.WithCancel(DefaultContext)
60-
if err := checker.Init(ctx); err != nil {
61-
log.Error("Unable to open checker for %s. Error: %v", commitID, err)
62-
} else {
63-
go func() {
64-
err = checker.Run()
65-
if err != nil {
66-
log.Error("Unable to open checker for %s. Error: %v", commitID, err)
67-
cancel()
68-
}
69-
}()
70-
}
71-
defer cancel()
72-
}
73-
}
44+
checker, deferable := repo.CheckAttributeReader(commitID)
45+
defer deferable()
7446

7547
sizes := make(map[string]int64)
7648
err = tree.Files().ForEach(func(f *object.File) error {

modules/git/repo_language_stats_nogogit.go

+2-32
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ package git
99
import (
1010
"bufio"
1111
"bytes"
12-
"context"
1312
"io"
1413
"math"
1514
"strings"
@@ -63,37 +62,8 @@ func (repo *Repository) GetLanguageStats(commitID string) (map[string]int64, err
6362
return nil, err
6463
}
6564

66-
var checker *CheckAttributeReader
67-
68-
// this code block is refactored from old code "if (git version ...)", keep the block to limit the variable scope
69-
{
70-
indexFilename, worktree, deleteTemporaryFile, err := repo.ReadTreeToTemporaryIndex(commitID)
71-
if err == nil {
72-
defer deleteTemporaryFile()
73-
checker = &CheckAttributeReader{
74-
Attributes: []string{"linguist-vendored", "linguist-generated", "linguist-language", "gitlab-language"},
75-
Repo: repo,
76-
IndexFile: indexFilename,
77-
WorkTree: worktree,
78-
}
79-
ctx, cancel := context.WithCancel(repo.Ctx)
80-
if err := checker.Init(ctx); err != nil {
81-
log.Error("Unable to open checker for %s. Error: %v", commitID, err)
82-
} else {
83-
go func() {
84-
err = checker.Run()
85-
if err != nil {
86-
log.Error("Unable to open checker for %s. Error: %v", commitID, err)
87-
cancel()
88-
}
89-
}()
90-
}
91-
defer func() {
92-
_ = checker.Close()
93-
cancel()
94-
}()
95-
}
96-
}
65+
checker, deferable := repo.CheckAttributeReader(commitID)
66+
defer deferable()
9767

9868
contentBuf := bytes.Buffer{}
9969
var content []byte

services/gitdiff/gitdiff.go

+2-32
Original file line numberDiff line numberDiff line change
@@ -1417,38 +1417,8 @@ func GetDiff(gitRepo *git.Repository, opts *DiffOptions, files ...string) (*Diff
14171417
}
14181418
diff.Start = opts.SkipTo
14191419

1420-
var checker *git.CheckAttributeReader
1421-
1422-
// this code block is refactored from old code "if (git version ...)", keep the block to limit the variable scope
1423-
{
1424-
indexFilename, worktree, deleteTemporaryFile, err := gitRepo.ReadTreeToTemporaryIndex(opts.AfterCommitID)
1425-
if err == nil {
1426-
defer deleteTemporaryFile()
1427-
1428-
checker = &git.CheckAttributeReader{
1429-
Attributes: []string{"linguist-vendored", "linguist-generated", "linguist-language", "gitlab-language"},
1430-
Repo: gitRepo,
1431-
IndexFile: indexFilename,
1432-
WorkTree: worktree,
1433-
}
1434-
ctx, cancel := context.WithCancel(gitRepo.Ctx)
1435-
if err := checker.Init(ctx); err != nil {
1436-
log.Error("Unable to open checker for %s. Error: %v", opts.AfterCommitID, err)
1437-
} else {
1438-
go func() {
1439-
err := checker.Run()
1440-
if err != nil && err != ctx.Err() {
1441-
log.Error("Unable to open checker for %s. Error: %v", opts.AfterCommitID, err)
1442-
}
1443-
cancel()
1444-
}()
1445-
}
1446-
defer func() {
1447-
_ = checker.Close()
1448-
cancel()
1449-
}()
1450-
}
1451-
}
1420+
checker, deferable := gitRepo.CheckAttributeReader(opts.AfterCommitID)
1421+
defer deferable()
14521422

14531423
for _, diffFile := range diff.Files {
14541424

0 commit comments

Comments
 (0)