]> source.dussan.org Git - gitea.git/commitdiff
Fix bug in removeOrgRepo 839/head
authorEthan Koenig <ethantkoenig@gmail.com>
Sat, 4 Feb 2017 16:00:07 +0000 (11:00 -0500)
committerEthan Koenig <ethantkoenig@gmail.com>
Sat, 4 Feb 2017 16:01:21 +0000 (11:01 -0500)
models/models.go
models/org.go

index 624badda177c9a3292f8c6c53d713aaca493438e..ec93d4c12bfa7edb59801781fe6985322d4d217e 100644 (file)
@@ -30,12 +30,14 @@ import (
 
 // Engine represents a xorm engine or session.
 type Engine interface {
+       Decr(column string, arg ...interface{}) *xorm.Session
        Delete(interface{}) (int64, error)
        Exec(string, ...interface{}) (sql.Result, error)
        Find(interface{}, ...interface{}) error
        Get(interface{}) (bool, error)
        Id(interface{}) *xorm.Session
        In(string, ...interface{}) *xorm.Session
+       Incr(column string, arg ...interface{}) *xorm.Session
        Insert(...interface{}) (int64, error)
        InsertOne(interface{}) (int64, error)
        Iterate(interface{}, xorm.IterFunc) error
index 40f34a4f091bc42aa7d5fc4ee47cd7ec7e492ed0..f68c2b9fcb8af5c778a1fd61dc18b7e89f0dde00 100644 (file)
@@ -526,10 +526,28 @@ func RemoveOrgUser(orgID, userID int64) error {
 }
 
 func removeOrgRepo(e Engine, orgID, repoID int64) error {
-       _, err := e.Delete(&TeamRepo{
+       teamRepos := make([]*TeamRepo, 0, 10)
+       if err := e.Find(&teamRepos, &TeamRepo{OrgID: orgID, RepoID: repoID}); err != nil {
+               return err
+       }
+
+       if len(teamRepos) == 0 {
+               return nil
+       }
+
+       if _, err := e.Delete(&TeamRepo{
                OrgID:  orgID,
                RepoID: repoID,
-       })
+       }); err != nil {
+               return err
+       }
+
+       teamIDs := make([]int64, len(teamRepos))
+       for i, teamRepo := range teamRepos {
+               teamIDs[i] = teamRepo.ID
+       }
+
+       _, err := x.Decr("num_repos").In("id", teamIDs).Update(new(Team))
        return err
 }