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)))
+ })
+ }
+}