diff --git a/CHANGELOG.md b/CHANGELOG.md
index 00bfc299dcd..d1b61a95d13 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 2a887c7ffa2..31ea9ac668b 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 f689f05db38..ad920be72e2 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 65b14865701..ad9d7fa13fe 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 911a597c07e..df6213e6d1d 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)))
+ })
+ }
+}
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: