refactor: hide git repo path details from more packages (#38601)

Remove `RepoPath` from "models/repo" package, remove `UserPath` from
"models/user" package, use `WithRepo` for more places, fine tune tests.
This commit is contained in:
wxiaoguang
2026-07-24 01:42:55 +08:00
committed by GitHub
parent 86a3048247
commit 7065637e61
22 changed files with 216 additions and 186 deletions
+1 -2
View File
@@ -211,8 +211,7 @@ func TestCompareBranchesNoCommonMergeBase(t *testing.T) {
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user2"})
repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerID: user2.ID, Name: "repo1"})
repoPath := repo_model.RepoPath(user2.Name, repo1.Name)
_, _, runErr := gitcmd.NewCommand("fast-import").WithDir(repoPath).WithStdinBytes([]byte(strings.TrimSpace(`
_, _, runErr := gitcmd.NewCommand("fast-import").WithRepo(repo1).WithStdinBytes([]byte(strings.TrimSpace(`
commit refs/heads/unrelated-history
committer User <user@example.com> 1714310400 +0000
data 13
+3 -2
View File
@@ -16,6 +16,7 @@ import (
"gitea.dev/models/unittest"
user_model "gitea.dev/models/user"
"gitea.dev/modules/git"
"gitea.dev/modules/git/gitrepo"
"gitea.dev/modules/migration"
"gitea.dev/modules/setting"
"gitea.dev/modules/test"
@@ -35,7 +36,7 @@ func TestMirrorPull(t *testing.T) {
ctx := t.Context()
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
repoPath := repo_model.RepoPath(user.Name, repo.Name)
repoPath := gitrepo.RepoLocalPath(repo)
opts := migration.MigrateOptions{
RepoName: "test_mirror",
@@ -140,7 +141,7 @@ func TestMirrorPullSSRFRevalidation(t *testing.T) {
ctx := t.Context()
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
repoPath := repo_model.RepoPath(user.Name, repo.Name)
repoPath := gitrepo.RepoLocalPath(repo)
// an "internal" server that records whether it was reached
var reached atomic.Bool
+6 -7
View File
@@ -385,13 +385,12 @@ func TestCantMergeUnrelated(t *testing.T) {
OwnerID: user1.ID,
Name: "repo1",
})
path := repo_model.RepoPath(user1.Name, repo1.Name)
err := gitcmd.NewCommand("read-tree", "--empty").WithDir(path).Run(t.Context())
err := gitcmd.NewCommand("read-tree", "--empty").WithRepo(repo1).Run(t.Context())
assert.NoError(t, err)
stdout, _, err := gitcmd.NewCommand("hash-object", "-w", "--stdin").
WithDir(path).
WithRepo(repo1).
WithStdinBytes([]byte("Unrelated File")).
RunStdString(t.Context())
@@ -400,11 +399,11 @@ func TestCantMergeUnrelated(t *testing.T) {
_, _, err = gitcmd.NewCommand("update-index", "--add", "--replace", "--cacheinfo").
AddDynamicArguments("100644", sha, "somewhere-over-the-rainbow").
WithDir(path).
WithRepo(repo1).
RunStdString(t.Context())
assert.NoError(t, err)
treeSha, _, err := gitcmd.NewCommand("write-tree").WithDir(path).RunStdString(t.Context())
treeSha, _, err := gitcmd.NewCommand("write-tree").WithRepo(repo1).RunStdString(t.Context())
assert.NoError(t, err)
treeSha = strings.TrimSpace(treeSha)
@@ -425,7 +424,7 @@ func TestCantMergeUnrelated(t *testing.T) {
stdout, _, err = gitcmd.NewCommand("commit-tree").AddDynamicArguments(treeSha).
WithEnv(env).
WithDir(path).
WithRepo(repo1).
WithStdinBytes(messageBytes.Bytes()).
RunStdString(t.Context())
assert.NoError(t, err)
@@ -433,7 +432,7 @@ func TestCantMergeUnrelated(t *testing.T) {
_, _, err = gitcmd.NewCommand("branch", "unrelated").
AddDynamicArguments(commitSha).
WithDir(path).
WithRepo(repo1).
RunStdString(t.Context())
assert.NoError(t, err)
+53 -46
View File
@@ -21,9 +21,9 @@ import (
"gitea.dev/models/unittest"
user_model "gitea.dev/models/user"
"gitea.dev/modules/git"
"gitea.dev/modules/git/gitrepo"
"gitea.dev/modules/setting"
"gitea.dev/modules/test"
"gitea.dev/modules/util"
repo_service "gitea.dev/services/repository"
"gitea.dev/tests"
@@ -618,57 +618,64 @@ func TestGenerateRepository(t *testing.T) {
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
repo44 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 44})
tmplRepoLabels := []*issues_model.Label{
{RepoID: 44, Name: "priority/high", Exclusive: true, ExclusiveOrder: 2, Color: "#ee0000", Description: "desc-high"},
{RepoID: 44, Name: "priority/low", Exclusive: true, ExclusiveOrder: 1, Color: "#0000ee", Description: "desc-low"},
}
t.Run("Success", func(t *testing.T) {
tmplRepoLabels := []*issues_model.Label{
{RepoID: 44, Name: "priority/high", Exclusive: true, ExclusiveOrder: 2, Color: "#ee0000", Description: "desc-high"},
{RepoID: 44, Name: "priority/low", Exclusive: true, ExclusiveOrder: 1, Color: "#0000ee", Description: "desc-low"},
}
require.NoError(t, issues_model.NewLabels(t.Context(), tmplRepoLabels...))
require.NoError(t, issues_model.NewLabels(t.Context(), tmplRepoLabels...))
generatedRepo, err := repo_service.GenerateRepository(t.Context(), user2, user2, repo44, repo_service.GenerateRepoOptions{
Name: "generated-from-template-44",
GitContent: true,
IssueLabels: true,
generatedRepo, err := repo_service.GenerateRepository(t.Context(), user2, user2, repo44, repo_service.GenerateRepoOptions{
Name: "generated-from-template-44",
GitContent: true,
IssueLabels: true,
})
require.NoError(t, err)
require.NotNil(t, generatedRepo)
exist, err := git.IsRepositoryExist(t.Context(), generatedRepo)
require.NoError(t, err)
require.True(t, exist)
unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerName: user2.Name, Name: generatedRepo.Name})
generatedLabels, err := issues_model.GetLabelsByRepoID(t.Context(), generatedRepo.ID, "", db.ListOptions{})
require.NoError(t, err)
require.Len(t, generatedLabels, len(tmplRepoLabels))
for i, tmplLabel := range tmplRepoLabels {
genLabel := generatedLabels[i]
assert.Equal(t, tmplLabel.Name, genLabel.Name)
assert.Equal(t, tmplLabel.Exclusive, genLabel.Exclusive)
assert.Equal(t, tmplLabel.ExclusiveOrder, genLabel.ExclusiveOrder)
assert.Equal(t, tmplLabel.Color, genLabel.Color)
assert.Equal(t, tmplLabel.Description, genLabel.Description)
}
err = repo_service.DeleteRepositoryDirectly(t.Context(), generatedRepo.ID)
assert.NoError(t, err)
})
require.NoError(t, err)
require.NotNil(t, generatedRepo)
exist, err := util.IsExist(repo_model.RepoPath(user2.Name, generatedRepo.Name))
require.NoError(t, err)
require.True(t, exist)
t.Run("Failure", func(t *testing.T) {
// a failed creating because some mock data
// create the repository directory so that the creation will fail after database record created.
testFailureRepoName := "generated-from-template-44"
testFailureRepo := gitrepo.CodeRepoByName(user2.Name, testFailureRepoName)
testFailurePath := gitrepo.RepoLocalPath(testFailureRepo)
assert.NoError(t, os.MkdirAll(testFailurePath, os.ModePerm))
unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerName: user2.Name, Name: generatedRepo.Name})
generatedRepoFailure, err := repo_service.GenerateRepository(t.Context(), user2, user2, repo44, repo_service.GenerateRepoOptions{
Name: testFailureRepoName,
GitContent: true,
})
assert.Nil(t, generatedRepoFailure)
assert.Error(t, err)
generatedLabels, err := issues_model.GetLabelsByRepoID(t.Context(), generatedRepo.ID, "", db.ListOptions{})
require.NoError(t, err)
require.Len(t, generatedLabels, len(tmplRepoLabels))
for i, tmplLabel := range tmplRepoLabels {
genLabel := generatedLabels[i]
assert.Equal(t, tmplLabel.Name, genLabel.Name)
assert.Equal(t, tmplLabel.Exclusive, genLabel.Exclusive)
assert.Equal(t, tmplLabel.ExclusiveOrder, genLabel.ExclusiveOrder)
assert.Equal(t, tmplLabel.Color, genLabel.Color)
assert.Equal(t, tmplLabel.Description, genLabel.Description)
}
// assert the cleanup is successful
unittest.AssertNotExistsBean(t, &repo_model.Repository{OwnerName: user2.Name, Name: testFailureRepoName})
err = repo_service.DeleteRepositoryDirectly(t.Context(), generatedRepo.ID)
assert.NoError(t, err)
// a failed creating because some mock data
// create the repository directory so that the creation will fail after database record created.
assert.NoError(t, os.MkdirAll(repo_model.RepoPath(user2.Name, "generated-from-template-44"), os.ModePerm))
generatedRepo2, err := repo_service.GenerateRepository(t.Context(), user2, user2, repo44, repo_service.GenerateRepoOptions{
Name: "generated-from-template-44",
GitContent: true,
exist, err := git.IsRepositoryExist(t.Context(), testFailureRepo)
assert.NoError(t, err)
assert.False(t, exist)
})
assert.Nil(t, generatedRepo2)
assert.Error(t, err)
// assert the cleanup is successful
unittest.AssertNotExistsBean(t, &repo_model.Repository{OwnerName: user2.Name, Name: generatedRepo.Name})
exist, err = util.IsExist(repo_model.RepoPath(user2.Name, generatedRepo.Name))
assert.NoError(t, err)
assert.False(t, exist)
}