@@ -169,30 +169,30 @@ func resourceGitlabBranchProtectionRead(ctx context.Context, d *schema.ResourceD
169
169
d .Set ("project" , project )
170
170
d .Set ("branch" , pb .Name )
171
171
172
- pushAccessLevels := convertAllowedAccessLevelsToBranchAccessDescriptions (pb .PushAccessLevels )
173
- if len (pushAccessLevels ) > 0 {
174
- if err := d .Set ("push_access_level" , pushAccessLevels [0 ].AccessLevel ); err != nil {
172
+ if pushAccessLevel , err := firstValidAccessLevel (pb .PushAccessLevels ); err == nil {
173
+ if err := d .Set ("push_access_level" , accessLevelValueToName [* pushAccessLevel ]); err != nil {
175
174
return diag .Errorf ("error setting push_access_level: %v" , err )
176
175
}
176
+ } else {
177
+ return diag .Errorf ("unable to get push_access_level: %v" , err )
177
178
}
178
179
179
- mergeAccessLevels := convertAllowedAccessLevelsToBranchAccessDescriptions (pb .MergeAccessLevels )
180
- if len (mergeAccessLevels ) > 0 {
181
- if err := d .Set ("merge_access_level" , mergeAccessLevels [0 ].AccessLevel ); err != nil {
180
+ if mergeAccessLevels , err := firstValidAccessLevel (pb .MergeAccessLevels ); err == nil {
181
+ if err := d .Set ("merge_access_level" , accessLevelValueToName [* mergeAccessLevels ]); err != nil {
182
182
return diag .Errorf ("error setting merge_access_level: %v" , err )
183
183
}
184
+ } else {
185
+ return diag .Errorf ("unable to get merge_access_level: %v" , err )
184
186
}
185
187
186
188
if err := d .Set ("allow_force_push" , pb .AllowForcePush ); err != nil {
187
189
return diag .Errorf ("error setting allow_force_push: %v" , err )
188
190
}
189
191
190
- // lintignore: R004 // TODO: Resolve this tfproviderlint issue
191
- if err := d .Set ("allowed_to_push" , convertAllowedToToBranchAccessDescriptions (pb .PushAccessLevels )); err != nil {
192
+ if err := d .Set ("allowed_to_push" , flattenNonZeroBranchAccessDescriptions (pb .PushAccessLevels )); err != nil {
192
193
return diag .Errorf ("error setting allowed_to_push: %v" , err )
193
194
}
194
- // lintignore: R004 // TODO: Resolve this tfproviderlint issue
195
- if err := d .Set ("allowed_to_merge" , convertAllowedToToBranchAccessDescriptions (pb .MergeAccessLevels )); err != nil {
195
+ if err := d .Set ("allowed_to_merge" , flattenNonZeroBranchAccessDescriptions (pb .MergeAccessLevels )); err != nil {
196
196
return diag .Errorf ("error setting allowed_to_merge: %v" , err )
197
197
}
198
198
@@ -284,36 +284,31 @@ func schemaAllowedTo() *schema.Schema {
284
284
}
285
285
}
286
286
287
- func convertAllowedAccessLevelsToBranchAccessDescriptions (descriptions []* gitlab.BranchAccessDescription ) []stateBranchAccessDescription {
288
- result := make ([]stateBranchAccessDescription , 0 )
289
-
287
+ func firstValidAccessLevel (descriptions []* gitlab.BranchAccessDescription ) (* gitlab.AccessLevelValue , error ) {
290
288
for _ , description := range descriptions {
291
289
if description .UserID != 0 || description .GroupID != 0 {
292
290
continue
293
291
}
294
- result = append (result , stateBranchAccessDescription {
295
- AccessLevel : accessLevelValueToName [description .AccessLevel ],
296
- AccessLevelDescription : description .AccessLevelDescription ,
297
- })
292
+ return & description .AccessLevel , nil
298
293
}
299
294
300
- return result
295
+ return nil , fmt . Errorf ( "no valid access level found" )
301
296
}
302
297
303
- func convertAllowedToToBranchAccessDescriptions ( descriptions [] * gitlab. BranchAccessDescription ) [] stateBranchAccessDescription {
304
- result := make ([] stateBranchAccessDescription , 0 )
305
-
298
+ // flattenNonZeroBranchAccessDescriptions flattens the list of branch access descriptions for the tf state.
299
+ // only descriptions with non-zero user id and group id are included in the tf state.
300
+ func flattenNonZeroBranchAccessDescriptions ( descriptions [] * gitlab. BranchAccessDescription ) ( values [] map [ string ] interface {}) {
306
301
for _ , description := range descriptions {
307
302
if description .UserID == 0 && description .GroupID == 0 {
308
303
continue
309
304
}
310
- result = append (result , stateBranchAccessDescription {
311
- AccessLevel : accessLevelValueToName [description .AccessLevel ],
312
- AccessLevelDescription : description .AccessLevelDescription ,
313
- UserID : description .UserID ,
314
- GroupID : description .GroupID ,
305
+ values = append (values , map [ string ] interface {} {
306
+ "access_level" : accessLevelValueToName [description .AccessLevel ],
307
+ "access_level_description" : description .AccessLevelDescription ,
308
+ "user_id" : description .UserID ,
309
+ "group_id" : description .GroupID ,
315
310
})
316
311
}
317
312
318
- return result
313
+ return values
319
314
}
0 commit comments