]> source.dussan.org Git - gitea.git/commitdiff
Fix orgnization user watch repository (#2670)
authorLunny Xiao <xiaolunwen@gmail.com>
Sat, 14 Oct 2017 14:37:43 +0000 (22:37 +0800)
committerGitHub <noreply@github.com>
Sat, 14 Oct 2017 14:37:43 +0000 (22:37 +0800)
* remove orgnization watch repositories

* fix migration

* fix typo and missing change

* remove unused code

models/migrations/migrations.go
models/migrations/v46.go [new file with mode: 0644]
models/repo.go

index 014aa2bce1a0c3879ee070ffcc366dce6834126d..33678c0d29d6d0e92b9e0a9882767a32b07f536d 100644 (file)
@@ -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 (file)
index 0000000..3cc35a3
--- /dev/null
@@ -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()
+}
index f457bdb222c0be5a624b73d79b954facd599ddbc..740bbe8da9d44512aa1a87b2ac10466df6bf475d 100644 (file)
@@ -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)