code.gitea.io/gitea@v1.19.3/modules/repository/collaborator.go (about)

     1  // Copyright 2022 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package repository
     5  
     6  import (
     7  	"context"
     8  
     9  	"code.gitea.io/gitea/models/db"
    10  	"code.gitea.io/gitea/models/perm"
    11  	access_model "code.gitea.io/gitea/models/perm/access"
    12  	repo_model "code.gitea.io/gitea/models/repo"
    13  	user_model "code.gitea.io/gitea/models/user"
    14  )
    15  
    16  func AddCollaborator(ctx context.Context, repo *repo_model.Repository, u *user_model.User) error {
    17  	return db.WithTx(ctx, func(ctx context.Context) error {
    18  		collaboration := &repo_model.Collaboration{
    19  			RepoID: repo.ID,
    20  			UserID: u.ID,
    21  		}
    22  
    23  		has, err := db.GetByBean(ctx, collaboration)
    24  		if err != nil {
    25  			return err
    26  		} else if has {
    27  			return nil
    28  		}
    29  		collaboration.Mode = perm.AccessModeWrite
    30  
    31  		if err = db.Insert(ctx, collaboration); err != nil {
    32  			return err
    33  		}
    34  
    35  		return access_model.RecalculateUserAccess(ctx, repo, u.ID)
    36  	})
    37  }