@@ -915,75 +915,72 @@ func resourceGitlabProjectDelete(ctx context.Context, d *schema.ResourceData, me
915
915
func editOrAddPushRules (ctx context.Context , client * gitlab.Client , projectID string , d * schema.ResourceData ) error {
916
916
log .Printf ("[DEBUG] Editing push rules for project %q" , projectID )
917
917
918
- editOptions := expandEditProjectPushRuleOptions (d )
919
- _ , _ , err := client .Projects .EditProjectPushRule (projectID , editOptions , gitlab .WithContext (ctx ))
920
- if err == nil {
921
- return nil
922
- }
918
+ pushRules , _ , err := client .Projects .GetProjectPushRules (d .Id (), gitlab .WithContext (ctx ))
919
+ if is404 (err ) || pushRules .ID == 0 {
920
+ log .Printf ("[DEBUG] Creating new push rules for project %q" , projectID )
921
+ addOptions := expandAddProjectPushRuleOptions (d )
922
+ _ , _ , err = client .Projects .AddProjectPushRule (projectID , addOptions , gitlab .WithContext (ctx ))
923
+ if err != nil {
924
+ return err
925
+ }
923
926
924
- var httpErr * gitlab.ErrorResponse
925
- if ! errors .As (err , & httpErr ) || httpErr .Response .StatusCode != http .StatusNotFound {
926
- return err
927
+ return nil
927
928
}
928
929
929
- // A 404 could mean that the push rules need to be re-created.
930
-
931
- log .Printf ("[DEBUG] Failed to edit push rules for project %q: %v" , projectID , err )
932
- log .Printf ("[DEBUG] Creating new push rules for project %q" , projectID )
933
-
934
- addOptions := expandAddProjectPushRuleOptions (d )
935
- _ , _ , err = client .Projects .AddProjectPushRule (projectID , addOptions , gitlab .WithContext (ctx ))
936
- if err != nil {
937
- return err
930
+ editOptions := expandEditProjectPushRuleOptions (d , pushRules )
931
+ log .Printf ("[DEBUG] Editing existing push rules for project %q" , projectID )
932
+ _ , _ , err = client .Projects .EditProjectPushRule (projectID , editOptions , gitlab .WithContext (ctx ))
933
+ if err == nil {
934
+ return nil
938
935
}
939
936
940
937
return nil
941
938
}
942
939
943
- func expandEditProjectPushRuleOptions (d * schema.ResourceData ) * gitlab.EditProjectPushRuleOptions {
940
+ func expandEditProjectPushRuleOptions (d * schema.ResourceData , currentPushRules * gitlab. ProjectPushRules ) * gitlab.EditProjectPushRuleOptions {
944
941
options := & gitlab.EditProjectPushRuleOptions {}
945
942
946
- if d .HasChange ("push_rules.0.author_email_regex" ) {
943
+ if d .HasChange ("push_rules.0.author_email_regex" ) || d . Get ( "push_rules.0.author_email_regex" ) != currentPushRules . AuthorEmailRegex {
947
944
options .AuthorEmailRegex = gitlab .String (d .Get ("push_rules.0.author_email_regex" ).(string ))
948
945
}
949
946
950
- if d .HasChange ("push_rules.0.branch_name_regex" ) {
947
+ if d .HasChange ("push_rules.0.branch_name_regex" ) || d . Get ( "push_rules.0.branch_name_regex" ) != currentPushRules . BranchNameRegex {
951
948
options .BranchNameRegex = gitlab .String (d .Get ("push_rules.0.branch_name_regex" ).(string ))
952
949
}
953
950
954
- if d .HasChange ("push_rules.0.commit_message_regex" ) {
951
+ if d .HasChange ("push_rules.0.commit_message_regex" ) || d . Get ( "push_rules.0.commit_message_regex" ) != currentPushRules . CommitMessageRegex {
955
952
options .CommitMessageRegex = gitlab .String (d .Get ("push_rules.0.commit_message_regex" ).(string ))
956
953
}
957
954
958
- if d .HasChange ("push_rules.0.commit_message_negative_regex" ) {
955
+ if d .HasChange ("push_rules.0.commit_message_negative_regex" ) || d . Get ( "push_rules.0.commit_message_negative_regex" ) != currentPushRules . CommitMessageNegativeRegex {
959
956
options .CommitMessageNegativeRegex = gitlab .String (d .Get ("push_rules.0.commit_message_negative_regex" ).(string ))
960
957
}
961
958
962
- if d .HasChange ("push_rules.0.file_name_regex" ) {
959
+ if d .HasChange ("push_rules.0.file_name_regex" ) || d . Get ( "push_rules.0.file_name_regex" ) != currentPushRules . FileNameRegex {
963
960
options .FileNameRegex = gitlab .String (d .Get ("push_rules.0.file_name_regex" ).(string ))
964
961
}
965
962
966
- if d .HasChange ("push_rules.0.commit_committer_check" ) {
963
+ if d .HasChange ("push_rules.0.commit_committer_check" ) || d . Get ( "push_rules.0.commit_committer_check" ) != currentPushRules . CommitCommitterCheck {
967
964
options .CommitCommitterCheck = gitlab .Bool (d .Get ("push_rules.0.commit_committer_check" ).(bool ))
968
965
}
969
966
970
- if d .HasChange ("push_rules.0.deny_delete_tag" ) {
967
+ if d .HasChange ("push_rules.0.deny_delete_tag" ) || d . Get ( "push_rules.0.deny_delete_tag" ) != currentPushRules . DenyDeleteTag {
971
968
options .DenyDeleteTag = gitlab .Bool (d .Get ("push_rules.0.deny_delete_tag" ).(bool ))
972
969
}
973
970
974
- if d .HasChange ("push_rules.0.member_check" ) {
971
+ if d .HasChange ("push_rules.0.member_check" ) || d . Get ( "push_rules.0.member_check" ) != currentPushRules . MemberCheck {
975
972
options .MemberCheck = gitlab .Bool (d .Get ("push_rules.0.member_check" ).(bool ))
976
973
}
977
974
978
- if d .HasChange ("push_rules.0.prevent_secrets" ) {
975
+ if d .HasChange ("push_rules.0.prevent_secrets" ) || d . Get ( "push_rules.0.prevent_secrets" ) != currentPushRules . PreventSecrets {
979
976
options .PreventSecrets = gitlab .Bool (d .Get ("push_rules.0.prevent_secrets" ).(bool ))
980
977
}
981
978
982
- if d .HasChange ("push_rules.0.reject_unsigned_commits" ) {
979
+ if d .HasChange ("push_rules.0.reject_unsigned_commits" ) || d . Get ( "push_rules.0.reject_unsigned_commits" ) != currentPushRules . RejectUnsignedCommits {
983
980
options .RejectUnsignedCommits = gitlab .Bool (d .Get ("push_rules.0.reject_unsigned_commits" ).(bool ))
984
981
}
985
982
986
- if d .HasChange ("push_rules.0.max_file_size" ) {
983
+ if d .HasChange ("push_rules.0.max_file_size" ) || d . Get ( "push_rules.0.max_file_size" ) != currentPushRules . MaxFileSize {
987
984
options .MaxFileSize = gitlab .Int (d .Get ("push_rules.0.max_file_size" ).(int ))
988
985
}
989
986
0 commit comments