diff options
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | internal/db/repo.go | 25 | ||||
-rw-r--r-- | internal/db/repo_test.go | 13 | ||||
-rw-r--r-- | internal/markup/markup.go | 5 | ||||
-rw-r--r-- | internal/markup/markup_test.go | 38 |
5 files changed, 66 insertions, 16 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 00bfc299..d1b61a95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ All notable changes to Gogs are documented in this file. ### Fixed - _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 2a887c7f..31ea9ac6 100644 --- a/internal/db/repo.go +++ b/internal/db/repo.go @@ -429,24 +429,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 f689f05d..ad920be7 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 65b14865..ad9d7fa1 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(`<a href="%s/commit/%s"><code>%s</code></a>`, urlPrefix, m, tool.ShortSHA1(string(m))) + + return fmt.Sprintf(`<a href="%s/commit/%s"><code>%s</code></a>`, 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 911a597c..df6213e6 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: `<a href="/someuser/somerepo/commit/ad8ced4f57d9068cb2874557245be3c7f341149d"><code>ad8ced4f57</code></a>`, + }, + { + desc: "Short SHA (8 symbols)", + input: "ad8ced4f", + prefix: metas["repoLink"], + expVal: `<a href="/someuser/somerepo/commit/ad8ced4f"><code>ad8ced4f</code></a>`, + }, + { + 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))) + }) + } +} |