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