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  }