mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-26 12:27:06 +00:00 
			
		
		
		
	Backport #30878 by wxiaoguang Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		| @@ -7,7 +7,6 @@ package git | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"net/url" | ||||
| @@ -63,32 +62,6 @@ func IsRepoURLAccessible(ctx context.Context, url string) bool { | ||||
| 	return err == nil | ||||
| } | ||||
|  | ||||
| // GetObjectFormatOfRepo returns the hash type of repository at a given path | ||||
| func GetObjectFormatOfRepo(ctx context.Context, repoPath string) (ObjectFormat, error) { | ||||
| 	var stdout, stderr strings.Builder | ||||
|  | ||||
| 	err := NewCommand(ctx, "hash-object", "--stdin").Run(&RunOpts{ | ||||
| 		Dir:    repoPath, | ||||
| 		Stdout: &stdout, | ||||
| 		Stderr: &stderr, | ||||
| 		Stdin:  &strings.Reader{}, | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	if stderr.Len() > 0 { | ||||
| 		return nil, errors.New(stderr.String()) | ||||
| 	} | ||||
|  | ||||
| 	h, err := NewIDFromString(strings.TrimRight(stdout.String(), "\n")) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	return h.Type(), nil | ||||
| } | ||||
|  | ||||
| // InitRepository initializes a new Git repository. | ||||
| func InitRepository(ctx context.Context, repoPath string, bare bool, objectFormatName string) error { | ||||
| 	err := os.MkdirAll(repoPath, os.ModePerm) | ||||
|   | ||||
| @@ -5,6 +5,7 @@ package repository | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"fmt" | ||||
|  | ||||
| 	"code.gitea.io/gitea/models/db" | ||||
| 	git_model "code.gitea.io/gitea/models/git" | ||||
| @@ -36,6 +37,15 @@ func SyncRepoBranches(ctx context.Context, repoID, doerID int64) (int64, error) | ||||
| } | ||||
|  | ||||
| func SyncRepoBranchesWithRepo(ctx context.Context, repo *repo_model.Repository, gitRepo *git.Repository, doerID int64) (int64, error) { | ||||
| 	objFmt, err := gitRepo.GetObjectFormat() | ||||
| 	if err != nil { | ||||
| 		return 0, fmt.Errorf("GetObjectFormat: %w", err) | ||||
| 	} | ||||
| 	_, err = db.GetEngine(ctx).ID(repo.ID).Update(&repo_model.Repository{ObjectFormatName: objFmt.Name()}) | ||||
| 	if err != nil { | ||||
| 		return 0, fmt.Errorf("UpdateRepository: %w", err) | ||||
| 	} | ||||
|  | ||||
| 	allBranches := container.Set[string]{} | ||||
| 	{ | ||||
| 		branches, _, err := gitRepo.GetBranchNames(0, 0) | ||||
|   | ||||
							
								
								
									
										31
									
								
								modules/repository/branch_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								modules/repository/branch_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| // Copyright 2024 The Gitea Authors. All rights reserved. | ||||
| // SPDX-License-Identifier: MIT | ||||
|  | ||||
| package repository | ||||
|  | ||||
| import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"code.gitea.io/gitea/models/db" | ||||
| 	git_model "code.gitea.io/gitea/models/git" | ||||
| 	repo_model "code.gitea.io/gitea/models/repo" | ||||
| 	"code.gitea.io/gitea/models/unittest" | ||||
|  | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| ) | ||||
|  | ||||
| func TestSyncRepoBranches(t *testing.T) { | ||||
| 	assert.NoError(t, unittest.PrepareTestDatabase()) | ||||
| 	_, err := db.GetEngine(db.DefaultContext).ID(1).Update(&repo_model.Repository{ObjectFormatName: "bad-fmt"}) | ||||
| 	assert.NoError(t, db.TruncateBeans(db.DefaultContext, &git_model.Branch{})) | ||||
| 	assert.NoError(t, err) | ||||
| 	repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) | ||||
| 	assert.Equal(t, "bad-fmt", repo.ObjectFormatName) | ||||
| 	_, err = SyncRepoBranches(db.DefaultContext, 1, 0) | ||||
| 	assert.NoError(t, err) | ||||
| 	repo = unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) | ||||
| 	assert.Equal(t, "sha1", repo.ObjectFormatName) | ||||
| 	branch, err := git_model.GetBranch(db.DefaultContext, 1, "master") | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.EqualValues(t, "master", branch.Name) | ||||
| } | ||||
| @@ -195,6 +195,10 @@ func adoptRepository(ctx context.Context, repoPath string, u *user_model.User, r | ||||
| 	} | ||||
| 	defer gitRepo.Close() | ||||
|  | ||||
| 	if _, err = repo_module.SyncRepoBranchesWithRepo(ctx, repo, gitRepo, 0); err != nil { | ||||
| 		return fmt.Errorf("SyncRepoBranches: %w", err) | ||||
| 	} | ||||
|  | ||||
| 	if err = repo_module.SyncReleasesWithTags(ctx, repo, gitRepo); err != nil { | ||||
| 		return fmt.Errorf("SyncReleasesWithTags: %w", err) | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Giteabot
					Giteabot