mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
Check for ABAP language version during serialize (#6681)
This commit is contained in:
parent
8fc84426a7
commit
61cb8175d8
|
@ -84,10 +84,14 @@ CLASS zcl_abapgit_objects_super DEFINITION
|
|||
zcx_abapgit_exception .
|
||||
METHODS set_abap_language_version
|
||||
CHANGING
|
||||
!cv_abap_language_version TYPE uccheck.
|
||||
!cv_abap_language_version TYPE uccheck
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS clear_abap_language_version
|
||||
CHANGING
|
||||
!cv_abap_language_version TYPE uccheck.
|
||||
!cv_abap_language_version TYPE uccheck
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
|
@ -99,9 +103,14 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION.
|
|||
METHOD clear_abap_language_version.
|
||||
|
||||
" Used during serializing of objects
|
||||
IF ms_item-abap_language_version <> zcl_abapgit_abap_language_vers=>c_any_abap_language_version.
|
||||
" ABAP language version is defined in repo setting so there's no need to serialize it
|
||||
IF ms_item-abap_language_version = zcl_abapgit_abap_language_vers=>c_no_abap_language_version.
|
||||
" Ignore 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.
|
||||
|
||||
ENDMETHOD.
|
||||
|
@ -301,9 +310,14 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION.
|
|||
METHOD set_abap_language_version.
|
||||
|
||||
" Used during deserializing of objects
|
||||
IF ms_item-abap_language_version <> zcl_abapgit_abap_language_vers=>c_any_abap_language_version.
|
||||
" ABAP language version is defined in repo setting so set it accordingly
|
||||
IF ms_item-abap_language_version = zcl_abapgit_abap_language_vers=>c_no_abap_language_version.
|
||||
" 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.
|
||||
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.
|
||||
|
||||
ENDMETHOD.
|
||||
|
|
|
@ -31,6 +31,13 @@ CLASS zcl_abapgit_abap_language_vers DEFINITION
|
|||
RETURNING
|
||||
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.
|
||||
PRIVATE SECTION.
|
||||
|
||||
|
@ -55,6 +62,12 @@ CLASS zcl_abapgit_abap_language_vers DEFINITION
|
|||
RETURNING
|
||||
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.
|
||||
|
||||
|
||||
|
@ -62,14 +75,27 @@ ENDCLASS.
|
|||
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.
|
||||
|
||||
mo_dot_abapgit = io_dot_abapgit.
|
||||
|
||||
IF zcl_abapgit_feature=>is_enabled( c_feature_flag ) = abap_false.
|
||||
mv_has_abap_language_vers = abap_false.
|
||||
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-undefined.
|
||||
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.
|
||||
ELSE.
|
||||
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'.
|
||||
|
||||
TRY.
|
||||
|
||||
CALL METHOD (lv_class)=>('GET_INSTANCE')
|
||||
RECEIVING
|
||||
ro_instance = lo_abap_language_version_cfg.
|
||||
|
@ -114,6 +139,7 @@ CLASS zcl_abapgit_abap_language_vers IMPLEMENTATION.
|
|||
WHEN OTHERS.
|
||||
rv_abap_language_version = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
|
||||
ENDCASE.
|
||||
|
||||
CATCH cx_root.
|
||||
rv_abap_language_version = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
|
||||
ENDTRY.
|
||||
|
@ -126,30 +152,32 @@ CLASS zcl_abapgit_abap_language_vers IMPLEMENTATION.
|
|||
DATA lv_class TYPE string.
|
||||
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.
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
|
@ -179,11 +207,32 @@ CLASS zcl_abapgit_abap_language_vers IMPLEMENTATION.
|
|||
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.
|
||||
|
||||
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( ).
|
||||
ENDIF.
|
||||
|
||||
|
|
|
@ -120,7 +120,9 @@ CLASS ltcl_abap_language_version DEFINITION FOR TESTING RISK LEVEL HARMLESS
|
|||
repo_setting_feature_on FOR TESTING,
|
||||
object_type_feature_off 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.
|
||||
|
||||
|
@ -208,13 +210,18 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
|
|||
LOOP AT mt_versions INTO lv_version.
|
||||
|
||||
CASE lv_version.
|
||||
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-undefined
|
||||
OR zif_abapgit_dot_abapgit=>c_abap_language_version-ignore.
|
||||
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
|
||||
|
||||
repo_setting_test(
|
||||
iv_version = lv_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.
|
||||
|
||||
repo_setting_test(
|
||||
|
@ -317,8 +324,7 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
|
|||
LOOP AT mt_versions INTO lv_version.
|
||||
|
||||
CASE lv_version.
|
||||
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-undefined
|
||||
OR zif_abapgit_dot_abapgit=>c_abap_language_version-ignore.
|
||||
WHEN zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
|
||||
|
||||
object_type_test(
|
||||
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_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.
|
||||
|
||||
object_type_test(
|
||||
|
@ -429,4 +444,37 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
|
|||
|
||||
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.
|
||||
|
|
Loading…
Reference in New Issue
Block a user