summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2018-12-12 02:37:32 +0800
committertechknowlogick <hello@techknowlogick.com>2018-12-11 13:37:32 -0500
commitba75319157f23031cfca55b5a286f86d36065f35 (patch)
tree450a6e1ffd17b89fd00fea664c59cb31f7cbc351
parentccea91652f8d23bd65494f5c04275506118aaa27 (diff)
downloadgitea-ba75319157f23031cfca55b5a286f86d36065f35.tar.gz
gitea-ba75319157f23031cfca55b5a286f86d36065f35.zip
fix clone wiki failed via ssh (#5503)
-rw-r--r--cmd/serv.go12
-rw-r--r--modules/private/wiki.go33
-rw-r--r--routers/private/internal.go1
-rw-r--r--routers/private/wiki.go34
4 files changed, 76 insertions, 4 deletions
diff --git a/cmd/serv.go b/cmd/serv.go
index 51b0b4984b..c98228745d 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 0000000000..4ad0cc7c4e
--- /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 0221b1fee8..ec2281c5c5 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 0000000000..33bcbaf17e
--- /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)
+}