loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Make "sync branch" also sync object format and add tests (#30878)

(cherry picked from commit 9c08637eae8c3a44d15e62d85144e07ae9dabbec)

authored by

wxiaoguang and committed by
Earl Warren
8cb85475 eb4c6f3f

+45 -27
-27
modules/git/repo.go
··· 7 7 import ( 8 8 "bytes" 9 9 "context" 10 - "errors" 11 10 "fmt" 12 11 "io" 13 12 "net/url" ··· 61 60 func IsRepoURLAccessible(ctx context.Context, url string) bool { 62 61 _, _, err := NewCommand(ctx, "ls-remote", "-q", "-h").AddDynamicArguments(url, "HEAD").RunStdString(nil) 63 62 return err == nil 64 - } 65 - 66 - // GetObjectFormatOfRepo returns the hash type of repository at a given path 67 - func GetObjectFormatOfRepo(ctx context.Context, repoPath string) (ObjectFormat, error) { 68 - var stdout, stderr strings.Builder 69 - 70 - err := NewCommand(ctx, "hash-object", "--stdin").Run(&RunOpts{ 71 - Dir: repoPath, 72 - Stdout: &stdout, 73 - Stderr: &stderr, 74 - Stdin: &strings.Reader{}, 75 - }) 76 - if err != nil { 77 - return nil, err 78 - } 79 - 80 - if stderr.Len() > 0 { 81 - return nil, errors.New(stderr.String()) 82 - } 83 - 84 - h, err := NewIDFromString(strings.TrimRight(stdout.String(), "\n")) 85 - if err != nil { 86 - return nil, err 87 - } 88 - 89 - return h.Type(), nil 90 63 } 91 64 92 65 // InitRepository initializes a new Git repository.
+10
modules/repository/branch.go
··· 5 5 6 6 import ( 7 7 "context" 8 + "fmt" 8 9 9 10 "code.gitea.io/gitea/models/db" 10 11 git_model "code.gitea.io/gitea/models/git" ··· 36 37 } 37 38 38 39 func SyncRepoBranchesWithRepo(ctx context.Context, repo *repo_model.Repository, gitRepo *git.Repository, doerID int64) (int64, error) { 40 + objFmt, err := gitRepo.GetObjectFormat() 41 + if err != nil { 42 + return 0, fmt.Errorf("GetObjectFormat: %w", err) 43 + } 44 + _, err = db.GetEngine(ctx).ID(repo.ID).Update(&repo_model.Repository{ObjectFormatName: objFmt.Name()}) 45 + if err != nil { 46 + return 0, fmt.Errorf("UpdateRepository: %w", err) 47 + } 48 + 39 49 allBranches := container.Set[string]{} 40 50 { 41 51 branches, _, err := gitRepo.GetBranchNames(0, 0)
+31
modules/repository/branch_test.go
··· 1 + // Copyright 2024 The Gitea Authors. All rights reserved. 2 + // SPDX-License-Identifier: MIT 3 + 4 + package repository 5 + 6 + import ( 7 + "testing" 8 + 9 + "code.gitea.io/gitea/models/db" 10 + git_model "code.gitea.io/gitea/models/git" 11 + repo_model "code.gitea.io/gitea/models/repo" 12 + "code.gitea.io/gitea/models/unittest" 13 + 14 + "github.com/stretchr/testify/assert" 15 + ) 16 + 17 + func TestSyncRepoBranches(t *testing.T) { 18 + assert.NoError(t, unittest.PrepareTestDatabase()) 19 + _, err := db.GetEngine(db.DefaultContext).ID(1).Update(&repo_model.Repository{ObjectFormatName: "bad-fmt"}) 20 + assert.NoError(t, db.TruncateBeans(db.DefaultContext, &git_model.Branch{})) 21 + assert.NoError(t, err) 22 + repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) 23 + assert.Equal(t, "bad-fmt", repo.ObjectFormatName) 24 + _, err = SyncRepoBranches(db.DefaultContext, 1, 0) 25 + assert.NoError(t, err) 26 + repo = unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) 27 + assert.Equal(t, "sha1", repo.ObjectFormatName) 28 + branch, err := git_model.GetBranch(db.DefaultContext, 1, "master") 29 + assert.NoError(t, err) 30 + assert.EqualValues(t, "master", branch.Name) 31 + }
+4
services/repository/adopt.go
··· 195 195 } 196 196 defer gitRepo.Close() 197 197 198 + if _, err = repo_module.SyncRepoBranchesWithRepo(ctx, repo, gitRepo, 0); err != nil { 199 + return fmt.Errorf("SyncRepoBranches: %w", err) 200 + } 201 + 198 202 if err = repo_module.SyncReleasesWithTags(ctx, repo, gitRepo); err != nil { 199 203 return fmt.Errorf("SyncReleasesWithTags: %w", err) 200 204 }