mirror of
https://github.com/go-gitea/gitea.git
synced 2025-09-07 18:58:18 +00:00
Move HasWiki to repository service package (#33912)
Move HasWiki out of the models package to avoid referencing the absolute wiki path directly.
This commit is contained in:
@@ -229,6 +229,10 @@ func RelativePath(ownerName, repoName string) string {
|
|||||||
return strings.ToLower(ownerName) + "/" + strings.ToLower(repoName) + ".git"
|
return strings.ToLower(ownerName) + "/" + strings.ToLower(repoName) + ".git"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func RelativeWikiPath(ownerName, repoName string) string {
|
||||||
|
return strings.ToLower(ownerName) + "/" + strings.ToLower(repoName) + ".wiki.git"
|
||||||
|
}
|
||||||
|
|
||||||
// RelativePath should be an unix style path like username/reponame.git
|
// RelativePath should be an unix style path like username/reponame.git
|
||||||
func (repo *Repository) RelativePath() string {
|
func (repo *Repository) RelativePath() string {
|
||||||
return RelativePath(repo.OwnerName, repo.Name)
|
return RelativePath(repo.OwnerName, repo.Name)
|
||||||
@@ -242,7 +246,7 @@ func (sr StorageRepo) RelativePath() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (repo *Repository) WikiStorageRepo() StorageRepo {
|
func (repo *Repository) WikiStorageRepo() StorageRepo {
|
||||||
return StorageRepo(strings.ToLower(repo.OwnerName) + "/" + strings.ToLower(repo.Name) + ".wiki.git")
|
return StorageRepo(RelativeWikiPath(repo.OwnerName, repo.Name))
|
||||||
}
|
}
|
||||||
|
|
||||||
// SanitizedOriginalURL returns a sanitized OriginalURL
|
// SanitizedOriginalURL returns a sanitized OriginalURL
|
||||||
|
@@ -11,7 +11,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
user_model "code.gitea.io/gitea/models/user"
|
user_model "code.gitea.io/gitea/models/user"
|
||||||
"code.gitea.io/gitea/modules/log"
|
|
||||||
"code.gitea.io/gitea/modules/util"
|
"code.gitea.io/gitea/modules/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -86,12 +85,3 @@ func WikiPath(userName, repoName string) string {
|
|||||||
func (repo *Repository) WikiPath() string {
|
func (repo *Repository) WikiPath() string {
|
||||||
return WikiPath(repo.OwnerName, repo.Name)
|
return WikiPath(repo.OwnerName, repo.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// HasWiki returns true if repository has wiki.
|
|
||||||
func (repo *Repository) HasWiki() bool {
|
|
||||||
isDir, err := util.IsDir(repo.WikiPath())
|
|
||||||
if err != nil {
|
|
||||||
log.Error("Unable to check if %s is a directory: %v", repo.WikiPath(), err)
|
|
||||||
}
|
|
||||||
return isDir
|
|
||||||
}
|
|
||||||
|
@@ -35,11 +35,3 @@ func TestRepository_WikiPath(t *testing.T) {
|
|||||||
expected := filepath.Join(setting.RepoRootPath, "user2/repo1.wiki.git")
|
expected := filepath.Join(setting.RepoRootPath, "user2/repo1.wiki.git")
|
||||||
assert.Equal(t, expected, repo.WikiPath())
|
assert.Equal(t, expected, repo.WikiPath())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRepository_HasWiki(t *testing.T) {
|
|
||||||
unittest.PrepareTestEnv(t)
|
|
||||||
repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
|
|
||||||
assert.True(t, repo1.HasWiki())
|
|
||||||
repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2})
|
|
||||||
assert.False(t, repo2.HasWiki())
|
|
||||||
}
|
|
||||||
|
@@ -69,7 +69,8 @@ func IsRepositoryExist(ctx context.Context, repo Repository) (bool, error) {
|
|||||||
return util.IsExist(repoPath(repo))
|
return util.IsExist(repoPath(repo))
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteRepository deletes the repository directory from the disk
|
// DeleteRepository deletes the repository directory from the disk, it will return
|
||||||
|
// nil if the repository does not exist.
|
||||||
func DeleteRepository(ctx context.Context, repo Repository) error {
|
func DeleteRepository(ctx context.Context, repo Repository) error {
|
||||||
return util.RemoveAll(repoPath(repo))
|
return util.RemoveAll(repoPath(repo))
|
||||||
}
|
}
|
||||||
|
@@ -33,6 +33,7 @@ import (
|
|||||||
"code.gitea.io/gitea/services/forms"
|
"code.gitea.io/gitea/services/forms"
|
||||||
git_service "code.gitea.io/gitea/services/git"
|
git_service "code.gitea.io/gitea/services/git"
|
||||||
notify_service "code.gitea.io/gitea/services/notify"
|
notify_service "code.gitea.io/gitea/services/notify"
|
||||||
|
repo_service "code.gitea.io/gitea/services/repository"
|
||||||
wiki_service "code.gitea.io/gitea/services/wiki"
|
wiki_service "code.gitea.io/gitea/services/wiki"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -474,7 +475,7 @@ func Wiki(ctx *context.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !ctx.Repo.Repository.HasWiki() {
|
if !repo_service.HasWiki(ctx, ctx.Repo.Repository) {
|
||||||
ctx.Data["Title"] = ctx.Tr("repo.wiki")
|
ctx.Data["Title"] = ctx.Tr("repo.wiki")
|
||||||
ctx.HTML(http.StatusOK, tplWikiStart)
|
ctx.HTML(http.StatusOK, tplWikiStart)
|
||||||
return
|
return
|
||||||
@@ -510,7 +511,7 @@ func Wiki(ctx *context.Context) {
|
|||||||
func WikiRevision(ctx *context.Context) {
|
func WikiRevision(ctx *context.Context) {
|
||||||
ctx.Data["CanWriteWiki"] = ctx.Repo.CanWrite(unit.TypeWiki) && !ctx.Repo.Repository.IsArchived
|
ctx.Data["CanWriteWiki"] = ctx.Repo.CanWrite(unit.TypeWiki) && !ctx.Repo.Repository.IsArchived
|
||||||
|
|
||||||
if !ctx.Repo.Repository.HasWiki() {
|
if !repo_service.HasWiki(ctx, ctx.Repo.Repository) {
|
||||||
ctx.Data["Title"] = ctx.Tr("repo.wiki")
|
ctx.Data["Title"] = ctx.Tr("repo.wiki")
|
||||||
ctx.HTML(http.StatusOK, tplWikiStart)
|
ctx.HTML(http.StatusOK, tplWikiStart)
|
||||||
return
|
return
|
||||||
@@ -540,7 +541,7 @@ func WikiRevision(ctx *context.Context) {
|
|||||||
|
|
||||||
// WikiPages render wiki pages list page
|
// WikiPages render wiki pages list page
|
||||||
func WikiPages(ctx *context.Context) {
|
func WikiPages(ctx *context.Context) {
|
||||||
if !ctx.Repo.Repository.HasWiki() {
|
if !repo_service.HasWiki(ctx, ctx.Repo.Repository) {
|
||||||
ctx.Redirect(ctx.Repo.RepoLink + "/wiki")
|
ctx.Redirect(ctx.Repo.RepoLink + "/wiki")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -648,7 +649,7 @@ func WikiRaw(ctx *context.Context) {
|
|||||||
func NewWiki(ctx *context.Context) {
|
func NewWiki(ctx *context.Context) {
|
||||||
ctx.Data["Title"] = ctx.Tr("repo.wiki.new_page")
|
ctx.Data["Title"] = ctx.Tr("repo.wiki.new_page")
|
||||||
|
|
||||||
if !ctx.Repo.Repository.HasWiki() {
|
if !repo_service.HasWiki(ctx, ctx.Repo.Repository) {
|
||||||
ctx.Data["title"] = "Home"
|
ctx.Data["title"] = "Home"
|
||||||
}
|
}
|
||||||
if ctx.FormString("title") != "" {
|
if ctx.FormString("title") != "" {
|
||||||
@@ -701,7 +702,7 @@ func NewWikiPost(ctx *context.Context) {
|
|||||||
func EditWiki(ctx *context.Context) {
|
func EditWiki(ctx *context.Context) {
|
||||||
ctx.Data["PageIsWikiEdit"] = true
|
ctx.Data["PageIsWikiEdit"] = true
|
||||||
|
|
||||||
if !ctx.Repo.Repository.HasWiki() {
|
if !repo_service.HasWiki(ctx, ctx.Repo.Repository) {
|
||||||
ctx.Redirect(ctx.Repo.RepoLink + "/wiki")
|
ctx.Redirect(ctx.Repo.RepoLink + "/wiki")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@@ -16,6 +16,7 @@ import (
|
|||||||
"code.gitea.io/gitea/modules/web"
|
"code.gitea.io/gitea/modules/web"
|
||||||
"code.gitea.io/gitea/services/contexttest"
|
"code.gitea.io/gitea/services/contexttest"
|
||||||
"code.gitea.io/gitea/services/forms"
|
"code.gitea.io/gitea/services/forms"
|
||||||
|
repo_service "code.gitea.io/gitea/services/repository"
|
||||||
wiki_service "code.gitea.io/gitea/services/wiki"
|
wiki_service "code.gitea.io/gitea/services/wiki"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
@@ -240,7 +241,7 @@ func TestDefaultWikiBranch(t *testing.T) {
|
|||||||
|
|
||||||
// repo with no wiki
|
// repo with no wiki
|
||||||
repoWithNoWiki := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2})
|
repoWithNoWiki := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2})
|
||||||
assert.False(t, repoWithNoWiki.HasWiki())
|
assert.False(t, repo_service.HasWiki(t.Context(), repoWithNoWiki))
|
||||||
assert.NoError(t, wiki_service.ChangeDefaultWikiBranch(t.Context(), repoWithNoWiki, "main"))
|
assert.NoError(t, wiki_service.ChangeDefaultWikiBranch(t.Context(), repoWithNoWiki, "main"))
|
||||||
|
|
||||||
// repo with wiki
|
// repo with wiki
|
||||||
|
@@ -63,7 +63,7 @@ func TestGiteaUploadRepo(t *testing.T) {
|
|||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerID: user.ID, Name: repoName})
|
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerID: user.ID, Name: repoName})
|
||||||
assert.True(t, repo.HasWiki())
|
assert.True(t, repo_service.HasWiki(ctx, repo))
|
||||||
assert.Equal(t, repo_model.RepositoryReady, repo.Status)
|
assert.Equal(t, repo_model.RepositoryReady, repo.Status)
|
||||||
|
|
||||||
milestones, err := db.Find[issues_model.Milestone](t.Context(), issues_model.FindMilestoneOptions{
|
milestones, err := db.Find[issues_model.Milestone](t.Context(), issues_model.FindMilestoneOptions{
|
||||||
|
@@ -52,7 +52,7 @@ func UpdateAddress(ctx context.Context, m *repo_model.Mirror, addr string) error
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.Repo.HasWiki() {
|
if repo_service.HasWiki(ctx, m.Repo) {
|
||||||
wikiPath := m.Repo.WikiPath()
|
wikiPath := m.Repo.WikiPath()
|
||||||
wikiRemotePath := repo_module.WikiRemoteURL(ctx, addr)
|
wikiRemotePath := repo_module.WikiRemoteURL(ctx, addr)
|
||||||
// Remove old remote of wiki
|
// Remove old remote of wiki
|
||||||
@@ -347,7 +347,7 @@ func runSync(ctx context.Context, m *repo_model.Mirror) ([]*mirrorSyncResult, bo
|
|||||||
endpoint := lfs.DetermineEndpoint(remoteURL.String(), m.LFSEndpoint)
|
endpoint := lfs.DetermineEndpoint(remoteURL.String(), m.LFSEndpoint)
|
||||||
lfsClient := lfs.NewClient(endpoint, nil)
|
lfsClient := lfs.NewClient(endpoint, nil)
|
||||||
if err = repo_module.StoreMissingLfsObjectsInRepository(ctx, m.Repo, gitRepo, lfsClient); err != nil {
|
if err = repo_module.StoreMissingLfsObjectsInRepository(ctx, m.Repo, gitRepo, lfsClient); err != nil {
|
||||||
log.Error("SyncMirrors [repo: %-v]: failed to synchronize LFS objects for repository: %v", m.Repo, err)
|
log.Error("SyncMirrors [repo: %-v]: failed to synchronize LFS objects for repository: %v", m.Repo.FullName(), err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -364,10 +364,10 @@ func runSync(ctx context.Context, m *repo_model.Mirror) ([]*mirrorSyncResult, bo
|
|||||||
|
|
||||||
log.Trace("SyncMirrors [repo: %-v]: updating size of repository", m.Repo)
|
log.Trace("SyncMirrors [repo: %-v]: updating size of repository", m.Repo)
|
||||||
if err := repo_module.UpdateRepoSize(ctx, m.Repo); err != nil {
|
if err := repo_module.UpdateRepoSize(ctx, m.Repo); err != nil {
|
||||||
log.Error("SyncMirrors [repo: %-v]: failed to update size for mirror repository: %v", m.Repo, err)
|
log.Error("SyncMirrors [repo: %-v]: failed to update size for mirror repository: %v", m.Repo.FullName(), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.Repo.HasWiki() {
|
if repo_service.HasWiki(ctx, m.Repo) {
|
||||||
log.Trace("SyncMirrors [repo: %-v Wiki]: running git remote update...", m.Repo)
|
log.Trace("SyncMirrors [repo: %-v Wiki]: running git remote update...", m.Repo)
|
||||||
stderrBuilder.Reset()
|
stderrBuilder.Reset()
|
||||||
stdoutBuilder.Reset()
|
stdoutBuilder.Reset()
|
||||||
|
@@ -23,6 +23,7 @@ import (
|
|||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
"code.gitea.io/gitea/modules/timeutil"
|
"code.gitea.io/gitea/modules/timeutil"
|
||||||
"code.gitea.io/gitea/modules/util"
|
"code.gitea.io/gitea/modules/util"
|
||||||
|
repo_service "code.gitea.io/gitea/services/repository"
|
||||||
)
|
)
|
||||||
|
|
||||||
var stripExitStatus = regexp.MustCompile(`exit status \d+ - `)
|
var stripExitStatus = regexp.MustCompile(`exit status \d+ - `)
|
||||||
@@ -47,7 +48,7 @@ func AddPushMirrorRemote(ctx context.Context, m *repo_model.PushMirror, addr str
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.Repo.HasWiki() {
|
if repo_service.HasWiki(ctx, m.Repo) {
|
||||||
wikiRemoteURL := repository.WikiRemoteURL(ctx, addr)
|
wikiRemoteURL := repository.WikiRemoteURL(ctx, addr)
|
||||||
if len(wikiRemoteURL) > 0 {
|
if len(wikiRemoteURL) > 0 {
|
||||||
if err := addRemoteAndConfig(wikiRemoteURL, m.Repo.WikiPath()); err != nil {
|
if err := addRemoteAndConfig(wikiRemoteURL, m.Repo.WikiPath()); err != nil {
|
||||||
@@ -68,7 +69,7 @@ func RemovePushMirrorRemote(ctx context.Context, m *repo_model.PushMirror) error
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.Repo.HasWiki() {
|
if repo_service.HasWiki(ctx, m.Repo) {
|
||||||
if _, _, err := cmd.RunStdString(ctx, &git.RunOpts{Dir: m.Repo.WikiPath()}); err != nil {
|
if _, _, err := cmd.RunStdString(ctx, &git.RunOpts{Dir: m.Repo.WikiPath()}); err != nil {
|
||||||
// The wiki remote may not exist
|
// The wiki remote may not exist
|
||||||
log.Warn("Wiki Remote[%d] could not be removed: %v", m.ID, err)
|
log.Warn("Wiki Remote[%d] could not be removed: %v", m.ID, err)
|
||||||
@@ -183,7 +184,7 @@ func runPushSync(ctx context.Context, m *repo_model.PushMirror) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.Repo.HasWiki() {
|
if repo_service.HasWiki(ctx, m.Repo) {
|
||||||
_, err := git.GetRemoteAddress(ctx, m.Repo.WikiPath(), m.RemoteName)
|
_, err := git.GetRemoteAddress(ctx, m.Repo.WikiPath(), m.RemoteName)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
err := performPush(m.Repo, true)
|
err := performPush(m.Repo, true)
|
||||||
|
@@ -315,9 +315,13 @@ func DeleteRepositoryDirectly(ctx context.Context, repoID int64, ignoreOrgTeams
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove wiki files
|
// Remove wiki files if it exists.
|
||||||
if repo.HasWiki() {
|
if err := gitrepo.DeleteRepository(ctx, repo.WikiStorageRepo()); err != nil {
|
||||||
system_model.RemoveAllWithNotice(ctx, "Delete repository wiki", repo.WikiPath())
|
desc := fmt.Sprintf("Delete wiki repository files [%s]: %v", repo.FullName(), err)
|
||||||
|
// Note we use the db.DefaultContext here rather than passing in a context as the context may be cancelled
|
||||||
|
if err = system_model.CreateNotice(graceful.GetManager().ShutdownContext(), system_model.NoticeRepository, desc); err != nil {
|
||||||
|
log.Error("CreateRepositoryNotice: %v", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove archives
|
// Remove archives
|
||||||
|
@@ -32,11 +32,12 @@ func SyncRepositoryHooks(ctx context.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := gitrepo.CreateDelegateHooks(ctx, repo); err != nil {
|
if err := gitrepo.CreateDelegateHooks(ctx, repo); err != nil {
|
||||||
return fmt.Errorf("SyncRepositoryHook: %w", err)
|
return fmt.Errorf("CreateDelegateHooks: %w", err)
|
||||||
}
|
}
|
||||||
if repo.HasWiki() {
|
|
||||||
|
if HasWiki(ctx, repo) {
|
||||||
if err := gitrepo.CreateDelegateHooks(ctx, repo.WikiStorageRepo()); err != nil {
|
if err := gitrepo.CreateDelegateHooks(ctx, repo.WikiStorageRepo()); err != nil {
|
||||||
return fmt.Errorf("SyncRepositoryHook: %w", err)
|
return fmt.Errorf("CreateDelegateHooks: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@@ -280,7 +280,9 @@ func CleanUpMigrateInfo(ctx context.Context, repo *repo_model.Repository) (*repo
|
|||||||
if err := gitrepo.CreateDelegateHooks(ctx, repo); err != nil {
|
if err := gitrepo.CreateDelegateHooks(ctx, repo); err != nil {
|
||||||
return repo, fmt.Errorf("createDelegateHooks: %w", err)
|
return repo, fmt.Errorf("createDelegateHooks: %w", err)
|
||||||
}
|
}
|
||||||
if repo.HasWiki() {
|
|
||||||
|
hasWiki := HasWiki(ctx, repo)
|
||||||
|
if hasWiki {
|
||||||
if err := gitrepo.CreateDelegateHooks(ctx, repo.WikiStorageRepo()); err != nil {
|
if err := gitrepo.CreateDelegateHooks(ctx, repo.WikiStorageRepo()); err != nil {
|
||||||
return repo, fmt.Errorf("createDelegateHooks.(wiki): %w", err)
|
return repo, fmt.Errorf("createDelegateHooks.(wiki): %w", err)
|
||||||
}
|
}
|
||||||
@@ -291,7 +293,7 @@ func CleanUpMigrateInfo(ctx context.Context, repo *repo_model.Repository) (*repo
|
|||||||
return repo, fmt.Errorf("CleanUpMigrateInfo: %w", err)
|
return repo, fmt.Errorf("CleanUpMigrateInfo: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if repo.HasWiki() {
|
if hasWiki {
|
||||||
if err := cleanUpMigrateGitConfig(ctx, repo.WikiPath()); err != nil {
|
if err := cleanUpMigrateGitConfig(ctx, repo.WikiPath()); err != nil {
|
||||||
return repo, fmt.Errorf("cleanUpMigrateGitConfig (wiki): %w", err)
|
return repo, fmt.Errorf("cleanUpMigrateGitConfig (wiki): %w", err)
|
||||||
}
|
}
|
||||||
|
@@ -20,6 +20,7 @@ import (
|
|||||||
repo_model "code.gitea.io/gitea/models/repo"
|
repo_model "code.gitea.io/gitea/models/repo"
|
||||||
"code.gitea.io/gitea/models/unit"
|
"code.gitea.io/gitea/models/unit"
|
||||||
user_model "code.gitea.io/gitea/models/user"
|
user_model "code.gitea.io/gitea/models/user"
|
||||||
|
"code.gitea.io/gitea/modules/gitrepo"
|
||||||
"code.gitea.io/gitea/modules/graceful"
|
"code.gitea.io/gitea/modules/graceful"
|
||||||
issue_indexer "code.gitea.io/gitea/modules/indexer/issues"
|
issue_indexer "code.gitea.io/gitea/modules/indexer/issues"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
@@ -336,3 +337,11 @@ func updateRepository(ctx context.Context, repo *repo_model.Repository, visibili
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func HasWiki(ctx context.Context, repo *repo_model.Repository) bool {
|
||||||
|
hasWiki, err := gitrepo.IsRepositoryExist(ctx, repo.WikiStorageRepo())
|
||||||
|
if err != nil {
|
||||||
|
log.Error("gitrepo.IsRepositoryExist: %v", err)
|
||||||
|
}
|
||||||
|
return hasWiki && err == nil
|
||||||
|
}
|
||||||
|
@@ -61,3 +61,12 @@ func TestUpdateRepositoryVisibilityChanged(t *testing.T) {
|
|||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.True(t, act.IsPrivate)
|
assert.True(t, act.IsPrivate)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRepository_HasWiki(t *testing.T) {
|
||||||
|
unittest.PrepareTestEnv(t)
|
||||||
|
repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
|
||||||
|
assert.True(t, HasWiki(t.Context(), repo1))
|
||||||
|
|
||||||
|
repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2})
|
||||||
|
assert.False(t, HasWiki(t.Context(), repo2))
|
||||||
|
}
|
||||||
|
@@ -358,14 +358,9 @@ func changeRepositoryName(ctx context.Context, repo *repo_model.Repository, newR
|
|||||||
return fmt.Errorf("rename repository directory: %w", err)
|
return fmt.Errorf("rename repository directory: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
wikiPath := repo.WikiPath()
|
if HasWiki(ctx, repo) {
|
||||||
isExist, err := util.IsExist(wikiPath)
|
if err = gitrepo.RenameRepository(ctx, repo.WikiStorageRepo(), repo_model.StorageRepo(
|
||||||
if err != nil {
|
repo_model.RelativeWikiPath(repo.OwnerName, newRepoName))); err != nil {
|
||||||
log.Error("Unable to check if %s exists. Error: %v", wikiPath, err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if isExist {
|
|
||||||
if err = util.Rename(wikiPath, repo_model.WikiPath(repo.Owner.Name, newRepoName)); err != nil {
|
|
||||||
return fmt.Errorf("rename repository wiki: %w", err)
|
return fmt.Errorf("rename repository wiki: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -19,6 +19,7 @@ import (
|
|||||||
"code.gitea.io/gitea/modules/git"
|
"code.gitea.io/gitea/modules/git"
|
||||||
"code.gitea.io/gitea/modules/gitrepo"
|
"code.gitea.io/gitea/modules/gitrepo"
|
||||||
"code.gitea.io/gitea/modules/globallock"
|
"code.gitea.io/gitea/modules/globallock"
|
||||||
|
"code.gitea.io/gitea/modules/graceful"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
repo_module "code.gitea.io/gitea/modules/repository"
|
repo_module "code.gitea.io/gitea/modules/repository"
|
||||||
"code.gitea.io/gitea/modules/util"
|
"code.gitea.io/gitea/modules/util"
|
||||||
@@ -35,7 +36,10 @@ func getWikiWorkingLockKey(repoID int64) string {
|
|||||||
// InitWiki initializes a wiki for repository,
|
// InitWiki initializes a wiki for repository,
|
||||||
// it does nothing when repository already has wiki.
|
// it does nothing when repository already has wiki.
|
||||||
func InitWiki(ctx context.Context, repo *repo_model.Repository) error {
|
func InitWiki(ctx context.Context, repo *repo_model.Repository) error {
|
||||||
if repo.HasWiki() {
|
// don't use HasWiki because the error should not be ignored.
|
||||||
|
if exist, err := gitrepo.IsRepositoryExist(ctx, repo.WikiStorageRepo()); err != nil {
|
||||||
|
return err
|
||||||
|
} else if exist {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -355,7 +359,14 @@ func DeleteWiki(ctx context.Context, repo *repo_model.Repository) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
system_model.RemoveAllWithNotice(ctx, "Delete repository wiki", repo.WikiPath())
|
if err := gitrepo.DeleteRepository(ctx, repo.WikiStorageRepo()); err != nil {
|
||||||
|
desc := fmt.Sprintf("Delete wiki repository files [%s]: %v", repo.FullName(), err)
|
||||||
|
// Note we use the db.DefaultContext here rather than passing in a context as the context may be cancelled
|
||||||
|
if err = system_model.CreateNotice(graceful.GetManager().ShutdownContext(), system_model.NoticeRepository, desc); err != nil {
|
||||||
|
log.Error("CreateRepositoryNotice: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -369,7 +380,7 @@ func ChangeDefaultWikiBranch(ctx context.Context, repo *repo_model.Repository, n
|
|||||||
return fmt.Errorf("unable to update database: %w", err)
|
return fmt.Errorf("unable to update database: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !repo.HasWiki() {
|
if !repo_service.HasWiki(ctx, repo) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -13,6 +13,7 @@ import (
|
|||||||
user_model "code.gitea.io/gitea/models/user"
|
user_model "code.gitea.io/gitea/models/user"
|
||||||
"code.gitea.io/gitea/modules/git"
|
"code.gitea.io/gitea/modules/git"
|
||||||
"code.gitea.io/gitea/modules/gitrepo"
|
"code.gitea.io/gitea/modules/gitrepo"
|
||||||
|
repo_service "code.gitea.io/gitea/services/repository"
|
||||||
|
|
||||||
_ "code.gitea.io/gitea/models/actions"
|
_ "code.gitea.io/gitea/models/actions"
|
||||||
|
|
||||||
@@ -149,7 +150,7 @@ func TestRepository_InitWiki(t *testing.T) {
|
|||||||
// repo2 does not already have a wiki
|
// repo2 does not already have a wiki
|
||||||
repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2})
|
repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2})
|
||||||
assert.NoError(t, InitWiki(t.Context(), repo2))
|
assert.NoError(t, InitWiki(t.Context(), repo2))
|
||||||
assert.True(t, repo2.HasWiki())
|
assert.True(t, repo_service.HasWiki(t.Context(), repo2))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRepository_AddWikiPage(t *testing.T) {
|
func TestRepository_AddWikiPage(t *testing.T) {
|
||||||
|
Reference in New Issue
Block a user