mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 04:36:49 +08:00
ENHO: Split code into separate files (#4951)
* ENHO: Split code into separate files Similarly to class enhancements where enhanced methods are stored as individual files, this change separates the code for implicit enhancements (type `HOOK_IMPL`) into abap-files. This makes the code more readable (instead of being embedded and escaped into XML) and allows for linting. * Switch to filenames with hash * CI * Filenames in XML * Lint Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
6761998a5d
commit
9038b31921
|
@ -10,20 +10,44 @@ CLASS zcl_abapgit_object_enho_hook DEFINITION PUBLIC.
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
TYPES: BEGIN OF ty_spaces,
|
TYPES: BEGIN OF ty_spaces,
|
||||||
full_name TYPE string.
|
full_name TYPE string,
|
||||||
TYPES: spaces TYPE STANDARD TABLE OF i WITH DEFAULT KEY,
|
spaces TYPE STANDARD TABLE OF i WITH DEFAULT KEY,
|
||||||
END OF ty_spaces.
|
END OF ty_spaces.
|
||||||
|
|
||||||
TYPES: ty_spaces_tt TYPE STANDARD TABLE OF ty_spaces WITH DEFAULT KEY.
|
TYPES: ty_spaces_tt TYPE STANDARD TABLE OF ty_spaces WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
TYPES: BEGIN OF ty_file,
|
||||||
|
name TYPE string,
|
||||||
|
file TYPE string,
|
||||||
|
END OF ty_file.
|
||||||
|
|
||||||
|
TYPES: ty_files TYPE HASHED TABLE OF ty_file WITH UNIQUE KEY name.
|
||||||
|
|
||||||
|
CONSTANTS c_enhancement TYPE string VALUE 'ENHANCEMENT 0 *.' ##NO_TEXT.
|
||||||
|
CONSTANTS c_endenhancement TYPE string VALUE 'ENDENHANCEMENT.' ##NO_TEXT.
|
||||||
|
|
||||||
DATA: ms_item TYPE zif_abapgit_definitions=>ty_item.
|
DATA: ms_item TYPE zif_abapgit_definitions=>ty_item.
|
||||||
DATA: mo_files TYPE REF TO zcl_abapgit_objects_files.
|
DATA: mo_files TYPE REF TO zcl_abapgit_objects_files.
|
||||||
|
|
||||||
|
METHODS add_sources
|
||||||
|
CHANGING
|
||||||
|
!ct_enhancements TYPE enh_hook_impl_it
|
||||||
|
!ct_files TYPE ty_files
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
|
METHODS read_sources
|
||||||
|
CHANGING
|
||||||
|
!ct_enhancements TYPE enh_hook_impl_it
|
||||||
|
!ct_files TYPE ty_files
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
METHODS hook_impl_deserialize
|
METHODS hook_impl_deserialize
|
||||||
IMPORTING it_spaces TYPE ty_spaces_tt
|
IMPORTING
|
||||||
CHANGING ct_impl TYPE enh_hook_impl_it
|
!it_spaces TYPE ty_spaces_tt
|
||||||
RAISING zcx_abapgit_exception.
|
CHANGING
|
||||||
|
!ct_impl TYPE enh_hook_impl_it
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,6 +55,41 @@ ENDCLASS.
|
||||||
CLASS zcl_abapgit_object_enho_hook IMPLEMENTATION.
|
CLASS zcl_abapgit_object_enho_hook IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD add_sources.
|
||||||
|
|
||||||
|
DATA lv_source TYPE string.
|
||||||
|
DATA ls_file LIKE LINE OF ct_files.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <ls_enhancement> LIKE LINE OF ct_enhancements.
|
||||||
|
|
||||||
|
LOOP AT ct_enhancements ASSIGNING <ls_enhancement>.
|
||||||
|
" Use hash as filename since full_name is very long
|
||||||
|
CLEAR ls_file.
|
||||||
|
ls_file-name = <ls_enhancement>-full_name.
|
||||||
|
ls_file-file = substring(
|
||||||
|
val = zcl_abapgit_hash=>sha1_string( <ls_enhancement>-full_name )
|
||||||
|
len = 8 ).
|
||||||
|
INSERT ls_file INTO TABLE ct_files.
|
||||||
|
|
||||||
|
" Add full name as comment and put code between enhancement statements
|
||||||
|
lv_source = c_enhancement.
|
||||||
|
REPLACE '*' IN lv_source WITH ms_item-obj_name.
|
||||||
|
INSERT lv_source INTO <ls_enhancement>-source INDEX 1.
|
||||||
|
|
||||||
|
lv_source = |"Name: { <ls_enhancement>-full_name }|.
|
||||||
|
INSERT lv_source INTO <ls_enhancement>-source INDEX 1.
|
||||||
|
|
||||||
|
APPEND c_endenhancement TO <ls_enhancement>-source.
|
||||||
|
|
||||||
|
mo_files->add_abap( iv_extra = ls_file-file
|
||||||
|
it_abap = <ls_enhancement>-source ).
|
||||||
|
|
||||||
|
CLEAR <ls_enhancement>-source.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD constructor.
|
METHOD constructor.
|
||||||
ms_item = is_item.
|
ms_item = is_item.
|
||||||
mo_files = io_files.
|
mo_files = io_files.
|
||||||
|
@ -62,6 +121,36 @@ CLASS zcl_abapgit_object_enho_hook IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD read_sources.
|
||||||
|
|
||||||
|
DATA lv_source TYPE string.
|
||||||
|
DATA ls_file LIKE LINE OF ct_files.
|
||||||
|
DATA lv_from TYPE i.
|
||||||
|
DATA lv_to TYPE i.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <ls_enhancement> LIKE LINE OF ct_enhancements.
|
||||||
|
|
||||||
|
LOOP AT ct_enhancements ASSIGNING <ls_enhancement>.
|
||||||
|
READ TABLE ct_files INTO ls_file WITH TABLE KEY name = <ls_enhancement>-full_name.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
<ls_enhancement>-source = mo_files->read_abap( iv_extra = ls_file-file ).
|
||||||
|
" Get code between enhancement statements
|
||||||
|
LOOP AT <ls_enhancement>-source INTO lv_source.
|
||||||
|
IF lv_source CP c_enhancement.
|
||||||
|
lv_from = sy-tabix.
|
||||||
|
ENDIF.
|
||||||
|
IF lv_source CP c_endenhancement.
|
||||||
|
lv_to = sy-tabix.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
DELETE <ls_enhancement>-source FROM lv_to.
|
||||||
|
DELETE <ls_enhancement>-source TO lv_from.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD zif_abapgit_object_enho~deserialize.
|
METHOD zif_abapgit_object_enho~deserialize.
|
||||||
|
|
||||||
DATA: lv_shorttext TYPE string,
|
DATA: lv_shorttext TYPE string,
|
||||||
|
@ -71,6 +160,7 @@ CLASS zcl_abapgit_object_enho_hook IMPLEMENTATION.
|
||||||
lv_package TYPE devclass,
|
lv_package TYPE devclass,
|
||||||
ls_original_object TYPE enh_hook_admin,
|
ls_original_object TYPE enh_hook_admin,
|
||||||
lt_spaces TYPE ty_spaces_tt,
|
lt_spaces TYPE ty_spaces_tt,
|
||||||
|
lt_files TYPE ty_files,
|
||||||
lt_enhancements TYPE enh_hook_impl_it,
|
lt_enhancements TYPE enh_hook_impl_it,
|
||||||
lx_enh_root TYPE REF TO cx_enh_root.
|
lx_enh_root TYPE REF TO cx_enh_root.
|
||||||
|
|
||||||
|
@ -83,6 +173,8 @@ CLASS zcl_abapgit_object_enho_hook IMPLEMENTATION.
|
||||||
CHANGING cg_data = ls_original_object ).
|
CHANGING cg_data = ls_original_object ).
|
||||||
ii_xml->read( EXPORTING iv_name = 'ENHANCEMENTS'
|
ii_xml->read( EXPORTING iv_name = 'ENHANCEMENTS'
|
||||||
CHANGING cg_data = lt_enhancements ).
|
CHANGING cg_data = lt_enhancements ).
|
||||||
|
ii_xml->read( EXPORTING iv_name = 'FILES'
|
||||||
|
CHANGING cg_data = lt_files ).
|
||||||
ii_xml->read( EXPORTING iv_name = 'SPACES'
|
ii_xml->read( EXPORTING iv_name = 'SPACES'
|
||||||
CHANGING cg_data = lt_spaces ).
|
CHANGING cg_data = lt_spaces ).
|
||||||
|
|
||||||
|
@ -90,6 +182,9 @@ CLASS zcl_abapgit_object_enho_hook IMPLEMENTATION.
|
||||||
hook_impl_deserialize( EXPORTING it_spaces = lt_spaces
|
hook_impl_deserialize( EXPORTING it_spaces = lt_spaces
|
||||||
CHANGING ct_impl = lt_enhancements ).
|
CHANGING ct_impl = lt_enhancements ).
|
||||||
|
|
||||||
|
read_sources( CHANGING ct_enhancements = lt_enhancements
|
||||||
|
ct_files = lt_files ).
|
||||||
|
|
||||||
lv_enhname = ms_item-obj_name.
|
lv_enhname = ms_item-obj_name.
|
||||||
lv_package = iv_package.
|
lv_package = iv_package.
|
||||||
TRY.
|
TRY.
|
||||||
|
@ -139,11 +234,11 @@ CLASS zcl_abapgit_object_enho_hook IMPLEMENTATION.
|
||||||
lo_hook_impl TYPE REF TO cl_enh_tool_hook_impl,
|
lo_hook_impl TYPE REF TO cl_enh_tool_hook_impl,
|
||||||
ls_original_object TYPE enh_hook_admin,
|
ls_original_object TYPE enh_hook_admin,
|
||||||
lt_spaces TYPE ty_spaces_tt,
|
lt_spaces TYPE ty_spaces_tt,
|
||||||
|
lt_files TYPE ty_files,
|
||||||
lt_enhancements TYPE enh_hook_impl_it.
|
lt_enhancements TYPE enh_hook_impl_it.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_enhancement> LIKE LINE OF lt_enhancements.
|
FIELD-SYMBOLS: <ls_enhancement> LIKE LINE OF lt_enhancements.
|
||||||
|
|
||||||
|
|
||||||
lo_hook_impl ?= ii_enh_tool.
|
lo_hook_impl ?= ii_enh_tool.
|
||||||
|
|
||||||
lv_shorttext = lo_hook_impl->if_enh_object_docu~get_shorttext( ).
|
lv_shorttext = lo_hook_impl->if_enh_object_docu~get_shorttext( ).
|
||||||
|
@ -163,14 +258,19 @@ CLASS zcl_abapgit_object_enho_hook IMPLEMENTATION.
|
||||||
<ls_enhancement>-id.
|
<ls_enhancement>-id.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
|
add_sources( CHANGING ct_enhancements = lt_enhancements
|
||||||
|
ct_files = lt_files ).
|
||||||
|
|
||||||
ii_xml->add( iv_name = 'TOOL'
|
ii_xml->add( iv_name = 'TOOL'
|
||||||
ig_data = ii_enh_tool->get_tool( ) ).
|
ig_data = ii_enh_tool->get_tool( ) ).
|
||||||
ii_xml->add( ig_data = lv_shorttext
|
ii_xml->add( iv_name = 'SHORTTEXT'
|
||||||
iv_name = 'SHORTTEXT' ).
|
ig_data = lv_shorttext ).
|
||||||
ii_xml->add( ig_data = ls_original_object
|
ii_xml->add( iv_name = 'ORIGINAL_OBJECT'
|
||||||
iv_name = 'ORIGINAL_OBJECT' ).
|
ig_data = ls_original_object ).
|
||||||
ii_xml->add( iv_name = 'ENHANCEMENTS'
|
ii_xml->add( iv_name = 'ENHANCEMENTS'
|
||||||
ig_data = lt_enhancements ).
|
ig_data = lt_enhancements ).
|
||||||
|
ii_xml->add( iv_name = 'FILES'
|
||||||
|
ig_data = lt_files ).
|
||||||
ii_xml->add( iv_name = 'SPACES'
|
ii_xml->add( iv_name = 'SPACES'
|
||||||
ig_data = lt_spaces ).
|
ig_data = lt_spaces ).
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,6 @@ CLASS zcl_abapgit_hash DEFINITION
|
||||||
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
|
|
||||||
CLASS-METHODS sha1_commit
|
CLASS-METHODS sha1_commit
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!iv_data TYPE xstring
|
!iv_data TYPE xstring
|
||||||
|
@ -25,7 +24,6 @@ CLASS zcl_abapgit_hash DEFINITION
|
||||||
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
|
|
||||||
CLASS-METHODS sha1_tree
|
CLASS-METHODS sha1_tree
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!iv_data TYPE xstring
|
!iv_data TYPE xstring
|
||||||
|
@ -33,7 +31,6 @@ CLASS zcl_abapgit_hash DEFINITION
|
||||||
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
|
|
||||||
CLASS-METHODS sha1_tag
|
CLASS-METHODS sha1_tag
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!iv_data TYPE xstring
|
!iv_data TYPE xstring
|
||||||
|
@ -41,7 +38,6 @@ CLASS zcl_abapgit_hash DEFINITION
|
||||||
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
|
|
||||||
CLASS-METHODS sha1_blob
|
CLASS-METHODS sha1_blob
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!iv_data TYPE xstring
|
!iv_data TYPE xstring
|
||||||
|
@ -49,8 +45,6 @@ CLASS zcl_abapgit_hash DEFINITION
|
||||||
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
|
|
||||||
|
|
||||||
CLASS-METHODS sha1_raw
|
CLASS-METHODS sha1_raw
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!iv_data TYPE xstring
|
!iv_data TYPE xstring
|
||||||
|
@ -58,13 +52,20 @@ CLASS zcl_abapgit_hash DEFINITION
|
||||||
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
|
CLASS-METHODS sha1_string
|
||||||
|
IMPORTING
|
||||||
|
!iv_data TYPE string
|
||||||
|
RETURNING
|
||||||
|
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS ZCL_ABAPGIT_HASH IMPLEMENTATION.
|
CLASS zcl_abapgit_hash IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD adler32.
|
METHOD adler32.
|
||||||
|
@ -172,6 +173,28 @@ CLASS ZCL_ABAPGIT_HASH IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD sha1_string.
|
||||||
|
|
||||||
|
DATA: lv_hash TYPE string,
|
||||||
|
lv_key TYPE xstring,
|
||||||
|
lx_error TYPE REF TO cx_abap_message_digest.
|
||||||
|
TRY.
|
||||||
|
cl_abap_hmac=>calculate_hmac_for_char(
|
||||||
|
EXPORTING
|
||||||
|
if_key = lv_key
|
||||||
|
if_data = iv_data
|
||||||
|
IMPORTING
|
||||||
|
ef_hmacstring = lv_hash ).
|
||||||
|
CATCH cx_abap_message_digest INTO lx_error.
|
||||||
|
zcx_abapgit_exception=>raise_with_text( lx_error ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
rv_sha1 = lv_hash.
|
||||||
|
TRANSLATE rv_sha1 TO LOWER CASE.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD sha1_tag.
|
METHOD sha1_tag.
|
||||||
rv_sha1 = sha1( iv_type = zif_abapgit_definitions=>c_type-tag
|
rv_sha1 = sha1( iv_type = zif_abapgit_definitions=>c_type-tag
|
||||||
iv_data = iv_data ).
|
iv_data = iv_data ).
|
||||||
|
|
Loading…
Reference in New Issue
Block a user