]> source.dussan.org Git - gitea.git/commitdiff
Fix collaboration migration code
authorPeter Smit <peter@smitmail.eu>
Wed, 4 Feb 2015 13:47:40 +0000 (15:47 +0200)
committerPeter Smit <peter@smitmail.eu>
Wed, 4 Feb 2015 14:03:39 +0000 (16:03 +0200)
models/migrations/migrations.go

index 43ec4e50b0fd5c09389b84740df99af1e006c7a4..f0ed10b7aa58675d61e3b131059ccd331da75cf6 100644 (file)
@@ -90,7 +90,7 @@ func accessToCollaboration(x *xorm.Engine) error {
 
        x.Sync(new(Collaboration))
 
-       sql := `SELECT u.id AS uid, a.repo_name AS repo, a.mode AS mode FROM access a JOIN user u ON a.user_name=u.lower_name`
+       sql := `SELECT u.id AS uid, a.repo_name AS repo, a.mode AS mode, a.created as created FROM access a JOIN user u ON a.user_name=u.lower_name`
        results, err := x.Query(sql)
        if err != nil {
                return err
@@ -100,12 +100,14 @@ func accessToCollaboration(x *xorm.Engine) error {
                userID := mustParseInt64(result["uid"])
                repoRefName := string(result["repo"])
                mode := mustParseInt64(result["mode"])
+               created := result["created"]
 
                //Collaborators must have write access
                if mode < 2 {
                        continue
                }
 
+               // find owner of repository
                parts := strings.SplitN(repoRefName, "/", 2)
                ownerName := parts[0]
                repoName := parts[1]
@@ -118,15 +120,24 @@ func accessToCollaboration(x *xorm.Engine) error {
                if len(results) < 1 {
                        continue
                }
+
                ownerID := mustParseInt64(results[0]["uid"])
+               if ownerID == userID {
+                       continue
+               }
 
+               // test if user is member of owning organization
+               isMember := false
                for _, member := range results {
                        memberID := mustParseInt64(member["memberid"])
                        // We can skip all cases that a user is member of the owning organization
                        if memberID == userID {
-                               continue
+                               isMember = true
                        }
                }
+               if isMember {
+                       continue
+               }
 
                sql = `SELECT id FROM repository WHERE owner_id=? AND lower_name=?`
                results, err = x.Query(sql, ownerID, repoName)
@@ -139,8 +150,8 @@ func accessToCollaboration(x *xorm.Engine) error {
 
                repoID := results[0]["id"]
 
-               sql = `INSERT INTO collaboration (user_id, repo_id) VALUES (?,?)`
-               _, err = x.Exec(sql, userID, repoID)
+               sql = `INSERT INTO collaboration (user_id, repo_id, created) VALUES (?,?,?)`
+               _, err = x.Exec(sql, userID, repoID, created)
                if err != nil {
                        return err
                }