mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
moving to includes
whoa this is a lot of work
This commit is contained in:
parent
d6b5dbaf27
commit
5c2cac3211
File diff suppressed because it is too large
Load Diff
|
@ -61,7 +61,7 @@
|
|||
<ID>R</ID>
|
||||
<KEY/>
|
||||
<ENTRY>abapGit</ENTRY>
|
||||
<LENGTH>54</LENGTH>
|
||||
<LENGTH>7</LENGTH>
|
||||
<SPLIT/>
|
||||
</item>
|
||||
</TPOOL>
|
||||
|
|
208
src/zabapgit_dot_abapgit.prog.abap
Normal file
208
src/zabapgit_dot_abapgit.prog.abap
Normal file
|
@ -0,0 +1,208 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Include ZABAPGIT_DOT_ABAPGIT
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
CLASS ltcl_dot_abapgit DEFINITION DEFERRED.
|
||||
|
||||
CLASS lcl_dot_abapgit DEFINITION CREATE PRIVATE FINAL FRIENDS ltcl_dot_abapgit.
|
||||
|
||||
PUBLIC SECTION.
|
||||
CLASS-METHODS:
|
||||
build_default
|
||||
IMPORTING iv_master_language TYPE spras
|
||||
RETURNING VALUE(ro_dot_abapgit) TYPE REF TO lcl_dot_abapgit,
|
||||
deserialize
|
||||
IMPORTING iv_xstr TYPE xstring
|
||||
RETURNING VALUE(ro_dot_abapgit) TYPE REF TO lcl_dot_abapgit
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS:
|
||||
serialize
|
||||
RETURNING VALUE(rv_xstr) TYPE xstring,
|
||||
add_ignore
|
||||
IMPORTING iv_path TYPE string
|
||||
iv_filename TYPE string,
|
||||
is_ignored
|
||||
IMPORTING iv_path TYPE string
|
||||
iv_filename TYPE string
|
||||
RETURNING VALUE(rv_ignored) TYPE abap_bool,
|
||||
remove_ignore
|
||||
IMPORTING iv_path TYPE string
|
||||
iv_filename TYPE string,
|
||||
get_starting_folder
|
||||
RETURNING VALUE(rv_path) TYPE string,
|
||||
* set_starting_folder
|
||||
* IMPORTING iv_path TYPE string,
|
||||
get_master_language
|
||||
RETURNING VALUE(rv_language) TYPE spras.
|
||||
* set_master_language
|
||||
* IMPORTING iv_language TYPE spras.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES: BEGIN OF ty_dot_abapgit,
|
||||
master_language TYPE spras,
|
||||
starting_folder TYPE string,
|
||||
ignore TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
|
||||
END OF ty_dot_abapgit.
|
||||
|
||||
DATA: ms_data TYPE ty_dot_abapgit.
|
||||
|
||||
METHODS:
|
||||
constructor
|
||||
IMPORTING is_data TYPE ty_dot_abapgit.
|
||||
|
||||
CLASS-METHODS:
|
||||
to_xml
|
||||
IMPORTING is_data TYPE ty_dot_abapgit
|
||||
RETURNING VALUE(rv_xml) TYPE string,
|
||||
from_xml
|
||||
IMPORTING iv_xml TYPE string
|
||||
RETURNING VALUE(rs_data) TYPE ty_dot_abapgit.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_dot_abapgit IMPLEMENTATION.
|
||||
|
||||
METHOD constructor.
|
||||
ms_data = is_data.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD deserialize.
|
||||
|
||||
DATA: lv_xml TYPE string,
|
||||
ls_data TYPE ty_dot_abapgit.
|
||||
|
||||
|
||||
lv_xml = lcl_convert=>xstring_to_string_utf8( iv_xstr ).
|
||||
|
||||
ls_data = from_xml( lv_xml ).
|
||||
|
||||
CREATE OBJECT ro_dot_abapgit
|
||||
EXPORTING
|
||||
is_data = ls_data.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD serialize.
|
||||
|
||||
DATA: lv_xml TYPE string.
|
||||
|
||||
lv_xml = to_xml( ms_data ).
|
||||
|
||||
rv_xstr = lcl_convert=>string_to_xstring_utf8( lv_xml ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD build_default.
|
||||
|
||||
DATA: ls_data TYPE ty_dot_abapgit.
|
||||
|
||||
|
||||
ls_data-master_language = iv_master_language.
|
||||
ls_data-starting_folder = '/'.
|
||||
APPEND '/.gitignore' TO ls_data-ignore.
|
||||
APPEND '/LICENSE' TO ls_data-ignore.
|
||||
APPEND '/README.md' TO ls_data-ignore.
|
||||
APPEND '/package.json' TO ls_data-ignore.
|
||||
APPEND '/.travis.yml' TO ls_data-ignore.
|
||||
|
||||
CREATE OBJECT ro_dot_abapgit
|
||||
EXPORTING
|
||||
is_data = ls_data.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD to_xml.
|
||||
CALL TRANSFORMATION id
|
||||
SOURCE data = is_data
|
||||
RESULT XML rv_xml.
|
||||
|
||||
rv_xml = lcl_xml_pretty=>print( rv_xml ).
|
||||
|
||||
REPLACE FIRST OCCURRENCE
|
||||
OF '<?xml version="1.0" encoding="utf-16"?>'
|
||||
IN rv_xml
|
||||
WITH '<?xml version="1.0" encoding="utf-8"?>'.
|
||||
ASSERT sy-subrc = 0.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD from_xml.
|
||||
|
||||
DATA: lv_xml TYPE string.
|
||||
|
||||
lv_xml = iv_xml.
|
||||
|
||||
* fix downward compatibility
|
||||
REPLACE ALL OCCURRENCES OF '<_--28C_DATA_--29>' IN lv_xml WITH '<DATA>'.
|
||||
REPLACE ALL OCCURRENCES OF '</_--28C_DATA_--29>' IN lv_xml WITH '</DATA>'.
|
||||
|
||||
CALL TRANSFORMATION id
|
||||
OPTIONS value_handling = 'accept_data_loss'
|
||||
SOURCE XML lv_xml
|
||||
RESULT data = rs_data ##NO_TEXT.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD add_ignore.
|
||||
|
||||
DATA: lv_name TYPE string.
|
||||
|
||||
FIELD-SYMBOLS: <lv_ignore> LIKE LINE OF ms_data-ignore.
|
||||
|
||||
|
||||
lv_name = iv_path && iv_filename.
|
||||
|
||||
READ TABLE ms_data-ignore FROM lv_name TRANSPORTING NO FIELDS.
|
||||
IF sy-subrc = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
APPEND INITIAL LINE TO ms_data-ignore ASSIGNING <lv_ignore>.
|
||||
<lv_ignore> = lv_name.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_ignored.
|
||||
|
||||
DATA: lv_name TYPE string,
|
||||
lv_ignore TYPE string.
|
||||
|
||||
|
||||
lv_name = iv_path && iv_filename.
|
||||
|
||||
LOOP AT ms_data-ignore INTO lv_ignore.
|
||||
IF lv_name CP lv_ignore.
|
||||
rv_ignored = abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD remove_ignore.
|
||||
|
||||
DATA: lv_name TYPE string.
|
||||
|
||||
|
||||
lv_name = iv_path && iv_filename.
|
||||
|
||||
DELETE TABLE ms_data-ignore FROM lv_name.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_starting_folder.
|
||||
rv_path = ms_data-starting_folder.
|
||||
ENDMETHOD.
|
||||
|
||||
* METHOD set_starting_folder.
|
||||
* ms_data-starting_folder = iv_path.
|
||||
* ENDMETHOD.
|
||||
|
||||
METHOD get_master_language.
|
||||
rv_language = ms_data-master_language.
|
||||
ENDMETHOD.
|
||||
|
||||
* METHOD set_master_language.
|
||||
* ms_data-master_language = iv_language.
|
||||
* ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
48
src/zabapgit_dot_abapgit.prog.xml
Normal file
48
src/zabapgit_dot_abapgit.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<PROGDIR>
|
||||
<NAME>ZABAPGIT_DOT_ABAPGIT</NAME>
|
||||
<STATE>A</STATE>
|
||||
<SQLX/>
|
||||
<EDTX/>
|
||||
<VARCL>X</VARCL>
|
||||
<DBAPL/>
|
||||
<DBNA/>
|
||||
<CLAS/>
|
||||
<TYPE/>
|
||||
<OCCURS/>
|
||||
<SUBC>I</SUBC>
|
||||
<APPL/>
|
||||
<SECU/>
|
||||
<CNAM/>
|
||||
<CDAT>0000-00-00</CDAT>
|
||||
<UNAM/>
|
||||
<UDAT>0000-00-00</UDAT>
|
||||
<VERN/>
|
||||
<LEVL/>
|
||||
<RSTAT/>
|
||||
<RMAND/>
|
||||
<RLOAD>E</RLOAD>
|
||||
<FIXPT/>
|
||||
<SSET/>
|
||||
<SDATE>0000-00-00</SDATE>
|
||||
<STIME/>
|
||||
<IDATE>0000-00-00</IDATE>
|
||||
<ITIME/>
|
||||
<LDBNAME/>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<KEY/>
|
||||
<ENTRY>Include ZABAPGIT_DOT_ABAPGIT</ENTRY>
|
||||
<LENGTH>28</LENGTH>
|
||||
<SPLIT/>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
190
src/zabapgit_file_status.prog.abap
Normal file
190
src/zabapgit_file_status.prog.abap
Normal file
|
@ -0,0 +1,190 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Include ZABAPGIT_FILE_STATUS
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_file_status DEFINITION
|
||||
*----------------------------------------------------------------------*
|
||||
*
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_file_status DEFINITION FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
CLASS-METHODS status
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
io_log TYPE REF TO lcl_log OPTIONAL
|
||||
RETURNING VALUE(rt_results) TYPE ty_results_tt
|
||||
RAISING lcx_exception.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
CLASS-METHODS compare_files
|
||||
IMPORTING it_repo TYPE ty_files_tt
|
||||
is_gen TYPE ty_file
|
||||
RETURNING VALUE(rv_match) TYPE sap_bool
|
||||
RAISING lcx_exception.
|
||||
|
||||
ENDCLASS. "lcl_file_status DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_file_status IMPLEMENTATION
|
||||
*----------------------------------------------------------------------*
|
||||
*
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_file_status IMPLEMENTATION.
|
||||
|
||||
METHOD compare_files.
|
||||
|
||||
READ TABLE it_repo WITH KEY
|
||||
path = is_gen-path
|
||||
filename = is_gen-filename
|
||||
data = is_gen-data
|
||||
TRANSPORTING NO FIELDS.
|
||||
IF sy-subrc <> 0.
|
||||
rv_match = abap_false.
|
||||
ELSE.
|
||||
rv_match = abap_true.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "compare_files
|
||||
|
||||
METHOD status.
|
||||
|
||||
DATA: lv_pre TYPE tadir-obj_name,
|
||||
lt_files TYPE ty_files_tt,
|
||||
ls_result LIKE LINE OF rt_results,
|
||||
lv_type TYPE string,
|
||||
ls_item TYPE ty_item,
|
||||
lt_tadir TYPE lcl_tadir=>ty_tadir_tt,
|
||||
lt_local TYPE ty_files_item_tt,
|
||||
ls_tadir TYPE tadir,
|
||||
lt_remote TYPE ty_files_tt,
|
||||
lv_ext TYPE string.
|
||||
|
||||
FIELD-SYMBOLS: <ls_remote> LIKE LINE OF lt_remote,
|
||||
<ls_tadir> LIKE LINE OF lt_tadir,
|
||||
<ls_result> LIKE LINE OF rt_results,
|
||||
<ls_local> LIKE LINE OF lt_local,
|
||||
<ls_gen> LIKE LINE OF lt_files.
|
||||
|
||||
|
||||
lt_remote = io_repo->get_files_remote( ).
|
||||
lt_local = io_repo->get_files_local( io_log ).
|
||||
|
||||
LOOP AT lt_remote ASSIGNING <ls_remote>.
|
||||
lcl_progress=>show( iv_key = 'Status'
|
||||
iv_current = sy-tabix
|
||||
iv_total = lines( lt_remote )
|
||||
iv_text = <ls_remote>-filename ) ##NO_TEXT.
|
||||
|
||||
SPLIT <ls_remote>-filename AT '.' INTO lv_pre lv_type lv_ext.
|
||||
TRANSLATE lv_pre TO UPPER CASE.
|
||||
TRANSLATE lv_type TO UPPER CASE.
|
||||
|
||||
IF lv_ext <> 'xml' OR strlen( lv_type ) <> 4.
|
||||
CONTINUE. " current loop
|
||||
ENDIF.
|
||||
|
||||
* handle namespaces
|
||||
REPLACE ALL OCCURRENCES OF '#' IN lv_pre WITH '/'.
|
||||
|
||||
CLEAR ls_result.
|
||||
ls_result-obj_type = lv_type.
|
||||
ls_result-obj_name = lv_pre.
|
||||
|
||||
CLEAR ls_item.
|
||||
ls_item-obj_type = lv_type.
|
||||
ls_item-obj_name = lv_pre.
|
||||
|
||||
CLEAR lt_files.
|
||||
LOOP AT lt_local ASSIGNING <ls_local> WHERE item = ls_item.
|
||||
APPEND <ls_local>-file TO lt_files.
|
||||
ENDLOOP.
|
||||
|
||||
IF lt_files[] IS INITIAL.
|
||||
* item does not exist locally
|
||||
ls_result-filename = <ls_remote>-filename.
|
||||
APPEND ls_result TO rt_results.
|
||||
CONTINUE. " current loop
|
||||
ENDIF.
|
||||
|
||||
LOOP AT lt_files ASSIGNING <ls_gen>.
|
||||
ls_result-filename = <ls_gen>-filename.
|
||||
ls_result-match = compare_files( it_repo = lt_remote
|
||||
is_gen = <ls_gen> ).
|
||||
APPEND ls_result TO rt_results.
|
||||
ENDLOOP.
|
||||
ENDLOOP.
|
||||
|
||||
* find files only existing remotely, including non abapGit related
|
||||
LOOP AT lt_remote ASSIGNING <ls_remote>.
|
||||
READ TABLE rt_results WITH KEY filename = <ls_remote>-filename
|
||||
TRANSPORTING NO FIELDS.
|
||||
IF sy-subrc <> 0.
|
||||
IF io_repo->get_dot_abapgit( )->is_ignored(
|
||||
iv_path = <ls_remote>-path
|
||||
iv_filename = <ls_remote>-filename ) = abap_true.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
|
||||
CLEAR ls_result.
|
||||
ls_result-match = abap_true.
|
||||
ls_result-filename = <ls_remote>-filename.
|
||||
APPEND ls_result TO rt_results.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
* find objects only existing locally
|
||||
lt_tadir = lcl_tadir=>read( io_repo->get_package( ) ).
|
||||
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
|
||||
READ TABLE rt_results
|
||||
WITH KEY obj_type = <ls_tadir>-object
|
||||
obj_name = <ls_tadir>-obj_name
|
||||
TRANSPORTING NO FIELDS.
|
||||
IF sy-subrc <> 0.
|
||||
ls_item-obj_type = <ls_tadir>-object.
|
||||
ls_item-obj_name = <ls_tadir>-obj_name.
|
||||
IF lcl_objects=>is_supported( ls_item ) = abap_false.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
|
||||
CLEAR ls_result.
|
||||
ls_result-match = abap_true.
|
||||
ls_result-obj_type = <ls_tadir>-object.
|
||||
ls_result-obj_name = <ls_tadir>-obj_name.
|
||||
APPEND ls_result TO rt_results.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
* add path information for files
|
||||
LOOP AT lt_remote ASSIGNING <ls_remote>.
|
||||
READ TABLE rt_results ASSIGNING <ls_result> WITH KEY filename = <ls_remote>-filename.
|
||||
IF sy-subrc = 0.
|
||||
<ls_result>-path = <ls_remote>-path.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
* add package information
|
||||
LOOP AT rt_results ASSIGNING <ls_result> WHERE NOT obj_type IS INITIAL.
|
||||
ls_tadir = lcl_tadir=>read_single( iv_object = <ls_result>-obj_type
|
||||
iv_obj_name = <ls_result>-obj_name ).
|
||||
<ls_result>-package = ls_tadir-devclass.
|
||||
ENDLOOP.
|
||||
|
||||
SORT rt_results BY
|
||||
obj_type ASCENDING
|
||||
obj_name ASCENDING
|
||||
filename ASCENDING.
|
||||
DELETE ADJACENT DUPLICATES FROM rt_results
|
||||
COMPARING obj_type obj_name filename.
|
||||
|
||||
lcl_sap_package=>check(
|
||||
io_log = io_log
|
||||
it_results = rt_results
|
||||
iv_start = io_repo->get_dot_abapgit( )->get_starting_folder( )
|
||||
iv_top = io_repo->get_package( ) ).
|
||||
|
||||
ENDMETHOD. "status
|
||||
|
||||
ENDCLASS. "lcl_file_status IMPLEMENTATION
|
48
src/zabapgit_file_status.prog.xml
Normal file
48
src/zabapgit_file_status.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<PROGDIR>
|
||||
<NAME>ZABAPGIT_FILE_STATUS</NAME>
|
||||
<STATE>A</STATE>
|
||||
<SQLX/>
|
||||
<EDTX/>
|
||||
<VARCL>X</VARCL>
|
||||
<DBAPL/>
|
||||
<DBNA/>
|
||||
<CLAS/>
|
||||
<TYPE/>
|
||||
<OCCURS/>
|
||||
<SUBC>I</SUBC>
|
||||
<APPL/>
|
||||
<SECU/>
|
||||
<CNAM/>
|
||||
<CDAT>0000-00-00</CDAT>
|
||||
<UNAM/>
|
||||
<UDAT>0000-00-00</UDAT>
|
||||
<VERN/>
|
||||
<LEVL/>
|
||||
<RSTAT/>
|
||||
<RMAND/>
|
||||
<RLOAD>E</RLOAD>
|
||||
<FIXPT/>
|
||||
<SSET/>
|
||||
<SDATE>0000-00-00</SDATE>
|
||||
<STIME/>
|
||||
<IDATE>0000-00-00</IDATE>
|
||||
<ITIME/>
|
||||
<LDBNAME/>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<KEY/>
|
||||
<ENTRY>Include ZABAPGIT_FILE_STATUS</ENTRY>
|
||||
<LENGTH>28</LENGTH>
|
||||
<SPLIT/>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
1773
src/zabapgit_git.prog.abap
Normal file
1773
src/zabapgit_git.prog.abap
Normal file
File diff suppressed because it is too large
Load Diff
48
src/zabapgit_git.prog.xml
Normal file
48
src/zabapgit_git.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<PROGDIR>
|
||||
<NAME>ZABAPGIT_GIT</NAME>
|
||||
<STATE>A</STATE>
|
||||
<SQLX/>
|
||||
<EDTX/>
|
||||
<VARCL>X</VARCL>
|
||||
<DBAPL/>
|
||||
<DBNA/>
|
||||
<CLAS/>
|
||||
<TYPE/>
|
||||
<OCCURS/>
|
||||
<SUBC>I</SUBC>
|
||||
<APPL/>
|
||||
<SECU/>
|
||||
<CNAM/>
|
||||
<CDAT>0000-00-00</CDAT>
|
||||
<UNAM/>
|
||||
<UDAT>0000-00-00</UDAT>
|
||||
<VERN/>
|
||||
<LEVL/>
|
||||
<RSTAT/>
|
||||
<RMAND/>
|
||||
<RLOAD>E</RLOAD>
|
||||
<FIXPT/>
|
||||
<SSET/>
|
||||
<SDATE>0000-00-00</SDATE>
|
||||
<STIME/>
|
||||
<IDATE>0000-00-00</IDATE>
|
||||
<ITIME/>
|
||||
<LDBNAME/>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<KEY/>
|
||||
<ENTRY>Include ZABAPGIT_GIT</ENTRY>
|
||||
<LENGTH>20</LENGTH>
|
||||
<SPLIT/>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
543
src/zabapgit_html.prog.abap
Normal file
543
src/zabapgit_html.prog.abap
Normal file
|
@ -0,0 +1,543 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Include ZABAPGIT_HTML
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_html_action_utils DEFINITION
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_html_action_utils DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
|
||||
TYPES: BEGIN OF ty_commit_fields, "TODO refactor ! Move to normal place
|
||||
repo_key TYPE lcl_persistence_repo=>ty_repo-key,
|
||||
username TYPE string,
|
||||
email TYPE string,
|
||||
comment TYPE string,
|
||||
body TYPE string,
|
||||
END OF ty_commit_fields.
|
||||
|
||||
CLASS-METHODS jump_encode
|
||||
IMPORTING iv_obj_type TYPE tadir-object
|
||||
iv_obj_name TYPE tadir-obj_name
|
||||
RETURNING VALUE(rv_string) TYPE string.
|
||||
|
||||
CLASS-METHODS jump_decode
|
||||
IMPORTING iv_string TYPE clike
|
||||
EXPORTING ev_obj_type TYPE tadir-object
|
||||
ev_obj_name TYPE tadir-obj_name
|
||||
RAISING lcx_exception.
|
||||
|
||||
CLASS-METHODS file_encode
|
||||
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||
ig_file TYPE any "ty_repo_file
|
||||
RETURNING VALUE(rv_string) TYPE string.
|
||||
|
||||
CLASS-METHODS file_decode
|
||||
IMPORTING iv_string TYPE clike
|
||||
EXPORTING ev_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||
eg_file TYPE any "ty_repo_file
|
||||
RAISING lcx_exception.
|
||||
|
||||
CLASS-METHODS dbkey_encode
|
||||
IMPORTING is_key TYPE lcl_persistence_db=>ty_content
|
||||
RETURNING VALUE(rv_string) TYPE string.
|
||||
|
||||
CLASS-METHODS dbkey_decode
|
||||
IMPORTING iv_string TYPE clike
|
||||
RETURNING VALUE(rs_key) TYPE lcl_persistence_db=>ty_content.
|
||||
|
||||
CLASS-METHODS parse_commit_request
|
||||
IMPORTING it_postdata TYPE cnht_post_data_tab
|
||||
RETURNING VALUE(rs_fields) TYPE ty_commit_fields.
|
||||
|
||||
CLASS-METHODS repo_key_encode
|
||||
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||
RETURNING VALUE(rv_string) TYPE string.
|
||||
|
||||
CLASS-METHODS repo_key_decode
|
||||
IMPORTING iv_string TYPE clike
|
||||
RETURNING VALUE(rv_key) TYPE lcl_persistence_repo=>ty_repo-key.
|
||||
|
||||
ENDCLASS. "lcl_html_action_utils DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_html_action_utils IMPLEMENTATION
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_html_action_utils IMPLEMENTATION.
|
||||
|
||||
METHOD jump_encode.
|
||||
|
||||
DATA: lt_fields TYPE tihttpnvp,
|
||||
ls_field LIKE LINE OF lt_fields.
|
||||
|
||||
|
||||
ls_field-name = 'TYPE'.
|
||||
ls_field-value = iv_obj_type.
|
||||
APPEND ls_field TO lt_fields.
|
||||
|
||||
ls_field-name = 'NAME'.
|
||||
ls_field-value = iv_obj_name.
|
||||
APPEND ls_field TO lt_fields.
|
||||
|
||||
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
||||
|
||||
ENDMETHOD. "jump_encode
|
||||
|
||||
METHOD jump_decode.
|
||||
|
||||
DATA: lt_fields TYPE tihttpnvp,
|
||||
lv_string TYPE string.
|
||||
|
||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
||||
|
||||
|
||||
lv_string = iv_string. " type conversion
|
||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
||||
|
||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'TYPE'.
|
||||
IF sy-subrc = 0.
|
||||
ev_obj_type = <ls_field>-value.
|
||||
ELSE.
|
||||
CLEAR ev_obj_type.
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'NAME'.
|
||||
IF sy-subrc = 0.
|
||||
ev_obj_name = <ls_field>-value.
|
||||
ELSE.
|
||||
CLEAR ev_obj_name.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "jump_decode
|
||||
|
||||
METHOD file_encode.
|
||||
|
||||
DATA: lt_fields TYPE tihttpnvp,
|
||||
ls_field LIKE LINE OF lt_fields.
|
||||
|
||||
FIELD-SYMBOLS <lv_field> TYPE string.
|
||||
|
||||
ls_field-name = 'KEY'.
|
||||
ls_field-value = iv_key.
|
||||
APPEND ls_field TO lt_fields.
|
||||
|
||||
ls_field-name = 'PATH'.
|
||||
ASSIGN COMPONENT ls_field-name OF STRUCTURE ig_file TO <lv_field>.
|
||||
ASSERT <lv_field> IS ASSIGNED.
|
||||
ls_field-value = <lv_field>.
|
||||
APPEND ls_field TO lt_fields.
|
||||
|
||||
ls_field-name = 'FILENAME'.
|
||||
ASSIGN COMPONENT ls_field-name OF STRUCTURE ig_file TO <lv_field>.
|
||||
ASSERT <lv_field> IS ASSIGNED.
|
||||
ls_field-value = <lv_field>.
|
||||
APPEND ls_field TO lt_fields.
|
||||
|
||||
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
||||
|
||||
ENDMETHOD. "file_encode
|
||||
|
||||
METHOD file_decode.
|
||||
|
||||
DATA: lt_fields TYPE tihttpnvp,
|
||||
lv_string TYPE string.
|
||||
|
||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields,
|
||||
<lv_field> TYPE string.
|
||||
|
||||
CLEAR: ev_key, eg_file.
|
||||
lv_string = iv_string. " type conversion
|
||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
||||
|
||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'KEY'.
|
||||
IF sy-subrc = 0.
|
||||
ev_key = <ls_field>-value.
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'PATH'.
|
||||
IF sy-subrc = 0.
|
||||
ASSIGN COMPONENT 'PATH' OF STRUCTURE eg_file TO <lv_field>.
|
||||
ASSERT <lv_field> IS ASSIGNED.
|
||||
<lv_field> = <ls_field>-value.
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'FILENAME'.
|
||||
IF sy-subrc = 0.
|
||||
ASSIGN COMPONENT 'FILENAME' OF STRUCTURE eg_file TO <lv_field>.
|
||||
ASSERT <lv_field> IS ASSIGNED.
|
||||
<lv_field> = <ls_field>-value.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "file_decode
|
||||
|
||||
METHOD dbkey_encode.
|
||||
|
||||
DATA: lt_fields TYPE tihttpnvp,
|
||||
ls_field LIKE LINE OF lt_fields.
|
||||
|
||||
ls_field-name = 'TYPE'.
|
||||
ls_field-value = is_key-type.
|
||||
APPEND ls_field TO lt_fields.
|
||||
|
||||
ls_field-name = 'VALUE'.
|
||||
ls_field-value = is_key-value.
|
||||
APPEND ls_field TO lt_fields.
|
||||
|
||||
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
||||
|
||||
ENDMETHOD. "dbkey_encode
|
||||
|
||||
METHOD dbkey_decode.
|
||||
|
||||
DATA: lt_fields TYPE tihttpnvp,
|
||||
lv_string TYPE string.
|
||||
|
||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
||||
|
||||
lv_string = iv_string. " type conversion
|
||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
||||
|
||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'TYPE'.
|
||||
IF sy-subrc = 0.
|
||||
rs_key-type = <ls_field>-value.
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'VALUE'.
|
||||
IF sy-subrc = 0.
|
||||
rs_key-value = <ls_field>-value.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "dbkey_decode
|
||||
|
||||
METHOD parse_commit_request.
|
||||
|
||||
CONSTANTS: lc_replace TYPE string VALUE '<<new>>'.
|
||||
|
||||
DATA: lv_string TYPE string,
|
||||
lt_fields TYPE tihttpnvp.
|
||||
|
||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
||||
|
||||
|
||||
CONCATENATE LINES OF it_postdata INTO lv_string.
|
||||
|
||||
REPLACE ALL OCCURRENCES OF gc_newline IN lv_string WITH lc_replace.
|
||||
|
||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
||||
|
||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'key' ##NO_TEXT.
|
||||
ASSERT sy-subrc = 0.
|
||||
rs_fields-repo_key = <ls_field>-value.
|
||||
|
||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'username' ##NO_TEXT.
|
||||
ASSERT sy-subrc = 0.
|
||||
rs_fields-username = <ls_field>-value.
|
||||
|
||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'email' ##NO_TEXT.
|
||||
ASSERT sy-subrc = 0.
|
||||
rs_fields-email = <ls_field>-value.
|
||||
|
||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'comment' ##NO_TEXT.
|
||||
ASSERT sy-subrc = 0.
|
||||
rs_fields-comment = <ls_field>-value.
|
||||
|
||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'body' ##NO_TEXT.
|
||||
ASSERT sy-subrc = 0.
|
||||
rs_fields-body = <ls_field>-value.
|
||||
REPLACE ALL OCCURRENCES OF lc_replace IN rs_fields-body WITH gc_newline.
|
||||
|
||||
ENDMETHOD. "parse_commit_request
|
||||
|
||||
METHOD repo_key_encode.
|
||||
|
||||
DATA: lt_fields TYPE tihttpnvp,
|
||||
ls_field LIKE LINE OF lt_fields.
|
||||
|
||||
ls_field-name = 'KEY'.
|
||||
ls_field-value = iv_key.
|
||||
APPEND ls_field TO lt_fields.
|
||||
|
||||
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
||||
|
||||
ENDMETHOD. "repo_key_encode
|
||||
|
||||
METHOD repo_key_decode.
|
||||
|
||||
DATA: lt_fields TYPE tihttpnvp,
|
||||
lv_string TYPE string.
|
||||
|
||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
||||
|
||||
lv_string = iv_string. " type conversion
|
||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
||||
|
||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'KEY'.
|
||||
IF sy-subrc = 0.
|
||||
rv_key = <ls_field>-value.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "repo_key_decode
|
||||
|
||||
ENDCLASS. "lcl_html_action_utils IMPLEMENTATION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_html_helper DEFINITION
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_html_helper DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
CONSTANTS: c_indent_size TYPE i VALUE 2.
|
||||
|
||||
DATA mv_html TYPE string READ-ONLY.
|
||||
DATA mv_indent TYPE i READ-ONLY.
|
||||
|
||||
METHODS add IMPORTING iv_chunk TYPE any.
|
||||
METHODS reset.
|
||||
|
||||
METHODS add_anchor IMPORTING iv_txt TYPE string
|
||||
iv_act TYPE string
|
||||
iv_opt TYPE char1 OPTIONAL
|
||||
iv_typ TYPE char1 DEFAULT gc_action_type-sapevent
|
||||
iv_class TYPE string OPTIONAL.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS _add_str IMPORTING iv_str TYPE csequence.
|
||||
METHODS _add_htm IMPORTING io_html TYPE REF TO lcl_html_helper.
|
||||
|
||||
ENDCLASS. "lcl_html_helper DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_html_helper IMPLEMENTATION
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_html_helper IMPLEMENTATION.
|
||||
METHOD add.
|
||||
DATA lo_type TYPE REF TO cl_abap_typedescr.
|
||||
DATA lo_html TYPE REF TO lcl_html_helper.
|
||||
|
||||
lo_type = cl_abap_typedescr=>describe_by_data( iv_chunk ).
|
||||
|
||||
CASE lo_type->type_kind.
|
||||
WHEN cl_abap_typedescr=>typekind_char
|
||||
OR cl_abap_typedescr=>typekind_string.
|
||||
IF strlen( iv_chunk ) = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
_add_str( iv_chunk ).
|
||||
WHEN cl_abap_typedescr=>typekind_oref.
|
||||
ASSERT iv_chunk IS BOUND. " Dev mistake
|
||||
TRY.
|
||||
lo_html ?= iv_chunk.
|
||||
CATCH cx_sy_move_cast_error.
|
||||
ASSERT 1 = 0. " Dev mistake
|
||||
ENDTRY.
|
||||
_add_htm( lo_html ).
|
||||
WHEN OTHERS.
|
||||
ASSERT 1 = 0. " Dev mistake
|
||||
ENDCASE.
|
||||
|
||||
ENDMETHOD. " add
|
||||
|
||||
METHOD reset.
|
||||
CLEAR: me->mv_html, me->mv_indent.
|
||||
ENDMETHOD. "reset
|
||||
|
||||
METHOD _add_str.
|
||||
CONSTANTS lc_single_tags_re TYPE string " HTML5 singleton tags
|
||||
VALUE '<(area|base|br|col|command|embed|hr|img|input|link|meta|param|source|!)'.
|
||||
|
||||
DATA lv_tags TYPE i.
|
||||
DATA lv_tags_open TYPE i.
|
||||
DATA lv_tags_close TYPE i.
|
||||
DATA lv_tags_single TYPE i.
|
||||
DATA lv_close_offs TYPE i.
|
||||
DATA lv_shift_back TYPE i.
|
||||
|
||||
FIND FIRST OCCURRENCE OF '</' IN iv_str MATCH OFFSET lv_close_offs.
|
||||
IF sy-subrc = 0 AND lv_close_offs = 0 AND mv_indent > 0. " Found close tag @beginning
|
||||
lv_shift_back = 1.
|
||||
ENDIF.
|
||||
|
||||
mv_html = mv_html
|
||||
&& repeat( val = ` ` occ = ( mv_indent - lv_shift_back ) * c_indent_size )
|
||||
&& iv_str
|
||||
&& gc_newline.
|
||||
|
||||
FIND ALL OCCURRENCES OF '<' IN iv_str MATCH COUNT lv_tags.
|
||||
FIND ALL OCCURRENCES OF '</' IN iv_str MATCH COUNT lv_tags_close.
|
||||
FIND ALL OCCURRENCES OF REGEX lc_single_tags_re IN iv_str MATCH COUNT lv_tags_single.
|
||||
|
||||
lv_tags_open = lv_tags - lv_tags_close - lv_tags_single.
|
||||
|
||||
" More-less logic chosen due to possible double tags in a line '<a><b>'
|
||||
IF lv_tags_open > lv_tags_close.
|
||||
mv_indent = mv_indent + 1.
|
||||
ELSEIF lv_tags_open < lv_tags_close AND mv_indent > 0.
|
||||
mv_indent = mv_indent - 1.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "_add_str
|
||||
|
||||
METHOD _add_htm.
|
||||
|
||||
DATA lt_strtab TYPE TABLE OF string.
|
||||
DATA lv_str TYPE string.
|
||||
|
||||
SPLIT io_html->mv_html AT gc_newline INTO TABLE lt_strtab.
|
||||
LOOP AT lt_strtab INTO lv_str.
|
||||
SHIFT lv_str LEFT DELETING LEADING space.
|
||||
_add_str( lv_str ).
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD. "_add_htm
|
||||
|
||||
METHOD add_anchor.
|
||||
DATA: lv_class TYPE string,
|
||||
lv_href TYPE string.
|
||||
|
||||
lv_class = iv_class.
|
||||
|
||||
IF iv_opt = gc_html_opt-emphas.
|
||||
lv_class = lv_class && ' emphasis' ##NO_TEXT.
|
||||
ENDIF.
|
||||
IF iv_opt = gc_html_opt-cancel.
|
||||
lv_class = lv_class && ' attention' ##NO_TEXT.
|
||||
ENDIF.
|
||||
IF lv_class IS NOT INITIAL.
|
||||
SHIFT lv_class LEFT DELETING LEADING space.
|
||||
lv_class = | class="{ lv_class }"|.
|
||||
ENDIF.
|
||||
|
||||
IF iv_act IS NOT INITIAL.
|
||||
CASE iv_typ.
|
||||
WHEN gc_action_type-url.
|
||||
lv_href = | href="{ iv_act }"|.
|
||||
WHEN gc_action_type-sapevent.
|
||||
lv_href = | href="sapevent:{ iv_act }"|.
|
||||
WHEN gc_action_type-onclick.
|
||||
lv_href = | onclick="{ iv_act }"|.
|
||||
WHEN OTHERS.
|
||||
ENDCASE.
|
||||
ENDIF.
|
||||
|
||||
_add_str( |<a{ lv_class }{ lv_href }>{ iv_txt }</a>| ).
|
||||
|
||||
ENDMETHOD. "add_action
|
||||
|
||||
ENDCLASS. "lcl_html_helper IMPLEMENTATION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_html_toolbar DEFINITION
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_html_toolbar DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
METHODS add IMPORTING iv_txt TYPE string
|
||||
io_sub TYPE REF TO lcl_html_toolbar OPTIONAL
|
||||
iv_act TYPE string OPTIONAL
|
||||
iv_opt TYPE c OPTIONAL
|
||||
iv_typ TYPE c DEFAULT gc_action_type-sapevent.
|
||||
|
||||
METHODS render IMPORTING iv_as_droplist_with_label TYPE string OPTIONAL
|
||||
iv_no_separator TYPE abap_bool OPTIONAL
|
||||
iv_vertical TYPE abap_bool OPTIONAL
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||
|
||||
METHODS reset.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES: BEGIN OF ty_item,
|
||||
txt TYPE string,
|
||||
act TYPE string,
|
||||
sub TYPE REF TO lcl_html_toolbar,
|
||||
opt TYPE char1,
|
||||
typ TYPE char1,
|
||||
END OF ty_item.
|
||||
TYPES: tt_items TYPE STANDARD TABLE OF ty_item.
|
||||
|
||||
DATA mt_items TYPE tt_items.
|
||||
|
||||
ENDCLASS. "lcl_html_toolbar DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_html_toolbar IMPLEMENTATION
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_html_toolbar IMPLEMENTATION.
|
||||
|
||||
METHOD reset.
|
||||
CLEAR mt_items.
|
||||
ENDMETHOD. "reset
|
||||
|
||||
METHOD add.
|
||||
DATA ls_item TYPE ty_item.
|
||||
|
||||
ASSERT iv_act IS INITIAL AND io_sub IS NOT INITIAL
|
||||
OR iv_act IS NOT INITIAL AND io_sub IS INITIAL. " Only one supplied
|
||||
|
||||
ls_item-txt = iv_txt.
|
||||
ls_item-act = iv_act.
|
||||
ls_item-sub = io_sub.
|
||||
ls_item-opt = iv_opt.
|
||||
ls_item-typ = iv_typ.
|
||||
APPEND ls_item TO mt_items.
|
||||
ENDMETHOD. "add
|
||||
|
||||
METHOD render.
|
||||
DATA:
|
||||
lv_class TYPE string,
|
||||
lv_last TYPE abap_bool.
|
||||
|
||||
FIELD-SYMBOLS <ls_item> LIKE LINE OF mt_items.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
IF iv_as_droplist_with_label IS INITIAL.
|
||||
IF iv_vertical = abap_true.
|
||||
lv_class = 'menu_vertical' ##NO_TEXT.
|
||||
ELSE.
|
||||
lv_class = 'menu' ##NO_TEXT.
|
||||
ENDIF.
|
||||
ELSE.
|
||||
lv_class = 'dropdown' ##NO_TEXT.
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( |<div class="{ lv_class }">| ).
|
||||
|
||||
IF iv_as_droplist_with_label IS NOT INITIAL.
|
||||
lv_class = 'dropbtn'.
|
||||
IF iv_no_separator = abap_true.
|
||||
lv_class = lv_class && ' menu_end' ##NO_TEXT.
|
||||
ENDIF.
|
||||
ro_html->add( |<a class="{ lv_class }">{ iv_as_droplist_with_label }</a>| ).
|
||||
ro_html->add( '<div class="dropdown_content">' ).
|
||||
ENDIF.
|
||||
|
||||
LOOP AT mt_items ASSIGNING <ls_item>.
|
||||
lv_last = boolc( sy-tabix = lines( mt_items ) ).
|
||||
|
||||
IF <ls_item>-sub IS INITIAL.
|
||||
CLEAR lv_class.
|
||||
IF iv_no_separator = abap_true
|
||||
OR lv_last = abap_true
|
||||
AND iv_as_droplist_with_label IS INITIAL.
|
||||
lv_class = 'menu_end'.
|
||||
ENDIF.
|
||||
ro_html->add_anchor( iv_txt = <ls_item>-txt
|
||||
iv_act = <ls_item>-act
|
||||
iv_opt = <ls_item>-opt
|
||||
iv_typ = <ls_item>-typ
|
||||
iv_class = lv_class ).
|
||||
ELSE.
|
||||
ro_html->add( <ls_item>-sub->render(
|
||||
iv_as_droplist_with_label = <ls_item>-txt
|
||||
iv_no_separator = lv_last ) ).
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
IF iv_as_droplist_with_label IS NOT INITIAL.
|
||||
ro_html->add( '</div>' ).
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD. "render
|
||||
|
||||
ENDCLASS. "lcl_html_toolbar IMPLEMENTATION
|
48
src/zabapgit_html.prog.xml
Normal file
48
src/zabapgit_html.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<PROGDIR>
|
||||
<NAME>ZABAPGIT_HTML</NAME>
|
||||
<STATE>A</STATE>
|
||||
<SQLX/>
|
||||
<EDTX/>
|
||||
<VARCL>X</VARCL>
|
||||
<DBAPL/>
|
||||
<DBNA/>
|
||||
<CLAS/>
|
||||
<TYPE/>
|
||||
<OCCURS/>
|
||||
<SUBC>I</SUBC>
|
||||
<APPL/>
|
||||
<SECU/>
|
||||
<CNAM/>
|
||||
<CDAT>0000-00-00</CDAT>
|
||||
<UNAM/>
|
||||
<UDAT>0000-00-00</UDAT>
|
||||
<VERN/>
|
||||
<LEVL/>
|
||||
<RSTAT/>
|
||||
<RMAND/>
|
||||
<RLOAD>E</RLOAD>
|
||||
<FIXPT/>
|
||||
<SSET/>
|
||||
<SDATE>0000-00-00</SDATE>
|
||||
<STIME/>
|
||||
<IDATE>0000-00-00</IDATE>
|
||||
<ITIME/>
|
||||
<LDBNAME/>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<KEY/>
|
||||
<ENTRY>Include ZABAPGIT_HTML</ENTRY>
|
||||
<LENGTH>21</LENGTH>
|
||||
<SPLIT/>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
1682
src/zabapgit_persistence.prog.abap
Normal file
1682
src/zabapgit_persistence.prog.abap
Normal file
File diff suppressed because it is too large
Load Diff
48
src/zabapgit_persistence.prog.xml
Normal file
48
src/zabapgit_persistence.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<PROGDIR>
|
||||
<NAME>ZABAPGIT_PERSISTENCE</NAME>
|
||||
<STATE>A</STATE>
|
||||
<SQLX/>
|
||||
<EDTX/>
|
||||
<VARCL>X</VARCL>
|
||||
<DBAPL/>
|
||||
<DBNA/>
|
||||
<CLAS/>
|
||||
<TYPE/>
|
||||
<OCCURS/>
|
||||
<SUBC>I</SUBC>
|
||||
<APPL/>
|
||||
<SECU/>
|
||||
<CNAM/>
|
||||
<CDAT>0000-00-00</CDAT>
|
||||
<UNAM/>
|
||||
<UDAT>0000-00-00</UDAT>
|
||||
<VERN/>
|
||||
<LEVL/>
|
||||
<RSTAT/>
|
||||
<RMAND/>
|
||||
<RLOAD>E</RLOAD>
|
||||
<FIXPT/>
|
||||
<SSET/>
|
||||
<SDATE>0000-00-00</SDATE>
|
||||
<STIME/>
|
||||
<IDATE>0000-00-00</IDATE>
|
||||
<ITIME/>
|
||||
<LDBNAME/>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<KEY/>
|
||||
<ENTRY>Include ZABAPGIT_PERSISTENCE</ENTRY>
|
||||
<LENGTH>28</LENGTH>
|
||||
<SPLIT/>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
213
src/zabapgit_repo.prog.abap
Normal file
213
src/zabapgit_repo.prog.abap
Normal file
|
@ -0,0 +1,213 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Include ZABAPGIT_REPO
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_repo DEFINITION
|
||||
*----------------------------------------------------------------------*
|
||||
*
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_repo DEFINITION ABSTRACT.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS:
|
||||
constructor
|
||||
IMPORTING is_data TYPE lcl_persistence_repo=>ty_repo,
|
||||
get_key
|
||||
RETURNING VALUE(rv_key) TYPE lcl_persistence_db=>ty_value,
|
||||
get_name
|
||||
RETURNING VALUE(rv_name) TYPE string
|
||||
RAISING lcx_exception,
|
||||
get_files_local
|
||||
IMPORTING io_log TYPE REF TO lcl_log OPTIONAL
|
||||
RETURNING VALUE(rt_files) TYPE ty_files_item_tt
|
||||
RAISING lcx_exception,
|
||||
get_local_checksums
|
||||
RETURNING VALUE(rt_checksums) TYPE lcl_persistence_repo=>ty_local_checksum_tt,
|
||||
get_files_remote
|
||||
RETURNING VALUE(rt_files) TYPE ty_files_tt
|
||||
RAISING lcx_exception,
|
||||
get_package
|
||||
RETURNING VALUE(rv_package) TYPE lcl_persistence_repo=>ty_repo-package,
|
||||
get_master_language
|
||||
RETURNING VALUE(rv_language) TYPE spras,
|
||||
delete
|
||||
RAISING lcx_exception,
|
||||
get_dot_abapgit
|
||||
RETURNING VALUE(ro_dot_abapgit) TYPE REF TO lcl_dot_abapgit,
|
||||
deserialize
|
||||
RAISING lcx_exception,
|
||||
refresh
|
||||
RAISING lcx_exception,
|
||||
build_local_checksums
|
||||
RETURNING VALUE(rt_checksums) TYPE lcl_persistence_repo=>ty_local_checksum_tt
|
||||
RAISING lcx_exception,
|
||||
is_offline
|
||||
RETURNING VALUE(rv_offline) TYPE abap_bool
|
||||
RAISING lcx_exception.
|
||||
|
||||
PROTECTED SECTION.
|
||||
|
||||
DATA: mt_local TYPE ty_files_item_tt,
|
||||
mt_remote TYPE ty_files_tt,
|
||||
mo_dot_abapgit TYPE REF TO lcl_dot_abapgit,
|
||||
ms_data TYPE lcl_persistence_repo=>ty_repo.
|
||||
|
||||
METHODS:
|
||||
find_dot_abapgit
|
||||
RAISING lcx_exception,
|
||||
set
|
||||
IMPORTING iv_sha1 TYPE ty_sha1 OPTIONAL
|
||||
it_checksums TYPE lcl_persistence_repo=>ty_local_checksum_tt OPTIONAL
|
||||
iv_url TYPE lcl_persistence_repo=>ty_repo-url OPTIONAL
|
||||
iv_branch_name TYPE lcl_persistence_repo=>ty_repo-branch_name OPTIONAL
|
||||
RAISING lcx_exception.
|
||||
|
||||
ENDCLASS. "lcl_repo DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_repo_online DEFINITION
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_repo_online DEFINITION INHERITING FROM lcl_repo FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS:
|
||||
refresh REDEFINITION,
|
||||
constructor
|
||||
IMPORTING is_data TYPE lcl_persistence_repo=>ty_repo
|
||||
RAISING lcx_exception,
|
||||
get_url
|
||||
RETURNING VALUE(rv_url) TYPE lcl_persistence_repo=>ty_repo-url,
|
||||
get_branch_name
|
||||
RETURNING VALUE(rv_name) TYPE lcl_persistence_repo=>ty_repo-branch_name,
|
||||
set_url
|
||||
IMPORTING iv_url TYPE lcl_persistence_repo=>ty_repo-url
|
||||
RAISING lcx_exception,
|
||||
set_branch_name
|
||||
IMPORTING iv_branch_name TYPE lcl_persistence_repo=>ty_repo-branch_name
|
||||
RAISING lcx_exception,
|
||||
get_sha1_local
|
||||
RETURNING VALUE(rv_sha1) TYPE lcl_persistence_repo=>ty_repo-sha1,
|
||||
get_sha1_remote
|
||||
RETURNING VALUE(rv_sha1) TYPE lcl_persistence_repo=>ty_repo-sha1
|
||||
RAISING lcx_exception,
|
||||
get_files_remote REDEFINITION,
|
||||
get_objects
|
||||
RETURNING VALUE(rt_objects) TYPE ty_objects_tt
|
||||
RAISING lcx_exception,
|
||||
deserialize REDEFINITION,
|
||||
status
|
||||
IMPORTING io_log TYPE REF TO lcl_log OPTIONAL
|
||||
RETURNING VALUE(rt_results) TYPE ty_results_tt
|
||||
RAISING lcx_exception,
|
||||
push
|
||||
IMPORTING is_comment TYPE ty_comment
|
||||
io_stage TYPE REF TO lcl_stage
|
||||
RAISING lcx_exception.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA:
|
||||
mt_objects TYPE ty_objects_tt,
|
||||
mv_branch TYPE ty_sha1,
|
||||
mv_initialized TYPE abap_bool.
|
||||
|
||||
METHODS:
|
||||
handle_stage_ignore
|
||||
IMPORTING io_stage TYPE REF TO lcl_stage
|
||||
RAISING lcx_exception,
|
||||
initialize
|
||||
RAISING lcx_exception.
|
||||
|
||||
ENDCLASS. "lcl_repo_online DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_repo_offline DEFINITION
|
||||
*----------------------------------------------------------------------*
|
||||
*
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_repo_offline DEFINITION INHERITING FROM lcl_repo FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS:
|
||||
set_files_remote
|
||||
IMPORTING it_files TYPE ty_files_tt
|
||||
RAISING lcx_exception.
|
||||
|
||||
ENDCLASS. "lcl_repo_offline DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_repo_srv DEFINITION
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_repo_srv DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
TYPES: ty_repo_tt TYPE STANDARD TABLE OF REF TO lcl_repo WITH DEFAULT KEY.
|
||||
|
||||
METHODS list
|
||||
RETURNING VALUE(rt_list) TYPE ty_repo_tt
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS refresh
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS new_online
|
||||
IMPORTING iv_url TYPE string
|
||||
iv_branch_name TYPE string
|
||||
iv_package TYPE devclass
|
||||
RETURNING VALUE(ro_repo) TYPE REF TO lcl_repo_online
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS new_offline
|
||||
IMPORTING iv_url TYPE string
|
||||
iv_package TYPE devclass
|
||||
RETURNING VALUE(ro_repo) TYPE REF TO lcl_repo_offline
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS delete
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS get
|
||||
IMPORTING iv_key TYPE lcl_persistence_db=>ty_value
|
||||
RETURNING VALUE(ro_repo) TYPE REF TO lcl_repo
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS is_repo_installed
|
||||
IMPORTING iv_url TYPE string
|
||||
iv_target_package TYPE devclass OPTIONAL
|
||||
RETURNING VALUE(rv_installed) TYPE abap_bool
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS get_stage
|
||||
IMPORTING iv_repo_key TYPE lcl_persistence_db=>ty_value
|
||||
iv_new TYPE abap_bool DEFAULT abap_false
|
||||
RETURNING VALUE(ro_stage) TYPE REF TO lcl_stage
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS free_stage
|
||||
IMPORTING iv_repo_key TYPE lcl_persistence_db=>ty_value.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
TYPES: BEGIN OF ty_stage_list,
|
||||
repo_key TYPE lcl_persistence_db=>ty_value,
|
||||
stage TYPE REF TO lcl_stage,
|
||||
END OF ty_stage_list.
|
||||
|
||||
METHODS constructor.
|
||||
|
||||
DATA: mv_init TYPE abap_bool VALUE abap_false,
|
||||
mo_persistence TYPE REF TO lcl_persistence_repo,
|
||||
mt_stages TYPE TABLE OF ty_stage_list,
|
||||
mt_list TYPE ty_repo_tt.
|
||||
|
||||
METHODS add
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS validate_package
|
||||
IMPORTING iv_package TYPE devclass
|
||||
RAISING lcx_exception.
|
||||
|
||||
ENDCLASS. "lcl_repo_srv DEFINITION
|
48
src/zabapgit_repo.prog.xml
Normal file
48
src/zabapgit_repo.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<PROGDIR>
|
||||
<NAME>ZABAPGIT_REPO</NAME>
|
||||
<STATE>A</STATE>
|
||||
<SQLX/>
|
||||
<EDTX/>
|
||||
<VARCL>X</VARCL>
|
||||
<DBAPL/>
|
||||
<DBNA/>
|
||||
<CLAS/>
|
||||
<TYPE/>
|
||||
<OCCURS/>
|
||||
<SUBC>I</SUBC>
|
||||
<APPL/>
|
||||
<SECU/>
|
||||
<CNAM/>
|
||||
<CDAT>0000-00-00</CDAT>
|
||||
<UNAM/>
|
||||
<UDAT>0000-00-00</UDAT>
|
||||
<VERN/>
|
||||
<LEVL/>
|
||||
<RSTAT/>
|
||||
<RMAND/>
|
||||
<RLOAD>E</RLOAD>
|
||||
<FIXPT/>
|
||||
<SSET/>
|
||||
<SDATE>0000-00-00</SDATE>
|
||||
<STIME/>
|
||||
<IDATE>0000-00-00</IDATE>
|
||||
<ITIME/>
|
||||
<LDBNAME/>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<KEY/>
|
||||
<ENTRY>Include ZABAPGIT_REPO</ENTRY>
|
||||
<LENGTH>21</LENGTH>
|
||||
<SPLIT/>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
96
src/zabapgit_stage.prog.abap
Normal file
96
src/zabapgit_stage.prog.abap
Normal file
|
@ -0,0 +1,96 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Include ZABAPGIT_STAGE
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
CLASS lcl_stage_logic DEFINITION FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
TYPES: BEGIN OF ty_stage_files,
|
||||
local TYPE ty_files_item_tt,
|
||||
remote TYPE ty_files_tt,
|
||||
END OF ty_stage_files.
|
||||
|
||||
CLASS-METHODS:
|
||||
get
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo_online
|
||||
RETURNING VALUE(rs_files) TYPE ty_stage_files
|
||||
RAISING lcx_exception,
|
||||
count
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo_online
|
||||
RETURNING VALUE(rv_count) TYPE i
|
||||
RAISING lcx_exception.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CLASS-METHODS:
|
||||
remove_ignored
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo_online
|
||||
CHANGING cs_files TYPE ty_stage_files,
|
||||
remove_identical
|
||||
CHANGING cs_files TYPE ty_stage_files.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_stage_logic IMPLEMENTATION.
|
||||
|
||||
METHOD get.
|
||||
rs_files-local = io_repo->get_files_local( ).
|
||||
rs_files-remote = io_repo->get_files_remote( ).
|
||||
remove_identical( CHANGING cs_files = rs_files ).
|
||||
remove_ignored( EXPORTING io_repo = io_repo
|
||||
CHANGING cs_files = rs_files ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD count.
|
||||
|
||||
DATA: ls_files TYPE ty_stage_files.
|
||||
|
||||
ls_files = get( io_repo ).
|
||||
|
||||
rv_count = lines( ls_files-remote ) + lines( ls_files-local ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD remove_ignored.
|
||||
|
||||
DATA: lv_index TYPE i.
|
||||
|
||||
FIELD-SYMBOLS: <ls_remote> LIKE LINE OF cs_files-remote.
|
||||
|
||||
|
||||
LOOP AT cs_files-remote ASSIGNING <ls_remote>.
|
||||
lv_index = sy-tabix.
|
||||
|
||||
IF io_repo->get_dot_abapgit( )->is_ignored(
|
||||
iv_path = <ls_remote>-path
|
||||
iv_filename = <ls_remote>-filename ) = abap_true.
|
||||
DELETE cs_files-remote INDEX lv_index.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD remove_identical.
|
||||
|
||||
DATA: lv_index TYPE i,
|
||||
ls_remote LIKE LINE OF cs_files-remote.
|
||||
|
||||
FIELD-SYMBOLS: <ls_local> LIKE LINE OF cs_files-local.
|
||||
|
||||
|
||||
LOOP AT cs_files-local ASSIGNING <ls_local>.
|
||||
lv_index = sy-tabix.
|
||||
|
||||
READ TABLE cs_files-remote INTO ls_remote
|
||||
WITH KEY path = <ls_local>-file-path
|
||||
filename = <ls_local>-file-filename.
|
||||
IF sy-subrc = 0.
|
||||
DELETE cs_files-remote INDEX sy-tabix.
|
||||
IF ls_remote-data = <ls_local>-file-data.
|
||||
DELETE cs_files-local INDEX lv_index.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
48
src/zabapgit_stage.prog.xml
Normal file
48
src/zabapgit_stage.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<PROGDIR>
|
||||
<NAME>ZABAPGIT_STAGE</NAME>
|
||||
<STATE>A</STATE>
|
||||
<SQLX/>
|
||||
<EDTX/>
|
||||
<VARCL>X</VARCL>
|
||||
<DBAPL/>
|
||||
<DBNA/>
|
||||
<CLAS/>
|
||||
<TYPE/>
|
||||
<OCCURS/>
|
||||
<SUBC>I</SUBC>
|
||||
<APPL/>
|
||||
<SECU/>
|
||||
<CNAM/>
|
||||
<CDAT>0000-00-00</CDAT>
|
||||
<UNAM/>
|
||||
<UDAT>0000-00-00</UDAT>
|
||||
<VERN/>
|
||||
<LEVL/>
|
||||
<RSTAT/>
|
||||
<RMAND/>
|
||||
<RLOAD>E</RLOAD>
|
||||
<FIXPT/>
|
||||
<SSET/>
|
||||
<SDATE>0000-00-00</SDATE>
|
||||
<STIME/>
|
||||
<IDATE>0000-00-00</IDATE>
|
||||
<ITIME/>
|
||||
<LDBNAME/>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<KEY/>
|
||||
<ENTRY>Include ZABAPGIT_STAGE</ENTRY>
|
||||
<LENGTH>22</LENGTH>
|
||||
<SPLIT/>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -118,7 +118,7 @@ CLASS ltcl_dangerous IMPLEMENTATION.
|
|||
DATA: lo_repo TYPE REF TO lcl_repo_online,
|
||||
lt_tadir TYPE lcl_tadir=>ty_tadir_tt,
|
||||
lv_msg TYPE string,
|
||||
lt_results TYPE lcl_file_status=>ty_results_tt,
|
||||
lt_results TYPE ty_results_tt,
|
||||
lt_types TYPE lcl_objects=>ty_types_tt.
|
||||
|
||||
FIELD-SYMBOLS: <ls_result> LIKE LINE OF lt_results,
|
||||
|
@ -788,7 +788,7 @@ CLASS ltcl_git_pack DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FI
|
|||
METHODS:
|
||||
object_blob
|
||||
IMPORTING iv_data TYPE xstring
|
||||
RETURNING VALUE(rs_object) TYPE lcl_git_pack=>ty_object
|
||||
RETURNING VALUE(rs_object) TYPE ty_object
|
||||
RAISING lcx_exception.
|
||||
|
||||
ENDCLASS. "test DEFINITION
|
||||
|
@ -861,12 +861,12 @@ CLASS ltcl_git_pack IMPLEMENTATION.
|
|||
CONSTANTS: lc_data TYPE x LENGTH 15 VALUE '123456789ABCDEF545794254754554',
|
||||
lc_sha TYPE ty_sha1 VALUE '5f46cb3c4b7f0b3600b64f744cde614a283a88dc'.
|
||||
|
||||
DATA: lt_objects TYPE lcl_git_pack=>ty_objects_tt,
|
||||
DATA: lt_objects TYPE ty_objects_tt,
|
||||
ls_object LIKE LINE OF lt_objects,
|
||||
lt_nodes TYPE lcl_git_pack=>ty_nodes_tt,
|
||||
ls_node LIKE LINE OF lt_nodes,
|
||||
ls_commit TYPE lcl_git_pack=>ty_commit,
|
||||
lt_result TYPE lcl_git_pack=>ty_objects_tt,
|
||||
lt_result TYPE ty_objects_tt,
|
||||
lv_data TYPE xstring.
|
||||
|
||||
|
||||
|
@ -929,9 +929,9 @@ CLASS ltcl_git_pack IMPLEMENTATION.
|
|||
|
||||
CONSTANTS: lc_data TYPE x LENGTH 8 VALUE '0123456789ABCDEF'.
|
||||
|
||||
DATA: lt_objects TYPE lcl_git_pack=>ty_objects_tt,
|
||||
DATA: lt_objects TYPE ty_objects_tt,
|
||||
ls_object LIKE LINE OF lt_objects,
|
||||
lt_result TYPE lcl_git_pack=>ty_objects_tt,
|
||||
lt_result TYPE ty_objects_tt,
|
||||
lv_data TYPE xstring.
|
||||
|
||||
|
||||
|
@ -954,10 +954,10 @@ CLASS ltcl_git_pack IMPLEMENTATION.
|
|||
|
||||
CONSTANTS: lc_data TYPE x LENGTH 8 VALUE '0123456789ABCDEF'.
|
||||
|
||||
DATA: lt_objects TYPE lcl_git_pack=>ty_objects_tt,
|
||||
DATA: lt_objects TYPE ty_objects_tt,
|
||||
ls_object LIKE LINE OF lt_objects,
|
||||
lv_xstring TYPE xstring,
|
||||
lt_result TYPE lcl_git_pack=>ty_objects_tt,
|
||||
lt_result TYPE ty_objects_tt,
|
||||
lv_data TYPE xstring.
|
||||
|
||||
|
||||
|
|
|
@ -851,4 +851,111 @@ CLASS lcl_login_manager IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_progress DEFINITION FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
CLASS-METHODS:
|
||||
show
|
||||
IMPORTING
|
||||
iv_key TYPE string
|
||||
VALUE(iv_current) TYPE i
|
||||
iv_total TYPE i
|
||||
iv_text TYPE csequence.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES: BEGIN OF ty_stack,
|
||||
key TYPE string,
|
||||
current TYPE i,
|
||||
total TYPE i,
|
||||
text TYPE string,
|
||||
END OF ty_stack.
|
||||
|
||||
CLASS-DATA:
|
||||
gt_stack TYPE STANDARD TABLE OF ty_stack WITH DEFAULT KEY.
|
||||
|
||||
CLASS-METHODS:
|
||||
calc_pct
|
||||
RETURNING VALUE(rv_pct) TYPE i,
|
||||
build_text
|
||||
RETURNING VALUE(rv_text) TYPE string.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_progress IMPLEMENTATION.
|
||||
|
||||
METHOD show.
|
||||
|
||||
DATA: lv_pct TYPE i,
|
||||
lv_text TYPE string.
|
||||
|
||||
FIELD-SYMBOLS: <ls_stack> LIKE LINE OF gt_stack.
|
||||
|
||||
* assumption:
|
||||
* all callers must end with calling this method with iv_current = iv_total
|
||||
* to clear the progress of that sub element
|
||||
ASSERT lines( gt_stack ) < 10.
|
||||
|
||||
READ TABLE gt_stack INDEX lines( gt_stack ) ASSIGNING <ls_stack>.
|
||||
IF sy-subrc <> 0 OR <ls_stack>-key <> iv_key.
|
||||
APPEND INITIAL LINE TO gt_stack ASSIGNING <ls_stack>.
|
||||
ENDIF.
|
||||
<ls_stack>-key = iv_key.
|
||||
<ls_stack>-current = iv_current.
|
||||
<ls_stack>-total = iv_total.
|
||||
<ls_stack>-text = iv_text.
|
||||
|
||||
lv_pct = calc_pct( ).
|
||||
lv_text = build_text( ).
|
||||
|
||||
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
|
||||
EXPORTING
|
||||
percentage = lv_pct
|
||||
text = lv_text.
|
||||
|
||||
IF iv_current = iv_total.
|
||||
DELETE gt_stack INDEX lines( gt_stack ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD build_text.
|
||||
|
||||
FIELD-SYMBOLS: <ls_stack> LIKE LINE OF gt_stack.
|
||||
|
||||
|
||||
LOOP AT gt_stack ASSIGNING <ls_stack>.
|
||||
IF sy-tabix = 1.
|
||||
rv_text = |{ <ls_stack>-key } { <ls_stack>-text }|.
|
||||
ELSE.
|
||||
rv_text = |{ rv_text } - { <ls_stack>-key } { <ls_stack>-text }|.
|
||||
|
||||
IF <ls_stack>-current <> 1 AND <ls_stack>-total <> 1.
|
||||
rv_text = |{ rv_text } ({ <ls_stack>-current }/{ <ls_stack>-total })|.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD calc_pct.
|
||||
|
||||
DATA: lv_f TYPE f.
|
||||
|
||||
FIELD-SYMBOLS: <ls_stack> LIKE LINE OF gt_stack.
|
||||
|
||||
|
||||
READ TABLE gt_stack ASSIGNING <ls_stack> INDEX 1.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
lv_f = ( <ls_stack>-current / <ls_stack>-total ) * 100.
|
||||
rv_pct = lv_f.
|
||||
|
||||
IF rv_pct = 100.
|
||||
rv_pct = 99.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
Loading…
Reference in New Issue
Block a user