* Populate URL field of API commits * fix orgmode_testtags/v1.21.12.1
| @@ -15,8 +15,8 @@ import ( | |||
| "strings" | |||
| "code.gitea.io/gitea/modules/base" | |||
| "code.gitea.io/gitea/modules/log" | |||
| "code.gitea.io/gitea/modules/setting" | |||
| "code.gitea.io/gitea/modules/util" | |||
| "github.com/Unknwon/com" | |||
| "golang.org/x/net/html" | |||
| @@ -112,20 +112,6 @@ func cutoutVerbosePrefix(prefix string) string { | |||
| return prefix | |||
| } | |||
| // 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() | |||
| } | |||
| // RenderIssueIndexPatternOptions options for RenderIssueIndexPattern function | |||
| type RenderIssueIndexPatternOptions struct { | |||
| // url to which non-special formatting should be linked. If empty, | |||
| @@ -177,7 +163,7 @@ func RenderIssueIndexPattern(rawBytes []byte, opts RenderIssueIndexPatternOption | |||
| } | |||
| if opts.Metas == nil { | |||
| buf.WriteString(`<a href="`) | |||
| buf.WriteString(URLJoin( | |||
| buf.WriteString(util.URLJoin( | |||
| opts.URLPrefix, "issues", string(remainder[startIndex+1:endIndex]))) | |||
| buf.WriteString(`">`) | |||
| buf.Write(remainder[startIndex:endIndex]) | |||
| @@ -228,7 +214,7 @@ func renderFullSha1Pattern(rawBytes []byte, urlPrefix string) []byte { | |||
| path := protocol + "://" + paths | |||
| author := string(m[3]) | |||
| repoName := string(m[4]) | |||
| path = URLJoin(path, author, repoName) | |||
| path = util.URLJoin(path, author, repoName) | |||
| ltype := "src" | |||
| itemType := m[5] | |||
| if IsSameDomain(paths) { | |||
| @@ -260,7 +246,7 @@ func renderFullSha1Pattern(rawBytes []byte, urlPrefix string) []byte { | |||
| text += ")" | |||
| } | |||
| rawBytes = bytes.Replace(rawBytes, all, []byte(fmt.Sprintf( | |||
| `<a href="%s">%s</a>`, URLJoin(path, ltype, string(sha))+urlSuffix, text)), -1) | |||
| `<a href="%s">%s</a>`, util.URLJoin(path, ltype, string(sha))+urlSuffix, text)), -1) | |||
| } | |||
| return rawBytes | |||
| } | |||
| @@ -399,9 +385,9 @@ func RenderShortLinks(rawBytes []byte, urlPrefix string, noLink bool, isWikiMark | |||
| urlPrefix = strings.Replace(urlPrefix, "/src/", "/raw/", 1) | |||
| } | |||
| if isWikiMarkdown { | |||
| link = URLJoin("wiki", "raw", link) | |||
| link = util.URLJoin("wiki", "raw", link) | |||
| } | |||
| link = URLJoin(urlPrefix, link) | |||
| link = util.URLJoin(urlPrefix, link) | |||
| } | |||
| title := props["title"] | |||
| if title == "" { | |||
| @@ -420,9 +406,9 @@ func RenderShortLinks(rawBytes []byte, urlPrefix string, noLink bool, isWikiMark | |||
| name = fmt.Sprintf(`<img src="%s" %s title="%s" />`, link, alt, title) | |||
| } else if !absoluteLink { | |||
| if isWikiMarkdown { | |||
| link = URLJoin("wiki", link) | |||
| link = util.URLJoin("wiki", link) | |||
| } | |||
| link = URLJoin(urlPrefix, link) | |||
| link = util.URLJoin(urlPrefix, link) | |||
| } | |||
| if noLink { | |||
| rawBytes = bytes.Replace(rawBytes, orig, []byte(name), -1) | |||
| @@ -445,7 +431,7 @@ func RenderCrossReferenceIssueIndexPattern(rawBytes []byte, urlPrefix string, me | |||
| repo := string(bytes.Split(m, []byte("#"))[0]) | |||
| issue := string(bytes.Split(m, []byte("#"))[1]) | |||
| link := fmt.Sprintf(`<a href="%s">%s</a>`, URLJoin(setting.AppURL, repo, "issues", issue), m) | |||
| link := fmt.Sprintf(`<a href="%s">%s</a>`, util.URLJoin(setting.AppURL, repo, "issues", issue), m) | |||
| rawBytes = bytes.Replace(rawBytes, m, []byte(link), 1) | |||
| } | |||
| return rawBytes | |||
| @@ -463,7 +449,7 @@ func renderSha1CurrentPattern(rawBytes []byte, urlPrefix string) []byte { | |||
| // Although unlikely, deadbeef and 1234567 are valid short forms of SHA1 hash | |||
| // as used by git and github for linking and thus we have to do similar. | |||
| rawBytes = bytes.Replace(rawBytes, hash, []byte(fmt.Sprintf( | |||
| `<a href="%s">%s</a>`, URLJoin(urlPrefix, "commit", string(hash)), base.ShortSha(string(hash)))), -1) | |||
| `<a href="%s">%s</a>`, util.URLJoin(urlPrefix, "commit", string(hash)), base.ShortSha(string(hash)))), -1) | |||
| } | |||
| return rawBytes | |||
| } | |||
| @@ -474,7 +460,7 @@ func RenderSpecialLink(rawBytes []byte, urlPrefix string, metas map[string]strin | |||
| for _, m := range ms { | |||
| m = m[bytes.Index(m, []byte("@")):] | |||
| rawBytes = bytes.Replace(rawBytes, m, | |||
| []byte(fmt.Sprintf(`<a href="%s">%s</a>`, URLJoin(setting.AppURL, string(m[1:])), m)), -1) | |||
| []byte(fmt.Sprintf(`<a href="%s">%s</a>`, util.URLJoin(setting.AppURL, string(m[1:])), m)), -1) | |||
| } | |||
| rawBytes = RenderFullIssuePattern(rawBytes) | |||
| @@ -13,6 +13,7 @@ import ( | |||
| . "code.gitea.io/gitea/modules/markup" | |||
| _ "code.gitea.io/gitea/modules/markup/markdown" | |||
| "code.gitea.io/gitea/modules/setting" | |||
| "code.gitea.io/gitea/modules/util" | |||
| "github.com/stretchr/testify/assert" | |||
| ) | |||
| @@ -37,12 +38,12 @@ var alphanumericMetas = map[string]string{ | |||
| // numericLink an HTML to a numeric-style issue | |||
| func numericIssueLink(baseURL string, index int) string { | |||
| return link(URLJoin(baseURL, strconv.Itoa(index)), fmt.Sprintf("#%d", index)) | |||
| return link(util.URLJoin(baseURL, strconv.Itoa(index)), fmt.Sprintf("#%d", index)) | |||
| } | |||
| // alphanumLink an HTML link to an alphanumeric-style issue | |||
| func alphanumIssueLink(baseURL string, name string) string { | |||
| return link(URLJoin(baseURL, name), name) | |||
| return link(util.URLJoin(baseURL, name), name) | |||
| } | |||
| // urlContentsLink an HTML link whose contents is the target URL | |||
| @@ -63,31 +64,6 @@ func testRenderIssueIndexPattern(t *testing.T, input, expected string, opts Rend | |||
| assert.Equal(t, expected, actual) | |||
| } | |||
| 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...)) | |||
| } | |||
| } | |||
| func TestRender_IssueIndexPattern(t *testing.T) { | |||
| // numeric: render inputs without valid mentions | |||
| test := func(s string) { | |||
| @@ -123,7 +99,7 @@ func TestRender_IssueIndexPattern2(t *testing.T) { | |||
| test := func(s, expectedFmt string, indices ...int) { | |||
| links := make([]interface{}, len(indices)) | |||
| for i, index := range indices { | |||
| links[i] = numericIssueLink(URLJoin(setting.AppSubURL, "issues"), index) | |||
| links[i] = numericIssueLink(util.URLJoin(setting.AppSubURL, "issues"), index) | |||
| } | |||
| expectedNil := fmt.Sprintf(expectedFmt, links...) | |||
| testRenderIssueIndexPattern(t, s, expectedNil, RenderIssueIndexPatternOptions{}) | |||
| @@ -228,8 +204,8 @@ func TestRender_AutoLink(t *testing.T) { | |||
| } | |||
| // render valid issue URLs | |||
| test(URLJoin(setting.AppSubURL, "issues", "3333"), | |||
| numericIssueLink(URLJoin(setting.AppSubURL, "issues"), 3333)) | |||
| test(util.URLJoin(setting.AppSubURL, "issues", "3333"), | |||
| numericIssueLink(util.URLJoin(setting.AppSubURL, "issues"), 3333)) | |||
| // render external issue URLs | |||
| for _, externalURL := range []string{ | |||
| @@ -240,7 +216,7 @@ func TestRender_AutoLink(t *testing.T) { | |||
| } | |||
| // render valid commit URLs | |||
| tmp := URLJoin(AppSubURL, "commit", "d8a994ef243349f321568f9e36d5c3f444b99cae") | |||
| tmp := util.URLJoin(AppSubURL, "commit", "d8a994ef243349f321568f9e36d5c3f444b99cae") | |||
| test(tmp, "<a href=\""+tmp+"\">d8a994ef24</a>") | |||
| tmp += "#diff-2" | |||
| test(tmp, "<a href=\""+tmp+"\">d8a994ef24 (diff-2)</a>") | |||
| @@ -260,8 +236,8 @@ func TestRender_Commits(t *testing.T) { | |||
| } | |||
| var sha = "b6dd6210eaebc915fd5be5579c58cce4da2e2579" | |||
| var commit = URLJoin(AppSubURL, "commit", sha) | |||
| var subtree = URLJoin(commit, "src") | |||
| var commit = util.URLJoin(AppSubURL, "commit", sha) | |||
| var subtree = util.URLJoin(commit, "src") | |||
| var tree = strings.Replace(subtree, "/commit/", "/tree/", -1) | |||
| var src = strings.Replace(subtree, "/commit/", "/src/", -1) | |||
| @@ -284,10 +260,10 @@ func TestRender_CrossReferences(t *testing.T) { | |||
| test( | |||
| "gogits/gogs#12345", | |||
| `<p><a href="`+URLJoin(AppURL, "gogits", "gogs", "issues", "12345")+`" rel="nofollow">gogits/gogs#12345</a></p>`) | |||
| `<p><a href="`+util.URLJoin(AppURL, "gogits", "gogs", "issues", "12345")+`" rel="nofollow">gogits/gogs#12345</a></p>`) | |||
| test( | |||
| "go-gitea/gitea#12345", | |||
| `<p><a href="`+URLJoin(AppURL, "go-gitea", "gitea", "issues", "12345")+`" rel="nofollow">go-gitea/gitea#12345</a></p>`) | |||
| `<p><a href="`+util.URLJoin(AppURL, "go-gitea", "gitea", "issues", "12345")+`" rel="nofollow">go-gitea/gitea#12345</a></p>`) | |||
| } | |||
| func TestRender_FullIssueURLs(t *testing.T) { | |||
| @@ -482,7 +458,7 @@ func TestMisc_IsSameDomain(t *testing.T) { | |||
| setting.AppSubURL = AppSubURL | |||
| var sha = "b6dd6210eaebc915fd5be5579c58cce4da2e2579" | |||
| var commit = URLJoin(AppSubURL, "commit", sha) | |||
| var commit = util.URLJoin(AppSubURL, "commit", sha) | |||
| assert.True(t, IsSameDomain(commit)) | |||
| assert.False(t, IsSameDomain("http://google.com/ncr")) | |||
| @@ -10,6 +10,7 @@ import ( | |||
| "code.gitea.io/gitea/modules/markup" | |||
| "code.gitea.io/gitea/modules/setting" | |||
| "code.gitea.io/gitea/modules/util" | |||
| "github.com/russross/blackfriday" | |||
| ) | |||
| @@ -27,9 +28,9 @@ func (r *Renderer) Link(out *bytes.Buffer, link []byte, title []byte, content [] | |||
| if link[0] != '#' { | |||
| lnk := string(link) | |||
| if r.IsWiki { | |||
| lnk = markup.URLJoin("wiki", lnk) | |||
| lnk = util.URLJoin("wiki", lnk) | |||
| } | |||
| mLink := markup.URLJoin(r.URLPrefix, lnk) | |||
| mLink := util.URLJoin(r.URLPrefix, lnk) | |||
| link = []byte(mLink) | |||
| } | |||
| } | |||
| @@ -97,7 +98,7 @@ var ( | |||
| func (r *Renderer) Image(out *bytes.Buffer, link []byte, title []byte, alt []byte) { | |||
| prefix := r.URLPrefix | |||
| if r.IsWiki { | |||
| prefix = markup.URLJoin(prefix, "wiki", "src") | |||
| prefix = util.URLJoin(prefix, "wiki", "src") | |||
| } | |||
| prefix = strings.Replace(prefix, "/src/", "/raw/", 1) | |||
| if len(link) > 0 { | |||
| @@ -110,7 +111,7 @@ func (r *Renderer) Image(out *bytes.Buffer, link []byte, title []byte, alt []byt | |||
| } | |||
| } else { | |||
| lnk := string(link) | |||
| lnk = markup.URLJoin(prefix, lnk) | |||
| lnk = util.URLJoin(prefix, lnk) | |||
| lnk = strings.Replace(lnk, " ", "+", -1) | |||
| link = []byte(lnk) | |||
| } | |||
| @@ -11,6 +11,7 @@ import ( | |||
| "code.gitea.io/gitea/modules/markup" | |||
| . "code.gitea.io/gitea/modules/markup/markdown" | |||
| "code.gitea.io/gitea/modules/setting" | |||
| "code.gitea.io/gitea/modules/util" | |||
| "github.com/stretchr/testify/assert" | |||
| ) | |||
| @@ -33,8 +34,8 @@ func TestRender_StandardLinks(t *testing.T) { | |||
| googleRendered := `<p><a href="https://google.com/" rel="nofollow">https://google.com/</a></p>` | |||
| test("<https://google.com/>", googleRendered, googleRendered) | |||
| lnk := markup.URLJoin(AppSubURL, "WikiPage") | |||
| lnkWiki := markup.URLJoin(AppSubURL, "wiki", "WikiPage") | |||
| lnk := util.URLJoin(AppSubURL, "WikiPage") | |||
| lnkWiki := util.URLJoin(AppSubURL, "wiki", "WikiPage") | |||
| test("[WikiPage](WikiPage)", | |||
| `<p><a href="`+lnk+`" rel="nofollow">WikiPage</a></p>`, | |||
| `<p><a href="`+lnkWiki+`" rel="nofollow">WikiPage</a></p>`) | |||
| @@ -43,7 +44,7 @@ func TestRender_StandardLinks(t *testing.T) { | |||
| func TestRender_ShortLinks(t *testing.T) { | |||
| setting.AppURL = AppURL | |||
| setting.AppSubURL = AppSubURL | |||
| tree := markup.URLJoin(AppSubURL, "src", "master") | |||
| tree := util.URLJoin(AppSubURL, "src", "master") | |||
| test := func(input, expected, expectedWiki string) { | |||
| buffer := RenderString(input, tree, nil) | |||
| @@ -52,13 +53,13 @@ func TestRender_ShortLinks(t *testing.T) { | |||
| assert.Equal(t, strings.TrimSpace(expectedWiki), strings.TrimSpace(string(buffer))) | |||
| } | |||
| rawtree := markup.URLJoin(AppSubURL, "raw", "master") | |||
| url := markup.URLJoin(tree, "Link") | |||
| otherUrl := markup.URLJoin(tree, "OtherLink") | |||
| imgurl := markup.URLJoin(rawtree, "Link.jpg") | |||
| urlWiki := markup.URLJoin(AppSubURL, "wiki", "Link") | |||
| otherUrlWiki := markup.URLJoin(AppSubURL, "wiki", "OtherLink") | |||
| imgurlWiki := markup.URLJoin(AppSubURL, "wiki", "raw", "Link.jpg") | |||
| rawtree := util.URLJoin(AppSubURL, "raw", "master") | |||
| url := util.URLJoin(tree, "Link") | |||
| otherUrl := util.URLJoin(tree, "OtherLink") | |||
| imgurl := util.URLJoin(rawtree, "Link.jpg") | |||
| urlWiki := util.URLJoin(AppSubURL, "wiki", "Link") | |||
| otherUrlWiki := util.URLJoin(AppSubURL, "wiki", "OtherLink") | |||
| imgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "Link.jpg") | |||
| favicon := "http://google.com/favicon.ico" | |||
| test( | |||
| @@ -136,7 +137,7 @@ func TestRender_Images(t *testing.T) { | |||
| url := "../../.images/src/02/train.jpg" | |||
| title := "Train" | |||
| result := markup.URLJoin(AppSubURL, url) | |||
| result := util.URLJoin(AppSubURL, url) | |||
| test( | |||
| "", | |||
| @@ -259,7 +260,7 @@ Here are some links to the most important topics. You can find the full list of | |||
| } | |||
| func TestTotal_RenderWiki(t *testing.T) { | |||
| answers := testAnswers(markup.URLJoin(AppSubURL, "wiki/"), markup.URLJoin(AppSubURL, "wiki", "raw/")) | |||
| answers := testAnswers(util.URLJoin(AppSubURL, "wiki/"), util.URLJoin(AppSubURL, "wiki", "raw/")) | |||
| for i := 0; i < len(sameCases); i++ { | |||
| line := RenderWiki([]byte(sameCases[i]), AppSubURL, nil) | |||
| @@ -286,10 +287,10 @@ func TestTotal_RenderWiki(t *testing.T) { | |||
| } | |||
| func TestTotal_RenderString(t *testing.T) { | |||
| answers := testAnswers(markup.URLJoin(AppSubURL, "src", "master/"), markup.URLJoin(AppSubURL, "raw", "master/")) | |||
| answers := testAnswers(util.URLJoin(AppSubURL, "src", "master/"), util.URLJoin(AppSubURL, "raw", "master/")) | |||
| for i := 0; i < len(sameCases); i++ { | |||
| line := RenderString(sameCases[i], markup.URLJoin(AppSubURL, "src", "master/"), nil) | |||
| line := RenderString(sameCases[i], util.URLJoin(AppSubURL, "src", "master/"), nil) | |||
| assert.Equal(t, answers[i], line) | |||
| } | |||
| @@ -8,8 +8,8 @@ import ( | |||
| "strings" | |||
| "testing" | |||
| "code.gitea.io/gitea/modules/markup" | |||
| "code.gitea.io/gitea/modules/setting" | |||
| "code.gitea.io/gitea/modules/util" | |||
| "github.com/stretchr/testify/assert" | |||
| ) | |||
| @@ -30,7 +30,7 @@ func TestRender_StandardLinks(t *testing.T) { | |||
| googleRendered := `<p><a href="https://google.com/" title="https://google.com/">https://google.com/</a></p>` | |||
| test("[[https://google.com/]]", googleRendered) | |||
| lnk := markup.URLJoin(AppSubURL, "WikiPage") | |||
| lnk := util.URLJoin(AppSubURL, "WikiPage") | |||
| test("[[WikiPage][WikiPage]]", | |||
| `<p><a href="`+lnk+`" title="WikiPage">WikiPage</a></p>`) | |||
| } | |||
| @@ -46,7 +46,7 @@ func TestRender_Images(t *testing.T) { | |||
| url := "../../.images/src/02/train.jpg" | |||
| title := "Train" | |||
| result := markup.URLJoin(AppSubURL, url) | |||
| result := util.URLJoin(AppSubURL, url) | |||
| test( | |||
| "[[file:"+url+"]["+title+"]]", | |||
| @@ -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 { | |||
| @@ -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...)) | |||
| } | |||
| } | |||
| @@ -13,6 +13,8 @@ import ( | |||
| "code.gitea.io/git" | |||
| "code.gitea.io/gitea/models" | |||
| "code.gitea.io/gitea/modules/log" | |||
| "code.gitea.io/gitea/modules/util" | |||
| ) | |||
| // ToEmail convert models.EmailAddress to api.Email | |||
| @@ -25,35 +27,40 @@ func ToEmail(email *models.EmailAddress) *api.Email { | |||
| } | |||
| // ToBranch convert a commit and branch to an api.Branch | |||
| func ToBranch(b *models.Branch, c *git.Commit) *api.Branch { | |||
| func ToBranch(repo *models.Repository, b *models.Branch, c *git.Commit) *api.Branch { | |||
| return &api.Branch{ | |||
| Name: b.Name, | |||
| Commit: ToCommit(c), | |||
| Commit: ToCommit(repo, c), | |||
| } | |||
| } | |||
| // ToCommit convert a commit to api.PayloadCommit | |||
| func ToCommit(c *git.Commit) *api.PayloadCommit { | |||
| func ToCommit(repo *models.Repository, c *git.Commit) *api.PayloadCommit { | |||
| authorUsername := "" | |||
| author, err := models.GetUserByEmail(c.Author.Email) | |||
| if err == nil { | |||
| if author, err := models.GetUserByEmail(c.Author.Email); err == nil { | |||
| authorUsername = author.Name | |||
| } else if !models.IsErrUserNotExist(err) { | |||
| log.Error(4, "GetUserByEmail: %v", err) | |||
| } | |||
| committerUsername := "" | |||
| committer, err := models.GetUserByEmail(c.Committer.Email) | |||
| if err == nil { | |||
| if committer, err := models.GetUserByEmail(c.Committer.Email); err == nil { | |||
| committerUsername = committer.Name | |||
| } else if !models.IsErrUserNotExist(err) { | |||
| log.Error(4, "GetUserByEmail: %v", err) | |||
| } | |||
| verif := models.ParseCommitWithSignature(c) | |||
| var signature, payload string | |||
| if c.Signature != nil { | |||
| signature = c.Signature.Signature | |||
| payload = c.Signature.Payload | |||
| } | |||
| return &api.PayloadCommit{ | |||
| ID: c.ID.String(), | |||
| Message: c.Message(), | |||
| URL: "Not implemented", | |||
| URL: util.URLJoin(repo.Link(), "commit", c.ID.String()), | |||
| Author: &api.PayloadUser{ | |||
| Name: c.Author.Name, | |||
| Email: c.Author.Email, | |||
| @@ -8,9 +8,9 @@ import ( | |||
| api "code.gitea.io/sdk/gitea" | |||
| "code.gitea.io/gitea/modules/context" | |||
| "code.gitea.io/gitea/modules/markup" | |||
| "code.gitea.io/gitea/modules/markup/markdown" | |||
| "code.gitea.io/gitea/modules/setting" | |||
| "code.gitea.io/gitea/modules/util" | |||
| ) | |||
| // Markdown render markdown document to HTML | |||
| @@ -45,7 +45,7 @@ func Markdown(ctx *context.APIContext, form api.MarkdownOption) { | |||
| switch form.Mode { | |||
| case "gfm": | |||
| md := []byte(form.Text) | |||
| context := markup.URLJoin(setting.AppURL, form.Context) | |||
| context := util.URLJoin(setting.AppURL, form.Context) | |||
| if form.Wiki { | |||
| ctx.Write([]byte(markdown.RenderWiki(md, context, nil))) | |||
| } else { | |||
| @@ -9,8 +9,8 @@ import ( | |||
| "testing" | |||
| "code.gitea.io/gitea/modules/context" | |||
| "code.gitea.io/gitea/modules/markup" | |||
| "code.gitea.io/gitea/modules/setting" | |||
| "code.gitea.io/gitea/modules/util" | |||
| api "code.gitea.io/sdk/gitea" | |||
| "github.com/go-macaron/inject" | |||
| @@ -53,7 +53,7 @@ func TestAPI_RenderGFM(t *testing.T) { | |||
| Context: Repo, | |||
| Wiki: true, | |||
| } | |||
| requrl, _ := url.Parse(markup.URLJoin(AppURL, "api", "v1", "markdown")) | |||
| requrl, _ := url.Parse(util.URLJoin(AppURL, "api", "v1", "markdown")) | |||
| req := &http.Request{ | |||
| Method: "POST", | |||
| URL: requrl, | |||
| @@ -147,7 +147,7 @@ func TestAPI_RenderSimple(t *testing.T) { | |||
| Text: "", | |||
| Context: Repo, | |||
| } | |||
| requrl, _ := url.Parse(markup.URLJoin(AppURL, "api", "v1", "markdown")) | |||
| requrl, _ := url.Parse(util.URLJoin(AppURL, "api", "v1", "markdown")) | |||
| req := &http.Request{ | |||
| Method: "POST", | |||
| URL: requrl, | |||
| @@ -166,7 +166,7 @@ func TestAPI_RenderSimple(t *testing.T) { | |||
| func TestAPI_RenderRaw(t *testing.T) { | |||
| setting.AppURL = AppURL | |||
| requrl, _ := url.Parse(markup.URLJoin(AppURL, "api", "v1", "markdown")) | |||
| requrl, _ := url.Parse(util.URLJoin(AppURL, "api", "v1", "markdown")) | |||
| req := &http.Request{ | |||
| Method: "POST", | |||
| URL: requrl, | |||
| @@ -61,7 +61,7 @@ func GetBranch(ctx *context.APIContext) { | |||
| return | |||
| } | |||
| ctx.JSON(200, convert.ToBranch(branch, c)) | |||
| ctx.JSON(200, convert.ToBranch(ctx.Repo.Repository, branch, c)) | |||
| } | |||
| // ListBranches list all the branches of a repository | |||
| @@ -98,7 +98,7 @@ func ListBranches(ctx *context.APIContext) { | |||
| ctx.Error(500, "GetCommit", err) | |||
| return | |||
| } | |||
| apiBranches[i] = convert.ToBranch(branches[i], c) | |||
| apiBranches[i] = convert.ToBranch(ctx.Repo.Repository, branches[i], c) | |||
| } | |||
| ctx.JSON(200, &apiBranches) | |||