mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +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>
|
<ID>R</ID>
|
||||||
<KEY/>
|
<KEY/>
|
||||||
<ENTRY>abapGit</ENTRY>
|
<ENTRY>abapGit</ENTRY>
|
||||||
<LENGTH>54</LENGTH>
|
<LENGTH>7</LENGTH>
|
||||||
<SPLIT/>
|
<SPLIT/>
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</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,
|
DATA: lo_repo TYPE REF TO lcl_repo_online,
|
||||||
lt_tadir TYPE lcl_tadir=>ty_tadir_tt,
|
lt_tadir TYPE lcl_tadir=>ty_tadir_tt,
|
||||||
lv_msg TYPE string,
|
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.
|
lt_types TYPE lcl_objects=>ty_types_tt.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_result> LIKE LINE OF lt_results,
|
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:
|
METHODS:
|
||||||
object_blob
|
object_blob
|
||||||
IMPORTING iv_data TYPE xstring
|
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.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
ENDCLASS. "test DEFINITION
|
ENDCLASS. "test DEFINITION
|
||||||
|
@ -861,12 +861,12 @@ CLASS ltcl_git_pack IMPLEMENTATION.
|
||||||
CONSTANTS: lc_data TYPE x LENGTH 15 VALUE '123456789ABCDEF545794254754554',
|
CONSTANTS: lc_data TYPE x LENGTH 15 VALUE '123456789ABCDEF545794254754554',
|
||||||
lc_sha TYPE ty_sha1 VALUE '5f46cb3c4b7f0b3600b64f744cde614a283a88dc'.
|
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,
|
ls_object LIKE LINE OF lt_objects,
|
||||||
lt_nodes TYPE lcl_git_pack=>ty_nodes_tt,
|
lt_nodes TYPE lcl_git_pack=>ty_nodes_tt,
|
||||||
ls_node LIKE LINE OF lt_nodes,
|
ls_node LIKE LINE OF lt_nodes,
|
||||||
ls_commit TYPE lcl_git_pack=>ty_commit,
|
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.
|
lv_data TYPE xstring.
|
||||||
|
|
||||||
|
|
||||||
|
@ -929,9 +929,9 @@ CLASS ltcl_git_pack IMPLEMENTATION.
|
||||||
|
|
||||||
CONSTANTS: lc_data TYPE x LENGTH 8 VALUE '0123456789ABCDEF'.
|
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,
|
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.
|
lv_data TYPE xstring.
|
||||||
|
|
||||||
|
|
||||||
|
@ -954,10 +954,10 @@ CLASS ltcl_git_pack IMPLEMENTATION.
|
||||||
|
|
||||||
CONSTANTS: lc_data TYPE x LENGTH 8 VALUE '0123456789ABCDEF'.
|
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,
|
ls_object LIKE LINE OF lt_objects,
|
||||||
lv_xstring TYPE xstring,
|
lv_xstring TYPE xstring,
|
||||||
lt_result TYPE lcl_git_pack=>ty_objects_tt,
|
lt_result TYPE ty_objects_tt,
|
||||||
lv_data TYPE xstring.
|
lv_data TYPE xstring.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -852,3 +852,110 @@ CLASS lcl_login_manager IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
ENDCLASS.
|
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