Skip to content

Commit 7b2ff82

Browse files
lunnysapk
authored andcommitted
Move some repository methods from models to modules/repository (#9353)
* Move some repository methods from models to modules/repository * fix test
1 parent 2904abd commit 7b2ff82

File tree

10 files changed

+245
-209
lines changed

10 files changed

+245
-209
lines changed

cmd/admin.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"code.gitea.io/gitea/modules/git"
1717
"code.gitea.io/gitea/modules/log"
1818
pwd "code.gitea.io/gitea/modules/password"
19+
"code.gitea.io/gitea/modules/repository"
1920
"code.gitea.io/gitea/modules/setting"
2021

2122
"github.com/urfave/cli"
@@ -373,7 +374,7 @@ func runRepoSyncReleases(c *cli.Context) error {
373374
}
374375
log.Trace(" currentNumReleases is %d, running SyncReleasesWithTags", oldnum)
375376

376-
if err = models.SyncReleasesWithTags(repo, gitRepo); err != nil {
377+
if err = repository.SyncReleasesWithTags(repo, gitRepo); err != nil {
377378
log.Warn(" SyncReleasesWithTags: %v", err)
378379
gitRepo.Close()
379380
continue

models/migrations/v39.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"code.gitea.io/gitea/models"
1111
"code.gitea.io/gitea/modules/git"
1212
"code.gitea.io/gitea/modules/log"
13+
"code.gitea.io/gitea/modules/repository"
1314

1415
"xorm.io/xorm"
1516
)
@@ -44,7 +45,7 @@ func releaseAddColumnIsTagAndSyncTags(x *xorm.Engine) error {
4445
continue
4546
}
4647

47-
if err = models.SyncReleasesWithTags(repo, gitRepo); err != nil {
48+
if err = repository.SyncReleasesWithTags(repo, gitRepo); err != nil {
4849
log.Warn("SyncReleasesWithTags: %v", err)
4950
}
5051
gitRepo.Close()

models/release.go

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"sort"
1111
"strings"
1212

13-
"code.gitea.io/gitea/modules/git"
1413
"code.gitea.io/gitea/modules/setting"
1514
"code.gitea.io/gitea/modules/structs"
1615
api "code.gitea.io/gitea/modules/structs"
@@ -318,49 +317,6 @@ func DeleteReleaseByID(id int64) error {
318317
return err
319318
}
320319

321-
// SyncReleasesWithTags synchronizes release table with repository tags
322-
func SyncReleasesWithTags(repo *Repository, gitRepo *git.Repository) error {
323-
existingRelTags := make(map[string]struct{})
324-
opts := FindReleasesOptions{IncludeDrafts: true, IncludeTags: true}
325-
for page := 1; ; page++ {
326-
rels, err := GetReleasesByRepoID(repo.ID, opts, page, 100)
327-
if err != nil {
328-
return fmt.Errorf("GetReleasesByRepoID: %v", err)
329-
}
330-
if len(rels) == 0 {
331-
break
332-
}
333-
for _, rel := range rels {
334-
if rel.IsDraft {
335-
continue
336-
}
337-
commitID, err := gitRepo.GetTagCommitID(rel.TagName)
338-
if err != nil && !git.IsErrNotExist(err) {
339-
return fmt.Errorf("GetTagCommitID: %v", err)
340-
}
341-
if git.IsErrNotExist(err) || commitID != rel.Sha1 {
342-
if err := PushUpdateDeleteTag(repo, rel.TagName); err != nil {
343-
return fmt.Errorf("PushUpdateDeleteTag: %v", err)
344-
}
345-
} else {
346-
existingRelTags[strings.ToLower(rel.TagName)] = struct{}{}
347-
}
348-
}
349-
}
350-
tags, err := gitRepo.GetTags()
351-
if err != nil {
352-
return fmt.Errorf("GetTags: %v", err)
353-
}
354-
for _, tagName := range tags {
355-
if _, ok := existingRelTags[strings.ToLower(tagName)]; !ok {
356-
if err := PushUpdateAddTag(repo, gitRepo, tagName); err != nil {
357-
return fmt.Errorf("pushUpdateAddTag: %v", err)
358-
}
359-
}
360-
}
361-
return nil
362-
}
363-
364320
// UpdateReleasesMigrationsByType updates all migrated repositories' releases from gitServiceType to replace originalAuthorID to posterID
365321
func UpdateReleasesMigrationsByType(gitServiceType structs.GitServiceType, originalAuthorID string, posterID int64) error {
366322
_, err := x.Table("release").

models/repo.go

Lines changed: 3 additions & 158 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import (
3939

4040
"github.com/mcuadros/go-version"
4141
"github.com/unknwon/com"
42-
ini "gopkg.in/ini.v1"
4342
"xorm.io/builder"
4443
)
4544

@@ -941,25 +940,6 @@ func (repo *Repository) CloneLink() (cl *CloneLink) {
941940
return repo.cloneLink(x, false)
942941
}
943942

944-
/*
945-
GitHub, GitLab, Gogs: *.wiki.git
946-
BitBucket: *.git/wiki
947-
*/
948-
var commonWikiURLSuffixes = []string{".wiki.git", ".git/wiki"}
949-
950-
// wikiRemoteURL returns accessible repository URL for wiki if exists.
951-
// Otherwise, it returns an empty string.
952-
func wikiRemoteURL(remote string) string {
953-
remote = strings.TrimSuffix(remote, ".git")
954-
for _, suffix := range commonWikiURLSuffixes {
955-
wikiURL := remote + suffix
956-
if git.IsRepoURLAccessible(wikiURL) {
957-
return wikiURL
958-
}
959-
}
960-
return ""
961-
}
962-
963943
// CheckCreateRepository check if could created a repository
964944
func CheckCreateRepository(doer, u *User, name string) error {
965945
if !doer.CanCreateRepo() {
@@ -979,118 +959,9 @@ func CheckCreateRepository(doer, u *User, name string) error {
979959
return nil
980960
}
981961

982-
// MigrateRepositoryGitData starts migrating git related data after created migrating repository
983-
func MigrateRepositoryGitData(doer, u *User, repo *Repository, opts api.MigrateRepoOption) (*Repository, error) {
984-
repoPath := RepoPath(u.Name, opts.RepoName)
985-
986-
if u.IsOrganization() {
987-
t, err := u.GetOwnerTeam()
988-
if err != nil {
989-
return nil, err
990-
}
991-
repo.NumWatches = t.NumMembers
992-
} else {
993-
repo.NumWatches = 1
994-
}
995-
996-
migrateTimeout := time.Duration(setting.Git.Timeout.Migrate) * time.Second
997-
998-
var err error
999-
if err = os.RemoveAll(repoPath); err != nil {
1000-
return repo, fmt.Errorf("Failed to remove %s: %v", repoPath, err)
1001-
}
1002-
1003-
if err = git.Clone(opts.CloneAddr, repoPath, git.CloneRepoOptions{
1004-
Mirror: true,
1005-
Quiet: true,
1006-
Timeout: migrateTimeout,
1007-
}); err != nil {
1008-
return repo, fmt.Errorf("Clone: %v", err)
1009-
}
1010-
1011-
if opts.Wiki {
1012-
wikiPath := WikiPath(u.Name, opts.RepoName)
1013-
wikiRemotePath := wikiRemoteURL(opts.CloneAddr)
1014-
if len(wikiRemotePath) > 0 {
1015-
if err := os.RemoveAll(wikiPath); err != nil {
1016-
return repo, fmt.Errorf("Failed to remove %s: %v", wikiPath, err)
1017-
}
1018-
1019-
if err = git.Clone(wikiRemotePath, wikiPath, git.CloneRepoOptions{
1020-
Mirror: true,
1021-
Quiet: true,
1022-
Timeout: migrateTimeout,
1023-
Branch: "master",
1024-
}); err != nil {
1025-
log.Warn("Clone wiki: %v", err)
1026-
if err := os.RemoveAll(wikiPath); err != nil {
1027-
return repo, fmt.Errorf("Failed to remove %s: %v", wikiPath, err)
1028-
}
1029-
}
1030-
}
1031-
}
1032-
1033-
gitRepo, err := git.OpenRepository(repoPath)
1034-
if err != nil {
1035-
return repo, fmt.Errorf("OpenRepository: %v", err)
1036-
}
1037-
defer gitRepo.Close()
1038-
1039-
repo.IsEmpty, err = gitRepo.IsEmpty()
1040-
if err != nil {
1041-
return repo, fmt.Errorf("git.IsEmpty: %v", err)
1042-
}
1043-
1044-
if !opts.Releases && !repo.IsEmpty {
1045-
// Try to get HEAD branch and set it as default branch.
1046-
headBranch, err := gitRepo.GetHEADBranch()
1047-
if err != nil {
1048-
return repo, fmt.Errorf("GetHEADBranch: %v", err)
1049-
}
1050-
if headBranch != nil {
1051-
repo.DefaultBranch = headBranch.Name
1052-
}
1053-
1054-
if err = SyncReleasesWithTags(repo, gitRepo); err != nil {
1055-
log.Error("Failed to synchronize tags to releases for repository: %v", err)
1056-
}
1057-
}
1058-
1059-
if err = repo.UpdateSize(); err != nil {
1060-
log.Error("Failed to update size for repository: %v", err)
1061-
}
1062-
1063-
if opts.Mirror {
1064-
if _, err = x.InsertOne(&Mirror{
1065-
RepoID: repo.ID,
1066-
Interval: setting.Mirror.DefaultInterval,
1067-
EnablePrune: true,
1068-
NextUpdateUnix: timeutil.TimeStampNow().AddDuration(setting.Mirror.DefaultInterval),
1069-
}); err != nil {
1070-
return repo, fmt.Errorf("InsertOne: %v", err)
1071-
}
1072-
1073-
repo.IsMirror = true
1074-
err = UpdateRepository(repo, false)
1075-
} else {
1076-
repo, err = CleanUpMigrateInfo(repo)
1077-
}
1078-
1079-
return repo, err
1080-
}
1081-
1082-
// cleanUpMigrateGitConfig removes mirror info which prevents "push --all".
1083-
// This also removes possible user credentials.
1084-
func cleanUpMigrateGitConfig(configPath string) error {
1085-
cfg, err := ini.Load(configPath)
1086-
if err != nil {
1087-
return fmt.Errorf("open config file: %v", err)
1088-
}
1089-
cfg.DeleteSection("remote \"origin\"")
1090-
if err = cfg.SaveToIndent(configPath, "\t"); err != nil {
1091-
return fmt.Errorf("save config file: %v", err)
1092-
}
1093-
return nil
962+
// CreateDelegateHooks creates all the hooks scripts for the repo
963+
func CreateDelegateHooks(repoPath string) error {
964+
return createDelegateHooks(repoPath)
1094965
}
1095966

1096967
// createDelegateHooks creates all the hooks scripts for the repo
@@ -1132,32 +1003,6 @@ func createDelegateHooks(repoPath string) (err error) {
11321003
return nil
11331004
}
11341005

1135-
// CleanUpMigrateInfo finishes migrating repository and/or wiki with things that don't need to be done for mirrors.
1136-
func CleanUpMigrateInfo(repo *Repository) (*Repository, error) {
1137-
repoPath := repo.RepoPath()
1138-
if err := createDelegateHooks(repoPath); err != nil {
1139-
return repo, fmt.Errorf("createDelegateHooks: %v", err)
1140-
}
1141-
if repo.HasWiki() {
1142-
if err := createDelegateHooks(repo.WikiPath()); err != nil {
1143-
return repo, fmt.Errorf("createDelegateHooks.(wiki): %v", err)
1144-
}
1145-
}
1146-
1147-
_, err := git.NewCommand("remote", "rm", "origin").RunInDir(repoPath)
1148-
if err != nil && !strings.HasPrefix(err.Error(), "exit status 128 - fatal: No such remote ") {
1149-
return repo, fmt.Errorf("CleanUpMigrateInfo: %v", err)
1150-
}
1151-
1152-
if repo.HasWiki() {
1153-
if err := cleanUpMigrateGitConfig(path.Join(repo.WikiPath(), "config")); err != nil {
1154-
return repo, fmt.Errorf("cleanUpMigrateGitConfig (wiki): %v", err)
1155-
}
1156-
}
1157-
1158-
return repo, UpdateRepository(repo, false)
1159-
}
1160-
11611006
// initRepoCommit temporarily changes with work directory.
11621007
func initRepoCommit(tmpPath string, u *User) (err error) {
11631008
commitTimeStr := time.Now().Format(time.RFC3339)

models/repo_mirror.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,9 @@ func MirrorsIterate(f func(idx int, bean interface{}) error) error {
9797
And("next_update_unix!=0").
9898
Iterate(new(Mirror), f)
9999
}
100+
101+
// InsertMirror inserts a mirror to database
102+
func InsertMirror(mirror *Mirror) error {
103+
_, err := x.Insert(mirror)
104+
return err
105+
}

modules/migrations/gitea.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"code.gitea.io/gitea/modules/git"
2222
"code.gitea.io/gitea/modules/log"
2323
"code.gitea.io/gitea/modules/migrations/base"
24+
"code.gitea.io/gitea/modules/repository"
2425
"code.gitea.io/gitea/modules/setting"
2526
"code.gitea.io/gitea/modules/structs"
2627
"code.gitea.io/gitea/modules/timeutil"
@@ -111,7 +112,7 @@ func (g *GiteaLocalUploader) CreateRepo(repo *base.Repository, opts base.Migrate
111112
return err
112113
}
113114

114-
r, err = models.MigrateRepositoryGitData(g.doer, owner, r, structs.MigrateRepoOption{
115+
r, err = repository.MigrateRepositoryGitData(g.doer, owner, r, structs.MigrateRepoOption{
115116
RepoName: g.repoName,
116117
Description: repo.Description,
117118
OriginalURL: repo.OriginalURL,
@@ -294,7 +295,7 @@ func (g *GiteaLocalUploader) CreateReleases(releases ...*base.Release) error {
294295

295296
// SyncTags syncs releases with tags in the database
296297
func (g *GiteaLocalUploader) SyncTags() error {
297-
return models.SyncReleasesWithTags(g.repo, g.gitRepo)
298+
return repository.SyncReleasesWithTags(g.repo, g.gitRepo)
298299
}
299300

300301
// CreateIssues creates issues

0 commit comments

Comments
 (0)