]> source.dussan.org Git - gitea.git/commitdiff
Add delete repo
authorUnknown <joe2010xtmf@163.com>
Thu, 13 Mar 2014 06:39:09 +0000 (02:39 -0400)
committerUnknown <joe2010xtmf@163.com>
Thu, 13 Mar 2014 06:39:09 +0000 (02:39 -0400)
gogs.go
models/repo.go
modules/auth/repo.go
routers/repo/repo.go
templates/repo/nav.tmpl
templates/repo/setting.tmpl
templates/repo/toolbar.tmpl
templates/user/dashboard.tmpl
templates/user/setting.tmpl
web.go

diff --git a/gogs.go b/gogs.go
index 6865e1f213a5a8b061d8a52be7de3f421f1e75a2..f1a702ed2237f0cb43b0d821ef2c5d184f7a7480 100644 (file)
--- a/gogs.go
+++ b/gogs.go
@@ -20,7 +20,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.5.0313"
+const APP_VER = "0.0.6.0313"
 
 func init() {
        runtime.GOMAXPROCS(runtime.NumCPU())
index 6387090ed00a0855c25a28720e0dcb815aa7f510..bc6a8f019524ff46b6438e5eba2d786708240964 100644 (file)
@@ -105,7 +105,6 @@ func CreateRepository(user *User, repoName, desc, repoLang, license string, priv
                return nil, err
        }
 
-       // TODO: RemoveAll may fail due to not root access.
        access := Access{
                UserName: user.Name,
                RepoName: repo.Name,
@@ -329,13 +328,21 @@ func RepoPath(userName, repoName string) string {
 }
 
 // DeleteRepository deletes a repository for a user or orgnaztion.
-func DeleteRepository(user *User, reposName string) (err error) {
+func DeleteRepository(userId, repoId int64, userName string) (err error) {
+       repo := &Repository{Id: repoId, OwnerId: userId}
+       has, err := orm.Get(repo)
+       if err != nil {
+               return err
+       } else if !has {
+               return ErrRepoNotExist
+       }
+
        session := orm.NewSession()
-       if _, err = session.Delete(&Repository{OwnerId: user.Id, Name: reposName}); err != nil {
+       if _, err = session.Delete(&Repository{Id: repoId}); err != nil {
                session.Rollback()
                return err
        }
-       if _, err = session.Exec("update user set num_repos = num_repos - 1 where id = ?", user.Id); err != nil {
+       if _, err = session.Exec("update user set num_repos = num_repos - 1 where id = ?", userId); err != nil {
                session.Rollback()
                return err
        }
@@ -343,9 +350,9 @@ func DeleteRepository(user *User, reposName string) (err error) {
                session.Rollback()
                return err
        }
-       if err = os.RemoveAll(RepoPath(user.Name, reposName)); err != nil {
+       if err = os.RemoveAll(RepoPath(userName, repo.Name)); err != nil {
                // TODO: log and delete manully
-               log.Error("delete repo %s/%s failed", user.Name, reposName)
+               log.Error("delete repo %s/%s failed", userName, repo.Name)
                return err
        }
        return nil
index d769664649e28dd57561ae7aa2315755bdca788e..5fe091d62f92973b04afed053e96c066655e9b44 100644 (file)
@@ -56,6 +56,12 @@ func (f *CreateRepoForm) Validate(errors *binding.Errors, req *http.Request, con
        validate(errors, data, f)
 }
 
+type DeleteRepoForm struct {
+       UserId   int64  `form:"userId" binding:"Required"`
+       UserName string `form:"userName" binding:"Required"`
+       RepoId   int64  `form:"repoId" binding:"Required"`
+}
+
 func RepoAssignment(redirect bool) martini.Handler {
        return func(params martini.Params, r render.Render, data base.TmplData, session sessions.Session) {
                // assign false first
index 5769aff7c3a596480e08df0a00d862db132e7f27..a12b45d7b978af54615e93e2345ac3b459c984d2 100644 (file)
@@ -5,9 +5,9 @@
 package repo
 
 import (
-       "net/http"
        "github.com/martini-contrib/render"
        "github.com/martini-contrib/sessions"
+       "net/http"
 
        "github.com/gogits/gogs/models"
        "github.com/gogits/gogs/modules/auth"
@@ -68,7 +68,7 @@ func Create(form auth.CreateRepoForm, req *http.Request, r render.Render, data b
        r.HTML(200, "base/error", data)
 }
 
-func Delete(req *http.Request, r render.Render, data base.TmplData, session sessions.Session) {
+func Delete(form auth.DeleteRepoForm, req *http.Request, r render.Render, data base.TmplData, session sessions.Session) {
        data["Title"] = "Delete repository"
 
        if req.Method == "GET" {
@@ -76,13 +76,14 @@ func Delete(req *http.Request, r render.Render, data base.TmplData, session sess
                return
        }
 
-       u := &models.User{}
-       err := models.DeleteRepository(u, "")
-       if err != nil {
+       if err := models.DeleteRepository(form.UserId, form.RepoId, form.UserName); err != nil {
                data["ErrorMsg"] = err
                log.Error("repo.Delete: %v", err)
                r.HTML(200, "base/error", data)
+               return
        }
+
+       r.Redirect("/", 200)
 }
 
 func List(req *http.Request, r render.Render, data base.TmplData, session sessions.Session) {
index 1e5248889744933749aa998b98f27f64faa620e3..5d60d4610713e63697ec2b25056af3809f1bb6e3 100644 (file)
@@ -26,6 +26,6 @@
                 <button type="button" class="btn btn-default"><i class="fa fa-code-fork"></i>Fork&nbsp;&nbsp;{{.Repository.NumForks}}</button>
             </div>
         </div>
-        <h3><i class="fa fa-book fa-lg"></i><a href="/{{.Owner.Name}}/">{{.Owner.Name}}</a> / {{.Repository.Name}}</h3>
+        <h3><i class="fa fa-book fa-lg"></i><a href="/user/{{.Owner.Name}}">{{.Owner.Name}}</a> / {{.Repository.Name}}</h3>
     </div>
 </div>
\ No newline at end of file
index 262b91a187de885b182ba337f48b50b1b1075c4b..5e0a9f6cb969fed7e605fa98320f75341bd881d5 100644 (file)
@@ -22,8 +22,9 @@
             <p>This action <strong>CANNOT</strong> be undone. This will delete the repository, wiki, issues, and comments permanently. </p>
 
             <form action="/repo/delete" method="post">
-                <input type="hidden" name="reponame" value="{{.Repository.Name}}"/>
-                <input type="hidden" name="username" value="{{.Owner.Name}}"/>
+                <input type="hidden" name="userId" value="{{.Owner.Id}}"/>
+                <input type="hidden" name="userName" value="{{.Owner.Name}}"/>
+                <input type="hidden" name="repoId" value="{{.Repository.Id}}"/>
                 <hr/>
                 <button class="btn btn-danger btn-lg">I understand the consequences, delete this repository</button>
             </form>
index fb2145ab3de5be5b9f3092b8afefa7e691081faa..a409fcbea76ee269c33dfd2649a99c7c407af25a 100644 (file)
@@ -25,7 +25,7 @@
                     </ul>
                     <ul class="nav navbar-nav navbar-right">
                         <li class="dropdown">
-                            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Statics <b class="caret"></b></a>
+                            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Statistic <b class="caret"></b></a>
                             <ul class="dropdown-menu">
                                 <li><a href="#">Graphic</a></li>
                                 <li><a href="#">Pulse</a></li>
index e8fbe296058b268b2334112449e9cff524611345..7768a7ee6d77b52ac6fe7eb35244d44751af9ebc 100644 (file)
@@ -12,6 +12,7 @@
     </div>
 </div>
 <div id="gogs-body" class="container">
+    {{if .HasInfo}}<div class="alert alert-info">{{.InfoMsg}}</div>{{end}}
     <div id="gogs-feed-left" class="col-md-8">
         Website is still in the progress of building...please come back later! <strong>{{.SignedUserName}}</strong> is logged!
     </div>
index 928d359a26a0319715936e06279dbfe835097be3..79de58fe75ab6f113bfc643127011160a4ebe46a 100644 (file)
@@ -7,7 +7,7 @@
             <li class="list-group-item list-group-item-success"><a href="/user/setting">Account Profile</a></li>
             <li class="list-group-item"><a href="#">Emails and Password</a></li>
             <li class="list-group-item"><a href="#">Notifications</a></li>
-            <li class="list-group-item"><a href="/user/setting/ssh/">SSH Keys</a></li>
+            <li class="list-group-item"><a href="/user/setting/ssh">SSH Keys</a></li>
             <li class="list-group-item"><a href="#">Security</a></li>
             <li class="list-group-item"><a href="/user/delete">Delete Account</a></li>
         </ul>
diff --git a/web.go b/web.go
index 6d57f120c9f44a990d5d167635739c0b7d0160d2..475b662b3907fd97f210b2db5c4eaa93533e9898 100644 (file)
--- a/web.go
+++ b/web.go
@@ -69,7 +69,7 @@ func runWeb(*cli.Context) {
        m.Get("/user/:username", auth.SignInRequire(false), user.Profile)
 
        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/delete", auth.SignInRequire(true), binding.Bind(auth.DeleteRepoForm{}), repo.Delete)
        m.Any("/repo/list", auth.SignInRequire(false), repo.List)
 
        m.Get("/:username/:reponame/settings", auth.SignInRequire(false), auth.RepoAssignment(true), repo.Setting)