]> source.dussan.org Git - gitea.git/commitdiff
Update repo.Create
authorUnknown <joe2010xtmf@163.com>
Sun, 9 Mar 2014 02:25:38 +0000 (21:25 -0500)
committerUnknown <joe2010xtmf@163.com>
Sun, 9 Mar 2014 02:25:38 +0000 (21:25 -0500)
gogs.go
modules/auth/form.go
modules/auth/repo.go [new file with mode: 0644]
routers/repo/repo.go
routers/user/user.go
templates/repo/create.tmpl
templates/repo/created.tmpl
web.go

diff --git a/gogs.go b/gogs.go
index 552a4db27296c687b19ad155563d6fc94b48f3d1..1e689e83b57adb81ea7b6a0175230224e313408a 100644 (file)
--- a/gogs.go
+++ b/gogs.go
@@ -19,7 +19,7 @@ import (
 // Test that go1.1 tag above is included in builds. main.go refers to this definition.
 const go11tag = true
 
-const APP_VER = "0.0.2.0307"
+const APP_VER = "0.0.2.0308"
 
 func init() {
        runtime.GOMAXPROCS(runtime.NumCPU())
index a90f3d85425418622f87f61c6dece606e2248a80..b0855275549fc895f2b33b27009743966423d433 100644 (file)
@@ -17,6 +17,7 @@ import (
        "github.com/gogits/gogs/modules/log"
 )
 
+// Web form interface.
 type Form interface {
        Name(field string) string
 }
diff --git a/modules/auth/repo.go b/modules/auth/repo.go
new file mode 100644 (file)
index 0000000..6656654
--- /dev/null
@@ -0,0 +1,53 @@
+// Copyright 2014 The Gogs 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 auth
+
+import (
+       "net/http"
+       "reflect"
+
+       "github.com/codegangsta/martini"
+
+       "github.com/gogits/binding"
+
+       "github.com/gogits/gogs/modules/base"
+       "github.com/gogits/gogs/modules/log"
+)
+
+type CreateRepoForm struct {
+       UserId      int64  `form:"userId"`
+       RepoName    string `form:"repo" binding:"Required"`
+       Visibility  string `form:"visibility"`
+       Description string `form:"desc" binding:"MaxSize(100)"`
+       Language    string `form:"language"`
+       InitReadme  string `form:"initReadme"`
+}
+
+func (f *CreateRepoForm) Name(field string) string {
+       names := map[string]string{
+               "RepoName":    "Repository name",
+               "Description": "Description",
+       }
+       return names[field]
+}
+
+func (f *CreateRepoForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) {
+       if req.Method == "GET" || errors.Count() == 0 {
+               return
+       }
+
+       data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData)
+       data["HasError"] = true
+       AssignForm(f, data)
+
+       if len(errors.Overall) > 0 {
+               for _, err := range errors.Overall {
+                       log.Error("CreateRepoForm.Validate: %v", err)
+               }
+               return
+       }
+
+       validate(errors, data, f)
+}
index e9ad7d1ab4e87068a3c147e7f9dc7b12fc2bec62..834195d83f4f03e772749b2dda86e96396bc4b04 100644 (file)
@@ -7,7 +7,6 @@ package repo
 import (
        "fmt"
        "net/http"
-       "strconv"
 
        "github.com/martini-contrib/render"
        "github.com/martini-contrib/sessions"
@@ -18,7 +17,7 @@ import (
        "github.com/gogits/gogs/modules/log"
 )
 
-func Create(req *http.Request, r render.Render, data base.TmplData, session sessions.Session) {
+func Create(form auth.CreateRepoForm, req *http.Request, r render.Render, data base.TmplData, session sessions.Session) {
        data["Title"] = "Create repository"
 
        if req.Method == "GET" {
@@ -26,30 +25,37 @@ func Create(req *http.Request, r render.Render, data base.TmplData, session sess
                return
        }
 
+       if hasErr, ok := data["HasError"]; ok && hasErr.(bool) {
+               r.HTML(200, "repo/create", data)
+               return
+       }
+
        // TODO: access check
 
-       id, err := strconv.ParseInt(req.FormValue("userId"), 10, 64)
-       if err == nil {
-               var u *models.User
-               u, err = models.GetUserById(id)
-               if u == nil {
-                       err = models.ErrUserNotExist
-               }
-               if err == nil {
-                       _, err = models.CreateRepository(u, req.FormValue("name"))
+       user, err := models.GetUserById(form.UserId)
+       if err != nil {
+               if err.Error() == models.ErrUserNotExist.Error() {
+                       data["HasError"] = true
+                       data["ErrorMsg"] = "User does not exist"
+                       auth.AssignForm(form, data)
+                       r.HTML(200, "repo/create", data)
+                       return
                }
-               if err == nil {
-                       data["RepoName"] = u.Name + "/" + req.FormValue("name")
+       }
+
+       if err == nil {
+               // TODO: init description and readme
+               if _, err = models.CreateRepository(user, form.RepoName); err == nil {
+                       data["RepoName"] = user.Name + "/" + form.RepoName
                        r.HTML(200, "repo/created", data)
+                       fmt.Println("good!!!!")
                        return
                }
        }
 
-       if err != nil {
-               data["ErrorMsg"] = err
-               log.Error("repo.Create: %v", err)
-               r.HTML(200, "base/error", data)
-       }
+       data["ErrorMsg"] = err
+       log.Error("repo.Create: %v", err)
+       r.HTML(200, "base/error", data)
 }
 
 func Delete(req *http.Request, r render.Render, data base.TmplData, session sessions.Session) {
index a07d79e454c77b44f818c43c3c19a38a98ad1517..51a84400abdb51c3195fd2c2fbbc8a815b963e2d 100644 (file)
@@ -64,8 +64,8 @@ func SignIn(form auth.LogInForm, data base.TmplData, req *http.Request, r render
                }
 
                data["ErrorMsg"] = err
-               log.Error("user.SignIn: %v", data)
-               r.HTML(200, "base/error", nil)
+               log.Error("user.SignIn: %v", err)
+               r.HTML(200, "base/error", data)
                return
        }
 
index 4c7f4dd272ca65dce4fcc9d092f690d382af78a9..e7a363348908af517df01a117666dd9ad701be84 100644 (file)
@@ -3,6 +3,7 @@
 <div class="container" id="gogs-body">
     <form action="/repo/create" method="post" class="form-horizontal gogs-card" id="gogs-repo-create">
         <h3>Create New Repository</h3>
+        <div class="alert alert-danger form-error{{if .HasError}}{{else}} hidden{{end}}">{{.ErrorMsg}}</div>
         <div class="form-group">
             <label class="col-md-2 control-label">Owner<strong class="text-danger">*</strong></label>
             <div class="col-md-8">
             </div>
         </div>
 
-        <div class="form-group">
+        <div class="form-group {{if .Err_RepoName}}has-error has-feedback{{end}}">
             <label class="col-md-2 control-label">Repository<strong class="text-danger">*</strong></label>
             <div class="col-md-8">
-                <input name="repo" type="text" class="form-control" placeholder="Type your repository name" required="required">
+                <input name="repo" type="text" class="form-control" placeholder="Type your repository name" value="{{.repo}}" required="required">
                 <span class="help-block">Great repository names are short and memorable. </span>
             </div>
         </div>
             <label class="col-md-2 control-label">Visibility<strong class="text-danger">*</strong></label>
             <div class="col-md-8">
                 <p class="form-control-static">Public</p>
+                <input type="hidden" value="public" name="visibility"/>
             </div>
         </div>
 
-        <div class="form-group">
+        <div class="form-group {{if .Err_Description}}has-error has-feedback{{end}}">
             <label class="col-md-2 control-label">Description</label>
             <div class="col-md-8">
-                <textarea name="desc" class="form-control" placeholder="Type your repository name"></textarea>
+                <textarea name="desc" class="form-control" placeholder="Type your repository description">{{.desc}}</textarea>
             </div>
         </div>
 
@@ -51,7 +53,7 @@
             <div class="col-md-8 col-md-offset-2">
                 <div class="checkbox">
                     <label>
-                        <input type="checkbox" value="true" name="init-md">
+                        <input type="checkbox" value="" name="initReadme">
                         <strong>Initialize this repository with a README</strong>
                     </label>
                 </div>
index aa47cb3fdcf22eb439ac75b06c7ca64b8e34e28c..35803e3938205741d7dcd7ed2d93b0f95457ad3e 100644 (file)
@@ -1,8 +1,8 @@
 {{template "base/head" .}}
 {{template "base/navbar" .}}
-<div class="container">
-<div class="col-md-offset-4 col-md-3">
-                               Created successfully!
-                       </div>
+<div class="container" id="gogs-body">
+       <div class="col-md-offset-4 col-md-3">
+               Created successfully!
+       </div>
 </div>
 {{template "base/footer" .}}
\ No newline at end of file
diff --git a/web.go b/web.go
index 2b6041b12301159cf8bde532d31f69544a93eea7..1b61ca0e1be2dd82df24f41d890b607058bc986d 100644 (file)
--- a/web.go
+++ b/web.go
@@ -69,7 +69,7 @@ func runWeb(*cli.Context) {
        m.Any("/user/publickey/add", auth.SignInRequire(true), user.AddPublicKey)
        m.Any("/user/publickey/list", auth.SignInRequire(true), user.ListPublicKey)
 
-       m.Any("/repo/create", auth.SignInRequire(true), repo.Create)
+       m.Any("/repo/create", auth.SignInRequire(true), binding.BindIgnErr(auth.CreateRepoForm{}), repo.Create)
        m.Any("/repo/delete", auth.SignInRequire(true), repo.Delete)
        m.Any("/repo/list", auth.SignInRequire(false), repo.List)