Check for ABAP language version during serialize (#6681)

This commit is contained in:
Marc Bernard 2023-12-05 15:10:24 -05:00 committed by GitHub
parent 8fc84426a7
commit 61cb8175d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 148 additions and 37 deletions

View File

@ -84,10 +84,14 @@ CLASS zcl_abapgit_objects_super DEFINITION
zcx_abapgit_exception . zcx_abapgit_exception .
METHODS set_abap_language_version METHODS set_abap_language_version
CHANGING CHANGING
!cv_abap_language_version TYPE uccheck. !cv_abap_language_version TYPE uccheck
RAISING
zcx_abapgit_exception .
METHODS clear_abap_language_version METHODS clear_abap_language_version
CHANGING CHANGING
!cv_abap_language_version TYPE uccheck. !cv_abap_language_version TYPE uccheck
RAISING
zcx_abapgit_exception .
PRIVATE SECTION. PRIVATE SECTION.
ENDCLASS. ENDCLASS.
@ -99,9 +103,14 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION.
METHOD clear_abap_language_version. METHOD clear_abap_language_version.
" Used during serializing of objects " Used during serializing of objects
IF ms_item-abap_language_version <> zcl_abapgit_abap_language_vers=>c_any_abap_language_version. IF ms_item-abap_language_version = zcl_abapgit_abap_language_vers=>c_no_abap_language_version.
" ABAP language version is defined in repo setting so there's no need to serialize it " Ignore ABAP language version
CLEAR cv_abap_language_version. CLEAR cv_abap_language_version.
ELSEIF ms_item-abap_language_version <> zcl_abapgit_abap_language_vers=>c_any_abap_language_version.
" Check if ABAP language version matches repository setting
zcl_abapgit_abap_language_vers=>check_abap_language_version(
iv_abap_language_version = cv_abap_language_version
is_item = ms_item ).
ENDIF. ENDIF.
ENDMETHOD. ENDMETHOD.
@ -301,9 +310,14 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION.
METHOD set_abap_language_version. METHOD set_abap_language_version.
" Used during deserializing of objects " Used during deserializing of objects
IF ms_item-abap_language_version <> zcl_abapgit_abap_language_vers=>c_any_abap_language_version. IF ms_item-abap_language_version = zcl_abapgit_abap_language_vers=>c_no_abap_language_version.
" ABAP language version is defined in repo setting so set it accordingly " ABAP language version is derived from object type and target package (see zcl_abapgit_objects->deserialize)
cv_abap_language_version = ms_item-abap_language_version. cv_abap_language_version = ms_item-abap_language_version.
ELSEIF ms_item-abap_language_version <> zcl_abapgit_abap_language_vers=>c_any_abap_language_version.
" Check if ABAP language version matches repository setting
zcl_abapgit_abap_language_vers=>check_abap_language_version(
iv_abap_language_version = cv_abap_language_version
is_item = ms_item ).
ENDIF. ENDIF.
ENDMETHOD. ENDMETHOD.

View File

@ -31,6 +31,13 @@ CLASS zcl_abapgit_abap_language_vers DEFINITION
RETURNING RETURNING
VALUE(rv_allowed) TYPE abap_bool. VALUE(rv_allowed) TYPE abap_bool.
CLASS-METHODS check_abap_language_version
IMPORTING
!iv_abap_language_version TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version
!is_item TYPE zif_abapgit_definitions=>ty_item
RAISING
zcx_abapgit_exception.
PROTECTED SECTION. PROTECTED SECTION.
PRIVATE SECTION. PRIVATE SECTION.
@ -55,6 +62,12 @@ CLASS zcl_abapgit_abap_language_vers DEFINITION
RETURNING RETURNING
VALUE(rv_abap_language_version) TYPE string. VALUE(rv_abap_language_version) TYPE string.
CLASS-METHODS get_description
IMPORTING
!iv_abap_language_version TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version
RETURNING
VALUE(rv_description) TYPE string.
ENDCLASS. ENDCLASS.
@ -62,14 +75,27 @@ ENDCLASS.
CLASS zcl_abapgit_abap_language_vers IMPLEMENTATION. CLASS zcl_abapgit_abap_language_vers IMPLEMENTATION.
METHOD check_abap_language_version.
" Check if ABAP language version matches repository setting
IF iv_abap_language_version <> is_item-abap_language_version.
zcx_abapgit_exception=>raise(
|Object { is_item-obj_type } { is_item-obj_name } has { get_description( iv_abap_language_version ) }| &&
| but repository is set to { get_description( is_item-abap_language_version ) }| ).
ENDIF.
ENDMETHOD.
METHOD constructor. METHOD constructor.
mo_dot_abapgit = io_dot_abapgit. mo_dot_abapgit = io_dot_abapgit.
IF zcl_abapgit_feature=>is_enabled( c_feature_flag ) = abap_false. IF zcl_abapgit_feature=>is_enabled( c_feature_flag ) = abap_false.
mv_has_abap_language_vers = abap_false. mv_has_abap_language_vers = abap_undefined.
ELSEIF get_abap_language_vers_by_repo( ) = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined ELSEIF get_abap_language_vers_by_repo( ) = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
OR get_abap_language_vers_by_repo( ) = zif_abapgit_dot_abapgit=>c_abap_language_version-ignore. mv_has_abap_language_vers = abap_undefined.
ELSEIF get_abap_language_vers_by_repo( ) = zif_abapgit_dot_abapgit=>c_abap_language_version-ignore.
mv_has_abap_language_vers = abap_false. mv_has_abap_language_vers = abap_false.
ELSE. ELSE.
mv_has_abap_language_vers = abap_true. mv_has_abap_language_vers = abap_true.
@ -87,7 +113,6 @@ CLASS zcl_abapgit_abap_language_vers IMPLEMENTATION.
lv_class = 'CL_ABAP_LANGUAGE_VERSION_CFG'. lv_class = 'CL_ABAP_LANGUAGE_VERSION_CFG'.
TRY. TRY.
CALL METHOD (lv_class)=>('GET_INSTANCE') CALL METHOD (lv_class)=>('GET_INSTANCE')
RECEIVING RECEIVING
ro_instance = lo_abap_language_version_cfg. ro_instance = lo_abap_language_version_cfg.
@ -114,6 +139,7 @@ CLASS zcl_abapgit_abap_language_vers IMPLEMENTATION.
WHEN OTHERS. WHEN OTHERS.
rv_abap_language_version = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined. rv_abap_language_version = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
ENDCASE. ENDCASE.
CATCH cx_root. CATCH cx_root.
rv_abap_language_version = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined. rv_abap_language_version = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
ENDTRY. ENDTRY.
@ -126,30 +152,32 @@ CLASS zcl_abapgit_abap_language_vers IMPLEMENTATION.
DATA lv_class TYPE string. DATA lv_class TYPE string.
DATA lo_abap_language_version TYPE REF TO object. DATA lo_abap_language_version TYPE REF TO object.
IF mv_has_abap_language_vers = abap_false. IF mv_has_abap_language_vers = abap_undefined.
rv_allowed_abap_langu_version = c_any_abap_language_version. rv_allowed_abap_langu_version = c_any_abap_language_version.
RETURN. ">>> ELSEIF mv_has_abap_language_vers = abap_false.
rv_allowed_abap_langu_version = c_no_abap_language_version.
ELSE. " abap_true
lv_class = 'CL_ABAP_LANGUAGE_VERSION'.
TRY.
CALL METHOD (lv_class)=>('GET_INSTANCE')
RECEIVING
ro_version_handler = lo_abap_language_version.
CALL METHOD lo_abap_language_version->('IF_ABAP_LANGUAGE_VERSION~GET_DEFAULT_VERSION')
EXPORTING
iv_object_type = iv_object_type
iv_package = iv_package
RECEIVING
rv_default_version = rv_allowed_abap_langu_version.
CATCH cx_root.
rv_allowed_abap_langu_version = get_default_abap_language_vers( iv_object_type ).
ENDTRY.
ENDIF. ENDIF.
lv_class = 'CL_ABAP_LANGUAGE_VERSION'.
TRY.
CALL METHOD (lv_class)=>('GET_INSTANCE')
RECEIVING
ro_version_handler = lo_abap_language_version.
CALL METHOD lo_abap_language_version->('IF_ABAP_LANGUAGE_VERSION~GET_DEFAULT_VERSION')
EXPORTING
iv_object_type = iv_object_type
iv_package = iv_package
RECEIVING
rv_default_version = rv_allowed_abap_langu_version.
CATCH cx_root.
rv_allowed_abap_langu_version = get_default_abap_language_vers( iv_object_type ).
ENDTRY.
ENDMETHOD. ENDMETHOD.
@ -179,11 +207,32 @@ CLASS zcl_abapgit_abap_language_vers IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD get_description.
CASE iv_abap_language_version.
WHEN zif_abapgit_aff_types_v1=>co_abap_language_version-standard
OR zif_abapgit_aff_types_v1=>co_abap_language_version_src-standard.
rv_description = 'Standard ABAP'.
WHEN zif_abapgit_aff_types_v1=>co_abap_language_version-key_user
OR zif_abapgit_aff_types_v1=>co_abap_language_version_src-key_user.
rv_description = 'ABAP for Key Users'.
WHEN zif_abapgit_aff_types_v1=>co_abap_language_version-cloud_development
OR zif_abapgit_aff_types_v1=>co_abap_language_version_src-cloud_development.
rv_description = 'ABAP for Cloud Development'.
WHEN OTHERS.
rv_description = 'Undefined'.
ENDCASE.
rv_description = |ABAP language version "{ rv_description }"|.
ENDMETHOD.
METHOD get_repo_abap_language_version. METHOD get_repo_abap_language_version.
DATA lv_abap_language_version TYPE string. DATA lv_abap_language_version TYPE string.
IF mv_has_abap_language_vers = abap_true. IF mv_has_abap_language_vers <> abap_undefined. " abap_true or abap_false
lv_abap_language_version = mo_dot_abapgit->get_abap_language_version( ). lv_abap_language_version = mo_dot_abapgit->get_abap_language_version( ).
ENDIF. ENDIF.

View File

@ -120,7 +120,9 @@ CLASS ltcl_abap_language_version DEFINITION FOR TESTING RISK LEVEL HARMLESS
repo_setting_feature_on FOR TESTING, repo_setting_feature_on FOR TESTING,
object_type_feature_off FOR TESTING, object_type_feature_off FOR TESTING,
object_type_feature_on FOR TESTING, object_type_feature_on FOR TESTING,
is_import_allowed FOR TESTING. is_import_allowed FOR TESTING,
check_abap_language_vers_same FOR TESTING RAISING zcx_abapgit_exception,
check_abap_language_vers_diff FOR TESTING.
ENDCLASS. ENDCLASS.
@ -208,13 +210,18 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
LOOP AT mt_versions INTO lv_version. LOOP AT mt_versions INTO lv_version.
CASE lv_version. CASE lv_version.
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-undefined WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
OR zif_abapgit_dot_abapgit=>c_abap_language_version-ignore.
repo_setting_test( repo_setting_test(
iv_version = lv_version iv_version = lv_version
iv_exp = zcl_abapgit_abap_language_vers=>c_any_abap_language_version ). iv_exp = zcl_abapgit_abap_language_vers=>c_any_abap_language_version ).
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-ignore.
repo_setting_test(
iv_version = lv_version
iv_exp = zcl_abapgit_abap_language_vers=>c_no_abap_language_version ).
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-standard. WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-standard.
repo_setting_test( repo_setting_test(
@ -317,8 +324,7 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
LOOP AT mt_versions INTO lv_version. LOOP AT mt_versions INTO lv_version.
CASE lv_version. CASE lv_version.
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-undefined WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
OR zif_abapgit_dot_abapgit=>c_abap_language_version-ignore.
object_type_test( object_type_test(
iv_version = lv_version iv_version = lv_version
@ -327,6 +333,15 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
iv_cloud = zcl_abapgit_abap_language_vers=>c_any_abap_language_version iv_cloud = zcl_abapgit_abap_language_vers=>c_any_abap_language_version
iv_cloud_src = zcl_abapgit_abap_language_vers=>c_any_abap_language_version ). iv_cloud_src = zcl_abapgit_abap_language_vers=>c_any_abap_language_version ).
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-ignore.
object_type_test(
iv_version = lv_version
iv_standard = zcl_abapgit_abap_language_vers=>c_no_abap_language_version
iv_standard_src = zcl_abapgit_abap_language_vers=>c_no_abap_language_version
iv_cloud = zcl_abapgit_abap_language_vers=>c_no_abap_language_version
iv_cloud_src = zcl_abapgit_abap_language_vers=>c_no_abap_language_version ).
WHEN OTHERS. WHEN OTHERS.
object_type_test( object_type_test(
@ -429,4 +444,37 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD check_abap_language_vers_same.
DATA ls_item TYPE zif_abapgit_definitions=>ty_item.
ls_item-obj_type = 'CLAS'.
ls_item-obj_name = 'ZCL_FOO_BAR'.
ls_item-abap_language_version = zif_abapgit_aff_types_v1=>co_abap_language_version-standard.
" Does not throw
zcl_abapgit_abap_language_vers=>check_abap_language_version(
iv_abap_language_version = zif_abapgit_aff_types_v1=>co_abap_language_version-standard
is_item = ls_item ).
ENDMETHOD.
METHOD check_abap_language_vers_diff.
DATA ls_item TYPE zif_abapgit_definitions=>ty_item.
ls_item-obj_type = 'CLAS'.
ls_item-obj_name = 'ZCL_FOO_BAR'.
ls_item-abap_language_version = zif_abapgit_aff_types_v1=>co_abap_language_version-standard.
TRY.
zcl_abapgit_abap_language_vers=>check_abap_language_version(
iv_abap_language_version = zif_abapgit_aff_types_v1=>co_abap_language_version-cloud_development
is_item = ls_item ).
cl_abap_unit_assert=>fail( ).
CATCH zcx_abapgit_exception ##NO_HANDLER.
ENDTRY.
ENDMETHOD.
ENDCLASS. ENDCLASS.