2017-02-21 17:02:10 +02:00
// Copyright 2016 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package models
import (
"fmt"
"strings"
"time"
)
const (
2017-02-27 09:22:15 +08:00
// ProtectedBranchRepoID protected Repo ID
2017-02-21 17:02:10 +02:00
ProtectedBranchRepoID = "GITEA_REPO_ID"
)
// ProtectedBranch struct
type ProtectedBranch struct {
ID int64 ` xorm:"pk autoincr" `
RepoID int64 ` xorm:"UNIQUE(s)" `
BranchName string ` xorm:"UNIQUE(s)" `
CanPush bool
Created time . Time ` xorm:"-" `
CreatedUnix int64
Updated time . Time ` xorm:"-" `
UpdatedUnix int64
}
// BeforeInsert before protected branch insert create and update time
func ( protectBranch * ProtectedBranch ) BeforeInsert ( ) {
protectBranch . CreatedUnix = time . Now ( ) . Unix ( )
protectBranch . UpdatedUnix = protectBranch . CreatedUnix
}
// BeforeUpdate before protected branch update time
func ( protectBranch * ProtectedBranch ) BeforeUpdate ( ) {
protectBranch . UpdatedUnix = time . Now ( ) . Unix ( )
}
// GetProtectedBranchByRepoID getting protected branch by repo ID
func GetProtectedBranchByRepoID ( RepoID int64 ) ( [ ] * ProtectedBranch , error ) {
protectedBranches := make ( [ ] * ProtectedBranch , 0 )
return protectedBranches , x . Where ( "repo_id = ?" , RepoID ) . Desc ( "updated_unix" ) . Find ( & protectedBranches )
}
// GetProtectedBranchBy getting protected branch by ID/Name
func GetProtectedBranchBy ( repoID int64 , BranchName string ) ( * ProtectedBranch , error ) {
rel := & ProtectedBranch { RepoID : repoID , BranchName : strings . ToLower ( BranchName ) }
has , err := x . Get ( rel )
if err != nil {
return nil , err
}
if ! has {
return nil , nil
}
return rel , nil
}
2017-03-14 20:52:01 -04:00
// GetProtectedBranches get all protected branches
2017-02-21 17:02:10 +02:00
func ( repo * Repository ) GetProtectedBranches ( ) ( [ ] * ProtectedBranch , error ) {
protectedBranches := make ( [ ] * ProtectedBranch , 0 )
return protectedBranches , x . Find ( & protectedBranches , & ProtectedBranch { RepoID : repo . ID } )
}
// AddProtectedBranch add protection to branch
func ( repo * Repository ) AddProtectedBranch ( branchName string , canPush bool ) error {
protectedBranch := & ProtectedBranch {
RepoID : repo . ID ,
BranchName : branchName ,
}
has , err := x . Get ( protectedBranch )
if err != nil {
return err
} else if has {
return nil
}
sess := x . NewSession ( )
defer sessionRelease ( sess )
if err = sess . Begin ( ) ; err != nil {
return err
}
protectedBranch . CanPush = canPush
if _ , err = sess . InsertOne ( protectedBranch ) ; err != nil {
return err
}
return sess . Commit ( )
}
// ChangeProtectedBranch access mode sets new access mode for the ProtectedBranch.
func ( repo * Repository ) ChangeProtectedBranch ( id int64 , canPush bool ) error {
ProtectedBranch := & ProtectedBranch {
RepoID : repo . ID ,
ID : id ,
}
has , err := x . Get ( ProtectedBranch )
if err != nil {
return fmt . Errorf ( "get ProtectedBranch: %v" , err )
} else if ! has {
return nil
}
if ProtectedBranch . CanPush == canPush {
return nil
}
ProtectedBranch . CanPush = canPush
sess := x . NewSession ( )
defer sessionRelease ( sess )
if err = sess . Begin ( ) ; err != nil {
return err
}
if _ , err = sess . Id ( ProtectedBranch . ID ) . AllCols ( ) . Update ( ProtectedBranch ) ; err != nil {
return fmt . Errorf ( "update ProtectedBranch: %v" , err )
}
return sess . Commit ( )
}
// DeleteProtectedBranch removes ProtectedBranch relation between the user and repository.
func ( repo * Repository ) DeleteProtectedBranch ( id int64 ) ( err error ) {
protectedBranch := & ProtectedBranch {
RepoID : repo . ID ,
ID : id ,
}
sess := x . NewSession ( )
defer sessionRelease ( sess )
if err = sess . Begin ( ) ; err != nil {
return err
}
if affected , err := sess . Delete ( protectedBranch ) ; err != nil {
return err
} else if affected != 1 {
return fmt . Errorf ( "delete protected branch ID(%v) failed" , id )
}
return sess . Commit ( )
}
// newProtectedBranch insert one queue
func newProtectedBranch ( protectedBranch * ProtectedBranch ) error {
_ , err := x . InsertOne ( protectedBranch )
return err
}
// UpdateProtectedBranch update queue
func UpdateProtectedBranch ( protectedBranch * ProtectedBranch ) error {
_ , err := x . Update ( protectedBranch )
return err
}