aboutsummaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2019-12-15 01:30:01 +0800
committerAntoine GIRARD <sapk@users.noreply.github.com>2019-12-14 18:30:01 +0100
commit7b2ff82d209c01be8082eaa9b888f93a00850d4d (patch)
treee3876a3f5c4b204b97bb0b611493c27453204a2c /models
parent2904abdc22da36a7110d0b69af0fd45cdb74ebf6 (diff)
downloadgitea-7b2ff82d209c01be8082eaa9b888f93a00850d4d.tar.gz
gitea-7b2ff82d209c01be8082eaa9b888f93a00850d4d.zip
Move some repository methods from models to modules/repository (#9353)
* Move some repository methods from models to modules/repository * fix test
Diffstat (limited to 'models')
-rw-r--r--models/migrations/v39.go3
-rw-r--r--models/release.go44
-rw-r--r--models/repo.go161
-rw-r--r--models/repo_mirror.go6
4 files changed, 11 insertions, 203 deletions
diff --git a/models/migrations/v39.go b/models/migrations/v39.go
index dc5f6ee091..e0b84b969c 100644
--- a/models/migrations/v39.go
+++ b/models/migrations/v39.go
@@ -10,6 +10,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/log"
+ "code.gitea.io/gitea/modules/repository"
"xorm.io/xorm"
)
@@ -44,7 +45,7 @@ func releaseAddColumnIsTagAndSyncTags(x *xorm.Engine) error {
continue
}
- if err = models.SyncReleasesWithTags(repo, gitRepo); err != nil {
+ if err = repository.SyncReleasesWithTags(repo, gitRepo); err != nil {
log.Warn("SyncReleasesWithTags: %v", err)
}
gitRepo.Close()
diff --git a/models/release.go b/models/release.go
index a0f0621ab0..46f9e88752 100644
--- a/models/release.go
+++ b/models/release.go
@@ -10,7 +10,6 @@ import (
"sort"
"strings"
- "code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/structs"
api "code.gitea.io/gitea/modules/structs"
@@ -318,49 +317,6 @@ func DeleteReleaseByID(id int64) error {
return err
}
-// SyncReleasesWithTags synchronizes release table with repository tags
-func SyncReleasesWithTags(repo *Repository, gitRepo *git.Repository) error {
- existingRelTags := make(map[string]struct{})
- opts := FindReleasesOptions{IncludeDrafts: true, IncludeTags: true}
- for page := 1; ; page++ {
- rels, err := GetReleasesByRepoID(repo.ID, opts, page, 100)
- if err != nil {
- return fmt.Errorf("GetReleasesByRepoID: %v", err)
- }
- if len(rels) == 0 {
- break
- }
- for _, rel := range rels {
- if rel.IsDraft {
- continue
- }
- commitID, err := gitRepo.GetTagCommitID(rel.TagName)
- if err != nil && !git.IsErrNotExist(err) {
- return fmt.Errorf("GetTagCommitID: %v", err)
- }
- if git.IsErrNotExist(err) || commitID != rel.Sha1 {
- if err := PushUpdateDeleteTag(repo, rel.TagName); err != nil {
- return fmt.Errorf("PushUpdateDeleteTag: %v", err)
- }
- } else {
- existingRelTags[strings.ToLower(rel.TagName)] = struct{}{}
- }
- }
- }
- tags, err := gitRepo.GetTags()
- if err != nil {
- return fmt.Errorf("GetTags: %v", err)
- }
- for _, tagName := range tags {
- if _, ok := existingRelTags[strings.ToLower(tagName)]; !ok {
- if err := PushUpdateAddTag(repo, gitRepo, tagName); err != nil {
- return fmt.Errorf("pushUpdateAddTag: %v", err)
- }
- }
- }
- return nil
-}
-
// UpdateReleasesMigrationsByType updates all migrated repositories' releases from gitServiceType to replace originalAuthorID to posterID
func UpdateReleasesMigrationsByType(gitServiceType structs.GitServiceType, originalAuthorID string, posterID int64) error {
_, err := x.Table("release").
diff --git a/models/repo.go b/models/repo.go
index 09735bd2c2..f4ac75b8f0 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -39,7 +39,6 @@ import (
"github.com/mcuadros/go-version"
"github.com/unknwon/com"
- ini "gopkg.in/ini.v1"
"xorm.io/builder"
)
@@ -941,25 +940,6 @@ func (repo *Repository) CloneLink() (cl *CloneLink) {
return repo.cloneLink(x, false)
}
-/*
- GitHub, GitLab, Gogs: *.wiki.git
- BitBucket: *.git/wiki
-*/
-var commonWikiURLSuffixes = []string{".wiki.git", ".git/wiki"}
-
-// wikiRemoteURL returns accessible repository URL for wiki if exists.
-// Otherwise, it returns an empty string.
-func wikiRemoteURL(remote string) string {
- remote = strings.TrimSuffix(remote, ".git")
- for _, suffix := range commonWikiURLSuffixes {
- wikiURL := remote + suffix
- if git.IsRepoURLAccessible(wikiURL) {
- return wikiURL
- }
- }
- return ""
-}
-
// CheckCreateRepository check if could created a repository
func CheckCreateRepository(doer, u *User, name string) error {
if !doer.CanCreateRepo() {
@@ -979,118 +959,9 @@ func CheckCreateRepository(doer, u *User, name string) error {
return nil
}
-// MigrateRepositoryGitData starts migrating git related data after created migrating repository
-func MigrateRepositoryGitData(doer, u *User, repo *Repository, opts api.MigrateRepoOption) (*Repository, error) {
- repoPath := RepoPath(u.Name, opts.RepoName)
-
- if u.IsOrganization() {
- t, err := u.GetOwnerTeam()
- if err != nil {
- return nil, err
- }
- repo.NumWatches = t.NumMembers
- } else {
- repo.NumWatches = 1
- }
-
- migrateTimeout := time.Duration(setting.Git.Timeout.Migrate) * time.Second
-
- var err error
- if err = os.RemoveAll(repoPath); err != nil {
- return repo, fmt.Errorf("Failed to remove %s: %v", repoPath, err)
- }
-
- if err = git.Clone(opts.CloneAddr, repoPath, git.CloneRepoOptions{
- Mirror: true,
- Quiet: true,
- Timeout: migrateTimeout,
- }); err != nil {
- return repo, fmt.Errorf("Clone: %v", err)
- }
-
- if opts.Wiki {
- wikiPath := WikiPath(u.Name, opts.RepoName)
- wikiRemotePath := wikiRemoteURL(opts.CloneAddr)
- if len(wikiRemotePath) > 0 {
- if err := os.RemoveAll(wikiPath); err != nil {
- return repo, fmt.Errorf("Failed to remove %s: %v", wikiPath, err)
- }
-
- if err = git.Clone(wikiRemotePath, wikiPath, git.CloneRepoOptions{
- Mirror: true,
- Quiet: true,
- Timeout: migrateTimeout,
- Branch: "master",
- }); err != nil {
- log.Warn("Clone wiki: %v", err)
- if err := os.RemoveAll(wikiPath); err != nil {
- return repo, fmt.Errorf("Failed to remove %s: %v", wikiPath, err)
- }
- }
- }
- }
-
- gitRepo, err := git.OpenRepository(repoPath)
- if err != nil {
- return repo, fmt.Errorf("OpenRepository: %v", err)
- }
- defer gitRepo.Close()
-
- repo.IsEmpty, err = gitRepo.IsEmpty()
- if err != nil {
- return repo, fmt.Errorf("git.IsEmpty: %v", err)
- }
-
- if !opts.Releases && !repo.IsEmpty {
- // Try to get HEAD branch and set it as default branch.
- headBranch, err := gitRepo.GetHEADBranch()
- if err != nil {
- return repo, fmt.Errorf("GetHEADBranch: %v", err)
- }
- if headBranch != nil {
- repo.DefaultBranch = headBranch.Name
- }
-
- if err = SyncReleasesWithTags(repo, gitRepo); err != nil {
- log.Error("Failed to synchronize tags to releases for repository: %v", err)
- }
- }
-
- if err = repo.UpdateSize(); err != nil {
- log.Error("Failed to update size for repository: %v", err)
- }
-
- if opts.Mirror {
- if _, err = x.InsertOne(&Mirror{
- RepoID: repo.ID,
- Interval: setting.Mirror.DefaultInterval,
- EnablePrune: true,
- NextUpdateUnix: timeutil.TimeStampNow().AddDuration(setting.Mirror.DefaultInterval),
- }); err != nil {
- return repo, fmt.Errorf("InsertOne: %v", err)
- }
-
- repo.IsMirror = true
- err = UpdateRepository(repo, false)
- } else {
- repo, err = CleanUpMigrateInfo(repo)
- }
-
- return repo, err
-}
-
-// cleanUpMigrateGitConfig removes mirror info which prevents "push --all".
-// This also removes possible user credentials.
-func cleanUpMigrateGitConfig(configPath string) error {
- cfg, err := ini.Load(configPath)
- if err != nil {
- return fmt.Errorf("open config file: %v", err)
- }
- cfg.DeleteSection("remote \"origin\"")
- if err = cfg.SaveToIndent(configPath, "\t"); err != nil {
- return fmt.Errorf("save config file: %v", err)
- }
- return nil
+// CreateDelegateHooks creates all the hooks scripts for the repo
+func CreateDelegateHooks(repoPath string) error {
+ return createDelegateHooks(repoPath)
}
// createDelegateHooks creates all the hooks scripts for the repo
@@ -1132,32 +1003,6 @@ func createDelegateHooks(repoPath string) (err error) {
return nil
}
-// CleanUpMigrateInfo finishes migrating repository and/or wiki with things that don't need to be done for mirrors.
-func CleanUpMigrateInfo(repo *Repository) (*Repository, error) {
- repoPath := repo.RepoPath()
- if err := createDelegateHooks(repoPath); err != nil {
- return repo, fmt.Errorf("createDelegateHooks: %v", err)
- }
- if repo.HasWiki() {
- if err := createDelegateHooks(repo.WikiPath()); err != nil {
- return repo, fmt.Errorf("createDelegateHooks.(wiki): %v", err)
- }
- }
-
- _, err := git.NewCommand("remote", "rm", "origin").RunInDir(repoPath)
- if err != nil && !strings.HasPrefix(err.Error(), "exit status 128 - fatal: No such remote ") {
- return repo, fmt.Errorf("CleanUpMigrateInfo: %v", err)
- }
-
- if repo.HasWiki() {
- if err := cleanUpMigrateGitConfig(path.Join(repo.WikiPath(), "config")); err != nil {
- return repo, fmt.Errorf("cleanUpMigrateGitConfig (wiki): %v", err)
- }
- }
-
- return repo, UpdateRepository(repo, false)
-}
-
// initRepoCommit temporarily changes with work directory.
func initRepoCommit(tmpPath string, u *User) (err error) {
commitTimeStr := time.Now().Format(time.RFC3339)
diff --git a/models/repo_mirror.go b/models/repo_mirror.go
index aa0ec26808..10b0a7b139 100644
--- a/models/repo_mirror.go
+++ b/models/repo_mirror.go
@@ -97,3 +97,9 @@ func MirrorsIterate(f func(idx int, bean interface{}) error) error {
And("next_update_unix!=0").
Iterate(new(Mirror), f)
}
+
+// InsertMirror inserts a mirror to database
+func InsertMirror(mirror *Mirror) error {
+ _, err := x.Insert(mirror)
+ return err
+}