summaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2017-10-14 22:37:43 +0800
committerGitHub <noreply@github.com>2017-10-14 22:37:43 +0800
commit514006a2e5a33074fba5ac2deab9ab91cf5713a2 (patch)
tree0c86143623d35607428061c216e32fd48879c3f1 /models
parenta4cd4616c6f8524f8eb79d6184e855b3a8164130 (diff)
downloadgitea-514006a2e5a33074fba5ac2deab9ab91cf5713a2.tar.gz
gitea-514006a2e5a33074fba5ac2deab9ab91cf5713a2.zip
Fix orgnization user watch repository (#2670)
* remove orgnization watch repositories * fix migration * fix typo and missing change * remove unused code
Diffstat (limited to 'models')
-rw-r--r--models/migrations/migrations.go2
-rw-r--r--models/migrations/v46.go36
-rw-r--r--models/repo.go4
3 files changed, 40 insertions, 2 deletions
diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go
index 014aa2bce1..33678c0d29 100644
--- a/models/migrations/migrations.go
+++ b/models/migrations/migrations.go
@@ -140,6 +140,8 @@ var migrations = []Migration{
NewMigration("remove duplicate unit types", removeDuplicateUnitTypes),
// v45 -> v46
NewMigration("remove index column from repo_unit table", removeIndexColumnFromRepoUnitTable),
+ // v46 -> v47
+ NewMigration("remove organization watch repositories", removeOrganizationWatchRepo),
}
// Migrate database to current version
diff --git a/models/migrations/v46.go b/models/migrations/v46.go
new file mode 100644
index 0000000000..3cc35a300f
--- /dev/null
+++ b/models/migrations/v46.go
@@ -0,0 +1,36 @@
+// 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 migrations
+
+import (
+ "github.com/go-xorm/xorm"
+)
+
+func removeOrganizationWatchRepo(x *xorm.Engine) error {
+ // UserType defines the user type
+ type UserType int
+
+ const (
+ // UserTypeIndividual defines an individual user
+ UserTypeIndividual UserType = iota // Historic reason to make it starts at 0.
+
+ // UserTypeOrganization defines an organization
+ UserTypeOrganization
+ )
+
+ sess := x.NewSession()
+ defer sess.Close()
+ if err := sess.Begin(); err != nil {
+ return err
+ }
+ if _, err := sess.Exec("DELETE FROM watch WHERE id IN (SELECT watch.id FROM watch INNER JOIN user ON watch.user_id = user.id WHERE `user`.`type` = ?)", UserTypeOrganization); err != nil {
+ return err
+ }
+ if _, err := sess.Exec("UPDATE `repository` SET num_watches = (SELECT count(*) FROM watch WHERE `repository`.`id` = watch.repo_id)"); err != nil {
+ return err
+ }
+
+ return sess.Commit()
+}
diff --git a/models/repo.go b/models/repo.go
index f457bdb222..740bbe8da9 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -1295,7 +1295,7 @@ func createRepository(e *xorm.Session, doer, u *User, repo *Repository) (err err
}
}
- if err = watchRepo(e, u.ID, repo.ID, true); err != nil {
+ if err = watchRepo(e, doer.ID, repo.ID, true); err != nil {
return fmt.Errorf("watchRepo: %v", err)
} else if err = newRepoAction(e, u, repo); err != nil {
return fmt.Errorf("newRepoAction: %v", err)
@@ -1480,7 +1480,7 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error
return fmt.Errorf("decrease old owner repository count: %v", err)
}
- if err = watchRepo(sess, newOwner.ID, repo.ID, true); err != nil {
+ if err = watchRepo(sess, doer.ID, repo.ID, true); err != nil {
return fmt.Errorf("watchRepo: %v", err)
} else if err = transferRepoAction(sess, doer, owner, repo); err != nil {
return fmt.Errorf("transferRepoAction: %v", err)