From e6b4c467e83a959f00e9244ef359ea3c8359ca5c Mon Sep 17 00:00:00 2001 From: Jeff Date: Tue, 29 Sep 2020 23:07:16 +0800 Subject: [PATCH] markup: render SHA links without branch prefix (#6350) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Zhukov Roman Co-authored-by: ᴜɴᴋɴᴡᴏɴ --- CHANGELOG.md | 1 + internal/db/repo.go | 25 +++++++++++++--------- internal/db/repo_test.go | 13 ++++++++---- internal/markup/markup.go | 5 +++-- internal/markup/markup_test.go | 38 ++++++++++++++++++++++++++++++++++ 5 files changed, 66 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5d77b8ad..88f8a26ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ All notable changes to Gogs are documented in this file. - Backup can be processed when `--target` is specified on Windows. [#6339](https://github.com/gogs/gogs/issues/6339) - Commit message contains keywords look like an issue reference no longer fails the push entirely. [#6289](https://github.com/gogs/gogs/issues/6289) - _Regression:_ When running Gogs on Windows, push commits no longer fail on a daily basis with the error "pre-receive hook declined". [#6316](https://github.com/gogs/gogs/issues/6316) +- Auto-linked commit SHAs now have correct links. [#6300](https://github.com/gogs/gogs/issues/6300) ### Removed diff --git a/internal/db/repo.go b/internal/db/repo.go index 9c91d90f2..dcdf47da3 100644 --- a/internal/db/repo.go +++ b/internal/db/repo.go @@ -426,24 +426,29 @@ func (repo *Repository) UpdateSize() error { return nil } -// ComposeMetas composes a map of metas for rendering external issue tracker URL. +// ComposeMetas composes a map of metas for rendering SHA1 URL and external issue tracker URL. func (repo *Repository) ComposeMetas() map[string]string { - if !repo.EnableExternalTracker { - return nil - } else if repo.ExternalMetas == nil { - repo.ExternalMetas = map[string]string{ - "format": repo.ExternalTrackerFormat, - "user": repo.MustOwner().Name, - "repo": repo.Name, - } + if repo.ExternalMetas != nil { + return repo.ExternalMetas + } + + repo.ExternalMetas = map[string]string{ + "repoLink": repo.Link(), + } + + if repo.EnableExternalTracker { + repo.ExternalMetas["user"] = repo.MustOwner().Name + repo.ExternalMetas["repo"] = repo.Name + repo.ExternalMetas["format"] = repo.ExternalTrackerFormat + switch repo.ExternalTrackerStyle { case markup.ISSUE_NAME_STYLE_ALPHANUMERIC: repo.ExternalMetas["style"] = markup.ISSUE_NAME_STYLE_ALPHANUMERIC default: repo.ExternalMetas["style"] = markup.ISSUE_NAME_STYLE_NUMERIC } - } + return repo.ExternalMetas } diff --git a/internal/db/repo_test.go b/internal/db/repo_test.go index f689f05db..ad920be72 100644 --- a/internal/db/repo_test.go +++ b/internal/db/repo_test.go @@ -19,14 +19,19 @@ func TestRepository_ComposeMetas(t *testing.T) { t.Run("no external tracker is configured", func(t *testing.T) { repo.EnableExternalTracker = false - assert.Equal(t, map[string]string(nil), repo.ComposeMetas()) - // Should be nil even if other settings are present - repo.ExternalTrackerStyle = markup.ISSUE_NAME_STYLE_NUMERIC - assert.Equal(t, map[string]string(nil), repo.ComposeMetas()) + metas := repo.ComposeMetas() + assert.Equal(t, metas["repoLink"], repo.Link()) + + // Should no format and style if no external tracker is configured + _, ok := metas["format"] + assert.False(t, ok) + _, ok = metas["style"] + assert.False(t, ok) }) t.Run("an external issue tracker is configured", func(t *testing.T) { + repo.ExternalMetas = nil repo.EnableExternalTracker = true // Default to numeric issue style diff --git a/internal/markup/markup.go b/internal/markup/markup.go index 65b148657..ad9d7fa13 100644 --- a/internal/markup/markup.go +++ b/internal/markup/markup.go @@ -145,7 +145,8 @@ func RenderSha1CurrentPattern(rawBytes []byte, urlPrefix string) []byte { if com.StrTo(m).MustInt() > 0 { return m } - return fmt.Sprintf(`%s`, urlPrefix, m, tool.ShortSHA1(string(m))) + + return fmt.Sprintf(`%s`, urlPrefix, m, tool.ShortSHA1(m)) })) } @@ -160,7 +161,7 @@ func RenderSpecialLink(rawBytes []byte, urlPrefix string, metas map[string]strin rawBytes = RenderIssueIndexPattern(rawBytes, urlPrefix, metas) rawBytes = RenderCrossReferenceIssueIndexPattern(rawBytes, urlPrefix, metas) - rawBytes = RenderSha1CurrentPattern(rawBytes, urlPrefix) + rawBytes = RenderSha1CurrentPattern(rawBytes, metas["repoLink"]) return rawBytes } diff --git a/internal/markup/markup_test.go b/internal/markup/markup_test.go index 911a597c0..df6213e6d 100644 --- a/internal/markup/markup_test.go +++ b/internal/markup/markup_test.go @@ -215,3 +215,41 @@ func Test_RenderIssueIndexPattern(t *testing.T) { }) }) } + +func TestRenderSha1CurrentPattern(t *testing.T) { + metas := map[string]string{ + "repoLink": "/someuser/somerepo", + } + + tests := []struct { + desc string + input string + prefix string + expVal string + }{ + { + desc: "Full SHA (40 symbols)", + input: "ad8ced4f57d9068cb2874557245be3c7f341149d", + prefix: metas["repoLink"], + expVal: `ad8ced4f57`, + }, + { + desc: "Short SHA (8 symbols)", + input: "ad8ced4f", + prefix: metas["repoLink"], + expVal: `ad8ced4f`, + }, + { + desc: "9 digits", + input: "123456789", + prefix: metas["repoLink"], + expVal: "123456789", + }, + } + + for _, test := range tests { + t.Run(test.desc, func(t *testing.T) { + assert.Equal(t, test.expVal, string(RenderSha1CurrentPattern([]byte(test.input), test.prefix))) + }) + } +}