mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +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.
|
||||
PRIVATE SECTION.
|
||||
TYPES: BEGIN OF ty_spaces,
|
||||
full_name TYPE string.
|
||||
TYPES: spaces TYPE STANDARD TABLE OF i WITH DEFAULT KEY,
|
||||
full_name TYPE string,
|
||||
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.
|
||||
|
||||
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: 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
|
||||
IMPORTING it_spaces TYPE ty_spaces_tt
|
||||
CHANGING ct_impl TYPE enh_hook_impl_it
|
||||
RAISING zcx_abapgit_exception.
|
||||
|
||||
IMPORTING
|
||||
!it_spaces TYPE ty_spaces_tt
|
||||
CHANGING
|
||||
!ct_impl TYPE enh_hook_impl_it
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
@ -31,6 +55,41 @@ ENDCLASS.
|
|||
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.
|
||||
ms_item = is_item.
|
||||
mo_files = io_files.
|
||||
|
@ -62,6 +121,36 @@ CLASS zcl_abapgit_object_enho_hook IMPLEMENTATION.
|
|||
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.
|
||||
|
||||
DATA: lv_shorttext TYPE string,
|
||||
|
@ -71,6 +160,7 @@ CLASS zcl_abapgit_object_enho_hook IMPLEMENTATION.
|
|||
lv_package TYPE devclass,
|
||||
ls_original_object TYPE enh_hook_admin,
|
||||
lt_spaces TYPE ty_spaces_tt,
|
||||
lt_files TYPE ty_files,
|
||||
lt_enhancements TYPE enh_hook_impl_it,
|
||||
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 ).
|
||||
ii_xml->read( EXPORTING iv_name = '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'
|
||||
CHANGING cg_data = lt_spaces ).
|
||||
|
||||
|
@ -90,6 +182,9 @@ CLASS zcl_abapgit_object_enho_hook IMPLEMENTATION.
|
|||
hook_impl_deserialize( EXPORTING it_spaces = lt_spaces
|
||||
CHANGING ct_impl = lt_enhancements ).
|
||||
|
||||
read_sources( CHANGING ct_enhancements = lt_enhancements
|
||||
ct_files = lt_files ).
|
||||
|
||||
lv_enhname = ms_item-obj_name.
|
||||
lv_package = iv_package.
|
||||
TRY.
|
||||
|
@ -139,11 +234,11 @@ CLASS zcl_abapgit_object_enho_hook IMPLEMENTATION.
|
|||
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_files TYPE ty_files,
|
||||
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( ).
|
||||
|
@ -163,14 +258,19 @@ CLASS zcl_abapgit_object_enho_hook IMPLEMENTATION.
|
|||
<ls_enhancement>-id.
|
||||
ENDLOOP.
|
||||
|
||||
add_sources( CHANGING ct_enhancements = lt_enhancements
|
||||
ct_files = lt_files ).
|
||||
|
||||
ii_xml->add( iv_name = 'TOOL'
|
||||
ig_data = ii_enh_tool->get_tool( ) ).
|
||||
ii_xml->add( ig_data = lv_shorttext
|
||||
iv_name = 'SHORTTEXT' ).
|
||||
ii_xml->add( ig_data = ls_original_object
|
||||
iv_name = 'ORIGINAL_OBJECT' ).
|
||||
ii_xml->add( iv_name = 'SHORTTEXT'
|
||||
ig_data = lv_shorttext ).
|
||||
ii_xml->add( iv_name = 'ORIGINAL_OBJECT'
|
||||
ig_data = ls_original_object ).
|
||||
ii_xml->add( iv_name = 'ENHANCEMENTS'
|
||||
ig_data = lt_enhancements ).
|
||||
ii_xml->add( iv_name = 'FILES'
|
||||
ig_data = lt_files ).
|
||||
ii_xml->add( iv_name = 'SPACES'
|
||||
ig_data = lt_spaces ).
|
||||
|
||||
|
|
|
@ -17,7 +17,6 @@ CLASS zcl_abapgit_hash DEFINITION
|
|||
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
CLASS-METHODS sha1_commit
|
||||
IMPORTING
|
||||
!iv_data TYPE xstring
|
||||
|
@ -25,7 +24,6 @@ CLASS zcl_abapgit_hash DEFINITION
|
|||
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
CLASS-METHODS sha1_tree
|
||||
IMPORTING
|
||||
!iv_data TYPE xstring
|
||||
|
@ -33,7 +31,6 @@ CLASS zcl_abapgit_hash DEFINITION
|
|||
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
CLASS-METHODS sha1_tag
|
||||
IMPORTING
|
||||
!iv_data TYPE xstring
|
||||
|
@ -41,7 +38,6 @@ CLASS zcl_abapgit_hash DEFINITION
|
|||
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
CLASS-METHODS sha1_blob
|
||||
IMPORTING
|
||||
!iv_data TYPE xstring
|
||||
|
@ -49,8 +45,6 @@ CLASS zcl_abapgit_hash DEFINITION
|
|||
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
|
||||
CLASS-METHODS sha1_raw
|
||||
IMPORTING
|
||||
!iv_data TYPE xstring
|
||||
|
@ -58,13 +52,20 @@ CLASS zcl_abapgit_hash DEFINITION
|
|||
VALUE(rv_sha1) TYPE zif_abapgit_definitions=>ty_sha1
|
||||
RAISING
|
||||
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.
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_HASH IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_hash IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD adler32.
|
||||
|
@ -172,6 +173,28 @@ CLASS ZCL_ABAPGIT_HASH IMPLEMENTATION.
|
|||
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.
|
||||
rv_sha1 = sha1( iv_type = zif_abapgit_definitions=>c_type-tag
|
||||
iv_data = iv_data ).
|
||||
|
|
Loading…
Reference in New Issue
Block a user