diff --git a/cmd/serv.go b/cmd/serv.go index 51b0b4984..c98228745 100644 --- a/cmd/serv.go +++ b/cmd/serv.go @@ -144,11 +144,15 @@ func runServ(c *cli.Context) error { }() } - isWiki := false - unitType := models.UnitTypeCode + var ( + isWiki bool + unitType = models.UnitTypeCode + unitName = "code" + ) if strings.HasSuffix(reponame, ".wiki") { isWiki = true unitType = models.UnitTypeWiki + unitName = "wiki" reponame = reponame[:len(reponame)-5] } @@ -245,7 +249,7 @@ func runServ(c *cli.Context) error { clientMessage = "You do not have sufficient authorization for this action" } fail(clientMessage, - "User %s does not have level %v access to repository %s", + "User %s does not have level %v access to repository %s's "+unitName, user.Name, requestedMode, repoPath) } @@ -304,7 +308,7 @@ func runServ(c *cli.Context) error { gitcmd = exec.Command(verb, repoPath) } if isWiki { - if err = repo.InitWiki(); err != nil { + if err = private.InitWiki(repo.ID); err != nil { fail("Internal error", "Failed to init wiki repo: %v", err) } } diff --git a/modules/private/wiki.go b/modules/private/wiki.go new file mode 100644 index 000000000..4ad0cc7c4 --- /dev/null +++ b/modules/private/wiki.go @@ -0,0 +1,33 @@ +// 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 private + +import ( + "fmt" + + "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/setting" +) + +// InitWiki initwiki via repo id +func InitWiki(repoID int64) error { + // Ask for running deliver hook and test pull request tasks. + reqURL := setting.LocalURL + fmt.Sprintf("api/internal/repositories/%d/wiki/init", repoID) + log.GitLogger.Trace("InitWiki: %s", reqURL) + + resp, err := newInternalRequest(reqURL, "GET").Response() + if err != nil { + return err + } + + defer resp.Body.Close() + + // All 2XX status codes are accepted and others will return an error + if resp.StatusCode/100 != 2 { + return fmt.Errorf("Failed to init wiki: %s", decodeJSONError(resp).Err) + } + + return nil +} diff --git a/routers/private/internal.go b/routers/private/internal.go index 0221b1fee..ec2281c5c 100644 --- a/routers/private/internal.go +++ b/routers/private/internal.go @@ -82,6 +82,7 @@ func RegisterRoutes(m *macaron.Macaron) { m.Post("/repositories/:repoid/keys/:keyid/update", UpdateDeployKey) m.Get("/repositories/:repoid/user/:userid/checkunituser", CheckUnitUser) m.Get("/repositories/:repoid/has-keys/:keyid", HasDeployKey) + m.Get("/repositories/:repoid/wiki/init", InitWiki) m.Post("/push/update", PushUpdate) m.Get("/protectedbranch/:pbid/:userid", CanUserPush) m.Get("/repo/:owner/:repo", GetRepositoryByOwnerAndName) diff --git a/routers/private/wiki.go b/routers/private/wiki.go new file mode 100644 index 000000000..33bcbaf17 --- /dev/null +++ b/routers/private/wiki.go @@ -0,0 +1,34 @@ +// Copyright 2017 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 private + +import ( + "code.gitea.io/gitea/models" + + macaron "gopkg.in/macaron.v1" +) + +// InitWiki initilizes wiki via repo id +func InitWiki(ctx *macaron.Context) { + repoID := ctx.ParamsInt64("repoid") + + repo, err := models.GetRepositoryByID(repoID) + if err != nil { + ctx.JSON(500, map[string]interface{}{ + "err": err.Error(), + }) + return + } + + err = repo.InitWiki() + if err != nil { + ctx.JSON(500, map[string]interface{}{ + "err": err.Error(), + }) + return + } + + ctx.Status(202) +}