diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2017-03-01 12:05:45 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-01 12:05:45 +0800 |
commit | 9cb08a3cf5b3e67402edb2a10ff63df2258bc731 (patch) | |
tree | 1f436be289b916759c83669e8fdb37e82bb026e8 /models/repo.go | |
parent | 19bc2b10aeb4b7372f6654aebc2942dc94389fea (diff) | |
download | gitea-9cb08a3cf5b3e67402edb2a10ff63df2258bc731.tar.gz gitea-9cb08a3cf5b3e67402edb2a10ff63df2258bc731.zip |
fix wrong num of user repos because of duplicated click delete button & performance optimization (#1092)
Diffstat (limited to 'models/repo.go')
-rw-r--r-- | models/repo.go | 48 |
1 files changed, 28 insertions, 20 deletions
diff --git a/models/repo.go b/models/repo.go index 578b54f8a7..d72d3d1da2 100644 --- a/models/repo.go +++ b/models/repo.go @@ -1504,14 +1504,6 @@ func UpdateRepositoryUnits(repo *Repository, units []RepoUnit) (err error) { // DeleteRepository deletes a repository for a user or organization. func DeleteRepository(uid, repoID int64) error { - repo := &Repository{ID: repoID, OwnerID: uid} - has, err := x.Get(repo) - if err != nil { - return err - } else if !has { - return ErrRepoNotExist{repoID, uid, ""} - } - // In case is a organization. org, err := GetUserByID(uid) if err != nil { @@ -1529,6 +1521,20 @@ func DeleteRepository(uid, repoID int64) error { return err } + repo := &Repository{ID: repoID, OwnerID: uid} + has, err := sess.Get(repo) + if err != nil { + return err + } else if !has { + return ErrRepoNotExist{repoID, uid, ""} + } + + if cnt, err := sess.Id(repoID).Delete(&Repository{}); err != nil { + return err + } else if cnt != 1 { + return ErrRepoNotExist{repoID, uid, ""} + } + if org.IsOrganization() { for _, t := range org.Teams { if !t.hasRepository(sess, repoID) { @@ -1540,7 +1546,6 @@ func DeleteRepository(uid, repoID int64) error { } if err = deleteBeans(sess, - &Repository{ID: repoID}, &Access{RepoID: repo.ID}, &Action{RepoID: repo.ID}, &Watch{RepoID: repoID}, @@ -1555,24 +1560,27 @@ func DeleteRepository(uid, repoID int64) error { } // Delete comments and attachments. - issues := make([]*Issue, 0, 25) - attachmentPaths := make([]string, 0, len(issues)) + issueIDs := make([]int64, 0, 25) + attachmentPaths := make([]string, 0, len(issueIDs)) if err = sess. + Table("issue"). + Cols("id"). Where("repo_id=?", repoID). - Find(&issues); err != nil { + Find(&issueIDs); err != nil { return err } - for i := range issues { - if _, err = sess.Delete(&Comment{IssueID: issues[i].ID}); err != nil { + + if len(issueIDs) > 0 { + if _, err = sess.In("issue_id", issueIDs).Delete(&Comment{}); err != nil { return err } - if _, err = sess.Delete(&IssueUser{IssueID: issues[i].ID}); err != nil { + if _, err = sess.In("issue_id", issueIDs).Delete(&IssueUser{}); err != nil { return err } attachments := make([]*Attachment, 0, 5) if err = sess. - Where("issue_id=?", issues[i].ID). + In("issue_id=?", issueIDs). Find(&attachments); err != nil { return err } @@ -1580,13 +1588,13 @@ func DeleteRepository(uid, repoID int64) error { attachmentPaths = append(attachmentPaths, attachments[j].LocalPath()) } - if _, err = sess.Delete(&Attachment{IssueID: issues[i].ID}); err != nil { + if _, err = sess.In("issue_id", issueIDs).Delete(&Attachment{}); err != nil { return err } - } - if _, err = sess.Delete(&Issue{RepoID: repoID}); err != nil { - return err + if _, err = sess.Delete(&Issue{RepoID: repoID}); err != nil { + return err + } } if _, err = sess.Where("repo_id = ?", repoID).Delete(new(RepoUnit)); err != nil { |