mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 04:36:49 +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>
|
|
@ -96,65 +96,16 @@ CLASS zcl_abapgit_objects DEFINITION
|
||||||
CLASS-DATA gt_obj_serializer_map TYPE ty_obj_serializer_map .
|
CLASS-DATA gt_obj_serializer_map TYPE ty_obj_serializer_map .
|
||||||
CLASS-DATA gt_supported_obj_types TYPE ty_types_tt .
|
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
|
CLASS-METHODS check_duplicates
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!it_files TYPE zif_abapgit_definitions=>ty_files_tt
|
!it_files TYPE zif_abapgit_definitions=>ty_files_tt
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
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
|
CLASS-METHODS class_name
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!is_item TYPE zif_abapgit_definitions=>ty_item
|
!is_item TYPE zif_abapgit_definitions=>ty_item
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rv_class_name) TYPE string .
|
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
|
CLASS-METHODS update_package_tree
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!iv_package TYPE devclass .
|
!iv_package TYPE devclass .
|
||||||
|
@ -206,17 +157,6 @@ CLASS zcl_abapgit_objects DEFINITION
|
||||||
!it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
!it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rt_items) TYPE zif_abapgit_definitions=>ty_items_tt .
|
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
|
CLASS-METHODS get_deserialize_steps
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rt_steps) TYPE zif_abapgit_objects=>ty_step_data_tt .
|
VALUE(rt_steps) TYPE zif_abapgit_objects=>ty_step_data_tt .
|
||||||
|
@ -230,20 +170,7 @@ ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
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.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD changed_by.
|
METHOD changed_by.
|
||||||
|
@ -264,22 +191,6 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
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.
|
METHOD check_duplicates.
|
||||||
|
|
||||||
DATA: lt_files TYPE zif_abapgit_definitions=>ty_files_tt,
|
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_remote = io_repo->get_files_remote( ).
|
||||||
|
|
||||||
lt_results = files_to_deserialize( io_repo = io_repo
|
lt_results = zcl_abapgit_file_deserialize=>get_results(
|
||||||
|
io_repo = io_repo
|
||||||
ii_log = ii_log ).
|
ii_log = ii_log ).
|
||||||
|
|
||||||
checks_adjust(
|
zcl_abapgit_objects_check=>checks_adjust(
|
||||||
EXPORTING
|
EXPORTING
|
||||||
io_repo = io_repo
|
io_repo = io_repo
|
||||||
is_checks = is_checks
|
is_checks = is_checks
|
||||||
|
@ -770,25 +682,7 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD deserialize_checks.
|
METHOD deserialize_checks.
|
||||||
|
|
||||||
DATA: lt_results TYPE zif_abapgit_definitions=>ty_results_tt,
|
rs_checks = zcl_abapgit_objects_check=>deserialize_checks( io_repo ).
|
||||||
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.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
@ -867,106 +761,6 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
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.
|
METHOD get_deserialize_steps.
|
||||||
FIELD-SYMBOLS: <ls_step> TYPE LINE OF zif_abapgit_objects=>ty_step_data_tt.
|
FIELD-SYMBOLS: <ls_step> TYPE LINE OF zif_abapgit_objects=>ty_step_data_tt.
|
||||||
|
|
||||||
|
@ -1116,91 +910,6 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
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.
|
METHOD serialize.
|
||||||
|
|
||||||
DATA: li_obj TYPE REF TO zif_abapgit_object,
|
DATA: li_obj TYPE REF TO zif_abapgit_object,
|
||||||
|
@ -1301,140 +1010,4 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
ENDMETHOD.
|
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.
|
ENDCLASS.
|
||||||
|
|
|
@ -426,470 +426,3 @@ CLASS ltcl_check_objects_locked IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
ENDCLASS.
|
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