mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 04:36:49 +08:00

Issue #2579: diff still shown after pull of ENHO hooks (implicit enhancements i.e. code added at start/end of existing methods, etc.) Reason: if the author has created and deleted implicit enhancements in the original system, the numbering doesn't start from 1 (this is the numbering we can see for the statement ENHANCEMENT, for instance ENHANCEMENT 1. ... ENDENHANCEMENT.) When pulling in another system, the numbering will start from 1, so it will differ from the source. As this enhancement number is serialized by abapGit in the XML, it will detect a difference. Correction: the method SERIALIZE of class ZCL_ABAPGIT_OBJECT_ENHO_HOOK is changed so that to not serialize the enhancement number.
204 lines
7.0 KiB
ABAP
204 lines
7.0 KiB
ABAP
CLASS zcl_abapgit_object_enho_hook DEFINITION PUBLIC.
|
|
PUBLIC SECTION.
|
|
METHODS: constructor
|
|
IMPORTING
|
|
is_item TYPE zif_abapgit_definitions=>ty_item
|
|
io_files TYPE REF TO zcl_abapgit_objects_files.
|
|
|
|
INTERFACES: zif_abapgit_object_enho.
|
|
|
|
PRIVATE SECTION.
|
|
TYPES: BEGIN OF ty_spaces,
|
|
full_name TYPE string.
|
|
TYPES: spaces TYPE STANDARD TABLE OF i WITH DEFAULT KEY,
|
|
END OF ty_spaces.
|
|
|
|
TYPES: ty_spaces_tt TYPE STANDARD TABLE OF ty_spaces WITH DEFAULT KEY.
|
|
|
|
DATA: ms_item TYPE zif_abapgit_definitions=>ty_item.
|
|
DATA: mo_files TYPE REF TO zcl_abapgit_objects_files.
|
|
|
|
METHODS hook_impl_deserialize
|
|
IMPORTING it_spaces TYPE ty_spaces_tt
|
|
CHANGING ct_impl TYPE enh_hook_impl_it
|
|
RAISING zcx_abapgit_exception.
|
|
|
|
METHODS hook_impl_serialize
|
|
EXPORTING et_spaces TYPE ty_spaces_tt
|
|
CHANGING ct_impl TYPE enh_hook_impl_it
|
|
RAISING zcx_abapgit_exception.
|
|
|
|
ENDCLASS.
|
|
|
|
CLASS zcl_abapgit_object_enho_hook IMPLEMENTATION.
|
|
|
|
METHOD constructor.
|
|
ms_item = is_item.
|
|
mo_files = io_files.
|
|
ENDMETHOD.
|
|
|
|
METHOD zif_abapgit_object_enho~serialize.
|
|
|
|
DATA: lv_shorttext TYPE string,
|
|
lo_hook_impl TYPE REF TO cl_enh_tool_hook_impl,
|
|
ls_original_object TYPE enh_hook_admin,
|
|
lt_spaces TYPE ty_spaces_tt,
|
|
lt_enhancements TYPE enh_hook_impl_it.
|
|
|
|
FIELD-SYMBOLS: <ls_enhancement> LIKE LINE OF lt_enhancements.
|
|
|
|
|
|
lo_hook_impl ?= ii_enh_tool.
|
|
|
|
lv_shorttext = lo_hook_impl->if_enh_object_docu~get_shorttext( ).
|
|
lo_hook_impl->get_original_object(
|
|
IMPORTING
|
|
pgmid = ls_original_object-pgmid
|
|
obj_name = ls_original_object-org_obj_name
|
|
obj_type = ls_original_object-org_obj_type
|
|
main_type = ls_original_object-org_main_type
|
|
main_name = ls_original_object-org_main_name
|
|
program = ls_original_object-programname ).
|
|
ls_original_object-include_bound = lo_hook_impl->get_include_bound( ).
|
|
lt_enhancements = lo_hook_impl->get_hook_impls( ).
|
|
|
|
LOOP AT lt_enhancements ASSIGNING <ls_enhancement>.
|
|
CLEAR: <ls_enhancement>-extid,
|
|
<ls_enhancement>-id.
|
|
ENDLOOP.
|
|
|
|
hook_impl_serialize(
|
|
IMPORTING et_spaces = lt_spaces
|
|
CHANGING ct_impl = lt_enhancements ).
|
|
|
|
io_xml->add( iv_name = 'TOOL'
|
|
ig_data = ii_enh_tool->get_tool( ) ).
|
|
io_xml->add( ig_data = lv_shorttext
|
|
iv_name = 'SHORTTEXT' ).
|
|
io_xml->add( ig_data = ls_original_object
|
|
iv_name = 'ORIGINAL_OBJECT' ).
|
|
io_xml->add( iv_name = 'ENHANCEMENTS'
|
|
ig_data = lt_enhancements ).
|
|
io_xml->add( iv_name = 'SPACES'
|
|
ig_data = lt_spaces ).
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD hook_impl_serialize.
|
|
* handle normalization of XML values
|
|
* i.e. remove leading spaces
|
|
|
|
FIELD-SYMBOLS: <ls_impl> LIKE LINE OF ct_impl,
|
|
<ls_space> LIKE LINE OF et_spaces,
|
|
<lv_space> TYPE i,
|
|
<lv_line> TYPE string.
|
|
|
|
|
|
LOOP AT ct_impl ASSIGNING <ls_impl>.
|
|
APPEND INITIAL LINE TO et_spaces ASSIGNING <ls_space>.
|
|
<ls_space>-full_name = <ls_impl>-full_name.
|
|
LOOP AT <ls_impl>-source ASSIGNING <lv_line>.
|
|
APPEND INITIAL LINE TO <ls_space>-spaces ASSIGNING <lv_space>.
|
|
WHILE strlen( <lv_line> ) >= 1 AND <lv_line>(1) = ` `.
|
|
<lv_line> = <lv_line>+1.
|
|
<lv_space> = <lv_space> + 1.
|
|
ENDWHILE.
|
|
ENDLOOP.
|
|
ENDLOOP.
|
|
ENDMETHOD.
|
|
|
|
METHOD hook_impl_deserialize.
|
|
|
|
FIELD-SYMBOLS: <ls_impl> LIKE LINE OF ct_impl,
|
|
<lv_line> TYPE string,
|
|
<lv_space> TYPE i,
|
|
<ls_spaces> LIKE LINE OF it_spaces.
|
|
|
|
|
|
LOOP AT ct_impl ASSIGNING <ls_impl>.
|
|
READ TABLE it_spaces ASSIGNING <ls_spaces> WITH KEY full_name = <ls_impl>-full_name.
|
|
IF sy-subrc = 0.
|
|
LOOP AT <ls_impl>-source ASSIGNING <lv_line>.
|
|
READ TABLE <ls_spaces>-spaces ASSIGNING <lv_space> INDEX sy-tabix.
|
|
IF sy-subrc = 0 AND <lv_space> > 0.
|
|
DO <lv_space> TIMES.
|
|
CONCATENATE space <lv_line> INTO <lv_line> RESPECTING BLANKS.
|
|
ENDDO.
|
|
ENDIF.
|
|
ENDLOOP.
|
|
ENDIF.
|
|
ENDLOOP.
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD zif_abapgit_object_enho~deserialize.
|
|
|
|
DATA: lv_shorttext TYPE string,
|
|
lo_hook_impl TYPE REF TO cl_enh_tool_hook_impl,
|
|
li_tool TYPE REF TO if_enh_tool,
|
|
lv_enhname TYPE enhname,
|
|
lv_package TYPE devclass,
|
|
ls_original_object TYPE enh_hook_admin,
|
|
lt_spaces TYPE ty_spaces_tt,
|
|
lt_enhancements TYPE enh_hook_impl_it,
|
|
lx_enh_root TYPE REF TO cx_enh_root.
|
|
|
|
FIELD-SYMBOLS: <ls_enhancement> LIKE LINE OF lt_enhancements.
|
|
|
|
|
|
io_xml->read( EXPORTING iv_name = 'SHORTTEXT'
|
|
CHANGING cg_data = lv_shorttext ).
|
|
io_xml->read( EXPORTING iv_name = 'ORIGINAL_OBJECT'
|
|
CHANGING cg_data = ls_original_object ).
|
|
io_xml->read( EXPORTING iv_name = 'ENHANCEMENTS'
|
|
CHANGING cg_data = lt_enhancements ).
|
|
io_xml->read( EXPORTING iv_name = 'SPACES'
|
|
CHANGING cg_data = lt_spaces ).
|
|
|
|
hook_impl_deserialize( EXPORTING it_spaces = lt_spaces
|
|
CHANGING ct_impl = lt_enhancements ).
|
|
|
|
lv_enhname = ms_item-obj_name.
|
|
lv_package = iv_package.
|
|
TRY.
|
|
cl_enh_factory=>create_enhancement(
|
|
EXPORTING
|
|
enhname = lv_enhname
|
|
enhtype = cl_abstract_enh_tool_redef=>credefinition
|
|
enhtooltype = cl_enh_tool_hook_impl=>tooltype
|
|
IMPORTING
|
|
enhancement = li_tool
|
|
CHANGING
|
|
devclass = lv_package ).
|
|
lo_hook_impl ?= li_tool.
|
|
|
|
lo_hook_impl->if_enh_object_docu~set_shorttext( lv_shorttext ).
|
|
lo_hook_impl->set_original_object(
|
|
pgmid = ls_original_object-pgmid
|
|
obj_name = ls_original_object-org_obj_name
|
|
obj_type = ls_original_object-org_obj_type
|
|
program = ls_original_object-programname
|
|
main_type = ls_original_object-org_main_type
|
|
main_name = ls_original_object-org_main_name ).
|
|
lo_hook_impl->set_include_bound( ls_original_object-include_bound ).
|
|
|
|
LOOP AT lt_enhancements ASSIGNING <ls_enhancement>.
|
|
lo_hook_impl->add_hook_impl(
|
|
overwrite = <ls_enhancement>-overwrite
|
|
method = <ls_enhancement>-method
|
|
enhmode = <ls_enhancement>-enhmode
|
|
full_name = <ls_enhancement>-full_name
|
|
source = <ls_enhancement>-source
|
|
spot = <ls_enhancement>-spotname
|
|
parent_full_name = <ls_enhancement>-parent_full_name ).
|
|
ENDLOOP.
|
|
lo_hook_impl->if_enh_object~save( run_dark = abap_true ).
|
|
lo_hook_impl->if_enh_object~unlock( ).
|
|
CATCH cx_enh_root INTO lx_enh_root.
|
|
zcx_abapgit_exception=>raise( lx_enh_root->get_text( ) ).
|
|
ENDTRY.
|
|
|
|
ENDMETHOD.
|
|
|
|
ENDCLASS.
|