Skip to content

markup: render SHA links without branch prefix #6350

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Sep 29, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
25 changes: 15 additions & 10 deletions internal/db/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down
13 changes: 9 additions & 4 deletions internal/db/repo_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 3 additions & 2 deletions internal/markup/markup.go
Original file line number Diff line number Diff line change
Expand Up @@ -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))
}))
}

Expand All @@ -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
}

Expand Down
38 changes: 38 additions & 0 deletions internal/markup/markup_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)))
})
}
}
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

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:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy