@@ -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) |
@@ -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) | |||
} |