Small performance improvement in folder logic (#6941)

This commit is contained in:
Marc Bernard 2024-06-08 21:01:38 +02:00 committed by GitHub
parent 376a7d8be8
commit 4bf6e07235
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 166 additions and 0 deletions

View File

@ -95,6 +95,14 @@ CLASS zcl_abapgit_folder_logic IMPLEMENTATION.
lv_parentcl TYPE tdevc-parentcl,
lv_folder_logic TYPE string.
rv_path = lcl_package_to_path=>get(
iv_top = iv_top
io_dot = io_dot
iv_package = iv_package ).
IF rv_path IS NOT INITIAL.
RETURN.
ENDIF.
IF iv_top = iv_package.
rv_path = io_dot->get_starting_folder( ).
ELSE.
@ -163,6 +171,12 @@ CLASS zcl_abapgit_folder_logic IMPLEMENTATION.
ENDIF.
ENDIF.
lcl_package_to_path=>add(
iv_top = iv_top
io_dot = io_dot
iv_package = iv_package
iv_path = rv_path ).
ENDMETHOD.
@ -183,6 +197,14 @@ CLASS zcl_abapgit_folder_logic IMPLEMENTATION.
RETURN.
ENDIF.
rv_package = lcl_path_to_package=>get(
iv_top = iv_top
io_dot = io_dot
iv_path = iv_path ).
IF rv_package IS NOT INITIAL.
RETURN.
ENDIF.
lv_path = iv_path+lv_length.
lv_parent = iv_top.
rv_package = iv_top.
@ -245,5 +267,11 @@ CLASS zcl_abapgit_folder_logic IMPLEMENTATION.
lv_parent = rv_package.
ENDWHILE.
lcl_path_to_package=>add(
iv_top = iv_top
io_dot = io_dot
iv_path = iv_path
iv_package = rv_package ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,138 @@
CLASS lcl_package_to_path DEFINITION.
PUBLIC SECTION.
CLASS-METHODS get
IMPORTING
!iv_top TYPE devclass
!io_dot TYPE REF TO zcl_abapgit_dot_abapgit
!iv_package TYPE devclass
RETURNING
VALUE(rv_path) TYPE string.
CLASS-METHODS add
IMPORTING
!iv_top TYPE devclass
!io_dot TYPE REF TO zcl_abapgit_dot_abapgit
!iv_package TYPE devclass
!iv_path TYPE string.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_buffer,
top TYPE devclass,
starting_folder TYPE string,
folder_logic TYPE string,
package TYPE devclass,
path TYPE string,
END OF ty_buffer.
CLASS-DATA gt_buffer
TYPE HASHED TABLE OF ty_buffer
WITH UNIQUE KEY top starting_folder folder_logic package.
ENDCLASS.
CLASS lcl_package_to_path IMPLEMENTATION.
METHOD get.
FIELD-SYMBOLS <ls_buffer> LIKE LINE OF gt_buffer.
READ TABLE gt_buffer ASSIGNING <ls_buffer> WITH TABLE KEY
top = iv_top
starting_folder = io_dot->get_starting_folder( )
folder_logic = io_dot->get_folder_logic( )
package = iv_package.
IF sy-subrc = 0.
rv_path = <ls_buffer>-path.
ENDIF.
ENDMETHOD.
METHOD add.
DATA ls_buffer LIKE LINE OF gt_buffer.
CLEAR ls_buffer.
ls_buffer-top = iv_top.
ls_buffer-starting_folder = io_dot->get_starting_folder( ).
ls_buffer-folder_logic = io_dot->get_folder_logic( ).
ls_buffer-package = iv_package.
ls_buffer-path = iv_path.
INSERT ls_buffer INTO TABLE gt_buffer.
ENDMETHOD.
ENDCLASS.
CLASS lcl_path_to_package DEFINITION.
PUBLIC SECTION.
CLASS-METHODS get
IMPORTING
!iv_top TYPE devclass
!io_dot TYPE REF TO zcl_abapgit_dot_abapgit
!iv_path TYPE string
RETURNING
VALUE(rv_package) TYPE devclass.
CLASS-METHODS add
IMPORTING
!iv_top TYPE devclass
!io_dot TYPE REF TO zcl_abapgit_dot_abapgit
!iv_path TYPE string
!iv_package TYPE devclass.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_buffer,
top TYPE devclass,
starting_folder TYPE string,
folder_logic TYPE string,
path TYPE string,
package TYPE devclass,
END OF ty_buffer.
CLASS-DATA gt_buffer
TYPE HASHED TABLE OF ty_buffer
WITH UNIQUE KEY top starting_folder folder_logic path.
ENDCLASS.
CLASS lcl_path_to_package IMPLEMENTATION.
METHOD get.
FIELD-SYMBOLS <ls_buffer> LIKE LINE OF gt_buffer.
READ TABLE gt_buffer ASSIGNING <ls_buffer> WITH TABLE KEY
top = iv_top
starting_folder = io_dot->get_starting_folder( )
folder_logic = io_dot->get_folder_logic( )
path = iv_path.
IF sy-subrc = 0.
rv_package = <ls_buffer>-package.
RETURN.
ENDIF.
ENDMETHOD.
METHOD add.
DATA ls_buffer LIKE LINE OF gt_buffer.
CLEAR ls_buffer.
ls_buffer-top = iv_top.
ls_buffer-starting_folder = io_dot->get_starting_folder( ).
ls_buffer-folder_logic = io_dot->get_folder_logic( ).
ls_buffer-path = iv_path.
ls_buffer-package = iv_package.
INSERT ls_buffer INTO TABLE gt_buffer.
ENDMETHOD.
ENDCLASS.