mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +08:00
Refactor: Objects Class (#4664)
* Refactor: Objects Class Splits `zcl_abapgit_objects` into smaller classes Moves the following methods and related test cases: `zcl_abapgit_objects_check` - `deserialize_check` - `warning_overwrite_find` - `warning_package_find` - `checks_adjust` - `warning_overwrite_adjust` - `warning_package_adjust` `zcl_abapgit_files_deserialize` - `files_to_deserialize` - `filter_files_to_deserialize` - `prioritize_deser` - `adjust_namespaces` * PP Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
fd49e8dbe6
commit
56a0dca134
245
src/objects/core/zcl_abapgit_file_deserialize.clas.abap
Normal file
245
src/objects/core/zcl_abapgit_file_deserialize.clas.abap
Normal file
|
@ -0,0 +1,245 @@
|
|||
CLASS zcl_abapgit_file_deserialize DEFINITION
|
||||
PUBLIC
|
||||
CREATE PUBLIC .
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
CLASS-METHODS get_results
|
||||
IMPORTING
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo
|
||||
!ii_log TYPE REF TO zif_abapgit_log OPTIONAL
|
||||
RETURNING
|
||||
VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
PROTECTED SECTION.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
CLASS-METHODS filter_files_to_deserialize
|
||||
IMPORTING
|
||||
!it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
!ii_log TYPE REF TO zif_abapgit_log OPTIONAL
|
||||
RETURNING
|
||||
VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt.
|
||||
CLASS-METHODS prioritize_deser
|
||||
IMPORTING
|
||||
!it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RETURNING
|
||||
VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt.
|
||||
CLASS-METHODS adjust_namespaces
|
||||
IMPORTING
|
||||
!it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RETURNING
|
||||
VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS zcl_abapgit_file_deserialize IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD adjust_namespaces.
|
||||
|
||||
FIELD-SYMBOLS: <ls_result> LIKE LINE OF rt_results.
|
||||
|
||||
rt_results = it_results.
|
||||
|
||||
LOOP AT rt_results ASSIGNING <ls_result>.
|
||||
REPLACE ALL OCCURRENCES OF '#' IN <ls_result>-obj_name WITH '/'.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD filter_files_to_deserialize.
|
||||
|
||||
DATA lt_objects LIKE rt_results.
|
||||
DATA lr_object TYPE REF TO zif_abapgit_definitions=>ty_result.
|
||||
DATA ls_item TYPE zif_abapgit_definitions=>ty_item.
|
||||
DATA lv_tabix TYPE sy-tabix.
|
||||
|
||||
rt_results = it_results.
|
||||
|
||||
"preparation for object logging, sort all file entries by objects
|
||||
IF ii_log IS BOUND.
|
||||
lt_objects = rt_results.
|
||||
SORT lt_objects
|
||||
BY obj_type
|
||||
obj_name.
|
||||
DELETE ADJACENT DUPLICATES FROM lt_objects COMPARING obj_type obj_name.
|
||||
DELETE lt_objects WHERE obj_type IS INITIAL AND obj_name IS INITIAL.
|
||||
ENDIF.
|
||||
|
||||
"ignore objects w/o changes
|
||||
DELETE rt_results WHERE match = abap_true. " Full match
|
||||
"log objects w/o changes
|
||||
IF sy-subrc = 0 AND ii_log IS BOUND.
|
||||
SORT rt_results BY obj_type obj_name.
|
||||
LOOP AT lt_objects REFERENCE INTO lr_object.
|
||||
lv_tabix = sy-tabix.
|
||||
READ TABLE rt_results WITH KEY obj_type = lr_object->obj_type
|
||||
obj_name = lr_object->obj_name
|
||||
BINARY SEARCH TRANSPORTING NO FIELDS.
|
||||
IF sy-subrc <> 0.
|
||||
"all parts of the objects have not changed
|
||||
ls_item-devclass = lr_object->package.
|
||||
ls_item-obj_type = lr_object->obj_type.
|
||||
ls_item-obj_name = lr_object->obj_name.
|
||||
ii_log->add_success(
|
||||
iv_msg = |Object { ls_item-obj_name } (type { ls_item-obj_type }) not changed; no import required|
|
||||
is_item = ls_item ).
|
||||
"ignore object for further messages
|
||||
DELETE lt_objects INDEX lv_tabix.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
|
||||
"ignore objects w/o object type
|
||||
DELETE rt_results WHERE obj_type IS INITIAL.
|
||||
"log objects w/o object type
|
||||
IF sy-subrc = 0 AND ii_log IS BOUND.
|
||||
LOOP AT lt_objects REFERENCE INTO lr_object WHERE obj_type IS INITIAL.
|
||||
CHECK lr_object->obj_name IS NOT INITIAL.
|
||||
ls_item-devclass = lr_object->package.
|
||||
ls_item-obj_type = lr_object->obj_type.
|
||||
ls_item-obj_name = lr_object->obj_name.
|
||||
ii_log->add_warning(
|
||||
iv_msg = |Object type for { ls_item-obj_name } not defined - will be ignored by abapGit|
|
||||
is_item = ls_item ).
|
||||
ENDLOOP.
|
||||
DELETE lt_objects WHERE obj_type IS INITIAL.
|
||||
ENDIF.
|
||||
|
||||
"ignore objects that exists only local
|
||||
DELETE rt_results WHERE lstate = zif_abapgit_definitions=>c_state-added AND rstate IS INITIAL.
|
||||
"ignore objects that where deleted remotely
|
||||
DELETE rt_results WHERE rstate = zif_abapgit_definitions=>c_state-deleted.
|
||||
"log objects that exists only local or where deleted remotely
|
||||
IF sy-subrc = 0 AND ii_log IS BOUND.
|
||||
SORT rt_results BY obj_type obj_name.
|
||||
LOOP AT lt_objects REFERENCE INTO lr_object.
|
||||
lv_tabix = sy-tabix.
|
||||
READ TABLE rt_results WITH KEY obj_type = lr_object->obj_type
|
||||
obj_name = lr_object->obj_name
|
||||
BINARY SEARCH TRANSPORTING NO FIELDS.
|
||||
IF sy-subrc <> 0.
|
||||
"all parts exists only local
|
||||
"no log message; ignore object for further messages
|
||||
DELETE lt_objects INDEX lv_tabix.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
|
||||
SORT rt_results
|
||||
BY obj_type ASCENDING
|
||||
obj_name ASCENDING
|
||||
rstate DESCENDING " ensures that non-empty rstate is kept
|
||||
lstate DESCENDING. " ensures that non-empty lstate is kept
|
||||
DELETE ADJACENT DUPLICATES FROM rt_results COMPARING obj_type obj_name.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_results.
|
||||
|
||||
rt_results = adjust_namespaces(
|
||||
prioritize_deser(
|
||||
filter_files_to_deserialize(
|
||||
it_results = zcl_abapgit_file_status=>status( io_repo )
|
||||
ii_log = ii_log ) ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD prioritize_deser.
|
||||
|
||||
* todo, refactor this method
|
||||
|
||||
FIELD-SYMBOLS: <ls_result> LIKE LINE OF it_results.
|
||||
|
||||
* WEBI has to be handled before SPRX.
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'WEBI'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* SPRX has to be handled before depended objects CLAS/INFT/TABL etc.
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'SPRX'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* XSLT has to be handled before CLAS/PROG
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'XSLT'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* PROG before internet services, as the services might use the screens
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'PROG'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* ISAP has to be handled before ISRP
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'IASP'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* ENHS has to be handled before ENHO
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'ENHS'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* ENHO has to be handled before ENHC
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'ENHO'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* DDLS has to be handled before DCLS
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'DDLS'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* IOBJ has to be handled before ODSO
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'IOBJ'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* TOBJ has to be handled before SCP1
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'TOBJ'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* OTGR has to be handled before CHAR
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'OTGR'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT it_results ASSIGNING <ls_result>
|
||||
WHERE obj_type <> 'IASP'
|
||||
AND obj_type <> 'PROG'
|
||||
AND obj_type <> 'XSLT'
|
||||
AND obj_type <> 'PINF'
|
||||
AND obj_type <> 'DEVC'
|
||||
AND obj_type <> 'ENHS'
|
||||
AND obj_type <> 'ENHO'
|
||||
AND obj_type <> 'DDLS'
|
||||
AND obj_type <> 'SPRX'
|
||||
AND obj_type <> 'WEBI'
|
||||
AND obj_type <> 'IOBJ'
|
||||
AND obj_type <> 'TOBJ'
|
||||
AND obj_type <> 'OTGR'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* PINF after everything as it can expose objects
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'PINF'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* DEVC after PINF, as it can refer for package interface usage
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'DEVC'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
|
@ -0,0 +1,352 @@
|
|||
CLASS ltcl_filter_files_to_deser DEFINITION DEFERRED.
|
||||
CLASS ltcl_adjust_namespaces DEFINITION DEFERRED.
|
||||
CLASS ltcl_prio_deserialization DEFINITION DEFERRED.
|
||||
|
||||
CLASS zcl_abapgit_file_deserialize DEFINITION LOCAL FRIENDS ltcl_filter_files_to_deser.
|
||||
CLASS zcl_abapgit_file_deserialize DEFINITION LOCAL FRIENDS ltcl_adjust_namespaces.
|
||||
CLASS zcl_abapgit_file_deserialize DEFINITION LOCAL FRIENDS ltcl_prio_deserialization.
|
||||
|
||||
CLASS ltcl_filter_files_to_deser DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA:
|
||||
mo_objects TYPE REF TO zcl_abapgit_file_deserialize,
|
||||
mt_result TYPE zif_abapgit_definitions=>ty_results_tt.
|
||||
|
||||
METHODS:
|
||||
setup,
|
||||
filter_duplicates FOR TESTING RAISING cx_static_check,
|
||||
filter_duplicates_rstate FOR TESTING RAISING cx_static_check,
|
||||
filter_duplicates_lstate FOR TESTING RAISING cx_static_check,
|
||||
filter_duplicates_match FOR TESTING RAISING cx_static_check,
|
||||
filter_duplicates_init_objtype FOR TESTING RAISING cx_static_check,
|
||||
filter_duplicates_changes_01 FOR TESTING RAISING cx_static_check,
|
||||
filter_duplicates_changes_02 FOR TESTING RAISING cx_static_check,
|
||||
filter_duplicates_deleted FOR TESTING RAISING cx_static_check,
|
||||
|
||||
given_result
|
||||
IMPORTING
|
||||
iv_result_line TYPE string,
|
||||
|
||||
when_filter_is_applied.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_filter_files_to_deser IMPLEMENTATION.
|
||||
|
||||
METHOD setup.
|
||||
|
||||
CREATE OBJECT mo_objects.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD filter_duplicates.
|
||||
|
||||
given_result( |PROG;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.abap;;;;| ).
|
||||
given_result( |PROG;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.xml;;;;| ).
|
||||
|
||||
when_filter_is_applied( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 1
|
||||
act = lines( mt_result ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD filter_duplicates_rstate.
|
||||
|
||||
DATA: ls_exp LIKE LINE OF mt_result,
|
||||
ls_act LIKE LINE OF mt_result.
|
||||
|
||||
given_result( |PROG;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.abap;;;;| ).
|
||||
given_result( |PROG;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.xml;;;;A| ).
|
||||
|
||||
READ TABLE mt_result INDEX 2 INTO ls_exp.
|
||||
|
||||
when_filter_is_applied( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 1
|
||||
act = lines( mt_result ) ).
|
||||
|
||||
READ TABLE mt_result INDEX 1 INTO ls_act.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = ls_exp
|
||||
act = ls_act ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD filter_duplicates_lstate.
|
||||
|
||||
given_result( |PROG;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.abap;;;A;| ).
|
||||
given_result( |PROG;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.xml;;;A;| ).
|
||||
|
||||
when_filter_is_applied( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 0
|
||||
act = lines( mt_result ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD filter_duplicates_match.
|
||||
|
||||
given_result( |PROG;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.abap;;X;;| ).
|
||||
given_result( |PROG;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.xml;;X;;| ).
|
||||
|
||||
when_filter_is_applied( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 0
|
||||
act = lines( mt_result ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD filter_duplicates_init_objtype.
|
||||
|
||||
given_result( |;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.abap;;;;| ).
|
||||
given_result( |;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.xml;;;;| ).
|
||||
|
||||
when_filter_is_applied( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 0
|
||||
act = lines( mt_result ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD filter_duplicates_changes_01.
|
||||
|
||||
DATA: ls_exp LIKE LINE OF mt_result,
|
||||
ls_act LIKE LINE OF mt_result.
|
||||
|
||||
" test different order since SORT object,obj_name is non-deterministic
|
||||
given_result( |CLAS;ZAG_UNIT_TEST;;/src/;zag_unit_test.clas.abap;;;M;M| ).
|
||||
given_result( |CLAS;ZAG_UNIT_TEST;;/src/;zag_unit_test.clas.testclasses.abap;;;;M| ).
|
||||
|
||||
READ TABLE mt_result INDEX 1 INTO ls_exp.
|
||||
|
||||
when_filter_is_applied( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 1
|
||||
act = lines( mt_result ) ).
|
||||
|
||||
READ TABLE mt_result INDEX 1 INTO ls_act.
|
||||
|
||||
" expect M,M
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = ls_exp
|
||||
act = ls_act ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD filter_duplicates_changes_02.
|
||||
|
||||
DATA: ls_exp LIKE LINE OF mt_result,
|
||||
ls_act LIKE LINE OF mt_result.
|
||||
|
||||
" test different order since SORT object,obj_name is non-deterministic
|
||||
given_result( |CLAS;ZAG_UNIT_TEST;;/src/;zag_unit_test.clas.abap;;;;M| ).
|
||||
given_result( |CLAS;ZAG_UNIT_TEST;;/src/;zag_unit_test.clas.testclasses.abap;;;M;M| ).
|
||||
|
||||
READ TABLE mt_result INDEX 2 INTO ls_exp.
|
||||
|
||||
when_filter_is_applied( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 1
|
||||
act = lines( mt_result ) ).
|
||||
|
||||
READ TABLE mt_result INDEX 1 INTO ls_act.
|
||||
|
||||
" expect M,M
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = ls_exp
|
||||
act = ls_act ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD filter_duplicates_deleted.
|
||||
|
||||
given_result( |PROG;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.xml;;;;D| ).
|
||||
|
||||
when_filter_is_applied( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 0
|
||||
act = lines( mt_result ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD given_result.
|
||||
|
||||
DATA: ls_result LIKE LINE OF mt_result.
|
||||
|
||||
SPLIT iv_result_line
|
||||
AT ';'
|
||||
INTO ls_result-obj_type
|
||||
ls_result-obj_name
|
||||
ls_result-inactive
|
||||
ls_result-path
|
||||
ls_result-filename
|
||||
ls_result-package
|
||||
ls_result-match
|
||||
ls_result-lstate
|
||||
ls_result-rstate.
|
||||
|
||||
INSERT ls_result INTO TABLE mt_result.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD when_filter_is_applied.
|
||||
|
||||
mt_result = mo_objects->filter_files_to_deserialize( mt_result ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_adjust_namespaces DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS:
|
||||
setup,
|
||||
adjust_namespaces FOR TESTING RAISING cx_static_check.
|
||||
|
||||
DATA:
|
||||
mo_objects TYPE REF TO zcl_abapgit_file_deserialize.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_adjust_namespaces IMPLEMENTATION.
|
||||
|
||||
METHOD setup.
|
||||
|
||||
CREATE OBJECT mo_objects.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD adjust_namespaces.
|
||||
|
||||
DATA: lt_input TYPE zif_abapgit_definitions=>ty_results_tt,
|
||||
lt_ouptut TYPE zif_abapgit_definitions=>ty_results_tt,
|
||||
ls_result LIKE LINE OF lt_input.
|
||||
|
||||
ls_result-obj_name = |#SAP#ZTEST|.
|
||||
INSERT ls_result INTO TABLE lt_input.
|
||||
|
||||
ls_result-obj_name = |ZTEST|.
|
||||
INSERT ls_result INTO TABLE lt_input.
|
||||
|
||||
lt_ouptut = mo_objects->adjust_namespaces( lt_input ).
|
||||
|
||||
READ TABLE lt_ouptut INTO ls_result INDEX 1.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = |/SAP/ZTEST|
|
||||
act = ls_result-obj_name ).
|
||||
|
||||
READ TABLE lt_ouptut INTO ls_result INDEX 2.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = |ZTEST|
|
||||
act = ls_result-obj_name ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_prio_deserialization DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS:
|
||||
setup,
|
||||
ddls_before_dcls FOR TESTING RAISING cx_static_check,
|
||||
|
||||
given
|
||||
IMPORTING
|
||||
iv_object_type TYPE trobjtype,
|
||||
when_deser_is_priorized,
|
||||
then
|
||||
IMPORTING
|
||||
iv_exp_object_type TYPE trobjtype.
|
||||
|
||||
DATA:
|
||||
mo_objects TYPE REF TO zcl_abapgit_file_deserialize,
|
||||
mt_input TYPE zif_abapgit_definitions=>ty_results_tt,
|
||||
mt_output TYPE zif_abapgit_definitions=>ty_results_tt,
|
||||
mv_exp_output_tabix TYPE i.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_prio_deserialization IMPLEMENTATION.
|
||||
|
||||
METHOD setup.
|
||||
|
||||
CREATE OBJECT mo_objects.
|
||||
mv_exp_output_tabix = 0.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD ddls_before_dcls.
|
||||
|
||||
given( 'DCLS' ).
|
||||
given( 'DDLS' ).
|
||||
given( 'DCLS' ).
|
||||
given( 'DDLS' ).
|
||||
|
||||
when_deser_is_priorized( ).
|
||||
|
||||
then( 'DDLS' ).
|
||||
then( 'DDLS' ).
|
||||
then( 'DCLS' ).
|
||||
then( 'DCLS' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD given.
|
||||
|
||||
DATA: ls_input LIKE LINE OF mt_input.
|
||||
|
||||
ls_input-obj_type = iv_object_type.
|
||||
INSERT ls_input INTO TABLE mt_input.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD when_deser_is_priorized.
|
||||
|
||||
mt_output = mo_objects->prioritize_deser( mt_input ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD then.
|
||||
|
||||
DATA: ls_output LIKE LINE OF mt_output.
|
||||
|
||||
mv_exp_output_tabix = mv_exp_output_tabix + 1.
|
||||
|
||||
READ TABLE mt_output INTO ls_output INDEX mv_exp_output_tabix.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = iv_exp_object_type
|
||||
act = ls_output-obj_type ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
17
src/objects/core/zcl_abapgit_file_deserialize.clas.xml
Normal file
17
src/objects/core/zcl_abapgit_file_deserialize.clas.xml
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_ABAPGIT_FILE_DESERIALIZE</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>abapGit - Files Deserialize</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
236
src/objects/core/zcl_abapgit_objects_check.clas.abap
Normal file
236
src/objects/core/zcl_abapgit_objects_check.clas.abap
Normal file
|
@ -0,0 +1,236 @@
|
|||
CLASS zcl_abapgit_objects_check DEFINITION
|
||||
PUBLIC
|
||||
CREATE PUBLIC .
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
CLASS-METHODS deserialize_checks
|
||||
IMPORTING
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo
|
||||
RETURNING
|
||||
VALUE(rs_checks) TYPE zif_abapgit_definitions=>ty_deserialize_checks
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
CLASS-METHODS checks_adjust
|
||||
IMPORTING
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo
|
||||
!is_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks
|
||||
CHANGING
|
||||
!ct_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
PROTECTED SECTION.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
CLASS-METHODS warning_overwrite_adjust
|
||||
IMPORTING
|
||||
!it_overwrite TYPE zif_abapgit_definitions=>ty_overwrite_tt
|
||||
CHANGING
|
||||
!ct_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
CLASS-METHODS warning_overwrite_find
|
||||
IMPORTING
|
||||
!it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RETURNING
|
||||
VALUE(rt_overwrite) TYPE zif_abapgit_definitions=>ty_overwrite_tt.
|
||||
CLASS-METHODS warning_package_adjust
|
||||
IMPORTING
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo
|
||||
!it_overwrite TYPE zif_abapgit_definitions=>ty_overwrite_tt
|
||||
CHANGING
|
||||
!ct_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
CLASS-METHODS warning_package_find
|
||||
IMPORTING
|
||||
!it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo
|
||||
RETURNING
|
||||
VALUE(rt_overwrite) TYPE zif_abapgit_definitions=>ty_overwrite_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS zcl_abapgit_objects_check IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD checks_adjust.
|
||||
|
||||
warning_overwrite_adjust(
|
||||
EXPORTING it_overwrite = is_checks-overwrite
|
||||
CHANGING ct_results = ct_results ).
|
||||
|
||||
warning_package_adjust(
|
||||
EXPORTING
|
||||
io_repo = io_repo
|
||||
it_overwrite = is_checks-warning_package
|
||||
CHANGING
|
||||
ct_results = ct_results ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD deserialize_checks.
|
||||
|
||||
DATA: lt_results TYPE zif_abapgit_definitions=>ty_results_tt,
|
||||
li_package TYPE REF TO zif_abapgit_sap_package.
|
||||
|
||||
|
||||
lt_results = zcl_abapgit_file_deserialize=>get_results( io_repo ).
|
||||
|
||||
rs_checks-overwrite = warning_overwrite_find( lt_results ).
|
||||
|
||||
rs_checks-warning_package = warning_package_find(
|
||||
io_repo = io_repo
|
||||
it_results = lt_results ).
|
||||
|
||||
IF lines( lt_results ) > 0.
|
||||
li_package = zcl_abapgit_factory=>get_sap_package( io_repo->get_package( ) ).
|
||||
rs_checks-transport-required = li_package->are_changes_recorded_in_tr_req( ).
|
||||
IF NOT rs_checks-transport-required IS INITIAL.
|
||||
rs_checks-transport-type = li_package->get_transport_type( ).
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD warning_overwrite_adjust.
|
||||
|
||||
DATA: lt_overwrite LIKE it_overwrite,
|
||||
ls_overwrite LIKE LINE OF lt_overwrite.
|
||||
|
||||
FIELD-SYMBOLS: <ls_overwrite> LIKE LINE OF lt_overwrite.
|
||||
|
||||
|
||||
* make sure to get the current status, as something might have changed in the meanwhile
|
||||
lt_overwrite = warning_overwrite_find( ct_results ).
|
||||
|
||||
LOOP AT lt_overwrite ASSIGNING <ls_overwrite>.
|
||||
|
||||
READ TABLE it_overwrite INTO ls_overwrite
|
||||
WITH TABLE KEY object_type_and_name
|
||||
COMPONENTS obj_type = <ls_overwrite>-obj_type
|
||||
obj_name = <ls_overwrite>-obj_name.
|
||||
IF sy-subrc <> 0 OR ls_overwrite-decision IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( |Overwrite { <ls_overwrite>-obj_type } {
|
||||
<ls_overwrite>-obj_name } undecided| ).
|
||||
ENDIF.
|
||||
|
||||
IF ls_overwrite-decision = 'N'.
|
||||
DELETE ct_results WHERE
|
||||
obj_type = <ls_overwrite>-obj_type AND
|
||||
obj_name = <ls_overwrite>-obj_name.
|
||||
ASSERT sy-subrc = 0.
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD warning_overwrite_find.
|
||||
|
||||
DATA: ls_overwrite LIKE LINE OF rt_overwrite.
|
||||
|
||||
FIELD-SYMBOLS: <ls_result> LIKE LINE OF it_results.
|
||||
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE NOT obj_type IS INITIAL.
|
||||
IF <ls_result>-lstate IS NOT INITIAL
|
||||
AND NOT ( <ls_result>-lstate = zif_abapgit_definitions=>c_state-added
|
||||
AND <ls_result>-rstate IS INITIAL )
|
||||
OR ( <ls_result>-lstate IS INITIAL
|
||||
AND <ls_result>-rstate = zif_abapgit_definitions=>c_state-deleted ).
|
||||
" current object has been modified or deleted locally, add to table
|
||||
CLEAR ls_overwrite.
|
||||
MOVE-CORRESPONDING <ls_result> TO ls_overwrite.
|
||||
APPEND ls_overwrite TO rt_overwrite.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
SORT rt_overwrite.
|
||||
DELETE ADJACENT DUPLICATES FROM rt_overwrite.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD warning_package_adjust.
|
||||
|
||||
DATA: lt_overwrite LIKE it_overwrite,
|
||||
ls_overwrite LIKE LINE OF lt_overwrite.
|
||||
|
||||
FIELD-SYMBOLS: <ls_overwrite> LIKE LINE OF lt_overwrite.
|
||||
|
||||
|
||||
* make sure to get the current status, as something might have changed in the meanwhile
|
||||
lt_overwrite = warning_package_find(
|
||||
it_results = ct_results
|
||||
io_repo = io_repo ).
|
||||
|
||||
LOOP AT lt_overwrite ASSIGNING <ls_overwrite>.
|
||||
|
||||
READ TABLE it_overwrite INTO ls_overwrite
|
||||
WITH TABLE KEY object_type_and_name
|
||||
COMPONENTS obj_type = <ls_overwrite>-obj_type
|
||||
obj_name = <ls_overwrite>-obj_name.
|
||||
IF sy-subrc <> 0 OR ls_overwrite-decision IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( |Overwrite of package { <ls_overwrite>-obj_type } {
|
||||
<ls_overwrite>-obj_name } undecided| ).
|
||||
ENDIF.
|
||||
|
||||
IF ls_overwrite-decision = 'N'.
|
||||
DELETE ct_results WHERE
|
||||
obj_type = <ls_overwrite>-obj_type AND
|
||||
obj_name = <ls_overwrite>-obj_name.
|
||||
ASSERT sy-subrc = 0.
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD warning_package_find.
|
||||
|
||||
DATA: lv_package TYPE devclass,
|
||||
lt_overwrite_unique TYPE HASHED TABLE OF zif_abapgit_definitions=>ty_overwrite
|
||||
WITH UNIQUE KEY obj_type obj_name devclass,
|
||||
ls_overwrite LIKE LINE OF rt_overwrite,
|
||||
ls_tadir TYPE zif_abapgit_definitions=>ty_tadir.
|
||||
|
||||
DATA: lo_folder_logic TYPE REF TO zcl_abapgit_folder_logic.
|
||||
|
||||
FIELD-SYMBOLS: <ls_result> LIKE LINE OF it_results.
|
||||
|
||||
lo_folder_logic = zcl_abapgit_folder_logic=>get_instance( ).
|
||||
LOOP AT it_results ASSIGNING <ls_result>.
|
||||
|
||||
lv_package = lo_folder_logic->path_to_package(
|
||||
iv_top = io_repo->get_package( )
|
||||
io_dot = io_repo->get_dot_abapgit( )
|
||||
iv_path = <ls_result>-path
|
||||
iv_create_if_not_exists = abap_false ).
|
||||
|
||||
ls_tadir = zcl_abapgit_factory=>get_tadir( )->read_single(
|
||||
iv_object = <ls_result>-obj_type
|
||||
iv_obj_name = <ls_result>-obj_name ).
|
||||
|
||||
IF NOT ls_tadir IS INITIAL AND ls_tadir-devclass <> lv_package.
|
||||
* overwriting object from different package than expected
|
||||
CLEAR ls_overwrite.
|
||||
ls_overwrite-obj_type = <ls_result>-obj_type.
|
||||
ls_overwrite-obj_name = <ls_result>-obj_name.
|
||||
ls_overwrite-devclass = ls_tadir-devclass.
|
||||
INSERT ls_overwrite INTO TABLE lt_overwrite_unique.
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
rt_overwrite = lt_overwrite_unique.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
116
src/objects/core/zcl_abapgit_objects_check.clas.testclasses.abap
Normal file
116
src/objects/core/zcl_abapgit_objects_check.clas.testclasses.abap
Normal file
|
@ -0,0 +1,116 @@
|
|||
CLASS ltcl_warning_overwrite_find DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA:
|
||||
mo_objects TYPE REF TO zcl_abapgit_objects_check,
|
||||
mt_result TYPE zif_abapgit_definitions=>ty_results_tt,
|
||||
mt_overwrite TYPE zif_abapgit_definitions=>ty_overwrite_tt.
|
||||
|
||||
METHODS:
|
||||
setup,
|
||||
warning_overwrite_find_01 FOR TESTING RAISING cx_static_check,
|
||||
warning_overwrite_find_02 FOR TESTING RAISING cx_static_check,
|
||||
warning_overwrite_find_03 FOR TESTING RAISING cx_static_check,
|
||||
warning_overwrite_find_04 FOR TESTING RAISING cx_static_check,
|
||||
|
||||
given_result
|
||||
IMPORTING
|
||||
iv_result_line TYPE string,
|
||||
|
||||
when_warning_overwrite_find.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS zcl_abapgit_objects_check DEFINITION LOCAL FRIENDS ltcl_warning_overwrite_find.
|
||||
|
||||
CLASS ltcl_warning_overwrite_find IMPLEMENTATION.
|
||||
|
||||
METHOD setup.
|
||||
|
||||
CREATE OBJECT mo_objects.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD warning_overwrite_find_01.
|
||||
|
||||
" change remote but not local -> no overwrite
|
||||
given_result( |CLAS;ZAG_UNIT_TEST;;/src/;zag_unit_test.clas.abap;;;;M| ).
|
||||
|
||||
when_warning_overwrite_find( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 0
|
||||
act = lines( mt_overwrite ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD warning_overwrite_find_02.
|
||||
|
||||
" change remote and local -> overwrite
|
||||
given_result( |CLAS;ZAG_UNIT_TEST;;/src/;zag_unit_test.clas.abap;;;M;M| ).
|
||||
|
||||
when_warning_overwrite_find( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 1
|
||||
act = lines( mt_overwrite ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD warning_overwrite_find_03.
|
||||
|
||||
" delete local -> overwrite (since object will be created again from remote)
|
||||
given_result( |CLAS;ZAG_UNIT_TEST;;/src/;zag_unit_test.clas.abap;;;D;| ).
|
||||
|
||||
when_warning_overwrite_find( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 1
|
||||
act = lines( mt_overwrite ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD warning_overwrite_find_04.
|
||||
|
||||
" exists local but not remote -> no overwrite
|
||||
" (object will be in delete confirmation popup: see ZCL_ABAPGIT_SERVICES_GIT->GET_UNNECESSARY_LOCAL_OBJS)
|
||||
given_result( |CLAS;ZAG_UNIT_TEST;;/src/;zag_unit_test.clas.abap;;;A;| ).
|
||||
|
||||
when_warning_overwrite_find( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 0
|
||||
act = lines( mt_overwrite ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD given_result.
|
||||
|
||||
DATA: ls_result LIKE LINE OF mt_result.
|
||||
|
||||
SPLIT iv_result_line
|
||||
AT ';'
|
||||
INTO ls_result-obj_type
|
||||
ls_result-obj_name
|
||||
ls_result-inactive
|
||||
ls_result-path
|
||||
ls_result-filename
|
||||
ls_result-package
|
||||
ls_result-match
|
||||
ls_result-lstate
|
||||
ls_result-rstate.
|
||||
|
||||
INSERT ls_result INTO TABLE mt_result.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD when_warning_overwrite_find.
|
||||
|
||||
mt_overwrite = mo_objects->warning_overwrite_find( mt_result ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
17
src/objects/core/zcl_abapgit_objects_check.clas.xml
Normal file
17
src/objects/core/zcl_abapgit_objects_check.clas.xml
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_ABAPGIT_OBJECTS_CHECK</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>abapGit - Objects Check</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -5,7 +5,7 @@ CLASS zcl_abapgit_objects DEFINITION
|
|||
PUBLIC SECTION.
|
||||
|
||||
TYPES:
|
||||
ty_types_tt TYPE SORTED TABLE OF tadir-object WITH UNIQUE KEY table_line.
|
||||
ty_types_tt TYPE SORTED TABLE OF tadir-object WITH UNIQUE KEY table_line .
|
||||
TYPES:
|
||||
BEGIN OF ty_serialization,
|
||||
files TYPE zif_abapgit_definitions=>ty_files_tt,
|
||||
|
@ -96,65 +96,16 @@ CLASS zcl_abapgit_objects DEFINITION
|
|||
CLASS-DATA gt_obj_serializer_map TYPE ty_obj_serializer_map .
|
||||
CLASS-DATA gt_supported_obj_types TYPE ty_types_tt .
|
||||
|
||||
CLASS-METHODS files_to_deserialize
|
||||
IMPORTING
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo
|
||||
!ii_log TYPE REF TO zif_abapgit_log OPTIONAL
|
||||
RETURNING
|
||||
VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
CLASS-METHODS check_duplicates
|
||||
IMPORTING
|
||||
!it_files TYPE zif_abapgit_definitions=>ty_files_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
CLASS-METHODS prioritize_deser
|
||||
IMPORTING
|
||||
!it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RETURNING
|
||||
VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt .
|
||||
CLASS-METHODS class_name
|
||||
IMPORTING
|
||||
!is_item TYPE zif_abapgit_definitions=>ty_item
|
||||
RETURNING
|
||||
VALUE(rv_class_name) TYPE string .
|
||||
CLASS-METHODS warning_overwrite_adjust
|
||||
IMPORTING
|
||||
!it_overwrite TYPE zif_abapgit_definitions=>ty_overwrite_tt
|
||||
CHANGING
|
||||
!ct_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
CLASS-METHODS checks_adjust
|
||||
IMPORTING
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo
|
||||
!is_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks
|
||||
CHANGING
|
||||
!ct_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
CLASS-METHODS warning_overwrite_find
|
||||
IMPORTING
|
||||
!it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RETURNING
|
||||
VALUE(rt_overwrite) TYPE zif_abapgit_definitions=>ty_overwrite_tt .
|
||||
CLASS-METHODS warning_package_adjust
|
||||
IMPORTING
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo
|
||||
!it_overwrite TYPE zif_abapgit_definitions=>ty_overwrite_tt
|
||||
CHANGING
|
||||
!ct_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
CLASS-METHODS warning_package_find
|
||||
IMPORTING
|
||||
!it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo
|
||||
RETURNING
|
||||
VALUE(rt_overwrite) TYPE zif_abapgit_definitions=>ty_overwrite_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
CLASS-METHODS update_package_tree
|
||||
IMPORTING
|
||||
!iv_package TYPE devclass .
|
||||
|
@ -206,17 +157,6 @@ CLASS zcl_abapgit_objects DEFINITION
|
|||
!it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RETURNING
|
||||
VALUE(rt_items) TYPE zif_abapgit_definitions=>ty_items_tt .
|
||||
CLASS-METHODS filter_files_to_deserialize
|
||||
IMPORTING
|
||||
!it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
!ii_log TYPE REF TO zif_abapgit_log OPTIONAL
|
||||
RETURNING
|
||||
VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt .
|
||||
CLASS-METHODS adjust_namespaces
|
||||
IMPORTING
|
||||
!it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RETURNING
|
||||
VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt .
|
||||
CLASS-METHODS get_deserialize_steps
|
||||
RETURNING
|
||||
VALUE(rt_steps) TYPE zif_abapgit_objects=>ty_step_data_tt .
|
||||
|
@ -230,20 +170,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD adjust_namespaces.
|
||||
|
||||
FIELD-SYMBOLS: <ls_result> LIKE LINE OF rt_results.
|
||||
|
||||
rt_results = it_results.
|
||||
|
||||
LOOP AT rt_results ASSIGNING <ls_result>.
|
||||
REPLACE ALL OCCURRENCES OF '#' IN <ls_result>-obj_name WITH '/'.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
CLASS zcl_abapgit_objects IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD changed_by.
|
||||
|
@ -264,22 +191,6 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD checks_adjust.
|
||||
|
||||
warning_overwrite_adjust(
|
||||
EXPORTING it_overwrite = is_checks-overwrite
|
||||
CHANGING ct_results = ct_results ).
|
||||
|
||||
warning_package_adjust(
|
||||
EXPORTING
|
||||
io_repo = io_repo
|
||||
it_overwrite = is_checks-warning_package
|
||||
CHANGING
|
||||
ct_results = ct_results ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD check_duplicates.
|
||||
|
||||
DATA: lt_files TYPE zif_abapgit_definitions=>ty_files_tt,
|
||||
|
@ -653,10 +564,11 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
|||
|
||||
lt_remote = io_repo->get_files_remote( ).
|
||||
|
||||
lt_results = files_to_deserialize( io_repo = io_repo
|
||||
ii_log = ii_log ).
|
||||
lt_results = zcl_abapgit_file_deserialize=>get_results(
|
||||
io_repo = io_repo
|
||||
ii_log = ii_log ).
|
||||
|
||||
checks_adjust(
|
||||
zcl_abapgit_objects_check=>checks_adjust(
|
||||
EXPORTING
|
||||
io_repo = io_repo
|
||||
is_checks = is_checks
|
||||
|
@ -770,25 +682,7 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
|||
|
||||
METHOD deserialize_checks.
|
||||
|
||||
DATA: lt_results TYPE zif_abapgit_definitions=>ty_results_tt,
|
||||
li_package TYPE REF TO zif_abapgit_sap_package.
|
||||
|
||||
|
||||
lt_results = files_to_deserialize( io_repo ).
|
||||
|
||||
rs_checks-overwrite = warning_overwrite_find( lt_results ).
|
||||
|
||||
rs_checks-warning_package = warning_package_find(
|
||||
io_repo = io_repo
|
||||
it_results = lt_results ).
|
||||
|
||||
IF lines( lt_results ) > 0.
|
||||
li_package = zcl_abapgit_factory=>get_sap_package( io_repo->get_package( ) ).
|
||||
rs_checks-transport-required = li_package->are_changes_recorded_in_tr_req( ).
|
||||
IF NOT rs_checks-transport-required IS INITIAL.
|
||||
rs_checks-transport-type = li_package->get_transport_type( ).
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
rs_checks = zcl_abapgit_objects_check=>deserialize_checks( io_repo ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -867,106 +761,6 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD files_to_deserialize.
|
||||
|
||||
rt_results = adjust_namespaces(
|
||||
prioritize_deser(
|
||||
filter_files_to_deserialize(
|
||||
it_results = zcl_abapgit_file_status=>status( io_repo )
|
||||
ii_log = ii_log ) ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD filter_files_to_deserialize.
|
||||
|
||||
DATA lt_objects LIKE rt_results.
|
||||
DATA lr_object TYPE REF TO zif_abapgit_definitions=>ty_result.
|
||||
DATA ls_item TYPE zif_abapgit_definitions=>ty_item.
|
||||
DATA lv_tabix TYPE sy-tabix.
|
||||
|
||||
rt_results = it_results.
|
||||
|
||||
"preparation for object logging, sort all file entries by objects
|
||||
IF ii_log IS BOUND.
|
||||
lt_objects = rt_results.
|
||||
SORT lt_objects
|
||||
BY obj_type
|
||||
obj_name.
|
||||
DELETE ADJACENT DUPLICATES FROM lt_objects COMPARING obj_type obj_name.
|
||||
DELETE lt_objects WHERE obj_type IS INITIAL AND obj_name IS INITIAL.
|
||||
ENDIF.
|
||||
|
||||
"ignore objects w/o changes
|
||||
DELETE rt_results WHERE match = abap_true. " Full match
|
||||
"log objects w/o changes
|
||||
IF sy-subrc = 0 AND ii_log IS BOUND.
|
||||
SORT rt_results BY obj_type obj_name.
|
||||
LOOP AT lt_objects REFERENCE INTO lr_object.
|
||||
lv_tabix = sy-tabix.
|
||||
READ TABLE rt_results WITH KEY obj_type = lr_object->obj_type
|
||||
obj_name = lr_object->obj_name
|
||||
BINARY SEARCH TRANSPORTING NO FIELDS.
|
||||
IF sy-subrc <> 0.
|
||||
"all parts of the objects have not changed
|
||||
ls_item-devclass = lr_object->package.
|
||||
ls_item-obj_type = lr_object->obj_type.
|
||||
ls_item-obj_name = lr_object->obj_name.
|
||||
ii_log->add_success(
|
||||
iv_msg = |Object { ls_item-obj_name } (type { ls_item-obj_type }) not changed; no import required|
|
||||
is_item = ls_item ).
|
||||
"ignore object for further messages
|
||||
DELETE lt_objects INDEX lv_tabix.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
|
||||
"ignore objects w/o object type
|
||||
DELETE rt_results WHERE obj_type IS INITIAL.
|
||||
"log objects w/o object type
|
||||
IF sy-subrc = 0 AND ii_log IS BOUND.
|
||||
LOOP AT lt_objects REFERENCE INTO lr_object WHERE obj_type IS INITIAL.
|
||||
CHECK lr_object->obj_name IS NOT INITIAL.
|
||||
ls_item-devclass = lr_object->package.
|
||||
ls_item-obj_type = lr_object->obj_type.
|
||||
ls_item-obj_name = lr_object->obj_name.
|
||||
ii_log->add_warning(
|
||||
iv_msg = |Object type for { ls_item-obj_name } not defined - will be ignored by abapGit|
|
||||
is_item = ls_item ).
|
||||
ENDLOOP.
|
||||
DELETE lt_objects WHERE obj_type IS INITIAL.
|
||||
ENDIF.
|
||||
|
||||
"ignore objects that exists only local
|
||||
DELETE rt_results WHERE lstate = zif_abapgit_definitions=>c_state-added AND rstate IS INITIAL.
|
||||
"ignore objects that where deleted remotely
|
||||
DELETE rt_results WHERE rstate = zif_abapgit_definitions=>c_state-deleted.
|
||||
"log objects that exists only local or where deleted remotely
|
||||
IF sy-subrc = 0 AND ii_log IS BOUND.
|
||||
SORT rt_results BY obj_type obj_name.
|
||||
LOOP AT lt_objects REFERENCE INTO lr_object.
|
||||
lv_tabix = sy-tabix.
|
||||
READ TABLE rt_results WITH KEY obj_type = lr_object->obj_type
|
||||
obj_name = lr_object->obj_name
|
||||
BINARY SEARCH TRANSPORTING NO FIELDS.
|
||||
IF sy-subrc <> 0.
|
||||
"all parts exists only local
|
||||
"no log message; ignore object for further messages
|
||||
DELETE lt_objects INDEX lv_tabix.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
|
||||
SORT rt_results
|
||||
BY obj_type ASCENDING
|
||||
obj_name ASCENDING
|
||||
rstate DESCENDING " ensures that non-empty rstate is kept
|
||||
lstate DESCENDING. " ensures that non-empty lstate is kept
|
||||
DELETE ADJACENT DUPLICATES FROM rt_results COMPARING obj_type obj_name.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_deserialize_steps.
|
||||
FIELD-SYMBOLS: <ls_step> TYPE LINE OF zif_abapgit_objects=>ty_step_data_tt.
|
||||
|
||||
|
@ -1116,91 +910,6 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD prioritize_deser.
|
||||
|
||||
* todo, refactor this method
|
||||
|
||||
FIELD-SYMBOLS: <ls_result> LIKE LINE OF it_results.
|
||||
|
||||
* WEBI has to be handled before SPRX.
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'WEBI'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* SPRX has to be handled before depended objects CLAS/INFT/TABL etc.
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'SPRX'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* XSLT has to be handled before CLAS/PROG
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'XSLT'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* PROG before internet services, as the services might use the screens
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'PROG'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* ISAP has to be handled before ISRP
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'IASP'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* ENHS has to be handled before ENHO
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'ENHS'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* DDLS has to be handled before DCLS
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'DDLS'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* IOBJ has to be handled before ODSO
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'IOBJ'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* TOBJ has to be handled before SCP1
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'TOBJ'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* OTGR has to be handled before CHAR
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'OTGR'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT it_results ASSIGNING <ls_result>
|
||||
WHERE obj_type <> 'IASP'
|
||||
AND obj_type <> 'PROG'
|
||||
AND obj_type <> 'XSLT'
|
||||
AND obj_type <> 'PINF'
|
||||
AND obj_type <> 'DEVC'
|
||||
AND obj_type <> 'ENHS'
|
||||
AND obj_type <> 'DDLS'
|
||||
AND obj_type <> 'SPRX'
|
||||
AND obj_type <> 'WEBI'
|
||||
AND obj_type <> 'IOBJ'
|
||||
AND obj_type <> 'TOBJ'
|
||||
AND obj_type <> 'OTGR'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* PINF after everything as it can expose objects
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'PINF'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
* DEVC after PINF, as it can refer for package interface usage
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'DEVC'.
|
||||
APPEND <ls_result> TO rt_results.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD serialize.
|
||||
|
||||
DATA: li_obj TYPE REF TO zif_abapgit_object,
|
||||
|
@ -1252,8 +961,8 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
|||
|
||||
METHOD supported_list.
|
||||
|
||||
DATA: lt_objects TYPE STANDARD TABLE OF ko100,
|
||||
ls_item TYPE zif_abapgit_definitions=>ty_item.
|
||||
DATA: lt_objects TYPE STANDARD TABLE OF ko100,
|
||||
ls_item TYPE zif_abapgit_definitions=>ty_item.
|
||||
|
||||
FIELD-SYMBOLS <ls_object> LIKE LINE OF lt_objects.
|
||||
|
||||
|
@ -1301,140 +1010,4 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
|||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD warning_overwrite_adjust.
|
||||
|
||||
DATA: lt_overwrite LIKE it_overwrite,
|
||||
ls_overwrite LIKE LINE OF lt_overwrite.
|
||||
|
||||
FIELD-SYMBOLS: <ls_overwrite> LIKE LINE OF lt_overwrite.
|
||||
|
||||
|
||||
* make sure to get the current status, as something might have changed in the meanwhile
|
||||
lt_overwrite = warning_overwrite_find( ct_results ).
|
||||
|
||||
LOOP AT lt_overwrite ASSIGNING <ls_overwrite>.
|
||||
|
||||
READ TABLE it_overwrite INTO ls_overwrite
|
||||
WITH TABLE KEY object_type_and_name
|
||||
COMPONENTS obj_type = <ls_overwrite>-obj_type
|
||||
obj_name = <ls_overwrite>-obj_name.
|
||||
IF sy-subrc <> 0 OR ls_overwrite-decision IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( |Overwrite { <ls_overwrite>-obj_type } {
|
||||
<ls_overwrite>-obj_name } undecided| ).
|
||||
ENDIF.
|
||||
|
||||
IF ls_overwrite-decision = 'N'.
|
||||
DELETE ct_results WHERE
|
||||
obj_type = <ls_overwrite>-obj_type AND
|
||||
obj_name = <ls_overwrite>-obj_name.
|
||||
ASSERT sy-subrc = 0.
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD warning_overwrite_find.
|
||||
|
||||
DATA: ls_overwrite LIKE LINE OF rt_overwrite.
|
||||
|
||||
FIELD-SYMBOLS: <ls_result> LIKE LINE OF it_results.
|
||||
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE NOT obj_type IS INITIAL.
|
||||
IF <ls_result>-lstate IS NOT INITIAL
|
||||
AND NOT ( <ls_result>-lstate = zif_abapgit_definitions=>c_state-added
|
||||
AND <ls_result>-rstate IS INITIAL )
|
||||
OR ( <ls_result>-lstate IS INITIAL
|
||||
AND <ls_result>-rstate = zif_abapgit_definitions=>c_state-deleted ).
|
||||
" current object has been modified or deleted locally, add to table
|
||||
CLEAR ls_overwrite.
|
||||
MOVE-CORRESPONDING <ls_result> TO ls_overwrite.
|
||||
APPEND ls_overwrite TO rt_overwrite.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
SORT rt_overwrite.
|
||||
DELETE ADJACENT DUPLICATES FROM rt_overwrite.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD warning_package_adjust.
|
||||
|
||||
DATA: lt_overwrite LIKE it_overwrite,
|
||||
ls_overwrite LIKE LINE OF lt_overwrite.
|
||||
|
||||
FIELD-SYMBOLS: <ls_overwrite> LIKE LINE OF lt_overwrite.
|
||||
|
||||
|
||||
* make sure to get the current status, as something might have changed in the meanwhile
|
||||
lt_overwrite = warning_package_find(
|
||||
it_results = ct_results
|
||||
io_repo = io_repo ).
|
||||
|
||||
LOOP AT lt_overwrite ASSIGNING <ls_overwrite>.
|
||||
|
||||
READ TABLE it_overwrite INTO ls_overwrite
|
||||
WITH TABLE KEY object_type_and_name
|
||||
COMPONENTS obj_type = <ls_overwrite>-obj_type
|
||||
obj_name = <ls_overwrite>-obj_name.
|
||||
IF sy-subrc <> 0 OR ls_overwrite-decision IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( |Overwrite of package { <ls_overwrite>-obj_type } {
|
||||
<ls_overwrite>-obj_name } undecided| ).
|
||||
ENDIF.
|
||||
|
||||
IF ls_overwrite-decision = 'N'.
|
||||
DELETE ct_results WHERE
|
||||
obj_type = <ls_overwrite>-obj_type AND
|
||||
obj_name = <ls_overwrite>-obj_name.
|
||||
ASSERT sy-subrc = 0.
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD warning_package_find.
|
||||
|
||||
DATA: lv_package TYPE devclass,
|
||||
lt_overwrite_unique TYPE HASHED TABLE OF zif_abapgit_definitions=>ty_overwrite
|
||||
WITH UNIQUE KEY obj_type obj_name devclass,
|
||||
ls_overwrite LIKE LINE OF rt_overwrite,
|
||||
ls_tadir TYPE zif_abapgit_definitions=>ty_tadir.
|
||||
|
||||
DATA: lo_folder_logic TYPE REF TO zcl_abapgit_folder_logic.
|
||||
|
||||
FIELD-SYMBOLS: <ls_result> LIKE LINE OF it_results.
|
||||
|
||||
lo_folder_logic = zcl_abapgit_folder_logic=>get_instance( ).
|
||||
LOOP AT it_results ASSIGNING <ls_result>.
|
||||
|
||||
lv_package = lo_folder_logic->path_to_package(
|
||||
iv_top = io_repo->get_package( )
|
||||
io_dot = io_repo->get_dot_abapgit( )
|
||||
iv_path = <ls_result>-path
|
||||
iv_create_if_not_exists = abap_false ).
|
||||
|
||||
ls_tadir = zcl_abapgit_factory=>get_tadir( )->read_single(
|
||||
iv_object = <ls_result>-obj_type
|
||||
iv_obj_name = <ls_result>-obj_name ).
|
||||
|
||||
IF NOT ls_tadir IS INITIAL AND ls_tadir-devclass <> lv_package.
|
||||
* overwriting object from different package than expected
|
||||
CLEAR ls_overwrite.
|
||||
ls_overwrite-obj_type = <ls_result>-obj_type.
|
||||
ls_overwrite-obj_name = <ls_result>-obj_name.
|
||||
ls_overwrite-devclass = ls_tadir-devclass.
|
||||
INSERT ls_overwrite INTO TABLE lt_overwrite_unique.
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
rt_overwrite = lt_overwrite_unique.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
|
@ -426,470 +426,3 @@ CLASS ltcl_check_objects_locked IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_filter_files_to_deser DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA:
|
||||
mo_objects TYPE REF TO zcl_abapgit_objects,
|
||||
mt_result TYPE zif_abapgit_definitions=>ty_results_tt.
|
||||
|
||||
METHODS:
|
||||
setup,
|
||||
filter_duplicates FOR TESTING RAISING cx_static_check,
|
||||
filter_duplicates_rstate FOR TESTING RAISING cx_static_check,
|
||||
filter_duplicates_lstate FOR TESTING RAISING cx_static_check,
|
||||
filter_duplicates_match FOR TESTING RAISING cx_static_check,
|
||||
filter_duplicates_init_objtype FOR TESTING RAISING cx_static_check,
|
||||
filter_duplicates_changes_01 FOR TESTING RAISING cx_static_check,
|
||||
filter_duplicates_changes_02 FOR TESTING RAISING cx_static_check,
|
||||
filter_duplicates_deleted FOR TESTING RAISING cx_static_check,
|
||||
|
||||
given_result
|
||||
IMPORTING
|
||||
iv_result_line TYPE string,
|
||||
|
||||
when_filter_is_applied.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS zcl_abapgit_objects DEFINITION LOCAL FRIENDS ltcl_filter_files_to_deser.
|
||||
|
||||
CLASS ltcl_filter_files_to_deser IMPLEMENTATION.
|
||||
|
||||
METHOD setup.
|
||||
|
||||
CREATE OBJECT mo_objects.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD filter_duplicates.
|
||||
|
||||
given_result( |PROG;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.abap;;;;| ).
|
||||
given_result( |PROG;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.xml;;;;| ).
|
||||
|
||||
when_filter_is_applied( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 1
|
||||
act = lines( mt_result ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD filter_duplicates_rstate.
|
||||
|
||||
DATA: ls_exp LIKE LINE OF mt_result,
|
||||
ls_act LIKE LINE OF mt_result.
|
||||
|
||||
given_result( |PROG;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.abap;;;;| ).
|
||||
given_result( |PROG;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.xml;;;;A| ).
|
||||
|
||||
READ TABLE mt_result INDEX 2 INTO ls_exp.
|
||||
|
||||
when_filter_is_applied( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 1
|
||||
act = lines( mt_result ) ).
|
||||
|
||||
READ TABLE mt_result INDEX 1 INTO ls_act.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = ls_exp
|
||||
act = ls_act ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD filter_duplicates_lstate.
|
||||
|
||||
given_result( |PROG;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.abap;;;A;| ).
|
||||
given_result( |PROG;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.xml;;;A;| ).
|
||||
|
||||
when_filter_is_applied( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 0
|
||||
act = lines( mt_result ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD filter_duplicates_match.
|
||||
|
||||
given_result( |PROG;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.abap;;X;;| ).
|
||||
given_result( |PROG;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.xml;;X;;| ).
|
||||
|
||||
when_filter_is_applied( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 0
|
||||
act = lines( mt_result ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD filter_duplicates_init_objtype.
|
||||
|
||||
given_result( |;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.abap;;;;| ).
|
||||
given_result( |;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.xml;;;;| ).
|
||||
|
||||
when_filter_is_applied( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 0
|
||||
act = lines( mt_result ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD filter_duplicates_changes_01.
|
||||
|
||||
DATA: ls_exp LIKE LINE OF mt_result,
|
||||
ls_act LIKE LINE OF mt_result.
|
||||
|
||||
" test different order since SORT object,obj_name is non-deterministic
|
||||
given_result( |CLAS;ZAG_UNIT_TEST;;/src/;zag_unit_test.clas.abap;;;M;M| ).
|
||||
given_result( |CLAS;ZAG_UNIT_TEST;;/src/;zag_unit_test.clas.testclasses.abap;;;;M| ).
|
||||
|
||||
READ TABLE mt_result INDEX 1 INTO ls_exp.
|
||||
|
||||
when_filter_is_applied( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 1
|
||||
act = lines( mt_result ) ).
|
||||
|
||||
READ TABLE mt_result INDEX 1 INTO ls_act.
|
||||
|
||||
" expect M,M
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = ls_exp
|
||||
act = ls_act ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD filter_duplicates_changes_02.
|
||||
|
||||
DATA: ls_exp LIKE LINE OF mt_result,
|
||||
ls_act LIKE LINE OF mt_result.
|
||||
|
||||
" test different order since SORT object,obj_name is non-deterministic
|
||||
given_result( |CLAS;ZAG_UNIT_TEST;;/src/;zag_unit_test.clas.abap;;;;M| ).
|
||||
given_result( |CLAS;ZAG_UNIT_TEST;;/src/;zag_unit_test.clas.testclasses.abap;;;M;M| ).
|
||||
|
||||
READ TABLE mt_result INDEX 2 INTO ls_exp.
|
||||
|
||||
when_filter_is_applied( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 1
|
||||
act = lines( mt_result ) ).
|
||||
|
||||
READ TABLE mt_result INDEX 1 INTO ls_act.
|
||||
|
||||
" expect M,M
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = ls_exp
|
||||
act = ls_act ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD filter_duplicates_deleted.
|
||||
|
||||
given_result( |PROG;ZAG_UNIT_TEST;;/src/;zag_unit_test.prog.xml;;;;D| ).
|
||||
|
||||
when_filter_is_applied( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 0
|
||||
act = lines( mt_result ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD given_result.
|
||||
|
||||
DATA: ls_result LIKE LINE OF mt_result.
|
||||
|
||||
SPLIT iv_result_line
|
||||
AT ';'
|
||||
INTO ls_result-obj_type
|
||||
ls_result-obj_name
|
||||
ls_result-inactive
|
||||
ls_result-path
|
||||
ls_result-filename
|
||||
ls_result-package
|
||||
ls_result-match
|
||||
ls_result-lstate
|
||||
ls_result-rstate.
|
||||
|
||||
INSERT ls_result INTO TABLE mt_result.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD when_filter_is_applied.
|
||||
|
||||
mt_result = mo_objects->filter_files_to_deserialize( mt_result ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_adjust_namespaces DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS:
|
||||
setup,
|
||||
adjust_namespaces FOR TESTING RAISING cx_static_check.
|
||||
|
||||
DATA:
|
||||
mo_objects TYPE REF TO zcl_abapgit_objects.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS zcl_abapgit_objects DEFINITION LOCAL FRIENDS ltcl_adjust_namespaces.
|
||||
|
||||
CLASS ltcl_adjust_namespaces IMPLEMENTATION.
|
||||
|
||||
METHOD setup.
|
||||
|
||||
CREATE OBJECT mo_objects.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD adjust_namespaces.
|
||||
|
||||
DATA: lt_input TYPE zif_abapgit_definitions=>ty_results_tt,
|
||||
lt_ouptut TYPE zif_abapgit_definitions=>ty_results_tt,
|
||||
ls_result LIKE LINE OF lt_input.
|
||||
|
||||
ls_result-obj_name = |#SAP#ZTEST|.
|
||||
INSERT ls_result INTO TABLE lt_input.
|
||||
|
||||
ls_result-obj_name = |ZTEST|.
|
||||
INSERT ls_result INTO TABLE lt_input.
|
||||
|
||||
lt_ouptut = mo_objects->adjust_namespaces( lt_input ).
|
||||
|
||||
READ TABLE lt_ouptut INTO ls_result INDEX 1.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = |/SAP/ZTEST|
|
||||
act = ls_result-obj_name ).
|
||||
|
||||
READ TABLE lt_ouptut INTO ls_result INDEX 2.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = |ZTEST|
|
||||
act = ls_result-obj_name ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_prio_deserialization DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS:
|
||||
setup,
|
||||
ddls_before_dcls FOR TESTING RAISING cx_static_check,
|
||||
|
||||
given
|
||||
IMPORTING
|
||||
iv_object_type TYPE trobjtype,
|
||||
when_deser_is_priorized,
|
||||
then
|
||||
IMPORTING
|
||||
iv_exp_object_type TYPE trobjtype.
|
||||
|
||||
DATA:
|
||||
mo_objects TYPE REF TO zcl_abapgit_objects,
|
||||
mt_input TYPE zif_abapgit_definitions=>ty_results_tt,
|
||||
mt_output TYPE zif_abapgit_definitions=>ty_results_tt,
|
||||
mv_exp_output_tabix TYPE i.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS zcl_abapgit_objects DEFINITION LOCAL FRIENDS ltcl_prio_deserialization.
|
||||
|
||||
CLASS ltcl_prio_deserialization IMPLEMENTATION.
|
||||
|
||||
METHOD setup.
|
||||
|
||||
CREATE OBJECT mo_objects.
|
||||
mv_exp_output_tabix = 0.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD ddls_before_dcls.
|
||||
|
||||
given( 'DCLS' ).
|
||||
given( 'DDLS' ).
|
||||
given( 'DCLS' ).
|
||||
given( 'DDLS' ).
|
||||
|
||||
when_deser_is_priorized( ).
|
||||
|
||||
then( 'DDLS' ).
|
||||
then( 'DDLS' ).
|
||||
then( 'DCLS' ).
|
||||
then( 'DCLS' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD given.
|
||||
|
||||
DATA: ls_input LIKE LINE OF mt_input.
|
||||
|
||||
ls_input-obj_type = iv_object_type.
|
||||
INSERT ls_input INTO TABLE mt_input.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD when_deser_is_priorized.
|
||||
|
||||
mt_output = mo_objects->prioritize_deser( mt_input ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD then.
|
||||
|
||||
DATA: ls_output LIKE LINE OF mt_output.
|
||||
|
||||
mv_exp_output_tabix = mv_exp_output_tabix + 1.
|
||||
|
||||
READ TABLE mt_output INTO ls_output INDEX mv_exp_output_tabix.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = iv_exp_object_type
|
||||
act = ls_output-obj_type ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_warning_overwrite_find DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA:
|
||||
mo_objects TYPE REF TO zcl_abapgit_objects,
|
||||
mt_result TYPE zif_abapgit_definitions=>ty_results_tt,
|
||||
mt_overwrite TYPE zif_abapgit_definitions=>ty_overwrite_tt.
|
||||
|
||||
METHODS:
|
||||
setup,
|
||||
warning_overwrite_find_01 FOR TESTING RAISING cx_static_check,
|
||||
warning_overwrite_find_02 FOR TESTING RAISING cx_static_check,
|
||||
warning_overwrite_find_03 FOR TESTING RAISING cx_static_check,
|
||||
warning_overwrite_find_04 FOR TESTING RAISING cx_static_check,
|
||||
|
||||
given_result
|
||||
IMPORTING
|
||||
iv_result_line TYPE string,
|
||||
|
||||
when_warning_overwrite_find.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS zcl_abapgit_objects DEFINITION LOCAL FRIENDS ltcl_warning_overwrite_find.
|
||||
|
||||
CLASS ltcl_warning_overwrite_find IMPLEMENTATION.
|
||||
|
||||
METHOD setup.
|
||||
|
||||
CREATE OBJECT mo_objects.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD warning_overwrite_find_01.
|
||||
|
||||
" change remote but not local -> no overwrite
|
||||
given_result( |CLAS;ZAG_UNIT_TEST;;/src/;zag_unit_test.clas.abap;;;;M| ).
|
||||
|
||||
when_warning_overwrite_find( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 0
|
||||
act = lines( mt_overwrite ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD warning_overwrite_find_02.
|
||||
|
||||
" change remote and local -> overwrite
|
||||
given_result( |CLAS;ZAG_UNIT_TEST;;/src/;zag_unit_test.clas.abap;;;M;M| ).
|
||||
|
||||
when_warning_overwrite_find( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 1
|
||||
act = lines( mt_overwrite ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD warning_overwrite_find_03.
|
||||
|
||||
" delete local -> overwrite (since object will be created again from remote)
|
||||
given_result( |CLAS;ZAG_UNIT_TEST;;/src/;zag_unit_test.clas.abap;;;D;| ).
|
||||
|
||||
when_warning_overwrite_find( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 1
|
||||
act = lines( mt_overwrite ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD warning_overwrite_find_04.
|
||||
|
||||
" exists local but not remote -> no overwrite
|
||||
" (object will be in delete confirmation popup: see ZCL_ABAPGIT_SERVICES_GIT->GET_UNNECESSARY_LOCAL_OBJS)
|
||||
given_result( |CLAS;ZAG_UNIT_TEST;;/src/;zag_unit_test.clas.abap;;;A;| ).
|
||||
|
||||
when_warning_overwrite_find( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 0
|
||||
act = lines( mt_overwrite ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD given_result.
|
||||
|
||||
DATA: ls_result LIKE LINE OF mt_result.
|
||||
|
||||
SPLIT iv_result_line
|
||||
AT ';'
|
||||
INTO ls_result-obj_type
|
||||
ls_result-obj_name
|
||||
ls_result-inactive
|
||||
ls_result-path
|
||||
ls_result-filename
|
||||
ls_result-package
|
||||
ls_result-match
|
||||
ls_result-lstate
|
||||
ls_result-rstate.
|
||||
|
||||
INSERT ls_result INTO TABLE mt_result.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD when_warning_overwrite_find.
|
||||
|
||||
mt_overwrite = mo_objects->warning_overwrite_find( mt_result ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
|
Loading…
Reference in New Issue
Block a user