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 .
|
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.
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user