diff options
author | Ethan Koenig <ethantkoenig@gmail.com> | 2018-02-20 04:50:42 -0800 |
---|---|---|
committer | Bo-Yi Wu <appleboy.tw@gmail.com> | 2018-02-20 20:50:42 +0800 |
commit | 7b104f0cd03cf3df2b10f6f447857fe389654df1 (patch) | |
tree | cb8517fa34a6a7e18bc275f97f6541aa0783ba13 /modules/util | |
parent | 7b297808cee599f5ff58b9f6afa64d3ee980998e (diff) | |
download | gitea-7b104f0cd03cf3df2b10f6f447857fe389654df1.tar.gz gitea-7b104f0cd03cf3df2b10f6f447857fe389654df1.zip |
Populate URL field of API commits (#3546)
* Populate URL field of API commits
* fix orgmode_test
Diffstat (limited to 'modules/util')
-rw-r--r-- | modules/util/util.go | 21 | ||||
-rw-r--r-- | modules/util/util_test.go | 36 |
2 files changed, 57 insertions, 0 deletions
diff --git a/modules/util/util.go b/modules/util/util.go index e99f951f21..3a0411f64b 100644 --- a/modules/util/util.go +++ b/modules/util/util.go @@ -4,6 +4,13 @@ package util +import ( + "net/url" + "path" + + "code.gitea.io/gitea/modules/log" +) + // OptionalBool a boolean that can be "null" type OptionalBool byte @@ -47,6 +54,20 @@ func Max(a, b int) int { return a } +// URLJoin joins url components, like path.Join, but preserving contents +func URLJoin(base string, elems ...string) string { + u, err := url.Parse(base) + if err != nil { + log.Error(4, "URLJoin: Invalid base URL %s", base) + return "" + } + joinArgs := make([]string, 0, len(elems)+1) + joinArgs = append(joinArgs, u.Path) + joinArgs = append(joinArgs, elems...) + u.Path = path.Join(joinArgs...) + return u.String() +} + // Min min of two ints func Min(a, b int) int { if a > b { diff --git a/modules/util/util_test.go b/modules/util/util_test.go new file mode 100644 index 0000000000..cc5875263a --- /dev/null +++ b/modules/util/util_test.go @@ -0,0 +1,36 @@ +// Copyright 2018 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 util + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestURLJoin(t *testing.T) { + type test struct { + Expected string + Base string + Elements []string + } + newTest := func(expected, base string, elements ...string) test { + return test{Expected: expected, Base: base, Elements: elements} + } + for _, test := range []test{ + newTest("https://try.gitea.io/a/b/c", + "https://try.gitea.io", "a/b", "c"), + newTest("https://try.gitea.io/a/b/c", + "https://try.gitea.io/", "/a/b/", "/c/"), + newTest("https://try.gitea.io/a/c", + "https://try.gitea.io/", "/a/./b/", "../c/"), + newTest("a/b/c", + "a", "b/c/"), + newTest("a/b/d", + "a/", "b/c/", "/../d/"), + } { + assert.Equal(t, test.Expected, URLJoin(test.Base, test.Elements...)) + } +} |