aboutsummaryrefslogtreecommitdiff
path: root/models/repo_collaboration.go
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2017-02-17 22:17:27 -0500
committerUnknwon <u@gogs.io>2017-02-17 22:17:27 -0500
commit266586e8667705822acd136e4e566b4d19a54d73 (patch)
treecf85016f234203384800293347ee7aa2372d65e1 /models/repo_collaboration.go
parentb481927d5e89eacec1892af7611997b56bed9883 (diff)
repo: assignee can be anyone who has read access (#3739)
Diffstat (limited to 'models/repo_collaboration.go')
-rw-r--r--models/repo_collaboration.go22
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)
}