Some refactor for repo path (#36251)
- Use `gitrepo.IsRepositoryExist` instead of `util.IsExit` or `util.IsDir` - Use `gitrepo.OpenRepository` instead of `git.OpenRepository` - Use `gitrepo.DeleteRepository` instead of `util.RemoveAll` - Use `gitrepo.RenameRepository` instead of `util.Rename`
This commit is contained in:
parent
0ad94dfc70
commit
1771569300
@ -5,14 +5,10 @@ package v1_21
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
|
||||||
"path/filepath"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"code.gitea.io/gitea/modules/git"
|
repo_model "code.gitea.io/gitea/models/repo"
|
||||||
giturl "code.gitea.io/gitea/modules/git/url"
|
"code.gitea.io/gitea/modules/gitrepo"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
"code.gitea.io/gitea/modules/util"
|
|
||||||
|
|
||||||
"xorm.io/xorm"
|
"xorm.io/xorm"
|
||||||
)
|
)
|
||||||
@ -163,16 +159,13 @@ func migratePushMirrors(x *xorm.Engine) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getRemoteAddress(ownerName, repoName, remoteName string) (string, error) {
|
func getRemoteAddress(ownerName, repoName, remoteName string) (string, error) {
|
||||||
repoPath := filepath.Join(setting.RepoRootPath, strings.ToLower(ownerName), strings.ToLower(repoName)+".git")
|
ctx := context.Background()
|
||||||
if exist, _ := util.IsExist(repoPath); !exist {
|
relativePath := repo_model.RelativePath(ownerName, repoName)
|
||||||
|
if exist, _ := gitrepo.IsRepositoryExist(ctx, repo_model.StorageRepo(relativePath)); !exist {
|
||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
remoteURL, err := git.GetRemoteAddress(context.Background(), repoPath, remoteName)
|
|
||||||
if err != nil {
|
|
||||||
return "", fmt.Errorf("get remote %s's address of %s/%s failed: %v", remoteName, ownerName, repoName, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
u, err := giturl.ParseGitURL(remoteURL)
|
u, err := gitrepo.GitRemoteGetURL(ctx, repo_model.StorageRepo(relativePath), remoteName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,11 +6,10 @@ package v1_9
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"path/filepath"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
|
repo_model "code.gitea.io/gitea/models/repo"
|
||||||
"code.gitea.io/gitea/modules/git"
|
"code.gitea.io/gitea/modules/git"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/gitrepo"
|
||||||
|
|
||||||
"xorm.io/xorm"
|
"xorm.io/xorm"
|
||||||
)
|
)
|
||||||
@ -34,16 +33,6 @@ func FixReleaseSha1OnReleaseTable(ctx context.Context, x *xorm.Engine) error {
|
|||||||
Name string
|
Name string
|
||||||
}
|
}
|
||||||
|
|
||||||
// UserPath returns the path absolute path of user repositories.
|
|
||||||
UserPath := func(userName string) string {
|
|
||||||
return filepath.Join(setting.RepoRootPath, strings.ToLower(userName))
|
|
||||||
}
|
|
||||||
|
|
||||||
// RepoPath returns repository path by given user and repository name.
|
|
||||||
RepoPath := func(userName, repoName string) string {
|
|
||||||
return filepath.Join(UserPath(userName), strings.ToLower(repoName)+".git")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update release sha1
|
// Update release sha1
|
||||||
const batchSize = 100
|
const batchSize = 100
|
||||||
sess := x.NewSession()
|
sess := x.NewSession()
|
||||||
@ -99,7 +88,7 @@ func FixReleaseSha1OnReleaseTable(ctx context.Context, x *xorm.Engine) error {
|
|||||||
userCache[repo.OwnerID] = user
|
userCache[repo.OwnerID] = user
|
||||||
}
|
}
|
||||||
|
|
||||||
gitRepo, err = git.OpenRepository(ctx, RepoPath(user.Name, repo.Name))
|
gitRepo, err = gitrepo.OpenRepository(ctx, repo_model.StorageRepo(repo_model.RelativePath(user.Name, repo.Name)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -80,7 +80,12 @@ func DeleteRepository(ctx context.Context, repo Repository) error {
|
|||||||
|
|
||||||
// RenameRepository renames a repository's name on disk
|
// RenameRepository renames a repository's name on disk
|
||||||
func RenameRepository(ctx context.Context, repo, newRepo Repository) error {
|
func RenameRepository(ctx context.Context, repo, newRepo Repository) error {
|
||||||
if err := util.Rename(repoPath(repo), repoPath(newRepo)); err != nil {
|
dstDir := repoPath(newRepo)
|
||||||
|
if err := os.MkdirAll(filepath.Dir(dstDir), os.ModePerm); err != nil {
|
||||||
|
return fmt.Errorf("Failed to create dir %s: %w", filepath.Dir(dstDir), err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := util.Rename(repoPath(repo), dstDir); err != nil {
|
||||||
return fmt.Errorf("rename repository directory: %w", err)
|
return fmt.Errorf("rename repository directory: %w", err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -116,5 +121,8 @@ func RemoveRepoFileOrDir(ctx context.Context, repo Repository, relativeFileOrDir
|
|||||||
|
|
||||||
func CreateRepoFile(ctx context.Context, repo Repository, relativeFilePath string) (io.WriteCloser, error) {
|
func CreateRepoFile(ctx context.Context, repo Repository, relativeFilePath string) (io.WriteCloser, error) {
|
||||||
absoluteFilePath := filepath.Join(repoPath(repo), relativeFilePath)
|
absoluteFilePath := filepath.Join(repoPath(repo), relativeFilePath)
|
||||||
|
if err := os.MkdirAll(filepath.Dir(absoluteFilePath), os.ModePerm); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
return os.Create(absoluteFilePath)
|
return os.Create(absoluteFilePath)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,7 +8,7 @@ import (
|
|||||||
|
|
||||||
repo_model "code.gitea.io/gitea/models/repo"
|
repo_model "code.gitea.io/gitea/models/repo"
|
||||||
user_model "code.gitea.io/gitea/models/user"
|
user_model "code.gitea.io/gitea/models/user"
|
||||||
"code.gitea.io/gitea/modules/util"
|
"code.gitea.io/gitea/modules/gitrepo"
|
||||||
"code.gitea.io/gitea/routers/api/v1/utils"
|
"code.gitea.io/gitea/routers/api/v1/utils"
|
||||||
"code.gitea.io/gitea/services/context"
|
"code.gitea.io/gitea/services/context"
|
||||||
repo_service "code.gitea.io/gitea/services/repository"
|
repo_service "code.gitea.io/gitea/services/repository"
|
||||||
@ -99,12 +99,12 @@ func AdoptRepository(ctx *context.APIContext) {
|
|||||||
ctx.APIErrorInternal(err)
|
ctx.APIErrorInternal(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
isDir, err := util.IsDir(repo_model.RepoPath(ctxUser.Name, repoName))
|
exist, err := gitrepo.IsRepositoryExist(ctx, repo_model.StorageRepo(repo_model.RelativePath(ctxUser.Name, repoName)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.APIErrorInternal(err)
|
ctx.APIErrorInternal(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if has || !isDir {
|
if has || !exist {
|
||||||
ctx.APIErrorNotFound()
|
ctx.APIErrorNotFound()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -161,12 +161,12 @@ func DeleteUnadoptedRepository(ctx *context.APIContext) {
|
|||||||
ctx.APIErrorInternal(err)
|
ctx.APIErrorInternal(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
isDir, err := util.IsDir(repo_model.RepoPath(ctxUser.Name, repoName))
|
exist, err := gitrepo.IsRepositoryExist(ctx, repo_model.StorageRepo(repo_model.RelativePath(ctxUser.Name, repoName)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.APIErrorInternal(err)
|
ctx.APIErrorInternal(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if has || !isDir {
|
if has || !exist {
|
||||||
ctx.APIErrorNotFound()
|
ctx.APIErrorNotFound()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,10 +11,10 @@ import (
|
|||||||
"code.gitea.io/gitea/models/db"
|
"code.gitea.io/gitea/models/db"
|
||||||
repo_model "code.gitea.io/gitea/models/repo"
|
repo_model "code.gitea.io/gitea/models/repo"
|
||||||
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/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
"code.gitea.io/gitea/modules/templates"
|
"code.gitea.io/gitea/modules/templates"
|
||||||
"code.gitea.io/gitea/modules/util"
|
|
||||||
"code.gitea.io/gitea/routers/web/explore"
|
"code.gitea.io/gitea/routers/web/explore"
|
||||||
"code.gitea.io/gitea/services/context"
|
"code.gitea.io/gitea/services/context"
|
||||||
repo_service "code.gitea.io/gitea/services/repository"
|
repo_service "code.gitea.io/gitea/services/repository"
|
||||||
@ -134,12 +134,12 @@ func AdoptOrDeleteRepository(ctx *context.Context) {
|
|||||||
ctx.ServerError("IsRepositoryExist", err)
|
ctx.ServerError("IsRepositoryExist", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
isDir, err := util.IsDir(repo_model.RepoPath(ctxUser.Name, repoName))
|
exist, err := gitrepo.IsRepositoryExist(ctx, repo_model.StorageRepo(repo_model.RelativePath(ctxUser.Name, repoName)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.ServerError("IsDir", err)
|
ctx.ServerError("IsDir", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if has || !isDir {
|
if has || !exist {
|
||||||
// Fallthrough to failure mode
|
// Fallthrough to failure mode
|
||||||
} else if action == "adopt" {
|
} else if action == "adopt" {
|
||||||
if _, err := repo_service.AdoptRepository(ctx, ctx.Doer, ctxUser, repo_service.CreateRepoOptions{
|
if _, err := repo_service.AdoptRepository(ctx, ctx.Doer, ctxUser, repo_service.CreateRepoOptions{
|
||||||
|
|||||||
@ -4,12 +4,9 @@
|
|||||||
package setting
|
package setting
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"path/filepath"
|
|
||||||
|
|
||||||
repo_model "code.gitea.io/gitea/models/repo"
|
repo_model "code.gitea.io/gitea/models/repo"
|
||||||
user_model "code.gitea.io/gitea/models/user"
|
"code.gitea.io/gitea/modules/gitrepo"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
"code.gitea.io/gitea/modules/util"
|
|
||||||
"code.gitea.io/gitea/services/context"
|
"code.gitea.io/gitea/services/context"
|
||||||
repo_service "code.gitea.io/gitea/services/repository"
|
repo_service "code.gitea.io/gitea/services/repository"
|
||||||
)
|
)
|
||||||
@ -27,7 +24,6 @@ func AdoptOrDeleteRepository(ctx *context.Context) {
|
|||||||
action := ctx.FormString("action")
|
action := ctx.FormString("action")
|
||||||
|
|
||||||
ctxUser := ctx.Doer
|
ctxUser := ctx.Doer
|
||||||
root := user_model.UserPath(ctxUser.LowerName)
|
|
||||||
|
|
||||||
// check not a repo
|
// check not a repo
|
||||||
has, err := repo_model.IsRepositoryModelExist(ctx, ctxUser, dir)
|
has, err := repo_model.IsRepositoryModelExist(ctx, ctxUser, dir)
|
||||||
@ -36,12 +32,12 @@ func AdoptOrDeleteRepository(ctx *context.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
isDir, err := util.IsDir(filepath.Join(root, dir+".git"))
|
exist, err := gitrepo.IsRepositoryExist(ctx, repo_model.StorageRepo(repo_model.RelativePath(ctxUser.Name, dir)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.ServerError("IsDir", err)
|
ctx.ServerError("IsDir", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if has || !isDir {
|
if has || !exist {
|
||||||
// Fallthrough to failure mode
|
// Fallthrough to failure mode
|
||||||
} else if action == "adopt" && allowAdopt {
|
} else if action == "adopt" && allowAdopt {
|
||||||
if _, err := repo_service.AdoptRepository(ctx, ctxUser, ctxUser, repo_service.CreateRepoOptions{
|
if _, err := repo_service.AdoptRepository(ctx, ctxUser, ctxUser, repo_service.CreateRepoOptions{
|
||||||
|
|||||||
@ -8,8 +8,6 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -589,12 +587,7 @@ func (g *GiteaLocalUploader) updateGitForPullRequest(ctx context.Context, pr *ba
|
|||||||
}
|
}
|
||||||
defer ret.Close()
|
defer ret.Close()
|
||||||
|
|
||||||
pullDir := filepath.Join(g.repo.RepoPath(), "pulls")
|
f, err := gitrepo.CreateRepoFile(ctx, g.repo, fmt.Sprintf("pulls/%d.patch", pr.Number))
|
||||||
if err = os.MkdirAll(pullDir, os.ModePerm); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
f, err := os.Create(filepath.Join(pullDir, fmt.Sprintf("%d.patch", pr.Number)))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,7 +23,6 @@ import (
|
|||||||
"code.gitea.io/gitea/modules/optional"
|
"code.gitea.io/gitea/modules/optional"
|
||||||
repo_module "code.gitea.io/gitea/modules/repository"
|
repo_module "code.gitea.io/gitea/modules/repository"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
"code.gitea.io/gitea/modules/util"
|
|
||||||
notify_service "code.gitea.io/gitea/services/notify"
|
notify_service "code.gitea.io/gitea/services/notify"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -214,13 +213,13 @@ func DeleteUnadoptedRepository(ctx context.Context, doer, u *user_model.User, re
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
repoPath := repo_model.RepoPath(u.Name, repoName)
|
relativePath := repo_model.RelativePath(u.Name, repoName)
|
||||||
isExist, err := util.IsExist(repoPath)
|
exist, err := gitrepo.IsRepositoryExist(ctx, repo_model.StorageRepo(relativePath))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("Unable to check if %s exists. Error: %v", repoPath, err)
|
log.Error("Unable to check if %s exists. Error: %v", relativePath, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if !isExist {
|
if !exist {
|
||||||
return repo_model.ErrRepoNotExist{
|
return repo_model.ErrRepoNotExist{
|
||||||
OwnerName: u.Name,
|
OwnerName: u.Name,
|
||||||
Name: repoName,
|
Name: repoName,
|
||||||
@ -236,7 +235,7 @@ func DeleteUnadoptedRepository(ctx context.Context, doer, u *user_model.User, re
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return util.RemoveAll(repoPath)
|
return gitrepo.DeleteRepository(ctx, repo_model.StorageRepo(relativePath))
|
||||||
}
|
}
|
||||||
|
|
||||||
type unadoptedRepositories struct {
|
type unadoptedRepositories struct {
|
||||||
|
|||||||
@ -6,7 +6,6 @@ package repository
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"code.gitea.io/gitea/models/db"
|
"code.gitea.io/gitea/models/db"
|
||||||
@ -291,12 +290,8 @@ func transferOwnership(ctx context.Context, doer *user_model.User, newOwnerName
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Rename remote repository to new path and delete local copy.
|
// Rename remote repository to new path and delete local copy.
|
||||||
dir := user_model.UserPath(newOwner.Name)
|
oldRelativePath, newRelativePath := repo_model.RelativePath(oldOwner.Name, repo.Name), repo_model.RelativePath(newOwner.Name, repo.Name)
|
||||||
if err := os.MkdirAll(dir, os.ModePerm); err != nil {
|
if err := gitrepo.RenameRepository(ctx, repo_model.StorageRepo(oldRelativePath), repo_model.StorageRepo(newRelativePath)); err != nil {
|
||||||
return fmt.Errorf("Failed to create dir %s: %w", dir, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := util.Rename(repo_model.RepoPath(oldOwner.Name, repo.Name), repo_model.RepoPath(newOwner.Name, repo.Name)); err != nil {
|
|
||||||
return fmt.Errorf("rename repository directory: %w", err)
|
return fmt.Errorf("rename repository directory: %w", err)
|
||||||
}
|
}
|
||||||
repoRenamed = true
|
repoRenamed = true
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user