mirror of
https://github.com/go-gitea/gitea.git
synced 2025-12-11 19:34:47 +01:00
Merge 046b65c9030ab9a503560e20eb5892f39a26ff13 into 69700f9cddddc8a62641e42f0c2dd6d5db794223
This commit is contained in:
commit
702197d619
@ -869,16 +869,6 @@ func GetRepositoriesMapByIDs(ctx context.Context, ids []int64) (map[int64]*Repos
|
|||||||
return repos, db.GetEngine(ctx).In("id", ids).Find(&repos)
|
return repos, db.GetEngine(ctx).In("id", ids).Find(&repos)
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsRepositoryModelOrDirExist returns true if the repository with given name under user has already existed.
|
|
||||||
func IsRepositoryModelOrDirExist(ctx context.Context, u *user_model.User, repoName string) (bool, error) {
|
|
||||||
has, err := IsRepositoryModelExist(ctx, u, repoName)
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
isDir, err := util.IsDir(RepoPath(u.Name, repoName))
|
|
||||||
return has || isDir, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsRepositoryModelExist(ctx context.Context, u *user_model.User, repoName string) (bool, error) {
|
func IsRepositoryModelExist(ctx context.Context, u *user_model.User, repoName string) (bool, error) {
|
||||||
return db.GetEngine(ctx).Get(&Repository{
|
return db.GetEngine(ctx).Get(&Repository{
|
||||||
OwnerID: u.ID,
|
OwnerID: u.ID,
|
||||||
|
|||||||
@ -9,8 +9,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"code.gitea.io/gitea/models/db"
|
"code.gitea.io/gitea/models/db"
|
||||||
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"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -106,35 +104,6 @@ func (err ErrRepoFilesAlreadyExist) Unwrap() error {
|
|||||||
return util.ErrAlreadyExist
|
return util.ErrAlreadyExist
|
||||||
}
|
}
|
||||||
|
|
||||||
// CheckCreateRepository check if doer could create a repository in new owner
|
|
||||||
func CheckCreateRepository(ctx context.Context, doer, owner *user_model.User, name string, overwriteOrAdopt bool) error {
|
|
||||||
if !doer.CanCreateRepoIn(owner) {
|
|
||||||
return ErrReachLimitOfRepo{owner.MaxRepoCreation}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := IsUsableRepoName(name); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
has, err := IsRepositoryModelOrDirExist(ctx, owner, name)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("IsRepositoryExist: %w", err)
|
|
||||||
} else if has {
|
|
||||||
return ErrRepoAlreadyExist{owner.Name, name}
|
|
||||||
}
|
|
||||||
|
|
||||||
repoPath := RepoPath(owner.Name, name)
|
|
||||||
isExist, err := util.IsExist(repoPath)
|
|
||||||
if err != nil {
|
|
||||||
log.Error("Unable to check if %s exists. Error: %v", repoPath, err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if !overwriteOrAdopt && isExist {
|
|
||||||
return ErrRepoFilesAlreadyExist{owner.Name, name}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// UpdateRepoSize updates the repository size, calculating it using getDirectorySize
|
// UpdateRepoSize updates the repository size, calculating it using getDirectorySize
|
||||||
func UpdateRepoSize(ctx context.Context, repoID, gitSize, lfsSize int64) error {
|
func UpdateRepoSize(ctx context.Context, repoID, gitSize, lfsSize int64) error {
|
||||||
_, err := db.GetEngine(ctx).ID(repoID).Cols("size", "git_size", "lfs_size").NoAutoTime().Update(&Repository{
|
_, err := db.GetEngine(ctx).ID(repoID).Cols("size", "git_size", "lfs_size").NoAutoTime().Update(&Repository{
|
||||||
|
|||||||
@ -9,6 +9,19 @@ import (
|
|||||||
"code.gitea.io/gitea/modules/git"
|
"code.gitea.io/gitea/modules/git"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Push(ctx context.Context, repo Repository, opts git.PushOptions) error {
|
// PushToExternal pushes a managed repository to an external remote.
|
||||||
|
func PushToExternal(ctx context.Context, repo Repository, opts git.PushOptions) error {
|
||||||
return git.Push(ctx, repoPath(repo), opts)
|
return git.Push(ctx, repoPath(repo), opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Push pushes from one managed repository to another managed repository.
|
||||||
|
func Push(ctx context.Context, fromRepo, toRepo Repository, opts git.PushOptions) error {
|
||||||
|
opts.Remote = repoPath(toRepo)
|
||||||
|
return git.Push(ctx, repoPath(fromRepo), opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PushFromLocal pushes from a local path to a managed repository.
|
||||||
|
func PushFromLocal(ctx context.Context, fromLocalPath string, toRepo Repository, opts git.PushOptions) error {
|
||||||
|
opts.Remote = repoPath(toRepo)
|
||||||
|
return git.Push(ctx, fromLocalPath, opts)
|
||||||
|
}
|
||||||
|
|||||||
@ -15,6 +15,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"
|
||||||
"code.gitea.io/gitea/modules/git"
|
"code.gitea.io/gitea/modules/git"
|
||||||
|
"code.gitea.io/gitea/modules/gitrepo"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
"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"
|
||||||
@ -133,8 +134,7 @@ func RestoreBranchPost(ctx *context.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := git.Push(ctx, ctx.Repo.Repository.RepoPath(), git.PushOptions{
|
if err := gitrepo.Push(ctx, ctx.Repo.Repository, ctx.Repo.Repository, git.PushOptions{
|
||||||
Remote: ctx.Repo.Repository.RepoPath(),
|
|
||||||
Branch: fmt.Sprintf("%s:%s%s", deletedBranch.CommitID, git.BranchPrefix, deletedBranch.Name),
|
Branch: fmt.Sprintf("%s:%s%s", deletedBranch.CommitID, git.BranchPrefix, deletedBranch.Name),
|
||||||
Env: repo_module.PushingEnvironment(ctx.Doer, ctx.Repo.Repository),
|
Env: repo_module.PushingEnvironment(ctx.Doer, ctx.Repo.Repository),
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
|
|||||||
@ -13,6 +13,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/git"
|
"code.gitea.io/gitea/modules/git"
|
||||||
|
"code.gitea.io/gitea/modules/gitrepo"
|
||||||
"code.gitea.io/gitea/modules/json"
|
"code.gitea.io/gitea/modules/json"
|
||||||
"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"
|
||||||
@ -102,8 +103,7 @@ func getUniqueRepositoryName(ctx context.Context, ownerID int64, name string) st
|
|||||||
}
|
}
|
||||||
|
|
||||||
func editorPushBranchToForkedRepository(ctx context.Context, doer *user_model.User, baseRepo *repo_model.Repository, baseBranchName string, targetRepo *repo_model.Repository, targetBranchName string) error {
|
func editorPushBranchToForkedRepository(ctx context.Context, doer *user_model.User, baseRepo *repo_model.Repository, baseBranchName string, targetRepo *repo_model.Repository, targetBranchName string) error {
|
||||||
return git.Push(ctx, baseRepo.RepoPath(), git.PushOptions{
|
return gitrepo.Push(ctx, baseRepo, targetRepo, git.PushOptions{
|
||||||
Remote: targetRepo.RepoPath(),
|
|
||||||
Branch: baseBranchName + ":" + targetBranchName,
|
Branch: baseBranchName + ":" + targetBranchName,
|
||||||
Env: repo_module.PushingEnvironment(doer, targetRepo),
|
Env: repo_module.PushingEnvironment(doer, targetRepo),
|
||||||
})
|
})
|
||||||
|
|||||||
@ -16,6 +16,7 @@ import (
|
|||||||
"code.gitea.io/gitea/models/renderhelper"
|
"code.gitea.io/gitea/models/renderhelper"
|
||||||
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/htmlutil"
|
"code.gitea.io/gitea/modules/htmlutil"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/markup/markdown"
|
"code.gitea.io/gitea/modules/markup/markdown"
|
||||||
@ -141,8 +142,7 @@ func NewComment(ctx *context.Context) {
|
|||||||
|
|
||||||
if prHeadCommitID != headBranchCommitID {
|
if prHeadCommitID != headBranchCommitID {
|
||||||
// force push to base repo
|
// force push to base repo
|
||||||
err := git.Push(ctx, pull.HeadRepo.RepoPath(), git.PushOptions{
|
err := gitrepo.Push(ctx, pull.HeadRepo, pull.BaseRepo, git.PushOptions{
|
||||||
Remote: pull.BaseRepo.RepoPath(),
|
|
||||||
Branch: pull.HeadBranch + ":" + prHeadRef,
|
Branch: pull.HeadBranch + ":" + prHeadRef,
|
||||||
Force: true,
|
Force: true,
|
||||||
Env: repo_module.InternalPushingEnvironment(pull.Issue.Poster, pull.BaseRepo),
|
Env: repo_module.InternalPushingEnvironment(pull.Issue.Poster, pull.BaseRepo),
|
||||||
|
|||||||
@ -25,6 +25,7 @@ import (
|
|||||||
"code.gitea.io/gitea/services/context"
|
"code.gitea.io/gitea/services/context"
|
||||||
"code.gitea.io/gitea/services/forms"
|
"code.gitea.io/gitea/services/forms"
|
||||||
"code.gitea.io/gitea/services/migrations"
|
"code.gitea.io/gitea/services/migrations"
|
||||||
|
repo_service "code.gitea.io/gitea/services/repository"
|
||||||
"code.gitea.io/gitea/services/task"
|
"code.gitea.io/gitea/services/task"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -237,7 +238,7 @@ func MigratePost(ctx *context.Context) {
|
|||||||
opts.AWSSecretAccessKey = form.AWSSecretAccessKey
|
opts.AWSSecretAccessKey = form.AWSSecretAccessKey
|
||||||
}
|
}
|
||||||
|
|
||||||
err = repo_model.CheckCreateRepository(ctx, ctx.Doer, ctxUser, opts.RepoName, false)
|
err = repo_service.CheckCreateRepository(ctx, ctx.Doer, ctxUser, opts.RepoName, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
handleMigrateError(ctx, ctxUser, err, "MigratePost", tpl, form)
|
handleMigrateError(ctx, ctxUser, err, "MigratePost", tpl, form)
|
||||||
return
|
return
|
||||||
|
|||||||
@ -20,6 +20,7 @@ import (
|
|||||||
"code.gitea.io/gitea/modules/git"
|
"code.gitea.io/gitea/modules/git"
|
||||||
"code.gitea.io/gitea/modules/git/attribute"
|
"code.gitea.io/gitea/modules/git/attribute"
|
||||||
"code.gitea.io/gitea/modules/git/pipeline"
|
"code.gitea.io/gitea/modules/git/pipeline"
|
||||||
|
"code.gitea.io/gitea/modules/gitrepo"
|
||||||
"code.gitea.io/gitea/modules/lfs"
|
"code.gitea.io/gitea/modules/lfs"
|
||||||
"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"
|
||||||
@ -112,7 +113,7 @@ func LFSLocks(ctx *context.Context) {
|
|||||||
}
|
}
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
|
|
||||||
if err := git.Clone(ctx, ctx.Repo.Repository.RepoPath(), tmpBasePath, git.CloneRepoOptions{
|
if err := gitrepo.CloneRepoToLocal(ctx, ctx.Repo.Repository, tmpBasePath, git.CloneRepoOptions{
|
||||||
Bare: true,
|
Bare: true,
|
||||||
Shared: true,
|
Shared: true,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
|
|||||||
@ -215,7 +215,7 @@ func checkCommitGraph(ctx context.Context, logger log.Logger, autofix bool) erro
|
|||||||
if !isExist {
|
if !isExist {
|
||||||
numNeedUpdate++
|
numNeedUpdate++
|
||||||
if autofix {
|
if autofix {
|
||||||
if err := git.WriteCommitGraph(ctx, repo.RepoPath()); err != nil {
|
if err := gitrepo.WriteCommitGraph(ctx, repo); err != nil {
|
||||||
logger.Error("Unable to write commit-graph in %s. Error: %v", repo.FullName(), err)
|
logger.Error("Unable to write commit-graph in %s. Error: %v", repo.FullName(), err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -153,7 +153,7 @@ func runPushSync(ctx context.Context, m *repo_model.PushMirror) error {
|
|||||||
log.Trace("Pushing %s mirror[%d] remote %s", storageRepo.RelativePath(), m.ID, m.RemoteName)
|
log.Trace("Pushing %s mirror[%d] remote %s", storageRepo.RelativePath(), m.ID, m.RemoteName)
|
||||||
|
|
||||||
envs := proxy.EnvWithProxy(remoteURL.URL)
|
envs := proxy.EnvWithProxy(remoteURL.URL)
|
||||||
if err := gitrepo.Push(ctx, storageRepo, git.PushOptions{
|
if err := gitrepo.PushToExternal(ctx, storageRepo, git.PushOptions{
|
||||||
Remote: m.RemoteName,
|
Remote: m.RemoteName,
|
||||||
Force: true,
|
Force: true,
|
||||||
Mirror: true,
|
Mirror: true,
|
||||||
|
|||||||
@ -570,13 +570,11 @@ func pushToBaseRepoHelper(ctx context.Context, pr *issues_model.PullRequest, pre
|
|||||||
log.Error("Unable to load head repository for PR[%d] Error: %v", pr.ID, err)
|
log.Error("Unable to load head repository for PR[%d] Error: %v", pr.ID, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
headRepoPath := pr.HeadRepo.RepoPath()
|
|
||||||
|
|
||||||
if err := pr.LoadBaseRepo(ctx); err != nil {
|
if err := pr.LoadBaseRepo(ctx); err != nil {
|
||||||
log.Error("Unable to load base repository for PR[%d] Error: %v", pr.ID, err)
|
log.Error("Unable to load base repository for PR[%d] Error: %v", pr.ID, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
baseRepoPath := pr.BaseRepo.RepoPath()
|
|
||||||
|
|
||||||
if err = pr.LoadIssue(ctx); err != nil {
|
if err = pr.LoadIssue(ctx); err != nil {
|
||||||
return fmt.Errorf("unable to load issue %d for pr %d: %w", pr.IssueID, pr.ID, err)
|
return fmt.Errorf("unable to load issue %d for pr %d: %w", pr.IssueID, pr.ID, err)
|
||||||
@ -587,8 +585,7 @@ func pushToBaseRepoHelper(ctx context.Context, pr *issues_model.PullRequest, pre
|
|||||||
|
|
||||||
gitRefName := pr.GetGitHeadRefName()
|
gitRefName := pr.GetGitHeadRefName()
|
||||||
|
|
||||||
if err := git.Push(ctx, headRepoPath, git.PushOptions{
|
if err := gitrepo.Push(ctx, pr.HeadRepo, pr.BaseRepo, git.PushOptions{
|
||||||
Remote: baseRepoPath,
|
|
||||||
Branch: prefixHeadBranch + pr.HeadBranch + ":" + gitRefName,
|
Branch: prefixHeadBranch + pr.HeadBranch + ":" + gitRefName,
|
||||||
Force: true,
|
Force: true,
|
||||||
// Use InternalPushingEnvironment here because we know that pre-receive and post-receive do not run on a refs/pulls/...
|
// Use InternalPushingEnvironment here because we know that pre-receive and post-receive do not run on a refs/pulls/...
|
||||||
|
|||||||
@ -385,8 +385,7 @@ func CreateNewBranchFromCommit(ctx context.Context, doer *user_model.User, repo
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := git.Push(ctx, repo.RepoPath(), git.PushOptions{
|
if err := gitrepo.Push(ctx, repo, repo, git.PushOptions{
|
||||||
Remote: repo.RepoPath(),
|
|
||||||
Branch: fmt.Sprintf("%s:%s%s", commitID, git.BranchPrefix, branchName),
|
Branch: fmt.Sprintf("%s:%s%s", commitID, git.BranchPrefix, branchName),
|
||||||
Env: repo_module.PushingEnvironment(doer, repo),
|
Env: repo_module.PushingEnvironment(doer, repo),
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
|
|||||||
@ -18,6 +18,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/git/gitcmd"
|
"code.gitea.io/gitea/modules/git/gitcmd"
|
||||||
|
"code.gitea.io/gitea/modules/gitrepo"
|
||||||
"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/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
@ -362,8 +363,7 @@ func (t *TemporaryUploadRepository) CommitTree(ctx context.Context, opts *Commit
|
|||||||
func (t *TemporaryUploadRepository) Push(ctx context.Context, doer *user_model.User, commitHash, branch string, force bool) error {
|
func (t *TemporaryUploadRepository) Push(ctx context.Context, doer *user_model.User, commitHash, branch string, force bool) error {
|
||||||
// Because calls hooks we need to pass in the environment
|
// Because calls hooks we need to pass in the environment
|
||||||
env := repo_module.PushingEnvironment(doer, t.repo)
|
env := repo_module.PushingEnvironment(doer, t.repo)
|
||||||
if err := git.Push(ctx, t.basePath, git.PushOptions{
|
if err := gitrepo.PushFromLocal(ctx, t.basePath, t.repo, git.PushOptions{
|
||||||
Remote: t.repo.RepoPath(),
|
|
||||||
Branch: strings.TrimSpace(commitHash) + ":" + git.BranchPrefix + strings.TrimSpace(branch),
|
Branch: strings.TrimSpace(commitHash) + ":" + git.BranchPrefix + strings.TrimSpace(branch),
|
||||||
Env: env,
|
Env: env,
|
||||||
Force: force,
|
Force: force,
|
||||||
|
|||||||
@ -230,8 +230,7 @@ func generateRepoCommit(ctx context.Context, repo, templateRepo, generateRepo *r
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Clone to temporary path and do the init commit.
|
// Clone to temporary path and do the init commit.
|
||||||
templateRepoPath := templateRepo.RepoPath()
|
if err := gitrepo.CloneRepoToLocal(ctx, templateRepo, tmpDir, git.CloneRepoOptions{
|
||||||
if err := git.Clone(ctx, templateRepoPath, tmpDir, git.CloneRepoOptions{
|
|
||||||
Depth: 1,
|
Depth: 1,
|
||||||
Branch: templateRepo.DefaultBranch,
|
Branch: templateRepo.DefaultBranch,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
|
|||||||
@ -11,6 +11,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/git"
|
"code.gitea.io/gitea/modules/git"
|
||||||
|
"code.gitea.io/gitea/modules/gitrepo"
|
||||||
repo_module "code.gitea.io/gitea/modules/repository"
|
repo_module "code.gitea.io/gitea/modules/repository"
|
||||||
"code.gitea.io/gitea/modules/reqctx"
|
"code.gitea.io/gitea/modules/reqctx"
|
||||||
"code.gitea.io/gitea/modules/util"
|
"code.gitea.io/gitea/modules/util"
|
||||||
@ -33,8 +34,7 @@ func MergeUpstream(ctx reqctx.RequestContext, doer *user_model.User, repo *repo_
|
|||||||
return "up-to-date", nil
|
return "up-to-date", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
err = git.Push(ctx, repo.BaseRepo.RepoPath(), git.PushOptions{
|
err = gitrepo.Push(ctx, repo.BaseRepo, repo, git.PushOptions{
|
||||||
Remote: repo.RepoPath(),
|
|
||||||
Branch: fmt.Sprintf("%s:%s", divergingInfo.BaseBranchName, branch),
|
Branch: fmt.Sprintf("%s:%s", divergingInfo.BaseBranchName, branch),
|
||||||
Env: repo_module.PushingEnvironment(doer, repo),
|
Env: repo_module.PushingEnvironment(doer, repo),
|
||||||
})
|
})
|
||||||
|
|||||||
@ -74,8 +74,6 @@ func MigrateRepositoryGitData(ctx context.Context, u *user_model.User,
|
|||||||
repo *repo_model.Repository, opts migration.MigrateOptions,
|
repo *repo_model.Repository, opts migration.MigrateOptions,
|
||||||
httpTransport *http.Transport,
|
httpTransport *http.Transport,
|
||||||
) (*repo_model.Repository, error) {
|
) (*repo_model.Repository, error) {
|
||||||
repoPath := repo.RepoPath()
|
|
||||||
|
|
||||||
if u.IsOrganization() {
|
if u.IsOrganization() {
|
||||||
t, err := organization.OrgFromUser(u).GetOwnerTeam(ctx)
|
t, err := organization.OrgFromUser(u).GetOwnerTeam(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -92,7 +90,7 @@ func MigrateRepositoryGitData(ctx context.Context, u *user_model.User,
|
|||||||
return repo, fmt.Errorf("failed to remove existing repo dir %q, err: %w", repo.FullName(), err)
|
return repo, fmt.Errorf("failed to remove existing repo dir %q, err: %w", repo.FullName(), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := git.Clone(ctx, opts.CloneAddr, repoPath, git.CloneRepoOptions{
|
if err := gitrepo.CloneExternalRepo(ctx, opts.CloneAddr, repo, git.CloneRepoOptions{
|
||||||
Mirror: true,
|
Mirror: true,
|
||||||
Quiet: true,
|
Quiet: true,
|
||||||
Timeout: migrateTimeout,
|
Timeout: migrateTimeout,
|
||||||
@ -104,7 +102,7 @@ func MigrateRepositoryGitData(ctx context.Context, u *user_model.User,
|
|||||||
return repo, fmt.Errorf("clone error: %w", err)
|
return repo, fmt.Errorf("clone error: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := git.WriteCommitGraph(ctx, repoPath); err != nil {
|
if err := gitrepo.WriteCommitGraph(ctx, repo); err != nil {
|
||||||
return repo, err
|
return repo, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -345,3 +345,31 @@ func HasWiki(ctx context.Context, repo *repo_model.Repository) bool {
|
|||||||
}
|
}
|
||||||
return hasWiki && err == nil
|
return hasWiki && err == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CheckCreateRepository check if doer could create a repository in new owner
|
||||||
|
func CheckCreateRepository(ctx context.Context, doer, owner *user_model.User, name string, overwriteOrAdopt bool) error {
|
||||||
|
if !doer.CanCreateRepoIn(owner) {
|
||||||
|
return repo_model.ErrReachLimitOfRepo{Limit: owner.MaxRepoCreation}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := repo_model.IsUsableRepoName(name); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
has, err := repo_model.IsRepositoryModelExist(ctx, owner, name)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
} else if has {
|
||||||
|
return repo_model.ErrRepoAlreadyExist{Uname: owner.Name, Name: name}
|
||||||
|
}
|
||||||
|
repo := repo_model.StorageRepo(repo_model.RelativePath(owner.Name, name))
|
||||||
|
isExist, err := gitrepo.IsRepositoryExist(ctx, repo)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Unable to check if %s exists. Error: %v", repo.RelativePath(), err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if !overwriteOrAdopt && isExist {
|
||||||
|
return repo_model.ErrRepoFilesAlreadyExist{Uname: owner.Name, Name: name}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@ -90,6 +90,17 @@ func AcceptTransferOwnership(ctx context.Context, repo *repo_model.Repository, d
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// isRepositoryModelOrDirExist returns true if the repository with given name under user has already existed.
|
||||||
|
func isRepositoryModelOrDirExist(ctx context.Context, u *user_model.User, repoName string) (bool, error) {
|
||||||
|
has, err := repo_model.IsRepositoryModelExist(ctx, u, repoName)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
repo := repo_model.StorageRepo(repo_model.RelativePath(u.Name, repoName))
|
||||||
|
isExist, err := gitrepo.IsRepositoryExist(ctx, repo)
|
||||||
|
return has || isExist, err
|
||||||
|
}
|
||||||
|
|
||||||
// transferOwnership transfers all corresponding repository items from old user to new one.
|
// transferOwnership transfers all corresponding repository items from old user to new one.
|
||||||
func transferOwnership(ctx context.Context, doer *user_model.User, newOwnerName string, repo *repo_model.Repository, teams []*organization.Team) (err error) {
|
func transferOwnership(ctx context.Context, doer *user_model.User, newOwnerName string, repo *repo_model.Repository, teams []*organization.Team) (err error) {
|
||||||
repoRenamed := false
|
repoRenamed := false
|
||||||
@ -143,7 +154,7 @@ func transferOwnership(ctx context.Context, doer *user_model.User, newOwnerName
|
|||||||
newOwnerName = newOwner.Name // ensure capitalisation matches
|
newOwnerName = newOwner.Name // ensure capitalisation matches
|
||||||
|
|
||||||
// Check if new owner has repository with same name.
|
// Check if new owner has repository with same name.
|
||||||
if has, err := repo_model.IsRepositoryModelOrDirExist(ctx, newOwner, repo.Name); err != nil {
|
if has, err := isRepositoryModelOrDirExist(ctx, newOwner, repo.Name); err != nil {
|
||||||
return fmt.Errorf("IsRepositoryExist: %w", err)
|
return fmt.Errorf("IsRepositoryExist: %w", err)
|
||||||
} else if has {
|
} else if has {
|
||||||
return repo_model.ErrRepoAlreadyExist{
|
return repo_model.ErrRepoAlreadyExist{
|
||||||
@ -345,7 +356,7 @@ func changeRepositoryName(ctx context.Context, repo *repo_model.Repository, newR
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
has, err := repo_model.IsRepositoryModelOrDirExist(ctx, repo.Owner, newRepoName)
|
has, err := isRepositoryModelOrDirExist(ctx, repo.Owner, newRepoName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("IsRepositoryExist: %w", err)
|
return fmt.Errorf("IsRepositoryExist: %w", err)
|
||||||
} else if has {
|
} else if has {
|
||||||
|
|||||||
@ -25,8 +25,6 @@ import (
|
|||||||
repo_service "code.gitea.io/gitea/services/repository"
|
repo_service "code.gitea.io/gitea/services/repository"
|
||||||
)
|
)
|
||||||
|
|
||||||
const DefaultRemote = "origin"
|
|
||||||
|
|
||||||
func getWikiWorkingLockKey(repoID int64) string {
|
func getWikiWorkingLockKey(repoID int64) string {
|
||||||
return fmt.Sprintf("wiki_working_%d", repoID)
|
return fmt.Sprintf("wiki_working_%d", repoID)
|
||||||
}
|
}
|
||||||
@ -214,8 +212,7 @@ func updateWikiPage(ctx context.Context, doer *user_model.User, repo *repo_model
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := git.Push(gitRepo.Ctx, basePath, git.PushOptions{
|
if err := gitrepo.PushFromLocal(gitRepo.Ctx, basePath, repo.WikiStorageRepo(), git.PushOptions{
|
||||||
Remote: DefaultRemote,
|
|
||||||
Branch: fmt.Sprintf("%s:%s%s", commitHash.String(), git.BranchPrefix, repo.DefaultWikiBranch),
|
Branch: fmt.Sprintf("%s:%s%s", commitHash.String(), git.BranchPrefix, repo.DefaultWikiBranch),
|
||||||
Env: repo_module.FullPushingEnvironment(
|
Env: repo_module.FullPushingEnvironment(
|
||||||
doer,
|
doer,
|
||||||
@ -333,8 +330,7 @@ func DeleteWikiPage(ctx context.Context, doer *user_model.User, repo *repo_model
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := git.Push(gitRepo.Ctx, basePath, git.PushOptions{
|
if err := gitrepo.PushFromLocal(gitRepo.Ctx, basePath, repo.WikiStorageRepo(), git.PushOptions{
|
||||||
Remote: DefaultRemote,
|
|
||||||
Branch: fmt.Sprintf("%s:%s%s", commitHash.String(), git.BranchPrefix, repo.DefaultWikiBranch),
|
Branch: fmt.Sprintf("%s:%s%s", commitHash.String(), git.BranchPrefix, repo.DefaultWikiBranch),
|
||||||
Env: repo_module.FullPushingEnvironment(
|
Env: repo_module.FullPushingEnvironment(
|
||||||
doer,
|
doer,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user