diff options
author | Sijmen Schoon <me@sijmenschoon.nl> | 2020-05-15 00:55:43 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-14 18:55:43 -0400 |
commit | 66a9ef90362db1280808ff74e40c2e670f992fcb (patch) | |
tree | 72b9142052f9923e48796e0d01823e78f3529484 /modules | |
parent | 591ca030f0393addee619c17e61d8b9513e2bb05 (diff) | |
download | gitea-66a9ef90362db1280808ff74e40c2e670f992fcb.tar.gz gitea-66a9ef90362db1280808ff74e40c2e670f992fcb.zip |
Fix ref links in issue overviews for tags (#8742)
* Properly generate ref URLs
Tags used to not generate correct URLs (src/branch/tags/1.0.0 instead of
src/tags/1.0.0).
Also cleans up some code around it with the created helper functions.
* Fix formatting and create migration
* Add copyright head to utils_test
* Use a raw query for the ref migration
* Remove semicolon
* Quote column and table names in migration SQL
* Change || to CONCAT, since MSSQL does not support ||
* Make migration engine aware
* Add missing import
* Move ref EndName and URL to the issue service
* Fix tests
* Add test for commit refs
* Update issue.go
* Use the right command for building JavaScript bundles
* Prepare for merge
* Check for refs/* before prepending in migration
* Update services/issue/issue_test.go
* Update modules/git/utils_test.go
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
Co-authored-by: techknowlogick <matti@mdranta.net>
Diffstat (limited to 'modules')
-rw-r--r-- | modules/git/utils.go | 13 | ||||
-rw-r--r-- | modules/git/utils_test.go | 31 | ||||
-rw-r--r-- | modules/webhook/slack.go | 10 |
3 files changed, 46 insertions, 8 deletions
diff --git a/modules/git/utils.go b/modules/git/utils.go index 2b823366b6..83209924c8 100644 --- a/modules/git/utils.go +++ b/modules/git/utils.go @@ -88,6 +88,19 @@ func RefEndName(refStr string) string { return refStr } +// RefURL returns the absolute URL for a ref in a repository +func RefURL(repoURL, ref string) string { + refName := RefEndName(ref) + switch { + case strings.HasPrefix(ref, BranchPrefix): + return repoURL + "/src/branch/" + refName + case strings.HasPrefix(ref, TagPrefix): + return repoURL + "/src/tag/" + refName + default: + return repoURL + "/src/commit/" + refName + } +} + // SplitRefName splits a full refname to reftype and simple refname func SplitRefName(refStr string) (string, string) { if strings.HasPrefix(refStr, BranchPrefix) { diff --git a/modules/git/utils_test.go b/modules/git/utils_test.go new file mode 100644 index 0000000000..9a2d481b63 --- /dev/null +++ b/modules/git/utils_test.go @@ -0,0 +1,31 @@ +// Copyright 2020 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestRefEndName(t *testing.T) { + // Test branch names (with and without slash). + assert.Equal(t, "foo", RefEndName("refs/heads/foo")) + assert.Equal(t, "feature/foo", RefEndName("refs/heads/feature/foo")) + + // Test tag names (with and without slash). + assert.Equal(t, "foo", RefEndName("refs/tags/foo")) + assert.Equal(t, "release/foo", RefEndName("refs/tags/release/foo")) + + // Test commit hashes. + assert.Equal(t, "c0ffee", RefEndName("c0ffee")) +} + +func TestRefURL(t *testing.T) { + repoURL := "/user/repo" + assert.Equal(t, repoURL+"/src/branch/foo", RefURL(repoURL, "refs/heads/foo")) + assert.Equal(t, repoURL+"/src/tag/foo", RefURL(repoURL, "refs/tags/foo")) + assert.Equal(t, repoURL+"/src/commit/c0ffee", RefURL(repoURL, "c0ffee")) +} diff --git a/modules/webhook/slack.go b/modules/webhook/slack.go index e3715ab00c..1e9413efd6 100644 --- a/modules/webhook/slack.go +++ b/modules/webhook/slack.go @@ -93,15 +93,9 @@ func SlackLinkFormatter(url string, text string) string { // SlackLinkToRef slack-formatter link to a repo ref func SlackLinkToRef(repoURL, ref string) string { + url := git.RefURL(repoURL, ref) refName := git.RefEndName(ref) - switch { - case strings.HasPrefix(ref, git.BranchPrefix): - return SlackLinkFormatter(repoURL+"/src/branch/"+refName, refName) - case strings.HasPrefix(ref, git.TagPrefix): - return SlackLinkFormatter(repoURL+"/src/tag/"+refName, refName) - default: - return SlackLinkFormatter(repoURL+"/src/commit/"+refName, refName) - } + return SlackLinkFormatter(url, refName) } func getSlackCreatePayload(p *api.CreatePayload, slack *SlackMeta) (*SlackPayload, error) { |