@@ -90,10 +90,10 @@ pub(crate) struct PingTeamConfig {
90
90
#[ derive( PartialEq , Eq , Debug , serde:: Deserialize ) ]
91
91
#[ serde( deny_unknown_fields) ]
92
92
pub ( crate ) struct AssignConfig {
93
- /// If `true` , then posts a warning comment if the PR is opened against a
93
+ /// If enabled , then posts a warning comment if the PR is opened against a
94
94
/// different branch than the default (usually master or main).
95
95
#[ serde( default ) ]
96
- pub ( crate ) warn_non_default_branch : bool ,
96
+ pub ( crate ) warn_non_default_branch : WarnNonDefaultBranchConfig ,
97
97
/// A URL to include in the welcome message.
98
98
pub ( crate ) contributing_url : Option < String > ,
99
99
/// Ad-hoc groups that can be referred to in `owners`.
@@ -117,6 +117,45 @@ impl AssignConfig {
117
117
}
118
118
}
119
119
120
+ #[ derive( PartialEq , Eq , Debug , serde:: Deserialize ) ]
121
+ #[ serde( deny_unknown_fields) ]
122
+ #[ serde( untagged) ]
123
+ pub ( crate ) enum WarnNonDefaultBranchConfig {
124
+ Simple ( bool ) ,
125
+ Extended {
126
+ enable : bool ,
127
+ /// List of exceptions that have a different default branch
128
+ #[ serde( default ) ]
129
+ exceptions : Vec < WarnNonDefaultBranchException > ,
130
+ } ,
131
+ }
132
+
133
+ #[ derive( PartialEq , Eq , Debug , serde:: Deserialize ) ]
134
+ #[ serde( deny_unknown_fields) ]
135
+ pub ( crate ) struct WarnNonDefaultBranchException {
136
+ /// Substring in the title that match this exception
137
+ pub ( crate ) title : String ,
138
+ /// The actual branch that should be associated with the issue
139
+ pub ( crate ) branch : String ,
140
+ }
141
+
142
+ impl Default for WarnNonDefaultBranchConfig {
143
+ fn default ( ) -> WarnNonDefaultBranchConfig {
144
+ WarnNonDefaultBranchConfig :: Simple ( false )
145
+ }
146
+ }
147
+
148
+ impl WarnNonDefaultBranchConfig {
149
+ pub ( crate ) fn enabled_and_exceptions ( & self ) -> Option < & [ WarnNonDefaultBranchException ] > {
150
+ match self {
151
+ WarnNonDefaultBranchConfig :: Simple ( enable) => enable. then ( || & [ ] as & [ _ ] ) ,
152
+ WarnNonDefaultBranchConfig :: Extended { enable, exceptions } => {
153
+ enable. then ( || exceptions. as_slice ( ) )
154
+ }
155
+ }
156
+ }
157
+ }
158
+
120
159
#[ derive( PartialEq , Eq , Debug , serde:: Deserialize ) ]
121
160
#[ serde( deny_unknown_fields) ]
122
161
pub ( crate ) struct NoMergesConfig {
@@ -501,7 +540,7 @@ mod tests {
501
540
allow_unauthenticated: vec![ "C-*" . into( ) ] ,
502
541
} ) ,
503
542
assign: Some ( AssignConfig {
504
- warn_non_default_branch: false ,
543
+ warn_non_default_branch: WarnNonDefaultBranchConfig :: Simple ( false ) ,
505
544
contributing_url: None ,
506
545
adhoc_groups: HashMap :: new( ) ,
507
546
owners: HashMap :: new( ) ,
@@ -530,4 +569,64 @@ mod tests {
530
569
}
531
570
) ;
532
571
}
572
+
573
+ #[ test]
574
+ fn warn_non_default_branch ( ) {
575
+ let config = r#"
576
+ [assign]
577
+ warn_non_default_branch.enable = true
578
+
579
+ [[assign.warn_non_default_branch.exceptions]]
580
+ title = "[beta"
581
+ branch = "beta"
582
+
583
+ [[assign.warn_non_default_branch.exceptions]]
584
+ title = "[stable"
585
+ branch = "stable"
586
+ "# ;
587
+ let config = toml:: from_str :: < Config > ( & config) . unwrap ( ) ;
588
+ assert_eq ! (
589
+ config,
590
+ Config {
591
+ relabel: None ,
592
+ assign: Some ( AssignConfig {
593
+ warn_non_default_branch: WarnNonDefaultBranchConfig :: Extended {
594
+ enable: true ,
595
+ exceptions: vec![
596
+ WarnNonDefaultBranchException {
597
+ title: "[beta" . to_string( ) ,
598
+ branch: "beta" . to_string( )
599
+ } ,
600
+ WarnNonDefaultBranchException {
601
+ title: "[stable" . to_string( ) ,
602
+ branch: "stable" . to_string( )
603
+ } ,
604
+ ] ,
605
+ } ,
606
+ contributing_url: None ,
607
+ adhoc_groups: HashMap :: new( ) ,
608
+ owners: HashMap :: new( ) ,
609
+ users_on_vacation: HashSet :: new( ) ,
610
+ } ) ,
611
+ note: None ,
612
+ ping: None ,
613
+ nominate: None ,
614
+ shortcut: None ,
615
+ prioritize: None ,
616
+ major_change: None ,
617
+ glacier: None ,
618
+ close: None ,
619
+ autolabel: None ,
620
+ notify_zulip: None ,
621
+ github_releases: None ,
622
+ review_submitted: None ,
623
+ review_requested: None ,
624
+ mentions: None ,
625
+ no_merges: None ,
626
+ validate_config: Some ( ValidateConfig { } ) ,
627
+ pr_tracking: None ,
628
+ transfer: None ,
629
+ }
630
+ ) ;
631
+ }
533
632
}
0 commit comments