You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
3.7 KiB
165 lines
3.7 KiB
package model |
|
|
|
import ( |
|
"reflect" |
|
"regexp" |
|
) |
|
|
|
// reids锁 |
|
const ( |
|
SagaTask = "_SagaTask_%d" |
|
SagaRepoLockKey = "_SagaRepoLockKey_%d" |
|
SagaLockValue = "_SagaLockValue" |
|
) |
|
|
|
// gitlab指令 |
|
const ( |
|
SagaCommandPlusOne = "+ok" |
|
SagaCommandMerge = "+mr" |
|
SagaCommandPlusOne1 = "+1" |
|
SagaCommandMerge1 = "+merge" |
|
) |
|
|
|
// 任务状态 |
|
const ( |
|
TaskStatusFailed = 1 // 任务失败 |
|
TaskStatusSuccess = 2 // 任务成功 |
|
TaskStatusRunning = 3 // 任务运行中 |
|
TaskStatusWaiting = 4 // 任务等待 |
|
) |
|
|
|
// CONTRIBUTORS define |
|
const ( |
|
SagaContributorsName = "CONTRIBUTORS.md" |
|
) |
|
|
|
// RepoConfig def |
|
type RepoConfig struct { |
|
URL string |
|
Group string |
|
Name string |
|
GName string // gitlab仓库别名 |
|
Language string |
|
AuthBranches []string // 鉴权分支 |
|
TargetBranches []string // 分支白名单 |
|
TargetBranchRegexes []*regexp.Regexp |
|
LockTimeout int32 |
|
MinReviewer int |
|
RelatePipeline bool |
|
DelayMerge bool |
|
LimitAuth bool |
|
AllowLabel string |
|
SuperAuthUsers []string |
|
} |
|
|
|
// RequireReviewFolder ... |
|
type RequireReviewFolder struct { |
|
Folder string |
|
Owners []string |
|
Reviewers []string |
|
} |
|
|
|
// AuthUsers ... |
|
type AuthUsers struct { |
|
Owners []string |
|
Reviewers []string |
|
} |
|
|
|
// ContactInfo def |
|
type ContactInfo struct { |
|
ID string `json:"id,omitempty" gorm:"column:id"` |
|
UserName string `json:"english_name" gorm:"column:user_name"` |
|
UserID string `json:"userid" gorm:"column:user_id"` |
|
NickName string `json:"name" gorm:"column:nick_name"` |
|
VisibleSaga bool `json:"visible_saga" gorm:"column:visible_saga"` |
|
} |
|
|
|
// RequireVisibleUser def |
|
type RequireVisibleUser struct { |
|
UserName string |
|
NickName string |
|
} |
|
|
|
// AlmostEqual return the compare result with fields |
|
func (contact *ContactInfo) AlmostEqual(other *ContactInfo) bool { |
|
if contact.UserID == other.UserID && |
|
contact.UserName == other.UserName && |
|
contact.NickName == other.NickName { |
|
return true |
|
} |
|
return false |
|
} |
|
|
|
// TaskInfo ... |
|
type TaskInfo struct { |
|
NoteID int |
|
Event *HookComment |
|
Repo *Repo |
|
} |
|
|
|
// MergeInfo ... |
|
type MergeInfo struct { |
|
PipelineID int |
|
NoteID int |
|
AuthorID int |
|
UserName string |
|
MRIID int |
|
ProjID int |
|
URL string |
|
AuthBranches []string |
|
SourceBranch string |
|
TargetBranch string |
|
MinReviewer int |
|
LockTimeout int32 |
|
Title string |
|
Description string |
|
} |
|
|
|
// Repo structure |
|
type Repo struct { |
|
Config *RepoConfig |
|
} |
|
|
|
// Update if config is changed |
|
func (r *Repo) Update(conf *RepoConfig) bool { |
|
if r.confEqual(conf) { |
|
return false |
|
} |
|
r.Config = conf |
|
return true |
|
} |
|
|
|
func (r *Repo) confEqual(conf *RepoConfig) bool { |
|
if r.Config.URL == conf.URL && |
|
r.Config.Group == conf.Group && |
|
r.Config.Name == conf.Name && |
|
r.Config.GName == conf.GName && |
|
r.Config.Language == conf.Language && |
|
reflect.DeepEqual(r.Config.AuthBranches, conf.AuthBranches) && |
|
reflect.DeepEqual(r.Config.TargetBranches, conf.TargetBranches) && |
|
r.Config.LockTimeout == conf.LockTimeout && |
|
r.Config.MinReviewer == conf.MinReviewer && |
|
r.Config.RelatePipeline == conf.RelatePipeline && |
|
r.Config.DelayMerge == conf.DelayMerge && |
|
r.Config.LimitAuth == conf.LimitAuth && |
|
r.Config.AllowLabel == conf.AllowLabel && |
|
reflect.DeepEqual(r.Config.SuperAuthUsers, conf.SuperAuthUsers) { |
|
return true |
|
} |
|
return false |
|
} |
|
|
|
// AuthUpdate ... |
|
func (r *Repo) AuthUpdate(conf *RepoConfig) bool { |
|
if r.Config.Group == conf.Group && |
|
r.Config.Name == conf.Name && |
|
reflect.DeepEqual(r.Config.AuthBranches, conf.AuthBranches) { |
|
return false |
|
} |
|
return true |
|
} |
|
|
|
// WebHookUpdate ... |
|
func (r *Repo) WebHookUpdate(conf *RepoConfig) bool { |
|
return r.Config.URL != conf.URL |
|
}
|
|
|