aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author6543 <6543@obermui.de>2020-07-29 00:05:39 +0200
committerLeo <thinkabit.ukim@gmail.com>2020-07-30 09:23:14 +0000
commit83111ba91a70151aaa2ff22bc42ccc16c2a9fcca (patch)
tree8d38f55cfaa50bb1db708caa3e9aad5f6675f1c1
parent77cd8637f03e06b9bd744c787f23db02b2f476f7 (diff)
community/gitea: upgrade to 1.12.3
-rw-r--r--community/gitea/0001-support-git-2.28-12370.patch192
-rw-r--r--community/gitea/APKBUILD6
2 files changed, 196 insertions, 2 deletions
diff --git a/community/gitea/0001-support-git-2.28-12370.patch b/community/gitea/0001-support-git-2.28-12370.patch
new file mode 100644
index 00000000000..1d6af8f97c9
--- /dev/null
+++ b/community/gitea/0001-support-git-2.28-12370.patch
@@ -0,0 +1,192 @@
+From bd99df60c6c9f67a9eda89e69b3aa9bb82364d5b Mon Sep 17 00:00:00 2001
+From: Andrew Thornton <art27@cantab.net>
+Date: Wed, 29 Jul 2020 11:38:17 +0100
+Subject: [PATCH] Git 2.28 no longer permits diff with ... on unrelated
+ branches
+
+Backport #12364
+
+Signed-off-by: Andrew Thornton <art27@cantab.net>
+---
+ modules/git/commit.go | 9 +++++----
+ modules/git/repo_commit.go | 26 ++++++++++++++++++++++++--
+ modules/git/repo_compare.go | 28 +++++++++++++++++++++++-----
+ routers/private/hook.go | 2 ++
+ 4 files changed, 54 insertions(+), 11 deletions(-)
+
+diff --git a/modules/git/commit.go b/modules/git/commit.go
+index 5e492e27eac..5ba8c2c8afa 100644
+--- a/modules/git/commit.go
++++ b/modules/git/commit.go
+@@ -271,11 +271,12 @@ func AllCommitsCount(repoPath string) (int64, error) {
+ return strconv.ParseInt(strings.TrimSpace(stdout), 10, 64)
+ }
+
+-func commitsCount(repoPath, revision, relpath string) (int64, error) {
++func commitsCount(repoPath string, revision, relpath []string) (int64, error) {
+ cmd := NewCommand("rev-list", "--count")
+- cmd.AddArguments(revision)
++ cmd.AddArguments(revision...)
+ if len(relpath) > 0 {
+- cmd.AddArguments("--", relpath)
++ cmd.AddArguments("--")
++ cmd.AddArguments(relpath...)
+ }
+
+ stdout, err := cmd.RunInDir(repoPath)
+@@ -288,7 +289,7 @@ func commitsCount(repoPath, revision, relpath string) (int64, error) {
+
+ // CommitsCount returns number of total commits of until given revision.
+ func CommitsCount(repoPath, revision string) (int64, error) {
+- return commitsCount(repoPath, revision, "")
++ return commitsCount(repoPath, []string{revision}, []string{})
+ }
+
+ // CommitsCount returns number of total commits of until current revision.
+diff --git a/modules/git/repo_commit.go b/modules/git/repo_commit.go
+index 18c732c6f2d..bab3d8852c0 100644
+--- a/modules/git/repo_commit.go
++++ b/modules/git/repo_commit.go
+@@ -293,7 +293,7 @@ func (repo *Repository) FileChangedBetweenCommits(filename, id1, id2 string) (bo
+
+ // FileCommitsCount return the number of files at a revison
+ func (repo *Repository) FileCommitsCount(revision, file string) (int64, error) {
+- return commitsCount(repo.Path, revision, file)
++ return commitsCount(repo.Path, []string{revision}, []string{file})
+ }
+
+ // CommitsByFileAndRange return the commits according revison file and the page
+@@ -319,6 +319,11 @@ func (repo *Repository) CommitsByFileAndRangeNoFollow(revision, file string, pag
+ // FilesCountBetween return the number of files changed between two commits
+ func (repo *Repository) FilesCountBetween(startCommitID, endCommitID string) (int, error) {
+ stdout, err := NewCommand("diff", "--name-only", startCommitID+"..."+endCommitID).RunInDir(repo.Path)
++ if err != nil && strings.Contains(err.Error(), "no merge base") {
++ // git >= 2.28 now returns an error if startCommitID and endCommitID have become unrelated.
++ // previously it would return the results of git diff --name-only startCommitID endCommitID so let's try that...
++ stdout, err = NewCommand("diff", "--name-only", startCommitID, endCommitID).RunInDir(repo.Path)
++ }
+ if err != nil {
+ return 0, err
+ }
+@@ -333,6 +338,11 @@ func (repo *Repository) CommitsBetween(last *Commit, before *Commit) (*list.List
+ stdout, err = NewCommand("rev-list", last.ID.String()).RunInDirBytes(repo.Path)
+ } else {
+ stdout, err = NewCommand("rev-list", before.ID.String()+"..."+last.ID.String()).RunInDirBytes(repo.Path)
++ if err != nil && strings.Contains(err.Error(), "no merge base") {
++ // future versions of git >= 2.28 are likely to return an error if before and last have become unrelated.
++ // previously it would return the results of git rev-list before last so let's try that...
++ stdout, err = NewCommand("rev-list", before.ID.String(), last.ID.String()).RunInDirBytes(repo.Path)
++ }
+ }
+ if err != nil {
+ return nil, err
+@@ -348,6 +358,11 @@ func (repo *Repository) CommitsBetweenLimit(last *Commit, before *Commit, limit,
+ stdout, err = NewCommand("rev-list", "--max-count", strconv.Itoa(limit), "--skip", strconv.Itoa(skip), last.ID.String()).RunInDirBytes(repo.Path)
+ } else {
+ stdout, err = NewCommand("rev-list", "--max-count", strconv.Itoa(limit), "--skip", strconv.Itoa(skip), before.ID.String()+"..."+last.ID.String()).RunInDirBytes(repo.Path)
++ if err != nil && strings.Contains(err.Error(), "no merge base") {
++ // future versions of git >= 2.28 are likely to return an error if before and last have become unrelated.
++ // previously it would return the results of git rev-list --max-count n before last so let's try that...
++ stdout, err = NewCommand("rev-list", "--max-count", strconv.Itoa(limit), "--skip", strconv.Itoa(skip), before.ID.String(), last.ID.String()).RunInDirBytes(repo.Path)
++ }
+ }
+ if err != nil {
+ return nil, err
+@@ -373,7 +388,14 @@ func (repo *Repository) CommitsBetweenIDs(last, before string) (*list.List, erro
+
+ // CommitsCountBetween return numbers of commits between two commits
+ func (repo *Repository) CommitsCountBetween(start, end string) (int64, error) {
+- return commitsCount(repo.Path, start+"..."+end, "")
++ count, err := commitsCount(repo.Path, []string{start + "..." + end}, []string{})
++ if err != nil && strings.Contains(err.Error(), "no merge base") {
++ // future versions of git >= 2.28 are likely to return an error if before and last have become unrelated.
++ // previously it would return the results of git rev-list before last so let's try that...
++ return commitsCount(repo.Path, []string{start, end}, []string{})
++ }
++
++ return count, err
+ }
+
+ // commitsBefore the limit is depth, not total number of returned commits.
+diff --git a/modules/git/repo_compare.go b/modules/git/repo_compare.go
+index 5bc7f9ca5a6..16ea068db23 100644
+--- a/modules/git/repo_compare.go
++++ b/modules/git/repo_compare.go
+@@ -6,6 +6,7 @@
+ package git
+
+ import (
++ "bytes"
+ "container/list"
+ "fmt"
+ "io"
+@@ -66,7 +67,7 @@ func (repo *Repository) GetCompareInfo(basePath, baseBranch, headBranch string)
+ compareInfo := new(CompareInfo)
+ compareInfo.MergeBase, remoteBranch, err = repo.GetMergeBase(tmpRemote, baseBranch, headBranch)
+ if err == nil {
+- // We have a common base
++ // We have a common base - therefore we know that ... should work
+ logs, err := NewCommand("log", compareInfo.MergeBase+"..."+headBranch, prettyLogFormat).RunInDirBytes(repo.Path)
+ if err != nil {
+ return nil, err
+@@ -85,6 +86,11 @@ func (repo *Repository) GetCompareInfo(basePath, baseBranch, headBranch string)
+
+ // Count number of changed files.
+ stdout, err := NewCommand("diff", "--name-only", remoteBranch+"..."+headBranch).RunInDir(repo.Path)
++ if err != nil && strings.Contains(err.Error(), "no merge base") {
++ // git >= 2.28 now returns an error if base and head have become unrelated.
++ // previously it would return the results of git diff --name-only base head so let's try that...
++ stdout, err = NewCommand("diff", "--name-only", remoteBranch, headBranch).RunInDir(repo.Path)
++ }
+ if err != nil {
+ return nil, err
+ }
+@@ -108,12 +114,24 @@ func (repo *Repository) GetDiff(base, head string, w io.Writer) error {
+
+ // GetPatch generates and returns format-patch data between given revisions.
+ func (repo *Repository) GetPatch(base, head string, w io.Writer) error {
+- return NewCommand("format-patch", "--binary", "--stdout", base+"..."+head).
+- RunInDirPipeline(repo.Path, w, nil)
++ stderr := new(bytes.Buffer)
++ err := NewCommand("format-patch", "--binary", "--stdout", base+"..."+head).
++ RunInDirPipeline(repo.Path, w, stderr)
++ if err != nil && bytes.Contains(stderr.Bytes(), []byte("no merge base")) {
++ return NewCommand("format-patch", "--binary", "--stdout", base, head).
++ RunInDirPipeline(repo.Path, w, nil)
++ }
++ return err
+ }
+
+ // GetDiffFromMergeBase generates and return patch data from merge base to head
+ func (repo *Repository) GetDiffFromMergeBase(base, head string, w io.Writer) error {
+- return NewCommand("diff", "-p", "--binary", base+"..."+head).
+- RunInDirPipeline(repo.Path, w, nil)
++ stderr := new(bytes.Buffer)
++ err := NewCommand("diff", "-p", "--binary", base+"..."+head).
++ RunInDirPipeline(repo.Path, w, stderr)
++ if err != nil && bytes.Contains(stderr.Bytes(), []byte("no merge base")) {
++ return NewCommand("diff", "-p", "--binary", base, head).
++ RunInDirPipeline(repo.Path, w, nil)
++ }
++ return err
+ }
+diff --git a/routers/private/hook.go b/routers/private/hook.go
+index 4b57aff588f..215793c9709 100644
+--- a/routers/private/hook.go
++++ b/routers/private/hook.go
+@@ -39,6 +39,7 @@ func verifyCommits(oldCommitID, newCommitID string, repo *git.Repository, env []
+ _ = stdoutWriter.Close()
+ }()
+
++ // This is safe as force pushes are already forbidden
+ err = git.NewCommand("rev-list", oldCommitID+"..."+newCommitID).
+ RunInDirTimeoutEnvFullPipelineFunc(env, -1, repo.Path,
+ stdoutWriter, nil, nil,
+@@ -70,6 +71,7 @@ func checkFileProtection(oldCommitID, newCommitID string, patterns []glob.Glob,
+ _ = stdoutWriter.Close()
+ }()
+
++ // This use of ... is safe as force-pushes have already been ruled out.
+ err = git.NewCommand("diff", "--name-only", oldCommitID+"..."+newCommitID).
+ RunInDirTimeoutEnvFullPipelineFunc(env, -1, repo.Path,
+ stdoutWriter, nil, nil,
diff --git a/community/gitea/APKBUILD b/community/gitea/APKBUILD
index cb06ae61e6e..20a199ea768 100644
--- a/community/gitea/APKBUILD
+++ b/community/gitea/APKBUILD
@@ -2,7 +2,7 @@
# Contributor: 6543 <6543@obermui.de>
# Maintainer: 6543 <6543@obermui.de>
pkgname=gitea
-pkgver=1.12.2
+pkgver=1.12.3
pkgrel=1
pkgdesc="A self-hosted Git service written in Go"
url="https://gitea.io"
@@ -19,6 +19,7 @@ subpackages="$pkgname-openrc"
source="$pkgname-$pkgver.tar.gz::https://github.com/go-gitea/gitea/archive/v$pkgver.tar.gz
$pkgname.initd
$pkgname.ini
+ 0001-support-git-2.28-12370.patch
"
builddir="$srcdir/src/code.gitea.io/$pkgname"
@@ -78,6 +79,7 @@ package() {
"$pkgdir"/etc/init.d/$pkgname
}
-sha512sums="38c368b91f2b91592ebd103c0b12412bc9f174982c4b601c980c0eb63a4f24fa7680f3fee73ff6127482337e3e053dafc21d29e1e38c7b672e982f8d561e5ced gitea-1.12.2.tar.gz
+sha512sums="c79d1a3146bb3ed05a1f0ce37ecf7ca04320c9b9b16c2929d0dde9fde5eac3c09e860194be31f10cce91d94d58dd33917a814e3e5ce688185c11f29abc323523 gitea-1.12.3.tar.gz
+3ae1969fc10fa2fc7323af74ce966d6e52b36f077cdccba1f46aec7213986d5fa0e139819029f09255ab38d79033bf115a0eeb15225574047c02407eeb6a3bb8 0001-support-git-2.28-12370.patch
2497e6f2a18e3ceb65352cd220eab2c1c0893d0e731600462a60397de2b70d7c1de7db2af2769b25fe708b0822c811bb20dc797b59b9dd93efb376bea1c35796 gitea.initd
431184faffa8996873d92d7b0d16bc4b1a0178d264cd2928d1f49b13ad3e6470d9ede7a18c12112deeeb38f0647ccc0b012e98bcbd96e7b8496a3dc18f5b1fb7 gitea.ini"