From 5f123b0040679f72b326d158f8af14681da6fcbd Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Sat, 9 Feb 2019 15:47:53 +0100 Subject: [PATCH 01/13] show author for releases created outside Gitea UI. Also show the number of commits behind the default branch for tags created outside the UI don't show the tag date again for tags pushed to the repo. Since it is already on the sidebar and looks like duplication --- models/release.go | 6 ++++++ templates/repo/release/list.tmpl | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/models/release.go b/models/release.go index f147016b13f92..84503f7ca77e2 100644 --- a/models/release.go +++ b/models/release.go @@ -142,6 +142,12 @@ func createTag(gitRepo *git.Repository, rel *Release) error { if err != nil { return fmt.Errorf("CommitsCount: %v", err) } + + u, err := GetUserByEmail(commit.Author.Email) + if err == nil { + rel.PublisherID = u.ID + } + } else { rel.CreatedUnix = util.TimeStampNow() } diff --git a/templates/repo/release/list.tmpl b/templates/repo/release/list.tmpl index 9df2f6cb81bc5..07e80057eb337 100644 --- a/templates/repo/release/list.tmpl +++ b/templates/repo/release/list.tmpl @@ -40,6 +40,15 @@

{{.TagName}}

+

+ {{ if gt .Publisher.ID 0 }} + + + {{.Publisher.Name}} + + {{ end }} + {{$.i18n.Tr "repo.release.ahead" .NumCommitsBehind $.Repository.DefaultBranch | Str2html}} +

{{if $.Permission.CanRead $.UnitTypeCode}} {{ShortSha .Sha1}} From 09fef968ee0e0801e7a518fe0241db2af6270a65 Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Thu, 28 Mar 2019 18:18:10 +0100 Subject: [PATCH 02/13] add migration for already existing tags --- models/migrations/migrations.go | 2 + models/migrations/v83.go | 125 ++++++++++++++++++++++++++++++++ 2 files changed, 127 insertions(+) create mode 100644 models/migrations/v83.go diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 2807de78b1996..c12886ad22275 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -219,6 +219,8 @@ var migrations = []Migration{ NewMigration("update U2F counter type", changeU2FCounterType), // v82 -> v83 NewMigration("hot fix for wrong release sha1 on release table", fixReleaseSha1OnReleaseTable), + // v83 - v84 + NewMigration("fix publisher ID for tag releases", fixPublisherIDforTagReleases), } // Migrate database to current version diff --git a/models/migrations/v83.go b/models/migrations/v83.go new file mode 100644 index 0000000000000..644027f944d52 --- /dev/null +++ b/models/migrations/v83.go @@ -0,0 +1,125 @@ +// Copyright 2019 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package migrations + +import ( + "fmt" + + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/git" + + "github.com/go-xorm/xorm" +) + +func fixPublisherIDforTagReleases(x *xorm.Engine) error { + + type Release struct { + ID int64 + RepoID int64 + Sha1 string + TagName string + PublisherID int64 + } + + type Repository struct { + ID int64 + OwnerID int64 + Name string + } + + type User struct { + ID int64 + Name string + Email string + } + + const batchSize = 100 + sess := x.NewSession() + defer sess.Close() + + if err := sess.Begin(); err != nil { + return err + } + + var ( + gitRepoCache = make(map[int64]*git.Repository) + gitRepo *git.Repository + repoCache = make(map[int64]*Repository) + userCache = make(map[int64]*User) + ok bool + err error + ) + + for start := 0; ; start += batchSize { + releases := make([]*Release, 0, batchSize) + + if err := sess.Limit(batchSize, start).Asc("id").Where("is_tag=?", true).Find(&releases); err != nil { + return err + } + + if len(releases) == 0 { + break + } + + for _, release := range releases { + gitRepo, ok = gitRepoCache[release.RepoID] + if !ok { + repo, ok := repoCache[release.RepoID] + if !ok { + repo = new(Repository) + has, err := sess.ID(release.RepoID).Get(repo) + if err != nil { + return err + } else if !has { + return fmt.Errorf("Repository %d is not exist", release.RepoID) + } + + repoCache[release.RepoID] = repo + } + + user, ok := userCache[repo.OwnerID] + if !ok { + user = new(User) + has, err := sess.ID(repo.OwnerID).Get(user) + if err != nil { + return err + } else if !has { + return fmt.Errorf("User %d is not exist", repo.OwnerID) + } + + userCache[repo.OwnerID] = user + } + + gitRepo, err = git.OpenRepository(models.RepoPath(user.Name, repo.Name)) + if err != nil { + return err + } + gitRepoCache[release.RepoID] = gitRepo + } + + commit, err := gitRepo.GetTagCommit(release.TagName) + if err != nil { + return fmt.Errorf("GetTagCommit: %v", err) + } + + u := new(User) + exists, err := sess.Where("email=?", commit.Author.Email).Get(u) + if err != nil { + return err + } + + if !exists { + continue + } + + release.PublisherID = u.ID + if _, err := sess.ID(release.ID).Update(release); err != nil { + return err + } + } + } + + return sess.Commit() +} From b4533404f80ba00ccbf753d4881862a9597ad1c0 Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Fri, 29 Mar 2019 22:20:43 +0100 Subject: [PATCH 03/13] update as per review --- models/migrations/v83.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/migrations/v83.go b/models/migrations/v83.go index 644027f944d52..21125cda1e6d0 100644 --- a/models/migrations/v83.go +++ b/models/migrations/v83.go @@ -115,7 +115,7 @@ func fixPublisherIDforTagReleases(x *xorm.Engine) error { } release.PublisherID = u.ID - if _, err := sess.ID(release.ID).Update(release); err != nil { + if _, err := sess.ID(release.ID).Cols("publisher_id").Update(release); err != nil { return err } } From 4eb786eca64d195b6ece9a4d91796d8248bfc9b4 Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Sat, 14 Dec 2019 14:59:11 +0100 Subject: [PATCH 04/13] fix build --- models/migrations/v85.go | 1 + services/release/release.go | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/models/migrations/v85.go b/models/migrations/v85.go index 410f4b4d2b485..8c92f10b6ed99 100644 --- a/models/migrations/v85.go +++ b/models/migrations/v85.go @@ -1,6 +1,7 @@ // Copyright 2019 The Gitea Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. + package migrations import ( diff --git a/services/release/release.go b/services/release/release.go index fd0c410e7cbfd..7b2b497c54689 100644 --- a/services/release/release.go +++ b/services/release/release.go @@ -57,9 +57,16 @@ func createTag(gitRepo *git.Repository, rel *models.Release) error { if err != nil { return fmt.Errorf("CommitsCount: %v", err) } + + u, err := models.GetUserByEmail(commit.Author.Email) + if err == nil { + rel.PublisherID = u.ID + } + } else { rel.CreatedUnix = timeutil.TimeStampNow() } + return nil } From 9fcf2cc251ec58f73b09a9c0a091cc761ecddcdf Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Sat, 14 Dec 2019 15:00:02 +0100 Subject: [PATCH 05/13] add space --- models/migrations/v113.go | 1 + 1 file changed, 1 insertion(+) diff --git a/models/migrations/v113.go b/models/migrations/v113.go index 085310aa7b845..9137914d853a2 100644 --- a/models/migrations/v113.go +++ b/models/migrations/v113.go @@ -1,6 +1,7 @@ // Copyright 2019 The Gitea Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. + package migrations import ( From cf5575d6bae471a95ff5e731417cc1ae1b2531d5 Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Sat, 14 Dec 2019 15:00:45 +0100 Subject: [PATCH 06/13] fix import statments --- models/migrations/v113.go | 1 + 1 file changed, 1 insertion(+) diff --git a/models/migrations/v113.go b/models/migrations/v113.go index 9137914d853a2..4f109c5f4ab2f 100644 --- a/models/migrations/v113.go +++ b/models/migrations/v113.go @@ -9,6 +9,7 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/git" + "xorm.io/xorm" ) From eb4c10d39c80ceebf74e20f9567da159f70e7de8 Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Mon, 23 Dec 2019 19:13:56 +0100 Subject: [PATCH 07/13] Update models/migrations/v113.go Co-Authored-By: zeripath --- models/migrations/v113.go | 1 - 1 file changed, 1 deletion(-) diff --git a/models/migrations/v113.go b/models/migrations/v113.go index 87c5bd861550d..199c02ac98c98 100644 --- a/models/migrations/v113.go +++ b/models/migrations/v113.go @@ -19,6 +19,5 @@ func featureChangeTargetBranch(x *xorm.Engine) error { if err := x.Sync2(new(Comment)); err != nil { return fmt.Errorf("Sync2: %v", err) } - return nil } From 9359f3d783fb9303c5ce5ed8d9e892bffdef7c69 Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Mon, 27 Jul 2020 08:51:25 +0100 Subject: [PATCH 08/13] Update models/migrations/v114.go Co-authored-by: 6543 <6543@obermui.de> --- models/migrations/v114.go | 1 - 1 file changed, 1 deletion(-) diff --git a/models/migrations/v114.go b/models/migrations/v114.go index 83d1f2a839a73..25a187f6e8ab1 100644 --- a/models/migrations/v114.go +++ b/models/migrations/v114.go @@ -48,6 +48,5 @@ func sanitizeOriginalURL(x *xorm.Engine) error { } } } - return nil } From fb41b036d9414b39c2e201074577416a946e421c Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Mon, 27 Jul 2020 08:51:42 +0100 Subject: [PATCH 09/13] Update services/release/release.go Co-authored-by: 6543 <6543@obermui.de> --- services/release/release.go | 1 - 1 file changed, 1 deletion(-) diff --git a/services/release/release.go b/services/release/release.go index 91a2a82b96d17..c88c331a74f56 100644 --- a/services/release/release.go +++ b/services/release/release.go @@ -67,7 +67,6 @@ func createTag(gitRepo *git.Repository, rel *models.Release) error { } else { rel.CreatedUnix = timeutil.TimeStampNow() } - return nil } From 725ac8f4682ae1bcf976f6280442ca52fa3867ad Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Fri, 14 Aug 2020 19:20:47 +0200 Subject: [PATCH 10/13] impruve --- routers/repo/release.go | 1 + templates/repo/release/list.tmpl | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/routers/repo/release.go b/routers/repo/release.go index 02fbcaccafdbd..5253596b74357 100644 --- a/routers/repo/release.go +++ b/routers/repo/release.go @@ -56,6 +56,7 @@ func calReleaseNumCommitsBehind(repoCtx *context.Repository, release *models.Rel func Releases(ctx *context.Context) { ctx.Data["Title"] = ctx.Tr("repo.release.releases") ctx.Data["PageIsReleaseList"] = true + ctx.Data["DefaultBranch"] = ctx.Repo.Repository.DefaultBranch writeAccess := ctx.Repo.CanWrite(models.UnitTypeReleases) ctx.Data["CanCreateRelease"] = writeAccess && !ctx.Repo.Repository.IsArchived diff --git a/templates/repo/release/list.tmpl b/templates/repo/release/list.tmpl index cdadf591c58a9..e67c33290575d 100644 --- a/templates/repo/release/list.tmpl +++ b/templates/repo/release/list.tmpl @@ -47,7 +47,7 @@ {{.Publisher.Name}} {{ end }} - {{$.i18n.Tr "repo.release.ahead" .NumCommitsBehind $.Repository.DefaultBranch | Str2html}} + {{$.i18n.Tr "repo.release.ahead.commits" .NumCommitsBehind | Str2html}} {{$.i18n.Tr "repo.release.ahead.target" $.DefaultBranch}}

{{if $.Permission.CanRead $.UnitTypeCode}} From 5a3fb34df2c471c2d53441bb73cfd90b562b87d1 Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Thu, 15 Oct 2020 21:27:31 +0100 Subject: [PATCH 11/13] remove dependency on models package --- models/migrations/v156.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/models/migrations/v156.go b/models/migrations/v156.go index 44339974d5d69..8b7c3a0b2b855 100644 --- a/models/migrations/v156.go +++ b/models/migrations/v156.go @@ -6,13 +6,24 @@ package migrations import ( "fmt" + "path/filepath" + "strings" - "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/setting" "xorm.io/xorm" ) +// Copy paste from models/repo.go because we cannot import models package +func repoPath(userName, repoName string) string { + return filepath.Join(userPath(userName), strings.ToLower(repoName)+".git") +} + +func userPath(userName string) string { + return filepath.Join(setting.RepoRootPath, strings.ToLower(userName)) +} + func fixPublisherIDforTagReleases(x *xorm.Engine) error { type Release struct { @@ -92,7 +103,7 @@ func fixPublisherIDforTagReleases(x *xorm.Engine) error { userCache[repo.OwnerID] = user } - gitRepo, err = git.OpenRepository(models.RepoPath(user.Name, repo.Name)) + gitRepo, err = git.OpenRepository(repoPath(user.Name, repo.Name)) if err != nil { return err } From 5688b342e3894d15baaaf24633f12ee04c882662 Mon Sep 17 00:00:00 2001 From: zeripath Date: Sun, 18 Oct 2020 15:11:01 +0100 Subject: [PATCH 12/13] Close the gitrepos in a defer to ensure that they are closed. --- models/migrations/v156.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/models/migrations/v156.go b/models/migrations/v156.go index 8b7c3a0b2b855..bcabe6b032bf9 100644 --- a/models/migrations/v156.go +++ b/models/migrations/v156.go @@ -62,7 +62,11 @@ func fixPublisherIDforTagReleases(x *xorm.Engine) error { ok bool err error ) - + defer func() { + for i := range gitRepoCache { + gitRepoCache[i].Close() + } + } () for start := 0; ; start += batchSize { releases := make([]*Release, 0, batchSize) @@ -132,9 +136,5 @@ func fixPublisherIDforTagReleases(x *xorm.Engine) error { } } - for i := range gitRepoCache { - gitRepoCache[i].Close() - } - return sess.Commit() } From d7ff2418c4ecc91e93f42b6d02459ff22c0f656b Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Tue, 20 Oct 2020 06:06:34 +0200 Subject: [PATCH 13/13] gofmt --- models/migrations/v156.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/migrations/v156.go b/models/migrations/v156.go index bcabe6b032bf9..dc9c20188dcce 100644 --- a/models/migrations/v156.go +++ b/models/migrations/v156.go @@ -66,7 +66,7 @@ func fixPublisherIDforTagReleases(x *xorm.Engine) error { for i := range gitRepoCache { gitRepoCache[i].Close() } - } () + }() for start := 0; ; start += batchSize { releases := make([]*Release, 0, batchSize)