code.gitea.io/gitea@v1.22.3/services/repository/collaboration.go (about) 1 // Copyright 2016 The Gogs Authors. All rights reserved. 2 // Copyright 2020 The Gitea Authors. 3 // SPDX-License-Identifier: MIT 4 5 package repository 6 7 import ( 8 "context" 9 10 "code.gitea.io/gitea/models" 11 "code.gitea.io/gitea/models/db" 12 access_model "code.gitea.io/gitea/models/perm/access" 13 repo_model "code.gitea.io/gitea/models/repo" 14 user_model "code.gitea.io/gitea/models/user" 15 ) 16 17 // DeleteCollaboration removes collaboration relation between the user and repository. 18 func DeleteCollaboration(ctx context.Context, repo *repo_model.Repository, collaborator *user_model.User) (err error) { 19 collaboration := &repo_model.Collaboration{ 20 RepoID: repo.ID, 21 UserID: collaborator.ID, 22 } 23 24 ctx, committer, err := db.TxContext(ctx) 25 if err != nil { 26 return err 27 } 28 defer committer.Close() 29 30 if has, err := db.GetEngine(ctx).Delete(collaboration); err != nil { 31 return err 32 } else if has == 0 { 33 return committer.Commit() 34 } 35 36 if err := repo.LoadOwner(ctx); err != nil { 37 return err 38 } 39 40 if err = access_model.RecalculateAccesses(ctx, repo); err != nil { 41 return err 42 } 43 44 if err = repo_model.WatchRepo(ctx, collaborator, repo, false); err != nil { 45 return err 46 } 47 48 if err = models.ReconsiderWatches(ctx, repo, collaborator); err != nil { 49 return err 50 } 51 52 // Unassign a user from any issue (s)he has been assigned to in the repository 53 if err := models.ReconsiderRepoIssuesAssignee(ctx, repo, collaborator); err != nil { 54 return err 55 } 56 57 return committer.Commit() 58 }