diff options
author | Unknwon <u@gogs.io> | 2017-02-17 22:17:27 -0500 |
---|---|---|
committer | Unknwon <u@gogs.io> | 2017-02-17 22:17:27 -0500 |
commit | 266586e8667705822acd136e4e566b4d19a54d73 (patch) | |
tree | cf85016f234203384800293347ee7aa2372d65e1 /models/repo_collaboration.go | |
parent | b481927d5e89eacec1892af7611997b56bed9883 (diff) |
repo: assignee can be anyone who has read access (#3739)
Diffstat (limited to 'models/repo_collaboration.go')
-rw-r--r-- | models/repo_collaboration.go | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/models/repo_collaboration.go b/models/repo_collaboration.go index 73ec7ada..889ff4ce 100644 --- a/models/repo_collaboration.go +++ b/models/repo_collaboration.go @@ -126,7 +126,7 @@ func (repo *Repository) GetCollaborators() ([]*Collaborator, error) { } // ChangeCollaborationAccessMode sets new access mode for the collaboration. -func (repo *Repository) ChangeCollaborationAccessMode(uid int64, mode AccessMode) error { +func (repo *Repository) ChangeCollaborationAccessMode(userID int64, mode AccessMode) error { // Discard invalid input if mode <= ACCESS_MODE_NONE || mode > ACCESS_MODE_OWNER { return nil @@ -134,7 +134,7 @@ func (repo *Repository) ChangeCollaborationAccessMode(uid int64, mode AccessMode collaboration := &Collaboration{ RepoID: repo.ID, - UserID: uid, + UserID: userID, } has, err := x.Get(collaboration) if err != nil { @@ -156,7 +156,23 @@ func (repo *Repository) ChangeCollaborationAccessMode(uid int64, mode AccessMode if _, err = sess.Id(collaboration.ID).AllCols().Update(collaboration); err != nil { return fmt.Errorf("update collaboration: %v", err) - } else if _, err = sess.Exec("UPDATE access SET mode = ? WHERE user_id = ? AND repo_id = ?", mode, uid, repo.ID); err != nil { + } + + access := Access{ + UserID: userID, + RepoID: repo.ID, + } + has, err = sess.Get(access) + if err != nil { + return fmt.Errorf("get access record: %v", err) + } + if has { + _, err = sess.Exec("UPDATE access SET mode = ? WHERE user_id = ? AND repo_id = ?", mode, userID, repo.ID) + } else { + access.Mode = mode + _, err = sess.Insert(access) + } + if err != nil { return fmt.Errorf("update access table: %v", err) } |