Merge remote-tracking branch 'refs/remotes/larshp/master'

This commit is contained in:
EduardoCopat 2017-01-09 15:35:22 +01:00
commit d69901345f
62 changed files with 2887 additions and 1776 deletions

View File

@ -3,7 +3,7 @@ REPORT zabapgit LINE-SIZE 100.
* See http://www.abapgit.org
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
gc_abap_version TYPE string VALUE 'v1.24.7'. "#EC NOTEXT
gc_abap_version TYPE string VALUE 'v1.24.13'. "#EC NOTEXT
********************************************************************************
* The MIT License (MIT)

View File

@ -166,6 +166,8 @@ CLASS lcl_background IMPLEMENTATION.
METHOD run.
CONSTANTS: c_enq_type TYPE c LENGTH 12 VALUE 'BACKGROUND'.
DATA: lo_per TYPE REF TO lcl_persistence_background,
lo_repo TYPE REF TO lcl_repo_online,
lt_list TYPE lcl_persistence_background=>tt_background,
@ -174,6 +176,20 @@ CLASS lcl_background IMPLEMENTATION.
FIELD-SYMBOLS: <ls_list> LIKE LINE OF lt_list.
CALL FUNCTION 'ENQUEUE_EZABAPGIT'
EXPORTING
mode_zabapgit = 'E'
type = c_enq_type
_scope = '3'
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
WRITE: / 'Another intance of the program is already running'.
RETURN.
ENDIF.
CREATE OBJECT lo_per.
lt_list = lo_per->list( ).
@ -204,6 +220,10 @@ CLASS lcl_background IMPLEMENTATION.
WRITE: / 'Nothing configured' ##NO_TEXT.
ENDIF.
CALL FUNCTION 'DEQUEUE_EZABAPGIT'
EXPORTING
type = c_enq_type.
ENDMETHOD.
ENDCLASS.

View File

@ -33,15 +33,22 @@ form input:focus, textarea:focus {
border: 1px solid #8cadd9;
}
/* MODIFIERS */
/* COLOR PALETTE */
.grey { color: lightgrey !important; }
.emphasis { font-weight: bold !important; }
.darkgrey { color: #808080 !important; }
.attention { color: red !important; }
.blue { color: #5e8dc9; !important; }
.red { color: red !important; }
/* MODIFIERS */
.emphasis { font-weight: bold !important; }
.crossout { text-decoration: line-through !important; }
.right { text-align:right; }
.paddings { padding: 0.5em 0.5em; }
.pad-sides { padding: 0 0.3em; }
.pad4px { padding: 4px; }
.w100 { width: 100%; }
.w40 { width: 40%; }
/* STRUCTURE DIVS, HEADER & FOOTER */
td.headpad { padding-top: 11px; }
@ -172,6 +179,7 @@ div.menu_vertical a {
.dropdown_content td { text-align: left; padding: 2px; }
.dropdown_content td a { padding: 0em 0.2em; }
.dropdown_content td.icon { padding: 0 3px 0 6px; }
.dropdown_content td.text { width: 100%; }
.dropdown_content a:hover { background-color: #f1f1f1 }
.dropdown:hover .dropbtn { color: #79a0d2; }
@ -248,11 +256,12 @@ div.repo {
div.repo_container {
position: relative;
}
.repo_tab {
table.repo_tab {
border: 1px solid #DDD;
border-radius: 3px;
background: #fff;
margin-top: 0.5em;
width: 100%;
}
.repo_tab td {
border-top: 1px solid #eee;
@ -463,6 +472,7 @@ div.diff_head span.state-block span.none {
table.diff_tab {
font-family: Consolas, Courier, monospace;
font-size: 10pt;
width: 100%;
}
table.diff_tab td,th {
color: #444;

View File

@ -14,17 +14,19 @@ TYPES: BEGIN OF ty_file_signature,
sha1 TYPE ty_sha1,
END OF ty_file_signature.
TYPES: ty_file_signatures_tt TYPE STANDARD TABLE OF ty_file_signature WITH DEFAULT KEY.
TYPES: ty_file_signatures_ts TYPE SORTED TABLE OF ty_file_signature WITH UNIQUE KEY path filename.
TYPES: ty_file_signatures_tt TYPE STANDARD TABLE OF
ty_file_signature WITH DEFAULT KEY.
TYPES: ty_file_signatures_ts TYPE SORTED TABLE OF
ty_file_signature WITH UNIQUE KEY path filename.
TYPES: BEGIN OF ty_file.
INCLUDE TYPE ty_file_signature.
TYPES: data TYPE xstring,
INCLUDE TYPE ty_file_signature.
TYPES: data TYPE xstring,
END OF ty_file.
TYPES: ty_files_tt TYPE STANDARD TABLE OF ty_file WITH DEFAULT KEY.
TYPES: ty_string_tt TYPE STANDARD TABLE OF string WITH DEFAULT KEY.
TYPES: tt_w3urls TYPE STANDARD TABLE OF w3url WITH DEFAULT KEY.
TYPES: BEGIN OF ty_comment,
username TYPE string,
@ -49,8 +51,9 @@ TYPES: ty_files_item_tt TYPE STANDARD TABLE OF ty_file_item WITH DEFAULT KEY.
TYPES: BEGIN OF ty_metadata,
class TYPE string,
version TYPE string,
late_deser TYPE string,
late_deser TYPE abap_bool,
delete_tadir TYPE abap_bool,
ddic TYPE abap_bool,
END OF ty_metadata.
TYPES: BEGIN OF ty_web_asset,
@ -61,11 +64,11 @@ TYPES: BEGIN OF ty_web_asset,
TYPES tt_web_assets TYPE STANDARD TABLE OF ty_web_asset WITH DEFAULT KEY.
TYPES: BEGIN OF ty_repo_file,
path TYPE string,
filename TYPE string,
is_changed TYPE abap_bool,
rstate TYPE char1,
lstate TYPE char1,
path TYPE string,
filename TYPE string,
is_changed TYPE abap_bool,
rstate TYPE char1,
lstate TYPE char1,
END OF ty_repo_file.
TYPES tt_repo_files TYPE STANDARD TABLE OF ty_repo_file WITH DEFAULT KEY.
@ -101,19 +104,35 @@ TYPES: BEGIN OF ty_tadir,
TYPES: ty_tadir_tt TYPE STANDARD TABLE OF ty_tadir WITH DEFAULT KEY.
TYPES: BEGIN OF ty_result,
obj_type TYPE tadir-object,
obj_name TYPE tadir-obj_name,
path TYPE string,
filename TYPE string,
package TYPE devclass,
match TYPE sap_bool,
lstate TYPE char1,
rstate TYPE char1,
obj_type TYPE tadir-object,
obj_name TYPE tadir-obj_name,
path TYPE string,
filename TYPE string,
package TYPE devclass,
match TYPE sap_bool,
lstate TYPE char1,
rstate TYPE char1,
END OF ty_result.
TYPES: ty_results_tt TYPE STANDARD TABLE OF ty_result WITH DEFAULT KEY.
TYPES: ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY.
TYPES: ty_seocompotx_tt TYPE STANDARD TABLE OF seocompotx WITH DEFAULT KEY.
TYPES: BEGIN OF ty_tpool.
INCLUDE TYPE textpool.
TYPES: split TYPE c LENGTH 8.
TYPES: END OF ty_tpool.
TYPES: ty_tpool_tt TYPE STANDARD TABLE OF ty_tpool WITH DEFAULT KEY.
TYPES: BEGIN OF ty_sotr,
header TYPE sotr_head,
entries TYPE sotr_text_tt,
END OF ty_sotr.
TYPES: ty_sotr_tt TYPE STANDARD TABLE OF ty_sotr WITH DEFAULT KEY.
CONSTANTS: BEGIN OF gc_state, " https://git-scm.com/docs/git-status
unchanged TYPE char1 VALUE '',
added TYPE char1 VALUE 'A',
@ -140,7 +159,7 @@ CONSTANTS: BEGIN OF gc_event_state,
END OF gc_event_state.
CONSTANTS: BEGIN OF gc_html_opt,
emphas TYPE c VALUE 'E',
strong TYPE c VALUE 'E',
cancel TYPE c VALUE 'C',
crossout TYPE c VALUE 'X',
END OF gc_html_opt.
@ -171,43 +190,43 @@ CONSTANTS: BEGIN OF gc_action,
repo_refresh_checksums TYPE string VALUE 'repo_refresh_checksums',
repo_toggle_fav TYPE string VALUE 'repo_toggle_fav',
abapgit_home TYPE string VALUE 'abapgit_home',
abapgit_wiki TYPE string VALUE 'abapgit_wiki',
abapgit_install TYPE string VALUE 'abapgit_install',
abapgit_install_pi TYPE string VALUE 'abapgit_install_pi',
abapgit_home TYPE string VALUE 'abapgit_home',
abapgit_wiki TYPE string VALUE 'abapgit_wiki',
abapgit_install TYPE string VALUE 'abapgit_install',
abapgit_install_pi TYPE string VALUE 'abapgit_install_pi',
zip_import TYPE string VALUE 'zip_import',
zip_export TYPE string VALUE 'zip_export',
zip_package TYPE string VALUE 'zip_package',
zip_transport TYPE string VALUE 'zip_transport',
zip_object TYPE string VALUE 'zip_object',
zip_import TYPE string VALUE 'zip_import',
zip_export TYPE string VALUE 'zip_export',
zip_package TYPE string VALUE 'zip_package',
zip_transport TYPE string VALUE 'zip_transport',
zip_object TYPE string VALUE 'zip_object',
git_pull TYPE string VALUE 'git_pull',
git_reset TYPE string VALUE 'git_reset',
git_branch_create TYPE string VALUE 'git_branch_create',
git_branch_switch TYPE string VALUE 'git_branch_switch',
git_branch_delete TYPE string VALUE 'git_branch_delete',
git_commit TYPE string VALUE 'git_commit',
git_pull TYPE string VALUE 'git_pull',
git_reset TYPE string VALUE 'git_reset',
git_branch_create TYPE string VALUE 'git_branch_create',
git_branch_switch TYPE string VALUE 'git_branch_switch',
git_branch_delete TYPE string VALUE 'git_branch_delete',
git_commit TYPE string VALUE 'git_commit',
db_delete TYPE string VALUE 'db_delete',
db_update TYPE string VALUE 'db_update',
db_display TYPE string VALUE 'db_display',
db_edit TYPE string VALUE 'db_edit',
bg_update TYPE string VALUE 'bg_update',
db_delete TYPE string VALUE 'db_delete',
db_update TYPE string VALUE 'db_update',
db_display TYPE string VALUE 'db_display',
db_edit TYPE string VALUE 'db_edit',
bg_update TYPE string VALUE 'bg_update',
go_main TYPE string VALUE 'go_main',
go_explore TYPE string VALUE 'go_explore',
go_db TYPE string VALUE 'go_db',
go_background TYPE string VALUE 'go_background',
go_background_run TYPE string VALUE 'go_background_run',
go_diff TYPE string VALUE 'go_diff',
go_stage TYPE string VALUE 'go_stage',
go_commit TYPE string VALUE 'go_commit',
go_branch_overview TYPE string VALUE 'go_branch_overview',
go_playground TYPE string VALUE 'go_playground',
go_debuginfo TYPE string VALUE 'go_debuginfo',
go_settings TYPE STRING VALUE 'go_settings',
go_tutorial TYPE STRING VALUE 'go_tutorial',
jump TYPE string VALUE 'jump',
jump_pkg TYPE string VALUE 'jump_pkg',
go_main TYPE string VALUE 'go_main',
go_explore TYPE string VALUE 'go_explore',
go_db TYPE string VALUE 'go_db',
go_background TYPE string VALUE 'go_background',
go_background_run TYPE string VALUE 'go_background_run',
go_diff TYPE string VALUE 'go_diff',
go_stage TYPE string VALUE 'go_stage',
go_commit TYPE string VALUE 'go_commit',
go_branch_overview TYPE string VALUE 'go_branch_overview',
go_playground TYPE string VALUE 'go_playground',
go_debuginfo TYPE string VALUE 'go_debuginfo',
go_settings TYPE string VALUE 'go_settings',
go_tutorial TYPE string VALUE 'go_tutorial',
jump TYPE string VALUE 'jump',
jump_pkg TYPE string VALUE 'jump_pkg',
END OF gc_action.

View File

@ -193,7 +193,8 @@ CLASS lcl_file_status IMPLEMENTATION.
" Match against current state
READ TABLE it_state INTO ls_file_sig
WITH KEY path = is_local-file-path filename = is_local-file-filename
WITH KEY path = is_local-file-path
filename = is_local-file-filename
BINARY SEARCH.
IF sy-subrc = 0.
@ -203,7 +204,8 @@ CLASS lcl_file_status IMPLEMENTATION.
IF ls_file_sig-sha1 <> is_remote-sha1.
rs_result-rstate = gc_state-modified.
ENDIF.
rs_result-match = boolc( rs_result-lstate IS INITIAL AND rs_result-rstate IS INITIAL ).
rs_result-match = boolc( rs_result-lstate IS INITIAL
AND rs_result-rstate IS INITIAL ).
ELSE.
" This is a strange situation. As both local and remote exist
" the state should also be present. Maybe this is a first run of the code.

View File

@ -337,7 +337,8 @@ CLASS lcl_git_transport IMPLEMENTATION.
LOOP AT lt_branches FROM 1 ASSIGNING <ls_branch>.
IF sy-tabix = 1.
lv_capa = 'side-band-64k no-progress multi_ack agent=' && lcl_http=>get_agent( ) ##NO_TEXT.
lv_capa = 'side-band-64k no-progress multi_ack agent='
&& lcl_http=>get_agent( ) ##NO_TEXT.
lv_line = 'want' && ` ` && <ls_branch>-sha1
&& ` ` && lv_capa && gc_newline. "#EC NOTEXT
ELSE.
@ -348,14 +349,16 @@ CLASS lcl_git_transport IMPLEMENTATION.
ENDLOOP.
IF iv_deepen = abap_true.
lv_buffer = lv_buffer && lcl_git_utils=>pkt_string( 'deepen 1' && gc_newline ). "#EC NOTEXT
lv_buffer = lv_buffer && lcl_git_utils=>pkt_string( 'deepen 1'
&& gc_newline ). "#EC NOTEXT
ENDIF.
lv_buffer = lv_buffer
&& '0000'
&& '0009done' && gc_newline.
lv_xstring = lo_client->send_receive_close( lcl_convert=>string_to_xstring_utf8( lv_buffer ) ).
lv_xstring = lo_client->send_receive_close(
lcl_convert=>string_to_xstring_utf8( lv_buffer ) ).
parse( IMPORTING ev_pack = lv_pack
CHANGING cv_data = lv_xstring ).

View File

@ -273,9 +273,9 @@ CLASS lcl_git_branch_list IMPLEMENTATION.
ENDIF.
IF iv_branch_name CP 'refs/pull/*'
OR iv_branch_name CP 'refs/merge-requests/*'
OR iv_branch_name CP 'refs/keep-around/*'
OR iv_branch_name CP 'refs/tmp/*'.
OR iv_branch_name CP 'refs/merge-requests/*'
OR iv_branch_name CP 'refs/keep-around/*'
OR iv_branch_name CP 'refs/tmp/*'.
rv_ignore = abap_true.
ENDIF.

View File

@ -13,6 +13,9 @@ CLASS lcl_gui_asset_manager DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_gui.
METHODS get_images
RETURNING VALUE(rt_images) TYPE tt_web_assets.
CLASS-METHODS get_webfont_link
RETURNING VALUE(rv_link) TYPE string.
PRIVATE SECTION.
METHODS get_inline_asset
@ -108,11 +111,7 @@ CLASS lcl_gui_asset_manager IMPLEMENTATION.
TABLES
binary_tab = lt_w3mime
EXCEPTIONS
failed = 1.
IF sy-subrc IS NOT INITIAL.
RETURN.
ENDIF.
failed = 1 ##FM_SUBRC_OK.
ENDMETHOD. " get_mime_asset.
@ -145,6 +144,7 @@ CLASS lcl_gui_asset_manager IMPLEMENTATION.
DATA: lt_data TYPE ty_string_tt,
lv_str TYPE string.
CASE iv_asset_name.
WHEN 'CSS_COMMON'.
" @@abapmerge include zabapgit_css_common.w3mi.data.css > _inline '$$'.
@ -158,11 +158,11 @@ CLASS lcl_gui_asset_manager IMPLEMENTATION.
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = lv_str
text = lv_str
IMPORTING
buffer = rv_data
buffer = rv_data
EXCEPTIONS
OTHERS = 1.
OTHERS = 1.
ASSERT sy-subrc = 0.
ENDMETHOD. " get_inline_asset.
@ -255,160 +255,15 @@ CLASS lcl_gui_asset_manager IMPLEMENTATION.
&& 'cpUAAAAASUVORK5CYII='.
APPEND ls_image TO rt_images.
* http://fa2png.io/r/octicons/
* colour: #808080
* size: 16
* https://www.base64-image.de/ can be used to convert images to base64
ls_image-url = 'img/sync' ##NO_TEXT.
ls_image-base64 =
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAA6ElEQVQYGY3BIWuUAQAG'
&& '4Pc7N72xsbGBYNE8tYpVZKDZX2CcYLEZ9yQxOQSz3D/YmkUsVovRQ2SYNJnlkFfH7VZu'
&& 'wefJgrGHXnjrpQeu5B93smCwr6qqqp54433mDI5Ucds1u577o+p35hyoqe2cMThWVatJ'
&& '7KiZrZxz18SJqqtJPFXPssRgw0oSH9WNXMCQU76qzSxx2cxxTlk3yhKb6mcSQy7kvjpM'
&& 'Ylt98tpjN3POyFTdSuKSqppayxkjE/Uhc36p+m7PhhXr7vmmfhhnzpHPJqqqquqdcRY8'
&& 'spq47sAXMyde2c3/+wvX7Y18BexhBwAAAABJRU5ErkJggg=='.
APPEND ls_image TO rt_images.
ls_image-url = 'img/toc' ##NO_TEXT.
ls_image-base64 =
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEUAAACAgICAgICA'
&& 'gICAgICAgICAgIAO39T0AAAABnRSTlMABBCRlMXJzV0oAAAAN0lEQVQIW2NgwABuaWlB'
&& 'YWlpDgwJDAxiAgxACshgYwAz0tLY2NISSBWBMYAmg4ADyBZhARCJAQBBchGypGCbQgAA'
&& 'AABJRU5ErkJggg=='.
APPEND ls_image TO rt_images.
ls_image-url = 'img/repo_online' ##NO_TEXT.
ls_image-base64 =
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAApVBMVEUAAABQbJxQbJxQ'
&& 'bJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQ'
&& 'bJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQ'
&& 'bJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQ'
&& 'bJz+TJ01AAAANnRSTlMAAQIDBAcJCgwSFBocHygqMTM1NkRHSU1QUWFiZGlweHuDiImL'
&& 'lZiio6a5vsfT3uTo6e3x9fsxY2JuAAAAgUlEQVQYGXXB6RaBUBSA0e+IEuIiMs9zhlDn'
&& '/R/NZWmt/LA3f1RcoaB50SydCbn20wjedkPu3sKSpMGH21PhLdZ0BATZ+cCXtxtDHGLV'
&& 'pgFW9QqJj2U0wvJvMF+5jiNGI3HK9dMQSouH6sRoFGoWd8l1dEDRWlWPQsFS98KPvvDH'
&& 'C3HLClrWc70ZAAAAAElFTkSuQmCC'.
APPEND ls_image TO rt_images.
ls_image-url = 'img/repo_offline' ##NO_TEXT.
ls_image-base64 =
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAVFBMVEUAAACAgICAgICA'
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
&& 'gICAgICAgICAgICAgICAgICAgICAgICuaWnmAAAAG3RSTlMAAgQFBgsQFxweIiMtN3yI'
&& 'nqOvt9Hp6/Hz9fktMNR/AAAAXElEQVQYV5WO2xJAMAxES1q3ugfF/v9/0qLyyL4k58xk'
&& 'J0p9D7N5oeqZgSwy7fDZnHNdEE1gWK116tksl7hPimGFFPWYl7MU0zksRCl8TStKg1AJ'
&& '0XNC8Zm4/c0BUVQHi0llOUYAAAAASUVORK5CYII='.
APPEND ls_image TO rt_images.
ls_image-url = 'img/pkg' ##NO_TEXT.
ls_image-base64 =
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAA30lEQVQoU43OIUuDcRSF'
&& '8fvqhuB0mFwaKLbVBVdkX0GTFss+wYL2H4rJIIgyQQSzZcUPoGHZ9CKCmAwTMS8Y/ga3'
&& 'BWVjT7hwOQ+HEzEbMhU7jrTd69q2KhtFRU2nrvS927dm3pyqPXcuNRVD7sxiRIQlDSc+'
&& 'PGjZUFDWkYekLfdoV2XYua4rSZ61pZBkEUq2XPty41XuXJIiZGNhPDVZiFCYIMSor+Db'
&& '7RQhYnQnCsNvNmGgPFFYMQh1PU9aqrLxyGUNx/p66r9mUc2hFx3JhU9vDtQU4y9KGjaV'
&& '/gXT+AGZVIinhU2EAwAAAABJRU5ErkJggg=='.
APPEND ls_image TO rt_images.
ls_image-url = 'img/branch' ##NO_TEXT.
ls_image-base64 =
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAqFBMVEUAAACAgICAgICA'
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
&& 'gICAgID/OyosAAAAN3RSTlMAAQIDBAYICQ8TFRweJScoKSo3Oj1FRk1dYWJjZmhzdIaJ'
&& 'j5GVm6CwsrS5vsHDyszV19ne7/X583teZAAAAIFJREFUGFdVytkagVAYheFvFzJlnqc0'
&& 'EEoR+u//zhxI7dbZ9z4LMJ1op9DmjpntdXiBigHbLiAYqukBVr63+YGRSazgCY/iEooP'
&& 'xKZxr0EnSbo14B1Rg4msKzj150fJrQpERPLBv7mIfNxlq+zRbZsu0JYpGlcdwjY9Twfr'
&& 'nAbNsr6IKQxJI/U5CgAAAABJRU5ErkJggg=='.
APPEND ls_image TO rt_images.
ls_image-url = 'img/link' ##NO_TEXT.
ls_image-base64 =
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAXVBMVEUAAACAgICAgICA'
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVwFMKAAAAHnRSTlMAAwQFBgcK'
&& 'FR4gIiMmP0JHSm+RmKDByM/R09rg+/0jN/q+AAAAX0lEQVQYV43Nxw6AIBAE0FGw916Z'
&& '//9MRQ0S4sG5bPZlCxqSCyBGXgFUJKUA4A8PUOKONzuQOxOZIjcLkrMvxGQg3skSCFYL'
&& 'Kl1Ds5LWz+33yyf4rQOSf6CjnV6rHeAA87gJtKzI8ocAAAAASUVORK5CYII='.
APPEND ls_image TO rt_images.
ls_image-url = 'img/code' ##NO_TEXT.
ls_image-base64 =
'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOBAMAAADtZjDiAAAAElBMVEUAAACAgICAgICA'
&& 'gICAgICAgIC07w1vAAAABXRSTlMABECUxcOwZQcAAAA1SURBVAhbY2AODQ0NEWBgYGVg'
&& 'YGByhNAMKgIMrKyhAQxMDhA+QwCCZgVqIIUP1Q+yJzTUAAAfUAq+Os55uAAAAABJRU5E'
&& 'rkJggg=='.
APPEND ls_image TO rt_images.
ls_image-url = 'img/bin' ##NO_TEXT.
ls_image-base64 =
'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOBAMAAADtZjDiAAAAElBMVEUAAACAgICAgICA'
&& 'gICAgICAgIC07w1vAAAABXRSTlMABECUxcOwZQcAAABBSURBVAhbXcqxDYAwAMRAK8h9'
&& 'hmAARoANvuD3X4UCiojqZMlsbe8JAuN6ZZ9ozThRCVmsJe9H0HwdXf19W9v2eAA6Fws2'
&& 'RotPsQAAAABJRU5ErkJggg=='.
APPEND ls_image TO rt_images.
ls_image-url = 'img/obj' ##NO_TEXT.
ls_image-base64 =
'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOBAMAAADtZjDiAAAAIVBMVEUAAACAgICAgICA'
&& 'gICAgICAgICAgICAgICAgICAgICAgIDcWqnoAAAACnRSTlMABD1AZI+RlcPFIaFe1gAA'
&& 'AEVJREFUCFtjYF+1atVKAQYGLgYGBuaJEJrBUgBCM0+A0AwLgLQIgyOIZmwCSgNptgAG'
&& '1gQQfzKDhgCSPFw9Kg2yZ9WqAgBWJBENLk6V3AAAAABJRU5ErkJggg=='.
APPEND ls_image TO rt_images.
ls_image-url = 'img/lock' ##NO_TEXT.
ls_image-base64 =
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAOVBMVEUAAACIiIiIiIiI'
&& 'iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIjNaTNB'
&& 'AAAAEnRSTlMABgdBVXt8iYuRsNXZ3uDi6Pmu6tfUAAAASUlEQVQYV63KSxJAQBAE0TQ0'
&& 'Znym1f0PayE0QdjJ5asCgGTu1hClqjppvaRXB60swBeA2QNUAIq+ICvKx367nqAn/P8Y'
&& 't2jg3Q5rgASaF3KNRwAAAABJRU5ErkJggg=='.
APPEND ls_image TO rt_images.
ls_image-url = 'img/dir' ##NO_TEXT.
ls_image-base64 =
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAASFBMVEUAAABmksxmksxm'
&& 'ksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxm'
&& 'ksxmksxmksxmksxMwQo8AAAAF3RSTlMABhIYIy1fZmhpe3+IiYuMkZvD7e/x93sipD4A'
&& 'AAA+SURBVBhXY2BABzwiokAgzAYXEGdiBAIWIYQAPzcQCApzgwEXM4M4KuBDFxAYKAEx'
&& 'VAFeBlYOTiTAzoThewD5hBAcnWM4gwAAAABJRU5ErkJggg=='.
APPEND ls_image TO rt_images.
ls_image-url = 'img/burger' ##NO_TEXT.
ls_image-base64 =
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAHlBMVEUAAABtktltktlt'
&& 'ktltktltktltktltktltktltktk7ccVDAAAACXRSTlMAFDBLY2SFoPGv/DFMAAAAJ0lE'
&& 'QVQIW2NggIHKmWAwmaETwpjGoBoKBo4MmIAkxXApuGK4dgwAAJa5IzLs+gRBAAAAAElF'
&& 'TkSuQmCC'.
APPEND ls_image TO rt_images.
ls_image-url = 'img/star' ##NO_TEXT.
ls_image-base64 =
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAilBMVEUAAABejclejcle'
&& 'jclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejcle'
&& 'jclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejcle'
&& 'jclejclejclejclejclejclejclejclejcn2yvsVAAAALXRSTlMAAQIFBwkKCw0QERUY'
&& 'HB4jLzEzNjg7PVdYYmRvd3mDm52eub7R0+Tr8fX3+/16wo8zAAAAcElEQVQYGW3BBxKC'
&& 'MABFwYcQETv2hg1UVP79ryeTZBxw3MWL+JGltBgVtGRSSoORVOAE8Xi5zVU7rWfDCOaV'
&& 'Gu59mLz0dTPUBg95eYjVK2VdOzjBW9YZL5FT4i2k5+YoKcY5VPsQkoumOLsu1mjFHx8o'
&& 'ahA3YV7OfwAAAABJRU5ErkJggg=='.
APPEND ls_image TO rt_images.
ls_image-url = 'img/star-grey' ##NO_TEXT.
ls_image-base64 =
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAilBMVEUAAADQ0NDQ0NDQ'
&& '0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ'
&& '0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ'
&& '0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NC2QdifAAAALXRSTlMAAQIFBwkKCw0QERUY'
&& 'HB4jLzEzNjg7PVdYYmRvd3mDm52eub7R0+Tr8fX3+/16wo8zAAAAcElEQVQYGW3BBxKC'
&& 'MABFwYcQETv2hg1UVP79ryeTZBxw3MWL+JGltBgVtGRSSoORVOAE8Xi5zVU7rWfDCOaV'
&& 'Gu59mLz0dTPUBg95eYjVK2VdOzjBW9YZL5FT4i2k5+YoKcY5VPsQkoumOLsu1mjFHx8o'
&& 'ahA3YV7OfwAAAABJRU5ErkJggg=='.
APPEND ls_image TO rt_images.
ENDMETHOD. " get_inline_images.
METHOD get_webfont_link.
rv_link = '<link rel="stylesheet"'
&& ' type="text/css" href="'
&& 'https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/font/octicons.min.css'
&& '">'. "#EC NOTEXT
ENDMETHOD. " get_webfont_link
ENDCLASS. "lcl_gui_asset_manager

View File

@ -4,17 +4,18 @@
* All UI pages
* Super class
* Super class & common html chunks
INCLUDE zabapgit_html_chunks.
INCLUDE zabapgit_page.
* Utils and helpers
INCLUDE zabapgit_html_action_utils.
INCLUDE zabapgit_repo_browser_util.
INCLUDE zabapgit_syntax_highlighter.
* Components and templates
INCLUDE zabapgit_view_repo.
INCLUDE zabapgit_view_tutorial.
INCLUDE zabapgit_syntax_highlighter.
* Pages
INCLUDE zabapgit_page_commit.

View File

@ -7,9 +7,9 @@ DEFINE _add.
END-OF-DEFINITION.
*----------------------------------------------------------------------*
* CLASS lcl_html_helper DEFINITION
* CLASS lcl_html DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_html_helper DEFINITION FINAL.
CLASS lcl_html DEFINITION FINAL.
PUBLIC SECTION.
CONSTANTS: c_indent_size TYPE i VALUE 2.
@ -21,27 +21,49 @@ CLASS lcl_html_helper DEFINITION FINAL.
METHODS add IMPORTING iv_chunk TYPE any.
METHODS reset.
METHODS add_anchor IMPORTING iv_txt TYPE string
iv_act TYPE string
iv_opt TYPE clike OPTIONAL
iv_typ TYPE char1 DEFAULT gc_action_type-sapevent
METHODS add_a IMPORTING iv_txt TYPE string
iv_act TYPE string
iv_typ TYPE char1 DEFAULT gc_action_type-sapevent
iv_opt TYPE clike OPTIONAL
iv_class TYPE string OPTIONAL
iv_id TYPE string OPTIONAL
iv_style TYPE string OPTIONAL.
METHODS add_icon IMPORTING iv_name TYPE string
iv_hint TYPE string OPTIONAL
iv_alt TYPE string OPTIONAL
iv_class TYPE string OPTIONAL.
CLASS-METHODS a IMPORTING iv_txt TYPE string
iv_act TYPE string
iv_typ TYPE char1 DEFAULT gc_action_type-sapevent
iv_opt TYPE clike OPTIONAL
iv_class TYPE string OPTIONAL
iv_id TYPE string OPTIONAL
iv_style TYPE string OPTIONAL
RETURNING VALUE(rv_str) TYPE string.
CLASS-METHODS icon IMPORTING iv_name TYPE string
iv_hint TYPE string OPTIONAL
iv_alt TYPE string OPTIONAL
iv_class TYPE string OPTIONAL
iv_id TYPE string OPTIONAL
iv_style TYPE string OPTIONAL.
RETURNING VALUE(rv_str) TYPE string.
PRIVATE SECTION.
METHODS _add_str IMPORTING iv_str TYPE csequence.
METHODS _add_htm IMPORTING io_html TYPE REF TO lcl_html_helper.
METHODS _add_htm IMPORTING io_html TYPE REF TO lcl_html.
ENDCLASS. "lcl_html_helper DEFINITION
ENDCLASS. "lcl_html DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_html_helper IMPLEMENTATION
* CLASS lcl_html IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_html_helper IMPLEMENTATION.
CLASS lcl_html IMPLEMENTATION.
METHOD add.
DATA lo_type TYPE REF TO cl_abap_typedescr.
DATA lo_html TYPE REF TO lcl_html_helper.
DATA lo_html TYPE REF TO lcl_html.
lo_type = cl_abap_typedescr=>describe_by_data( iv_chunk ).
@ -71,6 +93,7 @@ CLASS lcl_html_helper IMPLEMENTATION.
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|!)'.
@ -93,7 +116,7 @@ CLASS lcl_html_helper IMPLEMENTATION.
FIND FIRST OCCURRENCE OF '}' IN iv_str MATCH OFFSET lv_close_offs. " Find close } @beginning
IF ( mv_within_style > 0 OR mv_within_js > 0 )
AND sy-subrc = 0 AND lv_close_offs = 0 AND mv_indent > 0.
AND sy-subrc = 0 AND lv_close_offs = 0 AND mv_indent > 0.
lv_shift_back = 1.
ENDIF.
@ -145,7 +168,20 @@ CLASS lcl_html_helper IMPLEMENTATION.
ENDMETHOD. "_add_htm
METHOD add_anchor.
METHOD add_a.
_add_str( a( iv_txt = iv_txt
iv_act = iv_act
iv_typ = iv_typ
iv_opt = iv_opt
iv_class = iv_class
iv_id = iv_id
iv_style = iv_style ) ).
ENDMETHOD. "add_a
METHOD a.
DATA: lv_class TYPE string,
lv_href TYPE string,
lv_id TYPE string,
@ -153,7 +189,7 @@ CLASS lcl_html_helper IMPLEMENTATION.
lv_class = iv_class.
IF iv_opt CA gc_html_opt-emphas.
IF iv_opt CA gc_html_opt-strong.
lv_class = lv_class && ' emphasis' ##NO_TEXT.
ENDIF.
IF iv_opt CA gc_html_opt-cancel.
@ -186,11 +222,43 @@ CLASS lcl_html_helper IMPLEMENTATION.
lv_style = | style="{ iv_style }"|.
ENDIF.
_add_str( |<a{ lv_id }{ lv_class }{ lv_href }{ lv_style }>{ iv_txt }</a>| ).
rv_str = |<a{ lv_id }{ lv_class }{ lv_href }{ lv_style }>{ iv_txt }</a>|.
ENDMETHOD. "add_action
ENDMETHOD. "a
ENDCLASS. "lcl_html_helper IMPLEMENTATION
METHOD add_icon.
_add_str( icon( iv_name = iv_name
iv_class = iv_class
iv_alt = iv_alt
iv_hint = iv_hint ) ).
ENDMETHOD. "add_icon
METHOD icon.
DATA: lv_hint TYPE string,
lv_name TYPE string,
lv_color TYPE string,
lv_class TYPE string.
SPLIT iv_name AT '/' INTO lv_name lv_color.
IF iv_hint IS NOT INITIAL.
lv_hint = | title="{ iv_hint }"|.
ENDIF.
IF iv_class IS NOT INITIAL.
lv_class = | { iv_class }|.
ENDIF.
IF lv_color IS NOT INITIAL.
lv_color = | { lv_color }|.
ENDIF.
rv_str = |<i class="octicon octicon-{ lv_name }{ lv_color }{ lv_class }"{ lv_hint }></i>|.
ENDMETHOD. "icon
ENDCLASS. "lcl_html IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_html_toolbar DEFINITION
@ -219,7 +287,7 @@ CLASS lcl_html_toolbar DEFINITION FINAL.
iv_with_icons TYPE abap_bool OPTIONAL
iv_add_minizone TYPE abap_bool OPTIONAL
RETURNING
VALUE(ro_html) TYPE REF TO lcl_html_helper.
VALUE(ro_html) TYPE REF TO lcl_html.
PRIVATE SECTION.
TYPES: BEGIN OF ty_item,
@ -295,7 +363,10 @@ CLASS lcl_html_toolbar IMPLEMENTATION.
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_a( iv_txt = iv_as_droplist_with_label
iv_class = lv_class
iv_act = '' ).
ENDIF.
IF iv_add_minizone = abap_true.
@ -327,15 +398,15 @@ CLASS lcl_html_toolbar IMPLEMENTATION.
IF iv_with_icons = abap_true.
ro_html->add( '<tr>' ).
ro_html->add( |<td class="icon">{ <ls_item>-ico }</td>| ).
ro_html->add( '<td width="100%">' ).
ro_html->add( |<td class="icon">{ lcl_html=>icon( <ls_item>-ico ) }</td>| ).
ro_html->add( '<td class="text">' ).
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 ).
ro_html->add_a( iv_txt = <ls_item>-txt
iv_act = <ls_item>-act
iv_opt = <ls_item>-opt
iv_typ = <ls_item>-typ
iv_class = lv_class ).
IF iv_with_icons = abap_true.
ro_html->add( '</td>' ).

View File

@ -0,0 +1,204 @@
*&---------------------------------------------------------------------*
*& Include ZABAPGIT_HTML_CHUNKS
*&---------------------------------------------------------------------*
CLASS lcl_gui_chunk_lib DEFINITION FINAL.
PUBLIC SECTION.
CLASS-METHODS render_error
IMPORTING ix_error TYPE REF TO lcx_exception OPTIONAL
iv_error TYPE string OPTIONAL
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
CLASS-METHODS render_repo_top
IMPORTING io_repo TYPE REF TO lcl_repo
iv_show_package TYPE abap_bool DEFAULT abap_true
iv_show_branch TYPE abap_bool DEFAULT abap_true
iv_interactive_branch TYPE abap_bool DEFAULT abap_false
iv_branch TYPE string OPTIONAL
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
RAISING lcx_exception.
CLASS-METHODS render_item_state
IMPORTING iv1 TYPE char1
iv2 TYPE char1
RETURNING VALUE(rv_html) TYPE string.
CLASS-METHODS render_branch_span
IMPORTING iv_branch TYPE string
io_repo TYPE REF TO lcl_repo_online
iv_interactive TYPE abap_bool
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
RAISING lcx_exception.
ENDCLASS. "lcl_gui_chunk_lib
CLASS lcl_gui_chunk_lib IMPLEMENTATION.
METHOD render_repo_top.
DATA: lo_repo_online TYPE REF TO lcl_repo_online,
lo_pback TYPE REF TO lcl_persistence_background,
lv_hint TYPE string,
lv_icon TYPE string.
CREATE OBJECT ro_html.
CREATE OBJECT lo_pback.
IF io_repo->is_offline( ) = abap_true.
lv_icon = 'plug/darkgrey' ##NO_TEXT.
lv_hint = 'Offline repository' ##NO_TEXT.
ELSE.
lv_icon = 'cloud-upload/blue' ##NO_TEXT.
lv_hint = 'On-line repository' ##NO_TEXT.
ENDIF.
ro_html->add( '<table class="w100"><tr>' ).
ro_html->add( '<td class="repo_name">' ).
ro_html->add_icon( iv_name = lv_icon iv_hint = lv_hint ).
ro_html->add( |<span class="name">{ io_repo->get_name( ) }</span>| ).
IF io_repo->is_offline( ) = abap_false.
lo_repo_online ?= io_repo.
ro_html->add( |<span class="url">{ lo_repo_online->get_url( ) }</span>| ).
ENDIF.
ro_html->add( '</td>' ).
ro_html->add( '<td class="repo_attr right">' ).
IF abap_true = lcl_app=>user( )->is_favorite_repo( io_repo->get_key( ) ).
lv_icon = 'star/blue' ##NO_TEXT.
ELSE.
lv_icon = 'star/grey' ##NO_TEXT.
ENDIF.
ro_html->add_a( iv_act = |{ gc_action-repo_toggle_fav }?{ io_repo->get_key( ) }|
iv_txt = lcl_html=>icon( iv_name = lv_icon
iv_class = 'pad-sides'
iv_hint = 'Click to toggle favorite' ) ).
IF lo_pback->exists( io_repo->get_key( ) ) = abap_true.
ro_html->add( '<span class="bg_marker" title="background">BG</span>' ).
ENDIF.
IF io_repo->is_write_protected( ) = abap_true.
ro_html->add_icon( iv_name = 'lock/darkgrey' iv_hint = 'Locked from pulls' ).
ENDIF.
IF io_repo->is_offline( ) = abap_false.
lo_repo_online ?= io_repo.
IF iv_show_branch = abap_true.
IF iv_branch IS INITIAL.
ro_html->add( render_branch_span( iv_branch = lo_repo_online->get_branch_name( )
io_repo = lo_repo_online
iv_interactive = iv_interactive_branch ) ).
ELSE.
ro_html->add( render_branch_span( iv_branch = iv_branch
io_repo = lo_repo_online
iv_interactive = iv_interactive_branch ) ).
ENDIF.
ENDIF.
ENDIF.
IF iv_show_package = abap_true.
ro_html->add_icon( iv_name = 'package/darkgrey' iv_hint = 'SAP package' ).
ro_html->add( '<span>' ).
ro_html->add_a( iv_txt = io_repo->get_package( )
iv_act = |{ gc_action-jump_pkg }?{ io_repo->get_package( ) }| ).
ro_html->add( '</span>' ).
ENDIF.
ro_html->add( '</td>' ).
ro_html->add( '</tr></table>' ).
ENDMETHOD.
METHOD render_item_state.
DATA: lv_system TYPE string.
FIELD-SYMBOLS <state> TYPE char1.
rv_html = '<span class="state-block">'.
DO 2 TIMES.
CASE sy-index.
WHEN 1.
ASSIGN iv1 TO <state>.
lv_system = 'Local:'.
WHEN 2.
ASSIGN iv2 TO <state>.
lv_system = 'Remote:'.
ENDCASE.
CASE <state>.
WHEN gc_state-unchanged. "None or unchanged
IF iv1 = gc_state-added OR iv2 = gc_state-added.
rv_html = rv_html && |<span class="none" title="{ lv_system } Not exists">X</span>|.
ELSE.
rv_html = rv_html && |<span class="none" title="{ lv_system } No changes">&nbsp;</span>|.
ENDIF.
WHEN gc_state-modified. "Changed
rv_html = rv_html && |<span class="changed" title="{ lv_system } Modified">M</span>|.
WHEN gc_state-added. "Added new
rv_html = rv_html && |<span class="added" title="{ lv_system } Added new">A</span>|.
WHEN gc_state-mixed. "Multiple changes (multifile)
rv_html = rv_html && |<span class="mixed" title="{ lv_system } Multiple changes">&#x25A0;</span>|.
WHEN gc_state-deleted. "Deleted
rv_html = rv_html && |<span class="deleted" title="{ lv_system } Deleted">D</span>|.
ENDCASE.
ENDDO.
rv_html = rv_html && '</span>'.
ENDMETHOD. "render_item_state
METHOD render_branch_span.
DATA: lv_text TYPE string,
lv_class TYPE string.
lv_text = lcl_git_branch_list=>get_display_name( iv_branch ).
IF iv_branch = io_repo->get_head_branch_name( ) OR iv_branch = lcl_git_branch_list=>head_name.
lv_class = 'branch branch_head'.
ELSEIF lcl_git_branch_list=>get_type( iv_branch ) = lcl_git_branch_list=>c_type-branch.
lv_class = 'branch branch_branch'.
ELSE.
lv_class = 'branch'.
ENDIF.
CREATE OBJECT ro_html.
ro_html->add( |<span class="{ lv_class }">| ).
ro_html->add_icon( iv_name = 'git-branch/darkgrey' iv_hint = 'Current branch' ).
IF iv_interactive = abap_true.
ro_html->add_a( iv_act = |{ gc_action-git_branch_switch }?{ io_repo->get_key( ) }|
iv_txt = lv_text ).
ELSE.
ro_html->add( lv_text ).
ENDIF.
ro_html->add( '</span>' ).
ENDMETHOD. "render_branch_span
METHOD render_error.
DATA lv_error TYPE string.
CREATE OBJECT ro_html.
IF ix_error IS BOUND.
lv_error = ix_error->mv_text.
ELSE.
lv_error = iv_error.
ENDIF.
ro_html->add( '<div class="dummydiv attention">' ).
ro_html->add( |{ lcl_html=>icon( 'alert/red' ) } Error: { lv_error }| ).
ro_html->add( '</div>' ).
ENDMETHOD. "render_error
ENDCLASS. "lcl_gui_chunk_lib

View 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_CHUNKS</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_CHUNKS</ENTRY>
<LENGTH>28</LENGTH>
<SPLIT/>
</item>
</TPOOL>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -46,7 +46,7 @@ CLASS lcl_migrations IMPLEMENTATION.
" Ignore empty repos or repos with file checksums
IF lines( <repo>->get_local_checksums( ) ) = 0
OR lines( <repo>->get_local_checksums_per_file( ) ) > 0 .
OR lines( <repo>->get_local_checksums_per_file( ) ) > 0.
DELETE lt_repos INDEX lv_index.
CONTINUE.
ENDIF.
@ -61,13 +61,13 @@ CLASS lcl_migrations IMPLEMENTATION.
SHIFT lv_repo_list BY 2 PLACES LEFT. " Remove leading ', '
lv_question = 'abapGit wants to rebuild missing local checksums'
&& ' (changes from 2016-12-11).'
&& ' Generally this is safe except if there are both local '
&& ' and remote changes at the same time. If unsure, please'
&& ' skip and update repos individually'
&& ' by "Advances/Update local checksums" command.'
&& | Repos affected: { lv_repo_list }|.
lv_question = 'abapGit wants to rebuild missing local checksums'
&& ' (changes from 2016-12-11).'
&& ' Generally this is safe except if there are both local '
&& ' and remote changes at the same time. If unsure, please'
&& ' skip and update repos individually'
&& ' by "Advances/Update local checksums" command.'
&& | Repos affected: { lv_repo_list }|.
lv_answer = lcl_popups=>popup_to_confirm(
titlebar = 'Warning'

View File

@ -71,7 +71,9 @@ CLASS lcl_object_acid IMPLEMENTATION.
lo_aab = create_object( ).
lo_aab->get_descript( IMPORTING ex_descript = lv_description ).
lo_aab->get_descript(
IMPORTING ex_descript = lv_description
EXCEPTIONS no_description_found = 1 ).
io_xml->add( iv_name = 'DESCRIPTION'
ig_data = lv_description ).

View File

@ -7,34 +7,416 @@
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
INTERFACE lif_object_oriented_object.
METHODS:
create
IMPORTING
iv_package TYPE devclass
iv_overwrite TYPE seox_boolean DEFAULT seox_true
CHANGING
is_properties TYPE any
RAISING
lcx_exception,
generate_locals
IMPORTING
is_key TYPE seoclskey
iv_force TYPE seox_boolean DEFAULT seox_true
it_local_definitions TYPE seop_source_string OPTIONAL
it_local_implementations TYPE seop_source_string OPTIONAL
it_local_macros TYPE seop_source_string OPTIONAL
it_local_test_classes TYPE seop_source_string OPTIONAL
RAISING
lcx_exception,
deserialize_source
IMPORTING
is_key TYPE seoclskey
it_source TYPE ty_string_tt
RAISING
lcx_exception
cx_sy_dyn_call_error,
insert_text_pool
IMPORTING
iv_class_name TYPE seoclsname
it_text_pool TYPE textpool_table
iv_language TYPE spras
RAISING
lcx_exception,
update_descriptions
IMPORTING
is_key TYPE seoclskey
it_descriptions TYPE ty_seocompotx_tt,
add_to_activation_list
IMPORTING
is_item TYPE ty_item
RAISING
lcx_exception,
create_sotr
IMPORTING
iv_package TYPE devclass
it_sotr TYPE ty_sotr_tt
RAISING
lcx_exception,
create_documentation
IMPORTING
it_lines TYPE tlinetab
iv_object_name TYPE dokhl-object
iv_language TYPE spras
RAISING
lcx_exception.
ENDINTERFACE.
CLASS lcl_object_oriented_base DEFINITION ABSTRACT.
PUBLIC SECTION.
INTERFACES: lif_object_oriented_object.
PRIVATE SECTION.
METHODS deserialize_abap_source_old
IMPORTING is_clskey TYPE seoclskey
it_source TYPE ty_string_tt
RAISING lcx_exception.
METHODS deserialize_abap_source_new
IMPORTING is_clskey TYPE seoclskey
it_source TYPE ty_string_tt
RAISING lcx_exception
cx_sy_dyn_call_error.
ENDCLASS.
CLASS lcl_object_oriented_base IMPLEMENTATION.
METHOD lif_object_oriented_object~create.
"Subclass responsibility
RETURN.
ENDMETHOD.
METHOD lif_object_oriented_object~deserialize_source.
TRY.
deserialize_abap_source_new(
is_clskey = is_key
it_source = it_source ).
CATCH cx_sy_dyn_call_error.
deserialize_abap_source_old(
is_clskey = is_key
it_source = it_source ).
ENDTRY.
ENDMETHOD.
METHOD lif_object_oriented_object~generate_locals.
"Subclass responsibility
RETURN.
ENDMETHOD.
METHOD deserialize_abap_source_old.
"for backwards compatability down to 702
DATA: lo_source TYPE REF TO cl_oo_source.
CREATE OBJECT lo_source
EXPORTING
clskey = is_clskey
EXCEPTIONS
class_not_existing = 1
OTHERS = 2.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from CL_OO_SOURCE' ).
ENDIF.
TRY.
lo_source->access_permission( seok_access_modify ).
lo_source->set_source( it_source ).
lo_source->save( ).
lo_source->access_permission( seok_access_free ).
CATCH cx_oo_access_permission.
lcx_exception=>raise( 'permission error' ).
CATCH cx_oo_source_save_failure.
lcx_exception=>raise( 'save failure' ).
ENDTRY.
ENDMETHOD.
METHOD deserialize_abap_source_new.
DATA: lo_factory TYPE REF TO object,
lo_source TYPE REF TO object.
CALL METHOD ('CL_OO_FACTORY')=>('CREATE_INSTANCE')
RECEIVING
result = lo_factory.
CALL METHOD lo_factory->('CREATE_CLIF_SOURCE')
EXPORTING
clif_name = is_clskey-clsname
RECEIVING
result = lo_source.
TRY.
CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~LOCK').
CATCH cx_oo_access_permission.
lcx_exception=>raise( 'source_new, access permission exception' ).
ENDTRY.
CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~SET_SOURCE')
EXPORTING
source = it_source.
CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~SAVE').
CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~UNLOCK').
ENDMETHOD.
METHOD lif_object_oriented_object~add_to_activation_list.
lcl_objects_activation=>add_item( is_item ).
ENDMETHOD.
METHOD lif_object_oriented_object~update_descriptions.
DELETE FROM seocompotx WHERE clsname = is_key-clsname.
INSERT seocompotx FROM TABLE it_descriptions.
ENDMETHOD.
METHOD lif_object_oriented_object~insert_text_pool.
"Subclass responsibility
RETURN.
ENDMETHOD.
METHOD lif_object_oriented_object~create_sotr.
"Subclass responsibility
RETURN.
ENDMETHOD.
METHOD lif_object_oriented_object~create_documentation.
CALL FUNCTION 'DOCU_UPD'
EXPORTING
id = 'CL'
langu = iv_language
object = iv_object_name
TABLES
line = it_lines
EXCEPTIONS
ret_code = 1
OTHERS = 2.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from DOCU_UPD' ).
ENDIF.
ENDMETHOD.
ENDCLASS.
CLASS lcl_object_oriented_class DEFINITION
INHERITING FROM lcl_object_oriented_base.
PUBLIC SECTION.
METHODS:
lif_object_oriented_object~create REDEFINITION,
lif_object_oriented_object~generate_locals REDEFINITION,
lif_object_oriented_object~insert_text_pool REDEFINITION,
lif_object_oriented_object~create_sotr REDEFINITION.
ENDCLASS.
CLASS lcl_object_oriented_class IMPLEMENTATION.
METHOD lif_object_oriented_object~create.
CALL FUNCTION 'SEO_CLASS_CREATE_COMPLETE'
EXPORTING
devclass = iv_package
overwrite = iv_overwrite
CHANGING
class = is_properties
EXCEPTIONS
existing = 1
is_interface = 2
db_error = 3
component_error = 4
no_access = 5
other = 6
OTHERS = 7.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from SEO_CLASS_CREATE_COMPLETE' ).
ENDIF.
ENDMETHOD.
METHOD lif_object_oriented_object~generate_locals.
CALL FUNCTION 'SEO_CLASS_GENERATE_LOCALS'
EXPORTING
clskey = is_key
force = iv_force
locals_def = it_local_definitions
locals_imp = it_local_implementations
locals_mac = it_local_macros
locals_testclasses = it_local_test_classes
EXCEPTIONS
not_existing = 1
model_only = 2
locals_not_generated = 3
locals_not_initialised = 4
OTHERS = 5.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from generate_locals' ).
ENDIF.
ENDMETHOD.
METHOD lif_object_oriented_object~insert_text_pool.
DATA: lv_cp TYPE program.
lv_cp = cl_oo_classname_service=>get_classpool_name( iv_class_name ).
INSERT TEXTPOOL lv_cp
FROM it_text_pool
LANGUAGE iv_language
STATE 'I'.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from INSERT TEXTPOOL' ).
ENDIF.
lcl_objects_activation=>add( iv_type = 'REPT'
iv_name = lv_cp ).
ENDMETHOD.
METHOD lif_object_oriented_object~create_sotr.
DATA: lt_sotr TYPE ty_sotr_tt,
lt_objects TYPE sotr_objects,
ls_paket TYPE sotr_pack,
lv_object LIKE LINE OF lt_objects.
FIELD-SYMBOLS: <ls_sotr> LIKE LINE OF lt_sotr.
LOOP AT it_sotr ASSIGNING <ls_sotr>.
CALL FUNCTION 'SOTR_OBJECT_GET_OBJECTS'
EXPORTING
object_vector = <ls_sotr>-header-objid_vec
IMPORTING
objects = lt_objects
EXCEPTIONS
object_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from SOTR_OBJECT_GET_OBJECTS' ).
ENDIF.
READ TABLE lt_objects INDEX 1 INTO lv_object.
ASSERT sy-subrc = 0.
ls_paket-paket = iv_package.
CALL FUNCTION 'SOTR_CREATE_CONCEPT'
EXPORTING
paket = ls_paket
crea_lan = <ls_sotr>-header-crea_lan
alias_name = <ls_sotr>-header-alias_name
object = lv_object
entries = <ls_sotr>-entries
concept_default = <ls_sotr>-header-concept
EXCEPTIONS
package_missing = 1
crea_lan_missing = 2
object_missing = 3
paket_does_not_exist = 4
alias_already_exist = 5
object_type_not_found = 6
langu_missing = 7
identical_context_not_allowed = 8
text_too_long = 9
error_in_update = 10
no_master_langu = 11
error_in_concept_id = 12
alias_not_allowed = 13
tadir_entry_creation_failed = 14
internal_error = 15
error_in_correction = 16
user_cancelled = 17
no_entry_found = 18
OTHERS = 19.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from SOTR_CREATE_CONCEPT' ).
ENDIF.
ENDLOOP.
ENDMETHOD.
ENDCLASS.
CLASS lcl_object_oriented_interface DEFINITION
INHERITING FROM lcl_object_oriented_base.
PUBLIC SECTION.
METHODS:
lif_object_oriented_object~create REDEFINITION.
ENDCLASS.
CLASS lcl_object_oriented_interface IMPLEMENTATION.
METHOD lif_object_oriented_object~create.
CALL FUNCTION 'SEO_INTERFACE_CREATE_COMPLETE'
EXPORTING
devclass = iv_package
overwrite = iv_overwrite
CHANGING
interface = is_properties
EXCEPTIONS
existing = 1
is_class = 2
db_error = 3
component_error = 4
no_access = 5
other = 6
OTHERS = 7.
IF sy-subrc <> 0.
lcx_exception=>raise( 'Error from SEO_INTERFACE_CREATE_COMPLETE' ).
ENDIF.
ENDMETHOD.
ENDCLASS.
CLASS lth_oo_factory_injector DEFINITION DEFERRED.
CLASS lcl_object_oriented_factory DEFINITION
FRIENDS lth_oo_factory_injector.
PUBLIC SECTION.
CLASS-METHODS:
make
IMPORTING
iv_object_type TYPE tadir-object
RETURNING
VALUE(ro_object_oriented_object) TYPE REF TO lif_object_oriented_object.
PRIVATE SECTION.
CLASS-DATA:
go_object_oriented_object TYPE REF TO lif_object_oriented_object.
ENDCLASS.
CLASS lcl_object_oriented_factory IMPLEMENTATION.
METHOD make.
IF go_object_oriented_object IS BOUND.
ro_object_oriented_object = go_object_oriented_object.
RETURN.
ENDIF.
IF iv_object_type = 'CLAS'.
CREATE OBJECT ro_object_oriented_object TYPE lcl_object_oriented_class.
ELSEIF iv_object_type = 'INTF'.
CREATE OBJECT ro_object_oriented_object TYPE lcl_object_oriented_interface.
ENDIF.
ENDMETHOD.
ENDCLASS.
CLASS lth_oo_factory_injector DEFINITION FOR TESTING.
PUBLIC SECTION.
CLASS-METHODS:
inject
IMPORTING
io_object_oriented_object TYPE REF TO lif_object_oriented_object.
ENDCLASS.
CLASS lth_oo_factory_injector IMPLEMENTATION.
METHOD inject.
lcl_object_oriented_factory=>go_object_oriented_object = io_object_oriented_object.
ENDMETHOD.
ENDCLASS.
CLASS lcl_object_clas DEFINITION INHERITING FROM lcl_objects_program.
PUBLIC SECTION.
INTERFACES lif_object.
ALIASES mo_files FOR lif_object~mo_files.
PRIVATE SECTION.
TYPES: BEGIN OF ty_sotr,
header TYPE sotr_head,
entries TYPE sotr_text_tt,
END OF ty_sotr.
TYPES: ty_sotr_tt TYPE STANDARD TABLE OF ty_sotr WITH DEFAULT KEY.
TYPES: ty_seocompotx_tt TYPE STANDARD TABLE OF seocompotx WITH DEFAULT KEY.
DATA mv_skip_testclass TYPE abap_bool.
PROTECTED SECTION.
METHODS deserialize_abap
IMPORTING io_xml TYPE REF TO lcl_xml_input
iv_package TYPE devclass
RAISING lcx_exception.
METHODS deserialize_textpool
METHODS deserialize_docu
IMPORTING io_xml TYPE REF TO lcl_xml_input
RAISING lcx_exception.
DATA mo_object_oriented_object TYPE REF TO lif_object_oriented_object.
PRIVATE SECTION.
DATA mv_skip_testclass TYPE abap_bool.
METHODS deserialize_docu
METHODS deserialize_tpool
IMPORTING io_xml TYPE REF TO lcl_xml_input
RAISING lcx_exception.
@ -48,17 +430,6 @@ CLASS lcl_object_clas DEFINITION INHERITING FROM lcl_objects_program.
RETURNING VALUE(rt_source) TYPE ty_string_tt
RAISING lcx_exception.
METHODS deserialize_abap_source_old
IMPORTING is_clskey TYPE seoclskey
it_source TYPE ty_string_tt
RAISING lcx_exception.
METHODS deserialize_abap_source_new
IMPORTING is_clskey TYPE seoclskey
it_source TYPE ty_string_tt
RAISING lcx_exception
cx_sy_dyn_call_error.
METHODS serialize_abap_new
IMPORTING is_clskey TYPE seoclskey
RETURNING VALUE(rt_source) TYPE ty_string_tt
@ -109,16 +480,6 @@ CLASS lcl_object_clas DEFINITION INHERITING FROM lcl_objects_program.
ENDCLASS. "lcl_object_dtel DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_object_intf DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_object_intf DEFINITION INHERITING FROM lcl_object_clas FINAL.
* todo, CLAS + INTF to be refactored, see:
* https://github.com/larshp/abapGit/issues/21
ENDCLASS. "lcl_object_intf DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_object_clas IMPLEMENTATION
*----------------------------------------------------------------------*
@ -409,7 +770,9 @@ CLASS lcl_object_clas IMPLEMENTATION.
ELSEIF lines( rt_source ) = 1.
READ TABLE rt_source INDEX 1 INTO lv_line1.
ASSERT sy-subrc = 0.
IF lv_line1(3) = '*"*' OR lv_line1 IS INITIAL.
IF lv_line1 IS INITIAL
OR ( strlen( lv_line1 ) >= 3 AND lv_line1(3) = '*"*' )
OR ( strlen( lv_line1 ) = 1 AND lv_line1(1) = '*' ).
mv_skip_testclass = abap_true.
ENDIF.
ELSEIF lines( rt_source ) = 0.
@ -601,7 +964,7 @@ CLASS lcl_object_clas IMPLEMENTATION.
no_entry_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from SOTR_GET_CONCEPT' ).
CONTINUE.
ENDIF.
CLEAR: ls_header-paket,
@ -737,34 +1100,23 @@ CLASS lcl_object_clas IMPLEMENTATION.
METHOD lif_object~deserialize.
* function group SEOK
* function group SEOQ
* function group SEOP
* class CL_OO_CLASSNAME_SERVICE
* class CL_OO_SOURCE
mo_object_oriented_object = lcl_object_oriented_factory=>make( iv_object_type = ms_item-obj_type ).
deserialize_abap( io_xml = io_xml
iv_package = iv_package ).
IF ms_item-obj_type = 'CLAS'.
deserialize_textpool( io_xml ).
deserialize_tpool( io_xml ).
deserialize_sotr( io_xml = io_xml
iv_package = iv_package ).
ENDIF.
deserialize_sotr( io_xml = io_xml
iv_package = iv_package ).
deserialize_docu( io_xml ).
ENDMETHOD. "deserialize
METHOD deserialize_sotr.
"OTR stands for Online Text Repository
DATA: lt_sotr TYPE ty_sotr_tt,
lt_objects TYPE sotr_objects,
ls_paket TYPE sotr_pack,
lv_object LIKE LINE OF lt_objects.
FIELD-SYMBOLS: <ls_sotr> LIKE LINE OF lt_sotr.
lt_objects TYPE sotr_objects.
io_xml->read( EXPORTING iv_name = 'SOTR'
@ -774,58 +1126,9 @@ CLASS lcl_object_clas IMPLEMENTATION.
RETURN.
ENDIF.
LOOP AT lt_sotr ASSIGNING <ls_sotr>.
CALL FUNCTION 'SOTR_OBJECT_GET_OBJECTS'
EXPORTING
object_vector = <ls_sotr>-header-objid_vec
IMPORTING
objects = lt_objects
EXCEPTIONS
object_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from SOTR_OBJECT_GET_OBJECTS' ).
ENDIF.
READ TABLE lt_objects INDEX 1 INTO lv_object.
ASSERT sy-subrc = 0.
ls_paket-paket = iv_package.
CALL FUNCTION 'SOTR_CREATE_CONCEPT'
EXPORTING
paket = ls_paket
crea_lan = <ls_sotr>-header-crea_lan
alias_name = <ls_sotr>-header-alias_name
object = lv_object
entries = <ls_sotr>-entries
concept_default = <ls_sotr>-header-concept
EXCEPTIONS
package_missing = 1
crea_lan_missing = 2
object_missing = 3
paket_does_not_exist = 4
alias_already_exist = 5
object_type_not_found = 6
langu_missing = 7
identical_context_not_allowed = 8
text_too_long = 9
error_in_update = 10
no_master_langu = 11
error_in_concept_id = 12
alias_not_allowed = 13
tadir_entry_creation_failed = 14
internal_error = 15
error_in_correction = 16
user_cancelled = 17
no_entry_found = 18
OTHERS = 19.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from SOTR_CREATE_CONCEPT' ).
ENDIF.
ENDLOOP.
mo_object_oriented_object->create_sotr(
iv_package = iv_package
it_sotr = lt_sotr ).
ENDMETHOD.
METHOD deserialize_docu.
@ -833,7 +1136,6 @@ CLASS lcl_object_clas IMPLEMENTATION.
DATA: lt_lines TYPE tlinetab,
lv_object TYPE dokhl-object.
io_xml->read( EXPORTING iv_name = 'LINES'
CHANGING cg_data = lt_lines ).
@ -842,26 +1144,16 @@ CLASS lcl_object_clas IMPLEMENTATION.
ENDIF.
lv_object = ms_item-obj_name.
CALL FUNCTION 'DOCU_UPD'
EXPORTING
id = 'CL'
langu = mv_language
object = lv_object
TABLES
line = lt_lines
EXCEPTIONS
ret_code = 1
OTHERS = 2.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from DOCU_UPD' ).
ENDIF.
mo_object_oriented_object->create_documentation(
it_lines = lt_lines
iv_object_name = lv_object
iv_language = mv_language ).
ENDMETHOD. "deserialize_doku
METHOD deserialize_textpool.
METHOD deserialize_tpool.
DATA: lv_cp TYPE program,
lv_clsname TYPE seoclsname,
DATA: lv_clsname TYPE seoclsname,
lt_tpool_ext TYPE ty_tpool_tt,
lt_tpool TYPE textpool_table.
@ -875,202 +1167,131 @@ CLASS lcl_object_clas IMPLEMENTATION.
ENDIF.
lv_clsname = ms_item-obj_name.
lv_cp = cl_oo_classname_service=>get_classpool_name( lv_clsname ).
INSERT TEXTPOOL lv_cp
FROM lt_tpool
LANGUAGE mv_language
STATE 'I'.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from INSERT TEXTPOOL' ).
ENDIF.
lcl_objects_activation=>add( iv_type = 'REPT'
iv_name = lv_cp ).
mo_object_oriented_object->insert_text_pool(
iv_class_name = lv_clsname
it_text_pool = lt_tpool
iv_language = mv_language ).
ENDMETHOD. "deserialize_textpool
METHOD deserialize_abap.
DATA: ls_vseoclass TYPE vseoclass,
ls_vseointerf TYPE vseointerf,
lt_source TYPE seop_source_string,
lt_locals_def TYPE seop_source_string,
lt_locals_imp TYPE seop_source_string,
lt_locals_mac TYPE seop_source_string,
lt_testclasses TYPE seop_source_string,
lt_descriptions TYPE ty_seocompotx_tt,
ls_clskey TYPE seoclskey.
DATA: ls_vseoclass TYPE vseoclass,
lt_source TYPE seop_source_string,
lt_local_definitions TYPE seop_source_string,
lt_local_implementations TYPE seop_source_string,
lt_local_macros TYPE seop_source_string,
lt_test_classes TYPE seop_source_string,
lt_descriptions TYPE ty_seocompotx_tt,
ls_class_key TYPE seoclskey.
lt_source = mo_files->read_abap( ).
lt_locals_def = mo_files->read_abap( iv_extra = 'locals_def'
iv_error = abap_false ). "#EC NOTEXT
lt_local_definitions = mo_files->read_abap( iv_extra = 'locals_def'
iv_error = abap_false ). "#EC NOTEXT
lt_locals_imp = mo_files->read_abap( iv_extra = 'locals_imp'
iv_error = abap_false ). "#EC NOTEXT
lt_local_implementations = mo_files->read_abap( iv_extra = 'locals_imp'
iv_error = abap_false ). "#EC NOTEXT
lt_locals_mac = mo_files->read_abap( iv_extra = 'macros'
iv_error = abap_false ). "#EC NOTEXT
lt_local_macros = mo_files->read_abap( iv_extra = 'macros'
iv_error = abap_false ). "#EC NOTEXT
lt_testclasses = mo_files->read_abap( iv_extra = 'testclasses'
iv_error = abap_false ). "#EC NOTEXT
lt_test_classes = mo_files->read_abap( iv_extra = 'testclasses'
iv_error = abap_false ). "#EC NOTEXT
ls_clskey-clsname = ms_item-obj_name.
ls_class_key-clsname = ms_item-obj_name.
io_xml->read( EXPORTING iv_name = 'VSEOCLASS'
CHANGING cg_data = ls_vseoclass ).
CASE ms_item-obj_type.
WHEN 'CLAS'.
io_xml->read( EXPORTING iv_name = 'VSEOCLASS'
CHANGING cg_data = ls_vseoclass ).
mo_object_oriented_object->create(
EXPORTING
iv_package = iv_package
CHANGING
is_properties = ls_vseoclass ).
mo_object_oriented_object->generate_locals(
is_key = ls_class_key
iv_force = seox_true
it_local_definitions = lt_local_definitions
it_local_implementations = lt_local_implementations
it_local_macros = lt_local_macros
it_local_test_classes = lt_test_classes ).
CALL FUNCTION 'SEO_CLASS_CREATE_COMPLETE'
EXPORTING
devclass = iv_package
overwrite = seox_true
CHANGING
class = ls_vseoclass
EXCEPTIONS
existing = 1
is_interface = 2
db_error = 3
component_error = 4
no_access = 5
other = 6
OTHERS = 7.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from SEO_CLASS_CREATE_COMPLETE' ).
ENDIF.
WHEN 'INTF'.
io_xml->read( EXPORTING iv_name = 'VSEOINTERF'
CHANGING cg_data = ls_vseointerf ).
CALL FUNCTION 'SEO_INTERFACE_CREATE_COMPLETE'
EXPORTING
devclass = iv_package
overwrite = seox_true
CHANGING
interface = ls_vseointerf
EXCEPTIONS
existing = 1
is_class = 2
db_error = 3
component_error = 4
no_access = 5
other = 6
OTHERS = 7.
IF sy-subrc <> 0.
lcx_exception=>raise( 'Error from SEO_INTERFACE_CREATE_COMPLETE' ).
ENDIF.
WHEN OTHERS.
ASSERT 0 = 1.
ENDCASE.
IF ms_item-obj_type = 'CLAS'.
CALL FUNCTION 'SEO_CLASS_GENERATE_LOCALS'
EXPORTING
clskey = ls_clskey
force = seox_true
locals_def = lt_locals_def
locals_imp = lt_locals_imp
locals_mac = lt_locals_mac
locals_testclasses = lt_testclasses
EXCEPTIONS
not_existing = 1
model_only = 2
locals_not_generated = 3
locals_not_initialised = 4
OTHERS = 5.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from generate_locals' ).
ENDIF.
ENDIF.
TRY.
deserialize_abap_source_new(
is_clskey = ls_clskey
it_source = lt_source ).
CATCH cx_sy_dyn_call_error.
deserialize_abap_source_old(
is_clskey = ls_clskey
it_source = lt_source ).
ENDTRY.
mo_object_oriented_object->deserialize_source(
is_key = ls_class_key
it_source = lt_source ).
io_xml->read( EXPORTING iv_name = 'DESCRIPTIONS'
CHANGING cg_data = lt_descriptions ).
DELETE FROM seocompotx WHERE clsname = ls_clskey-clsname.
INSERT seocompotx FROM TABLE lt_descriptions.
lcl_objects_activation=>add_item( ms_item ).
mo_object_oriented_object->update_descriptions(
is_key = ls_class_key
it_descriptions = lt_descriptions ).
mo_object_oriented_object->add_to_activation_list( is_item = ms_item ).
ENDMETHOD. "deserialize
METHOD deserialize_abap_source_old.
* for backwards compatability down to 702
DATA: lo_source TYPE REF TO cl_oo_source.
CREATE OBJECT lo_source
EXPORTING
clskey = is_clskey
EXCEPTIONS
class_not_existing = 1
OTHERS = 2.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from CL_OO_SOURCE' ).
ENDIF.
TRY.
lo_source->access_permission( seok_access_modify ).
lo_source->set_source( it_source ).
lo_source->save( ).
lo_source->access_permission( seok_access_free ).
CATCH cx_oo_access_permission.
lcx_exception=>raise( 'permission error' ).
CATCH cx_oo_source_save_failure.
lcx_exception=>raise( 'save failure' ).
ENDTRY.
ENDMETHOD.
METHOD deserialize_abap_source_new.
DATA: lo_factory TYPE REF TO object,
lo_source TYPE REF TO object.
CALL METHOD ('CL_OO_FACTORY')=>('CREATE_INSTANCE')
RECEIVING
result = lo_factory.
CALL METHOD lo_factory->('CREATE_CLIF_SOURCE')
EXPORTING
clif_name = is_clskey-clsname
RECEIVING
result = lo_source.
TRY.
CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~LOCK').
CATCH cx_oo_access_permission.
lcx_exception=>raise( 'source_new, access permission exception' ).
ENDTRY.
CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~SET_SOURCE')
EXPORTING
source = it_source.
CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~SAVE').
CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~UNLOCK').
ENDMETHOD.
METHOD lif_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
ENDMETHOD.
ENDCLASS. "lcl_object_CLAS IMPLEMENTATION
ENDCLASS. "lcl_object_CLAS IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_object_intf DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_object_intf DEFINITION INHERITING FROM lcl_object_clas FINAL.
* todo, CLAS + INTF to be refactored, see:
* https://github.com/larshp/abapGit/issues/21
PUBLIC SECTION.
METHODS:
lif_object~deserialize REDEFINITION.
PROTECTED SECTION.
METHODS:
deserialize_abap REDEFINITION.
ENDCLASS. "lcl_object_intf DEFINITION
CLASS lcl_object_intf IMPLEMENTATION.
METHOD lif_object~deserialize.
mo_object_oriented_object = lcl_object_oriented_factory=>make( iv_object_type = ms_item-obj_type ).
deserialize_abap( io_xml = io_xml
iv_package = iv_package ).
deserialize_docu( io_xml ).
ENDMETHOD.
METHOD deserialize_abap.
DATA: ls_vseointerf TYPE vseointerf,
lt_source TYPE seop_source_string,
lt_descriptions TYPE ty_seocompotx_tt,
ls_clskey TYPE seoclskey.
ls_clskey-clsname = ms_item-obj_name.
lt_source = mo_files->read_abap( ).
io_xml->read( EXPORTING iv_name = 'VSEOINTERF'
CHANGING cg_data = ls_vseointerf ).
mo_object_oriented_object->create(
EXPORTING
iv_package = iv_package
CHANGING
is_properties = ls_vseointerf ).
mo_object_oriented_object->deserialize_source(
is_key = ls_clskey
it_source = lt_source ).
io_xml->read( EXPORTING iv_name = 'DESCRIPTIONS'
CHANGING cg_data = lt_descriptions ).
mo_object_oriented_object->update_descriptions(
is_key = ls_clskey
it_descriptions = lt_descriptions ).
mo_object_oriented_object->add_to_activation_list( is_item = ms_item ).
ENDMETHOD.
ENDCLASS.

View File

@ -80,6 +80,7 @@ CLASS lcl_object_doma IMPLEMENTATION.
METHOD lif_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-ddic = abap_true.
ENDMETHOD. "lif_object~get_metadata
METHOD lif_object~exists.
@ -128,9 +129,10 @@ CLASS lcl_object_doma IMPLEMENTATION.
METHOD lif_object~serialize.
DATA: lv_name TYPE ddobjname,
ls_dd01v TYPE dd01v,
lt_dd07v TYPE TABLE OF dd07v.
DATA: lv_name TYPE ddobjname,
ls_dd01v TYPE dd01v,
lv_masklen TYPE c LENGTH 4,
lt_dd07v TYPE TABLE OF dd07v.
lv_name = ms_item-obj_name.
@ -154,6 +156,16 @@ CLASS lcl_object_doma IMPLEMENTATION.
ls_dd01v-as4date,
ls_dd01v-as4time.
* make sure XML serialization does not dump if the field contains invalid data
* note that this is a N field, so '' is not valid
IF ls_dd01v-authclass = ''.
CLEAR ls_dd01v-authclass.
ENDIF.
lv_masklen = ls_dd01v-masklen.
IF lv_masklen = '' OR NOT lv_masklen CO '0123456789'.
CLEAR ls_dd01v-masklen.
ENDIF.
io_xml->add( iv_name = 'DD01V'
ig_data = ls_dd01v ).
io_xml->add( iv_name = 'DD07V_TAB'

View File

@ -73,6 +73,7 @@ CLASS lcl_object_dtel IMPLEMENTATION.
METHOD lif_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-ddic = abap_true.
ENDMETHOD. "lif_object~get_metadata
METHOD lif_object~exists.
@ -158,6 +159,14 @@ CLASS lcl_object_dtel IMPLEMENTATION.
ls_dd04v-entitytab.
ENDIF.
IF ls_dd04v-routputlen = ''.
* numeric field, make sure it is initial or XML serilization will dump
CLEAR ls_dd04v-routputlen.
ENDIF.
IF ls_dd04v-authclass = ''.
CLEAR ls_dd04v-authclass.
ENDIF.
io_xml->add( iv_name = 'DD04V'
ig_data = ls_dd04v ).
io_xml->add( iv_name = 'TPARA'
@ -232,7 +241,7 @@ CLASS lcl_object_dtel IMPLEMENTATION.
langu = <lang>
IMPORTING
dd04v_wa = ls_dd04v
* tpara_wa = ls_tpara
* tpara_wa = ls_tpara
EXCEPTIONS
illegal_input = 1
OTHERS = 2.

View File

@ -2,6 +2,11 @@
*& Include ZABAPGIT_OBJECT_ENHO
*&---------------------------------------------------------------------*
* todo, this include could use some refactoring
* todo, CL_ENH_TOOL_CLASS inherits from CL_ENH_TOOL_CLIF so this
* should also be reflected in the code in this include
*----------------------------------------------------------------------*
* CLASS lcl_object_enho DEFINITION
*----------------------------------------------------------------------*
@ -29,6 +34,15 @@ CLASS lcl_object_enho DEFINITION INHERITING FROM lcl_objects_super FINAL.
IMPORTING io_xml TYPE REF TO lcl_xml_input
iv_package TYPE devclass
RAISING lcx_exception.
METHODS deserialize_class
IMPORTING io_xml TYPE REF TO lcl_xml_input
iv_package TYPE devclass
RAISING lcx_exception.
METHODS hook_impl_deserialize
IMPORTING it_spaces TYPE ty_spaces_tt
CHANGING ct_impl TYPE enh_hook_impl_it
RAISING lcx_exception.
METHODS serialize_badi
IMPORTING io_xml TYPE REF TO lcl_xml_output
@ -40,15 +54,15 @@ CLASS lcl_object_enho DEFINITION INHERITING FROM lcl_objects_super FINAL.
iv_tool TYPE enhtooltype
ii_enh_tool TYPE REF TO if_enh_tool
RAISING lcx_exception.
METHODS serialize_class
IMPORTING io_xml TYPE REF TO lcl_xml_output
iv_tool TYPE enhtooltype
ii_enh_tool TYPE REF TO if_enh_tool
RAISING lcx_exception.
METHODS hook_impl_serialize
EXPORTING et_spaces TYPE ty_spaces_tt
CHANGING ct_impl TYPE enh_hook_impl_it
RAISING lcx_exception.
METHODS hook_impl_deserialize
IMPORTING it_spaces TYPE ty_spaces_tt
CHANGING ct_impl TYPE enh_hook_impl_it
RAISING lcx_exception.
ENDCLASS. "lcl_object_enho DEFINITION
@ -120,16 +134,19 @@ CLASS lcl_object_enho IMPLEMENTATION.
METHOD lif_object~exists.
DATA: ls_tadir TYPE tadir.
DATA: lv_enh_id TYPE enhname.
lv_enh_id = ms_item-obj_name.
TRY.
cl_enh_factory=>get_enhancement(
enhancement_id = lv_enh_id
bypassing_buffer = abap_true ).
rv_bool = abap_true.
CATCH cx_enh_root.
rv_bool = abap_false.
ENDTRY.
* todo, it should look up in the ENHO database tables or call some methods
* to see if the object exists, looking in TADIR will not work
ls_tadir = lcl_tadir=>read_single(
iv_object = ms_item-obj_type
iv_obj_name = ms_item-obj_name ).
IF ls_tadir IS NOT INITIAL.
rv_bool = abap_true.
ENDIF.
ENDMETHOD. "lif_object~exists
METHOD lif_object~serialize.
@ -155,15 +172,18 @@ CLASS lcl_object_enho IMPLEMENTATION.
CASE lv_tool.
WHEN cl_enh_tool_badi_impl=>tooltype.
serialize_badi( io_xml = io_xml
iv_tool = lv_tool
serialize_badi( io_xml = io_xml
iv_tool = lv_tool
ii_enh_tool = li_enh_tool ).
WHEN cl_enh_tool_hook_impl=>tooltype.
serialize_hook( io_xml = io_xml
iv_tool = lv_tool
serialize_hook( io_xml = io_xml
iv_tool = lv_tool
ii_enh_tool = li_enh_tool ).
WHEN cl_enh_tool_class=>tooltype.
serialize_class( io_xml = io_xml
iv_tool = lv_tool
ii_enh_tool = li_enh_tool ).
* ToDo:
* WHEN cl_enh_tool_class=>tooltype.
* WHEN 'ENHFUGRDATA'. "cl_enh_tool_fugr
* WHEN cl_enh_tool_intf=>tooltype.
* WHEN cl_wdr_cfg_enhancement=>tooltype.
@ -192,8 +212,10 @@ CLASS lcl_object_enho IMPLEMENTATION.
WHEN cl_enh_tool_hook_impl=>tooltype.
deserialize_hook( io_xml = io_xml
iv_package = iv_package ).
WHEN cl_enh_tool_class=>tooltype.
deserialize_class( io_xml = io_xml
iv_package = iv_package ).
* ToDo:
* WHEN cl_enh_tool_class=>tooltype.
* WHEN 'ENHFUGRDATA'. "cl_enh_tool_fugr
* WHEN cl_enh_tool_intf=>tooltype.
* WHEN cl_wdr_cfg_enhancement=>tooltype.
@ -220,24 +242,24 @@ CLASS lcl_object_enho IMPLEMENTATION.
io_xml->read( EXPORTING iv_name = 'SHORTTEXT'
CHANGING cg_data = lv_shorttext ).
CHANGING cg_data = lv_shorttext ).
io_xml->read( EXPORTING iv_name = 'SPOT_NAME'
CHANGING cg_data = lv_spot_name ).
CHANGING cg_data = lv_spot_name ).
io_xml->read( EXPORTING iv_name = 'IMPL'
CHANGING cg_data = lt_impl ).
CHANGING cg_data = lt_impl ).
lv_enhname = ms_item-obj_name.
lv_package = iv_package.
TRY.
cl_enh_factory=>create_enhancement(
EXPORTING
enhname = lv_enhname
enhtype = cl_abstract_enh_tool_redef=>credefinition
enhtooltype = cl_enh_tool_badi_impl=>tooltype
enhname = lv_enhname
enhtype = cl_abstract_enh_tool_redef=>credefinition
enhtooltype = cl_enh_tool_badi_impl=>tooltype
IMPORTING
enhancement = li_tool
enhancement = li_tool
CHANGING
devclass = lv_package ).
devclass = lv_package ).
lo_badi ?= li_tool.
lo_badi->set_spot_name( lv_spot_name ).
@ -253,6 +275,65 @@ CLASS lcl_object_enho IMPLEMENTATION.
ENDMETHOD. "deserialize_badi
METHOD deserialize_class.
DATA: lo_enh_class TYPE REF TO cl_enh_tool_class,
lt_owr TYPE enhmeth_tabkeys,
lt_pre TYPE enhmeth_tabkeys,
lt_post TYPE enhmeth_tabkeys,
lt_source TYPE rswsourcet,
li_tool TYPE REF TO if_enh_tool,
lv_shorttext TYPE string,
lv_class TYPE seoclsname,
lv_enhname TYPE enhname,
lv_package TYPE devclass.
io_xml->read( EXPORTING iv_name = 'SHORTTEXT'
CHANGING cg_data = lv_shorttext ).
io_xml->read( EXPORTING iv_name = 'OWR_METHODS'
CHANGING cg_data = lt_owr ).
io_xml->read( EXPORTING iv_name = 'PRE_METHODS'
CHANGING cg_data = lt_pre ).
io_xml->read( EXPORTING iv_name = 'POST_METHODS'
CHANGING cg_data = lt_post ).
io_xml->read( EXPORTING iv_name = 'CLASS'
CHANGING cg_data = lv_class ).
lt_source = mo_files->read_abap( ).
lv_enhname = ms_item-obj_name.
lv_package = iv_package.
TRY.
cl_enh_factory=>create_enhancement(
EXPORTING
enhname = lv_enhname
enhtype = ''
enhtooltype = cl_enh_tool_class=>tooltype
IMPORTING
enhancement = li_tool
CHANGING
devclass = lv_package ).
lo_enh_class ?= li_tool.
lo_enh_class->if_enh_object_docu~set_shorttext( lv_shorttext ).
lo_enh_class->set_class( lv_class ).
lo_enh_class->set_owr_methods( version = 'I'
owr_methods = lt_owr ).
lo_enh_class->set_pre_methods( version = 'I'
pre_methods = lt_pre ).
lo_enh_class->set_post_methods( version = 'I'
post_methods = lt_post ).
lo_enh_class->set_eimp_include( version = 'I'
eimp_source = lt_source ).
lo_enh_class->if_enh_object~save( ).
lo_enh_class->if_enh_object~unlock( ).
CATCH cx_enh_root.
lcx_exception=>raise( 'error deserializing ENHO class' ).
ENDTRY.
ENDMETHOD.
METHOD deserialize_hook.
DATA: lv_shorttext TYPE string,
@ -268,29 +349,29 @@ CLASS lcl_object_enho IMPLEMENTATION.
io_xml->read( EXPORTING iv_name = 'SHORTTEXT'
CHANGING cg_data = lv_shorttext ).
CHANGING cg_data = lv_shorttext ).
io_xml->read( EXPORTING iv_name = 'ORIGINAL_OBJECT'
CHANGING cg_data = ls_original_object ).
CHANGING cg_data = ls_original_object ).
io_xml->read( EXPORTING iv_name = 'ENHANCEMENTS'
CHANGING cg_data = lt_enhancements ).
CHANGING cg_data = lt_enhancements ).
io_xml->read( EXPORTING iv_name = 'SPACES'
CHANGING cg_data = lt_spaces ).
CHANGING cg_data = lt_spaces ).
hook_impl_deserialize( EXPORTING it_spaces = lt_spaces
CHANGING ct_impl = lt_enhancements ).
CHANGING ct_impl = lt_enhancements ).
lv_enhname = ms_item-obj_name.
lv_package = iv_package.
TRY.
cl_enh_factory=>create_enhancement(
EXPORTING
enhname = lv_enhname
enhtype = cl_abstract_enh_tool_redef=>credefinition
enhtooltype = cl_enh_tool_hook_impl=>tooltype
enhname = lv_enhname
enhtype = cl_abstract_enh_tool_redef=>credefinition
enhtooltype = cl_enh_tool_hook_impl=>tooltype
IMPORTING
enhancement = li_tool
enhancement = li_tool
CHANGING
devclass = lv_package ).
devclass = lv_package ).
lo_hook_impl ?= li_tool.
lo_hook_impl->if_enh_object_docu~set_shorttext( lv_shorttext ).
@ -305,13 +386,13 @@ CLASS lcl_object_enho IMPLEMENTATION.
LOOP AT lt_enhancements ASSIGNING <ls_enhancement>.
lo_hook_impl->add_hook_impl(
overwrite = <ls_enhancement>-overwrite
method = <ls_enhancement>-method
enhmode = <ls_enhancement>-enhmode
full_name = <ls_enhancement>-full_name
source = <ls_enhancement>-source
spot = <ls_enhancement>-spotname
parent_full_name = <ls_enhancement>-parent_full_name ).
overwrite = <ls_enhancement>-overwrite
method = <ls_enhancement>-method
enhmode = <ls_enhancement>-enhmode
full_name = <ls_enhancement>-full_name
source = <ls_enhancement>-source
spot = <ls_enhancement>-spotname
parent_full_name = <ls_enhancement>-parent_full_name ).
ENDLOOP.
lo_hook_impl->if_enh_object~save( ).
lo_hook_impl->if_enh_object~unlock( ).
@ -328,12 +409,31 @@ CLASS lcl_object_enho IMPLEMENTATION.
lv_shorttext TYPE string,
lt_impl TYPE enh_badi_impl_data_it.
FIELD-SYMBOLS: <ls_impl> LIKE LINE OF lt_impl,
<ls_values> LIKE LINE OF <ls_impl>-filter_values,
<ls_filter> LIKE LINE OF <ls_impl>-filters.
lo_badi_impl ?= ii_enh_tool.
lv_shorttext = lo_badi_impl->if_enh_object_docu~get_shorttext( ).
lv_spot_name = lo_badi_impl->get_spot_name( ).
lt_impl = lo_badi_impl->get_implementations( ).
LOOP AT lt_impl ASSIGNING <ls_impl>.
* make sure the XML serialization does not dump, field type = N
LOOP AT <ls_impl>-filter_values ASSIGNING <ls_values>.
IF <ls_values>-filter_numeric_value1 CA space.
CLEAR <ls_values>-filter_numeric_value1.
ENDIF.
ENDLOOP.
LOOP AT <ls_impl>-filters ASSIGNING <ls_filter>.
IF <ls_filter>-filter_numeric_value1 CA space.
CLEAR <ls_filter>-filter_numeric_value1.
ENDIF.
ENDLOOP.
ENDLOOP.
io_xml->add( iv_name = 'TOOL'
ig_data = iv_tool ).
io_xml->add( ig_data = lv_shorttext
@ -345,6 +445,43 @@ CLASS lcl_object_enho IMPLEMENTATION.
ENDMETHOD. "serialize_badi
METHOD serialize_class.
DATA: lo_enh_class TYPE REF TO cl_enh_tool_class,
lt_owr TYPE enhmeth_tabkeys,
lt_pre TYPE enhmeth_tabkeys,
lt_post TYPE enhmeth_tabkeys,
lt_source TYPE rswsourcet,
lv_class TYPE seoclsname,
lv_shorttext TYPE string.
lo_enh_class ?= ii_enh_tool.
lv_shorttext = lo_enh_class->if_enh_object_docu~get_shorttext( ).
lt_owr = lo_enh_class->get_owr_methods( ).
lt_pre = lo_enh_class->get_pre_methods( ).
lt_post = lo_enh_class->get_post_methods( ).
lt_source = lo_enh_class->get_eimp_include( ).
lo_enh_class->get_class( IMPORTING class_name = lv_class ).
io_xml->add( iv_name = 'TOOL'
ig_data = iv_tool ).
io_xml->add( ig_data = lv_shorttext
iv_name = 'SHORTTEXT' ).
io_xml->add( iv_name = 'CLASS'
ig_data = lv_class ).
io_xml->add( iv_name = 'OWR_METHODS'
ig_data = lt_owr ).
io_xml->add( iv_name = 'PRE_METHODS'
ig_data = lt_pre ).
io_xml->add( iv_name = 'POST_METHODS'
ig_data = lt_post ).
mo_files->add_abap( lt_source ).
ENDMETHOD.
METHOD serialize_hook.
DATA: lv_shorttext TYPE string,

View File

@ -53,6 +53,7 @@ CLASS lcl_object_enqu IMPLEMENTATION.
METHOD lif_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-ddic = abap_true.
ENDMETHOD. "lif_object~get_metadata
METHOD lif_object~exists.

View File

@ -317,6 +317,9 @@ CLASS lcl_object_fugr IMPLEMENTATION.
it_tpool = lt_tpool
iv_package = iv_package ).
deserialize_textpool( iv_program = <lv_include>
it_tpool = lt_tpool ).
ENDLOOP.
ENDMETHOD. "deserialize_includes
@ -395,10 +398,7 @@ CLASS lcl_object_fugr IMPLEMENTATION.
SELECT SINGLE areat INTO lv_areat
FROM tlibt
WHERE spras = mv_language
AND area = ms_item-obj_name. "#EC CI_GENBUFF
IF sy-subrc <> 0.
lcx_exception=>raise( 'not found in TLIBT' ).
ENDIF.
AND area = ms_item-obj_name. "#EC CI_GENBUFF "#EC CI_SUBRC
lt_functab = functions( ).
lt_includes = includes( ).
@ -490,6 +490,9 @@ CLASS lcl_object_fugr IMPLEMENTATION.
lcx_exception=>raise( 'Error from RS_FUNCTION_POOL_CONTENTS' ).
ENDIF.
SORT rt_functab BY funcname ASCENDING.
DELETE ADJACENT DUPLICATES FROM rt_functab COMPARING funcname.
ENDMETHOD. "functions
METHOD main_name.
@ -533,10 +536,10 @@ CLASS lcl_object_fugr IMPLEMENTATION.
DATA:
lt_source TYPE TABLE OF rssource,
lt_functab TYPE ty_rs38l_incl_tt,
lt_new_source TYPE rsfb_source.
lt_new_source TYPE rsfb_source,
ls_ret LIKE LINE OF rt_functions.
FIELD-SYMBOLS: <ls_func> LIKE LINE OF lt_functab,
<ls_ret> LIKE LINE OF rt_functions.
FIELD-SYMBOLS: <ls_func> LIKE LINE OF lt_functab.
lt_functab = functions( ).
@ -544,8 +547,8 @@ CLASS lcl_object_fugr IMPLEMENTATION.
LOOP AT lt_functab ASSIGNING <ls_func>.
* fm RPY_FUNCTIONMODULE_READ does not support source code
* lines longer than 72 characters
APPEND INITIAL LINE TO rt_functions ASSIGNING <ls_ret>.
MOVE-CORRESPONDING <ls_func> TO <ls_ret>.
CLEAR ls_ret.
MOVE-CORRESPONDING <ls_func> TO ls_ret.
CLEAR lt_new_source.
CLEAR lt_source.
@ -554,18 +557,18 @@ CLASS lcl_object_fugr IMPLEMENTATION.
EXPORTING
functionname = <ls_func>-funcname
IMPORTING
global_flag = <ls_ret>-global_flag
remote_call = <ls_ret>-remote_call
update_task = <ls_ret>-update_task
short_text = <ls_ret>-short_text
remote_basxml_supported = <ls_ret>-remote_basxml
global_flag = ls_ret-global_flag
remote_call = ls_ret-remote_call
update_task = ls_ret-update_task
short_text = ls_ret-short_text
remote_basxml_supported = ls_ret-remote_basxml
TABLES
import_parameter = <ls_ret>-import
changing_parameter = <ls_ret>-changing
export_parameter = <ls_ret>-export
tables_parameter = <ls_ret>-tables
exception_list = <ls_ret>-exception
documentation = <ls_ret>-documentation
import_parameter = ls_ret-import
changing_parameter = ls_ret-changing
export_parameter = ls_ret-export
tables_parameter = ls_ret-tables
exception_list = ls_ret-exception
documentation = ls_ret-documentation
source = lt_source
CHANGING
new_source = lt_new_source
@ -574,10 +577,14 @@ CLASS lcl_object_fugr IMPLEMENTATION.
function_not_found = 2
invalid_name = 3
OTHERS = 4.
IF sy-subrc <> 0.
IF sy-subrc = 2.
CONTINUE.
ELSEIF sy-subrc <> 0.
lcx_exception=>raise( 'Error from RPY_FUNCTIONMODULE_READ_NEW' ).
ENDIF.
APPEND ls_ret TO rt_functions.
IF NOT lt_new_source IS INITIAL.
mo_files->add_abap( iv_extra = <ls_func>-funcname
it_abap = lt_new_source ).

View File

@ -60,10 +60,7 @@ CLASS lcl_object_para IMPLEMENTATION.
SELECT SINGLE * FROM tparat INTO ls_tparat
WHERE paramid = ms_item-obj_name
AND sprache = mv_language. "#EC CI_GENBUFF
IF sy-subrc <> 0.
lcx_exception=>raise( 'PARA no english description' ).
ENDIF.
AND sprache = mv_language. "#EC CI_GENBUFF "#EC CI_SUBRC
io_xml->add( iv_name = 'TPARA'
ig_data = ls_tpara ).

View File

@ -13,12 +13,6 @@ CLASS lcl_object_prog DEFINITION INHERITING FROM lcl_objects_program FINAL.
INTERFACES lif_object.
ALIASES mo_files FOR lif_object~mo_files.
PRIVATE SECTION.
METHODS deserialize_textpool
IMPORTING it_tpool TYPE textpool_table
RAISING lcx_exception.
ENDCLASS. "lcl_object_prog DEFINITION
*----------------------------------------------------------------------*
@ -95,26 +89,6 @@ CLASS lcl_object_prog IMPLEMENTATION.
ENDMETHOD. "delete
METHOD deserialize_textpool.
READ TABLE it_tpool WITH KEY id = 'R' TRANSPORTING NO FIELDS.
IF ( sy-subrc = 0 AND lines( it_tpool ) = 1 ) OR lines( it_tpool ) = 0.
RETURN. " no action for includes
ENDIF.
INSERT TEXTPOOL ms_item-obj_name
FROM it_tpool
LANGUAGE mv_language
STATE 'I'.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from INSERT TEXTPOOL' ).
ENDIF.
lcl_objects_activation=>add( iv_type = 'REPT'
iv_name = ms_item-obj_name ).
ENDMETHOD. "deserialize_textpool
METHOD lif_object~serialize.
serialize_program( io_xml = io_xml
@ -157,7 +131,8 @@ CLASS lcl_object_prog IMPLEMENTATION.
deserialize_cua( iv_program_name = lv_program_name
is_cua = ls_cua ).
deserialize_textpool( lt_tpool ).
deserialize_textpool( iv_program = ms_item-obj_name
it_tpool = lt_tpool ).
ENDMETHOD. "lif_serialize~deserialize

View File

@ -39,6 +39,7 @@ CLASS lcl_object_sfbf IMPLEMENTATION.
METHOD lif_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-ddic = abap_true.
ENDMETHOD. "lif_object~get_metadata
METHOD lif_object~exists.

View File

@ -56,6 +56,7 @@ CLASS lcl_object_sfbs IMPLEMENTATION.
METHOD lif_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-ddic = abap_true.
ENDMETHOD. "lif_object~get_metadata
METHOD lif_object~exists.

View File

@ -39,6 +39,7 @@ CLASS lcl_object_sfsw IMPLEMENTATION.
METHOD lif_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-ddic = abap_true.
ENDMETHOD. "lif_object~get_metadata
METHOD lif_object~exists.

View File

@ -158,6 +158,7 @@ CLASS lcl_object_shi3 IMPLEMENTATION.
lt_texts TYPE TABLE OF hier_texts,
lt_refs TYPE TABLE OF hier_ref.
CALL FUNCTION 'STREE_STRUCTURE_READ'
EXPORTING
structure_id = mv_tree_id
@ -167,10 +168,6 @@ CLASS lcl_object_shi3 IMPLEMENTATION.
TABLES
description = lt_titles.
IF sy-subrc <> 0.
lcx_exception=>raise( 'Error from STREE_STRUCTURE_READ, SHI3' ).
ENDIF.
CALL FUNCTION 'STREE_HIERARCHY_READ'
EXPORTING
structure_id = mv_tree_id
@ -182,9 +179,6 @@ CLASS lcl_object_shi3 IMPLEMENTATION.
list_of_nodes = lt_nodes
list_of_references = lt_refs
list_of_texts = lt_texts.
IF sy-subrc <> 0.
lcx_exception=>raise( 'Error from STREE_HIERARCHY_READ, SHI3' ).
ENDIF.
strip_stamps( CHANGING cs_head = ls_head
ct_nodes = lt_nodes ).

View File

@ -50,6 +50,7 @@ CLASS lcl_object_shlp IMPLEMENTATION.
METHOD lif_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-ddic = abap_true.
ENDMETHOD. "lif_object~get_metadata
METHOD lif_object~exists.

View File

@ -191,7 +191,7 @@ CLASS lcl_object_smim IMPLEMENTATION.
not_found = 3
permission_failure = 4
OTHERS = 5 ).
IF sy-subrc <> 0.
IF sy-subrc <> 0 AND sy-subrc <> 2 AND sy-subrc <> 3.
lcx_exception=>raise( 'error from mime api->get:' && sy-msgv1 ).
ENDIF.

View File

@ -74,6 +74,7 @@ CLASS lcl_object_tabl IMPLEMENTATION.
METHOD lif_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-ddic = abap_true.
ENDMETHOD. "lif_object~get_metadata
METHOD lif_object~exists.
@ -121,17 +122,18 @@ CLASS lcl_object_tabl IMPLEMENTATION.
METHOD lif_object~serialize.
DATA: lv_name TYPE ddobjname,
ls_dd02v TYPE dd02v,
ls_dd09l TYPE dd09l,
lt_dd03p TYPE TABLE OF dd03p,
lt_dd05m TYPE TABLE OF dd05m,
lt_dd08v TYPE TABLE OF dd08v,
lt_dd12v TYPE dd12vtab,
lt_dd17v TYPE dd17vtab,
lt_dd35v TYPE TABLE OF dd35v,
lv_index LIKE sy-index,
lt_dd36m TYPE dd36mttyp.
DATA: lv_name TYPE ddobjname,
ls_dd02v TYPE dd02v,
ls_dd09l TYPE dd09l,
lt_dd03p TYPE TABLE OF dd03p,
lt_dd05m TYPE TABLE OF dd05m,
lt_dd08v TYPE TABLE OF dd08v,
lt_dd12v TYPE dd12vtab,
lt_dd17v TYPE dd17vtab,
lt_dd35v TYPE TABLE OF dd35v,
lv_index LIKE sy-index,
lv_masklen TYPE c LENGTH 4,
lt_dd36m TYPE dd36mttyp.
FIELD-SYMBOLS: <ls_dd12v> LIKE LINE OF lt_dd12v,
<ls_dd05m> LIKE LINE OF lt_dd05m,
@ -170,6 +172,20 @@ CLASS lcl_object_tabl IMPLEMENTATION.
ls_dd02v-as4date,
ls_dd02v-as4time.
* reset numeric field, so XML does not crash
IF ls_dd02v-prozpuff = ''.
CLEAR ls_dd02v-prozpuff.
ENDIF.
IF ls_dd02v-datmin = ''.
CLEAR ls_dd02v-datmin.
ENDIF.
IF ls_dd02v-datmax = ''.
CLEAR ls_dd02v-datmax.
ENDIF.
IF ls_dd02v-datavg = ''.
CLEAR ls_dd02v-datavg.
ENDIF.
CLEAR: ls_dd09l-as4user,
ls_dd09l-as4date,
ls_dd09l-as4time.
@ -195,7 +211,8 @@ CLASS lcl_object_tabl IMPLEMENTATION.
<ls_dd03p>-scrtext_m,
<ls_dd03p>-scrtext_l.
IF <ls_dd03p>-masklen = '' OR NOT <ls_dd03p>-masklen CO '0123456789'.
lv_masklen = <ls_dd03p>-masklen.
IF lv_masklen = '' OR NOT lv_masklen CO '0123456789'.
* make sure the field contains valid data, or the XML will dump
CLEAR <ls_dd03p>-masklen.
ENDIF.
@ -218,7 +235,10 @@ CLASS lcl_object_tabl IMPLEMENTATION.
<ls_dd03p>-convexit,
<ls_dd03p>-entitytab,
<ls_dd03p>-dommaster,
<ls_dd03p>-domname3l.
<ls_dd03p>-domname3l,
<ls_dd03p>-decimals,
<ls_dd03p>-lowercase,
<ls_dd03p>-signflag.
ENDIF.
IF <ls_dd03p>-shlporigin = 'D'.

View File

@ -187,9 +187,6 @@ CLASS lct_table_validation IMPLEMENTATION.
ENDMETHOD.
METHOD no_fields_no_message.
DATA:
ls_current_table_field LIKE LINE OF mt_current_table_fields.
create_xmls( ).
mv_validation_message = mo_table_validator->validate(
@ -199,7 +196,6 @@ CLASS lct_table_validation IMPLEMENTATION.
cl_abap_unit_assert=>assert_initial( mv_validation_message ).
ENDMETHOD.
METHOD create_xmls.
CREATE OBJECT mo_previous_version_out_xml.
mo_previous_version_out_xml->add(
@ -220,6 +216,4 @@ CLASS lct_table_validation IMPLEMENTATION.
iv_xml = mo_current_version_out_xml->render( ).
ENDMETHOD.
ENDCLASS.

View File

@ -243,8 +243,7 @@ CLASS lcl_object_tran IMPLEMENTATION.
communication_failure = 2
resource_failure = 3
OTHERS = 4
##fm_subrc_ok
. "#EC CI_SUBRC
##fm_subrc_ok. "#EC CI_SUBRC
ENDMETHOD. "jump

View File

@ -50,6 +50,7 @@ CLASS lcl_object_ttyp IMPLEMENTATION.
METHOD lif_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-ddic = abap_true.
ENDMETHOD. "lif_object~get_metadata
METHOD lif_object~exists.

View File

@ -52,7 +52,7 @@ CLASS lcl_object_type IMPLEMENTATION.
TRY.
read( ).
rv_bool = abap_true.
CATCH lcx_not_found.
CATCH lcx_not_found lcx_exception.
rv_bool = abap_false.
ENDTRY.

View File

@ -39,13 +39,19 @@ CLASS lcl_object_vcls IMPLEMENTATION.
ENDMETHOD. "lif_object~get_metadata
METHOD lif_object~exists.
DATA lv_vclname TYPE vcl_name.
SELECT SINGLE vclname INTO lv_vclname FROM vcldir
DATA lv_changedate TYPE vcldir-changedate.
SELECT SINGLE changedate INTO lv_changedate FROM vcldir
WHERE vclname = ms_item-obj_name.
rv_bool = boolc( sy-subrc = 0 ).
IF lv_changedate IS INITIAL.
* same logic as in function module VIEWCLUSTER_GET_DEFINITION
rv_bool = abap_false.
ENDIF.
ENDMETHOD. "lif_object~exists
METHOD lif_object~serialize.

View File

@ -24,9 +24,9 @@ CLASS lcl_object_view IMPLEMENTATION.
METHOD lif_object~has_changed_since.
DATA: lv_date TYPE dats,
lv_time TYPE tims,
lv_ts TYPE timestamp.
DATA: lv_date TYPE dats,
lv_time TYPE tims,
lv_ts TYPE timestamp.
SELECT SINGLE as4date as4time FROM dd25l " View
INTO (lv_date, lv_time)
@ -60,6 +60,7 @@ CLASS lcl_object_view IMPLEMENTATION.
METHOD lif_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-ddic = abap_true.
ENDMETHOD. "lif_object~get_metadata
METHOD lif_object~exists.
@ -115,6 +116,8 @@ CLASS lcl_object_view IMPLEMENTATION.
lt_dd28j TYPE TABLE OF dd28j,
lt_dd28v TYPE TABLE OF dd28v.
FIELD-SYMBOLS: <ls_dd27p> LIKE LINE OF lt_dd27p.
lv_name = ms_item-obj_name.
@ -149,6 +152,30 @@ CLASS lcl_object_view IMPLEMENTATION.
ls_dd09l-as4date,
ls_dd09l-as4time.
LOOP AT lt_dd27p ASSIGNING <ls_dd27p>.
CLEAR: <ls_dd27p>-ddtext,
<ls_dd27p>-reptext,
<ls_dd27p>-scrtext_s,
<ls_dd27p>-scrtext_m,
<ls_dd27p>-scrtext_l,
<ls_dd27p>-outputlen,
<ls_dd27p>-decimals,
<ls_dd27p>-lowercase,
<ls_dd27p>-convexit,
<ls_dd27p>-signflag,
<ls_dd27p>-flength,
<ls_dd27p>-domname,
<ls_dd27p>-datatype,
<ls_dd27p>-entitytab,
<ls_dd27p>-inttype,
<ls_dd27p>-intlen,
<ls_dd27p>-headlen,
<ls_dd27p>-scrlen1,
<ls_dd27p>-scrlen2,
<ls_dd27p>-scrlen3,
<ls_dd27p>-memoryid.
ENDLOOP.
io_xml->add( iv_name = 'DD25V'
ig_data = ls_dd25v ).
io_xml->add( iv_name = 'DD09L'

File diff suppressed because it is too large Load Diff

View File

@ -20,7 +20,8 @@ CLASS lcl_objects_activation DEFINITION FINAL.
RAISING lcx_exception.
CLASS-METHODS activate
RAISING lcx_exception.
IMPORTING iv_ddic TYPE abap_bool DEFAULT abap_false
RAISING lcx_exception.
CLASS-METHODS clear.
@ -29,8 +30,7 @@ CLASS lcl_objects_activation DEFINITION FINAL.
IMPORTING iv_obj_name TYPE trobj_name
CHANGING ct_objects TYPE dwinactiv_tab.
CLASS-DATA: gt_ddic TYPE TABLE OF dwinactiv,
gt_programs TYPE TABLE OF dwinactiv.
CLASS-DATA: gt_objects TYPE TABLE OF dwinactiv.
ENDCLASS. "lcl_objects_activation DEFINITION
@ -47,38 +47,18 @@ CLASS lcl_objects_activation IMPLEMENTATION.
ENDMETHOD. "add_item
METHOD clear.
CLEAR: gt_ddic,
gt_programs.
CLEAR gt_objects.
ENDMETHOD. "clear
METHOD activate.
* ddic
IF NOT gt_ddic IS INITIAL.
IF NOT gt_objects IS INITIAL.
CALL FUNCTION 'RS_WORKING_OBJECTS_ACTIVATE'
EXPORTING
activate_ddic_objects = abap_true
activate_ddic_objects = iv_ddic
with_popup = abap_true
TABLES
objects = gt_ddic
EXCEPTIONS
excecution_error = 1
cancelled = 2
insert_into_corr_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from RS_WORKING_OBJECTS_ACTIVATE' ).
ENDIF.
ENDIF.
* programs
IF NOT gt_programs IS INITIAL.
CALL FUNCTION 'RS_WORKING_OBJECTS_ACTIVATE'
EXPORTING
activate_ddic_objects = abap_false
with_popup = abap_true
TABLES
objects = gt_programs
objects = gt_objects
EXCEPTIONS
excecution_error = 1
cancelled = 2
@ -139,9 +119,9 @@ CLASS lcl_objects_activation IMPLEMENTATION.
lv_obj_name = iv_name.
* todo, refactoring
CASE iv_type.
WHEN 'CLAS' OR 'WDYN'.
* todo, move this to the object type include instead
CALL FUNCTION 'RS_INACTIVE_OBJECTS_IN_OBJECT'
EXPORTING
obj_name = lv_obj_name
@ -160,22 +140,11 @@ CLASS lcl_objects_activation IMPLEMENTATION.
CHANGING ct_objects = lt_objects ).
ENDIF.
APPEND LINES OF lt_objects TO gt_programs.
WHEN 'DOMA' OR 'DTEL' OR 'TABL' OR 'INDX' OR 'TTYP'
OR 'VIEW' OR 'SHLP' OR 'ENQU'
OR 'SFSW' OR 'SFBF' OR 'SFBS'.
* todo also insert_into_working_area?
APPEND INITIAL LINE TO gt_ddic ASSIGNING <ls_object>.
<ls_object>-object = iv_type.
<ls_object>-obj_name = lv_obj_name.
WHEN 'REPS' OR 'DYNP' OR 'CUAD' OR 'REPT' OR 'INTF'
OR 'FUNC' OR 'ENHO' OR 'TYPE' OR 'XSLT' OR 'WEBI'.
* these seem to go into the workarea automatically
APPEND INITIAL LINE TO gt_programs ASSIGNING <ls_object>.
<ls_object>-object = iv_type.
<ls_object>-obj_name = lv_obj_name.
APPEND LINES OF lt_objects TO gt_objects.
WHEN OTHERS.
lcx_exception=>raise( 'activate, unknown type' ).
APPEND INITIAL LINE TO gt_objects ASSIGNING <ls_object>.
<ls_object>-object = iv_type.
<ls_object>-obj_name = lv_obj_name.
ENDCASE.
ENDMETHOD. "activate
@ -187,7 +156,7 @@ ENDCLASS. "lcl_objects_activation IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_objects_files DEFINITION FINAL.
CLASS lcl_objects_files DEFINITION.
PUBLIC SECTION.
METHODS:
@ -859,13 +828,6 @@ CLASS lcl_objects_program DEFINITION INHERITING FROM lcl_objects_super.
TYPES: ty_spaces_tt TYPE STANDARD TABLE OF i WITH DEFAULT KEY.
TYPES: BEGIN OF ty_tpool.
INCLUDE TYPE textpool.
TYPES: split TYPE c LENGTH 8.
TYPES: END OF ty_tpool.
TYPES: ty_tpool_tt TYPE STANDARD TABLE OF ty_tpool WITH DEFAULT KEY.
TYPES: BEGIN OF ty_dynpro,
header TYPE rpy_dyhead,
containers TYPE dycatt_tab,
@ -905,6 +867,11 @@ CLASS lcl_objects_program DEFINITION INHERITING FROM lcl_objects_super.
IMPORTING it_dynpros TYPE ty_dynpro_tt
RAISING lcx_exception.
METHODS deserialize_textpool
IMPORTING iv_program TYPE programm
it_tpool TYPE textpool_table
RAISING lcx_exception.
METHODS deserialize_cua
IMPORTING iv_program_name TYPE programm
is_cua TYPE ty_cua
@ -1043,12 +1010,9 @@ CLASS lcl_objects_program IMPLEMENTATION.
ENDIF.
ENDIF.
IF lines( lt_tpool ) = 1.
READ TABLE lt_tpool INDEX 1 INTO ls_tpool.
ASSERT sy-subrc = 0.
IF ls_tpool-id = 'R' AND ls_tpool-key = '' AND ls_tpool-length = 0.
DELETE lt_tpool INDEX 1.
ENDIF.
READ TABLE lt_tpool WITH KEY id = 'R' INTO ls_tpool.
IF sy-subrc = 0 AND ls_tpool-key = '' AND ls_tpool-length = 0.
DELETE lt_tpool INDEX sy-tabix.
ENDIF.
lo_xml->add( iv_name = 'TPOOL'
@ -1423,12 +1387,42 @@ CLASS lcl_objects_program IMPLEMENTATION.
ENDMETHOD. "read_tpool
METHOD deserialize_textpool.
READ TABLE it_tpool WITH KEY id = 'R' TRANSPORTING NO FIELDS.
IF ( sy-subrc = 0 AND lines( it_tpool ) = 1 ) OR lines( it_tpool ) = 0.
RETURN. " no action for includes
ENDIF.
INSERT TEXTPOOL iv_program
FROM it_tpool
LANGUAGE mv_language
STATE 'I'.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from INSERT TEXTPOOL' ).
ENDIF.
lcl_objects_activation=>add( iv_type = 'REPT'
iv_name = iv_program ).
ENDMETHOD. "deserialize_textpool
METHOD deserialize_cua.
DATA: ls_tr_key TYPE trkey.
IF is_cua-adm IS INITIAL.
IF lines( is_cua-sta ) = 0
AND lines( is_cua-fun ) = 0
AND lines( is_cua-men ) = 0
AND lines( is_cua-mtx ) = 0
AND lines( is_cua-act ) = 0
AND lines( is_cua-but ) = 0
AND lines( is_cua-pfk ) = 0
AND lines( is_cua-set ) = 0
AND lines( is_cua-doc ) = 0
AND lines( is_cua-tit ) = 0
AND lines( is_cua-biv ) = 0.
RETURN.
ENDIF.
@ -1442,14 +1436,14 @@ CLASS lcl_objects_program IMPLEMENTATION.
ENDIF.
ls_tr_key-obj_type = ms_item-obj_type.
ls_tr_key-obj_name = iv_program_name.
ls_tr_key-obj_name = ms_item-obj_name.
ls_tr_key-sub_type = 'CUAD'.
ls_tr_key-sub_name = ms_item-obj_name.
ls_tr_key-sub_name = iv_program_name.
sy-tcode = 'SE41' ##write_ok. " evil hack, workaround to handle fixes in note 2159455
CALL FUNCTION 'RS_CUA_INTERNAL_WRITE'
EXPORTING
program = ms_item-obj_name
program = iv_program_name
language = mv_language
tr_key = ls_tr_key
adm = is_cua-adm
@ -1474,7 +1468,7 @@ CLASS lcl_objects_program IMPLEMENTATION.
ENDIF.
lcl_objects_activation=>add( iv_type = 'CUAD'
iv_name = ms_item-obj_name ).
iv_name = iv_program_name ).
ENDMETHOD. "deserialize_cua
@ -1631,11 +1625,14 @@ CLASS lcl_objects DEFINITION FINAL.
PUBLIC SECTION.
TYPES: ty_types_tt TYPE STANDARD TABLE OF tadir-object WITH DEFAULT KEY.
TYPES: BEGIN OF ty_late,
TYPES: BEGIN OF ty_deserialization,
obj TYPE REF TO lif_object,
xml TYPE REF TO lcl_xml_input,
package TYPE devclass,
END OF ty_late.
item TYPE ty_item,
END OF ty_deserialization.
TYPES: ty_deserialization_tt TYPE STANDARD TABLE OF ty_deserialization WITH DEFAULT KEY.
CLASS-METHODS serialize
IMPORTING is_item TYPE ty_item
@ -1680,10 +1677,6 @@ CLASS lcl_objects DEFINITION FINAL.
CLASS-METHODS supported_list
RETURNING VALUE(rt_types) TYPE ty_types_tt.
CLASS-METHODS is_language_installed
IMPORTING iv_language TYPE langu
RETURNING VALUE(rv_yes) TYPE abap_bool.
PRIVATE SECTION.
CLASS-DATA: mv_langs_installed TYPE scplangs.
@ -1722,9 +1715,8 @@ CLASS lcl_objects DEFINITION FINAL.
RAISING lcx_exception.
CLASS-METHODS warning_overwrite
IMPORTING io_repo TYPE REF TO lcl_repo
CHANGING ct_results TYPE ty_results_tt
RAISING lcx_exception.
CHANGING ct_results TYPE ty_results_tt
RAISING lcx_exception.
CLASS-METHODS warning_package
IMPORTING is_item TYPE ty_item
@ -1747,4 +1739,11 @@ CLASS lcl_objects DEFINITION FINAL.
RAISING
lcx_exception.
CLASS-METHODS deserialize_objects
IMPORTING it_objects TYPE ty_deserialization_tt
iv_ddic TYPE abap_bool DEFAULT abap_false
iv_descr TYPE string
CHANGING ct_files TYPE ty_file_signatures_tt
RAISING lcx_exception.
ENDCLASS. "lcl_object DEFINITION

View File

@ -207,18 +207,6 @@ CLASS lcl_objects IMPLEMENTATION.
ENDMETHOD. "supported_list
METHOD is_language_installed.
IF mv_langs_installed IS INITIAL.
CALL FUNCTION 'RSAQ_READ_INSTALLED_LANGUAGES'
IMPORTING
inst_languages = mv_langs_installed.
ENDIF.
rv_yes = boolc( mv_langs_installed CA iv_language ).
ENDMETHOD. "is_language_installed
METHOD exists.
DATA: li_obj TYPE REF TO lif_object.
@ -238,26 +226,29 @@ CLASS lcl_objects IMPLEMENTATION.
METHOD path_to_package.
DATA: lv_length TYPE i,
lv_parent TYPE devclass,
lv_new TYPE string,
lv_path TYPE string.
lv_length = strlen( iv_start ) - 1.
lv_length = strlen( iv_start ).
lv_path = iv_path+lv_length.
lv_parent = iv_top.
rv_package = iv_top.
CONCATENATE iv_top lv_path INTO rv_package.
WHILE lv_path CA '/'.
SPLIT lv_path AT '/' INTO lv_new lv_path.
TRANSLATE rv_package USING '/_'.
CONCATENATE rv_package '_' lv_new INTO rv_package.
TRANSLATE rv_package TO UPPER CASE.
lv_length = strlen( rv_package ) - 1.
IF lcl_sap_package=>exists( rv_package ) = abap_false.
lcl_sap_package=>create_child( iv_parent = lv_parent
iv_child = rv_package ).
ENDIF.
rv_package = rv_package(lv_length).
TRANSLATE rv_package TO UPPER CASE.
IF lcl_sap_package=>exists( rv_package ) = abap_false.
lcl_sap_package=>create_child( iv_parent = iv_top
iv_child = rv_package ).
ENDIF.
lv_parent = rv_package.
ENDWHILE.
ENDMETHOD.
@ -589,18 +580,20 @@ CLASS lcl_objects IMPLEMENTATION.
METHOD deserialize.
DATA: ls_item TYPE ty_item,
lv_cancel TYPE abap_bool,
li_obj TYPE REF TO lif_object,
lt_remote TYPE ty_files_tt,
lv_package TYPE devclass,
lo_files TYPE REF TO lcl_objects_files,
lo_xml TYPE REF TO lcl_xml_input,
lt_results TYPE ty_results_tt,
lt_late TYPE TABLE OF ty_late.
DATA: ls_item TYPE ty_item,
lv_cancel TYPE abap_bool,
li_obj TYPE REF TO lif_object,
lt_remote TYPE ty_files_tt,
lv_package TYPE devclass,
lo_files TYPE REF TO lcl_objects_files,
lo_xml TYPE REF TO lcl_xml_input,
lt_results TYPE ty_results_tt,
lt_ddic TYPE TABLE OF ty_deserialization,
lt_rest TYPE TABLE OF ty_deserialization,
lt_late TYPE TABLE OF ty_deserialization.
FIELD-SYMBOLS: <ls_result> TYPE ty_result,
<ls_late> LIKE LINE OF lt_late.
<ls_deser> LIKE LINE OF lt_late.
lcl_objects_activation=>clear( ).
@ -616,8 +609,7 @@ CLASS lcl_objects IMPLEMENTATION.
lt_results = prioritize_deser( lt_results ).
warning_overwrite( EXPORTING io_repo = io_repo
CHANGING ct_results = lt_results ).
warning_overwrite( CHANGING ct_results = lt_results ).
LOOP AT lt_results ASSIGNING <ls_result> WHERE obj_type IS NOT INITIAL
AND NOT ( lstate = gc_state-added AND rstate IS INITIAL ).
@ -656,34 +648,38 @@ CLASS lcl_objects IMPLEMENTATION.
is_metadata = lo_xml->get_metadata( ) ).
compare_remote_to_local(
io_object = li_obj
it_remote = lt_remote
is_result = <ls_result> ).
io_object = li_obj
it_remote = lt_remote
is_result = <ls_result> ).
li_obj->mo_files = lo_files.
IF li_obj->get_metadata( )-late_deser = abap_true.
APPEND INITIAL LINE TO lt_late ASSIGNING <ls_late>.
<ls_late>-obj = li_obj.
<ls_late>-xml = lo_xml.
<ls_late>-package = lv_package.
CONTINUE.
APPEND INITIAL LINE TO lt_late ASSIGNING <ls_deser>.
ELSEIF li_obj->get_metadata( )-ddic = abap_true.
APPEND INITIAL LINE TO lt_ddic ASSIGNING <ls_deser>.
ELSE.
APPEND INITIAL LINE TO lt_rest ASSIGNING <ls_deser>.
ENDIF.
<ls_deser>-item = ls_item.
<ls_deser>-obj = li_obj.
<ls_deser>-xml = lo_xml.
<ls_deser>-package = lv_package.
li_obj->deserialize( iv_package = lv_package
io_xml = lo_xml ).
" Remember accessed files
APPEND LINES OF lo_files->get_accessed_files( ) TO rt_accessed_files.
ENDLOOP.
lcl_objects_activation=>activate( ).
deserialize_objects( EXPORTING it_objects = lt_ddic
iv_ddic = abap_true
iv_descr = 'DDIC'
CHANGING ct_files = rt_accessed_files ).
LOOP AT lt_late ASSIGNING <ls_late>.
<ls_late>-obj->deserialize( iv_package = <ls_late>-package
io_xml = <ls_late>-xml ).
ENDLOOP.
deserialize_objects( EXPORTING it_objects = lt_rest
iv_descr = 'Objects'
CHANGING ct_files = rt_accessed_files ).
deserialize_objects( EXPORTING it_objects = lt_late
iv_descr = 'Late'
CHANGING ct_files = rt_accessed_files ).
update_package_tree( io_repo->get_package( ) ).
@ -692,6 +688,27 @@ CLASS lcl_objects IMPLEMENTATION.
ENDMETHOD. "deserialize
METHOD deserialize_objects.
FIELD-SYMBOLS: <ls_obj> LIKE LINE OF it_objects.
lcl_objects_activation=>clear( ).
LOOP AT it_objects ASSIGNING <ls_obj>.
lcl_progress=>show( iv_key = |Deserialize { iv_descr }|
iv_current = sy-tabix
iv_total = lines( it_objects )
iv_text = <ls_obj>-item-obj_name ) ##NO_TEXT.
<ls_obj>-obj->deserialize( iv_package = <ls_obj>-package
io_xml = <ls_obj>-xml ).
APPEND LINES OF <ls_obj>-obj->mo_files->get_accessed_files( ) TO ct_files.
ENDLOOP.
lcl_objects_activation=>activate( iv_ddic ).
ENDMETHOD.
METHOD compare_remote_to_local.

View File

@ -17,241 +17,90 @@ INTERFACE lif_gui_page.
RAISING lcx_exception lcx_cancel.
METHODS render
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
RAISING lcx_exception.
ENDINTERFACE.
CLASS lcl_gui_page_super DEFINITION ABSTRACT.
CLASS lcl_gui_page DEFINITION ABSTRACT.
PUBLIC SECTION.
INTERFACES lif_gui_page ABSTRACT METHODS render.
CLASS-METHODS render_error
IMPORTING ix_error TYPE REF TO lcx_exception
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
INTERFACES lif_gui_page.
PROTECTED SECTION.
METHODS render_repo_top
IMPORTING io_repo TYPE REF TO lcl_repo
iv_show_package TYPE abap_bool DEFAULT abap_true
iv_show_branch TYPE abap_bool DEFAULT abap_true
iv_interactive_branch TYPE abap_bool DEFAULT abap_false
iv_branch TYPE string OPTIONAL
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
TYPES: BEGIN OF ty_control,
redirect_url TYPE string,
page_title TYPE string,
page_menu TYPE REF TO lcl_html_toolbar,
END OF ty_control.
DATA: ms_control TYPE ty_control.
METHODS render_content ABSTRACT
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
RAISING lcx_exception.
METHODS render_item_state
IMPORTING iv1 TYPE char1
iv2 TYPE char1
RETURNING VALUE(rv_html) TYPE string.
METHODS render_branch_span
IMPORTING iv_branch TYPE string
io_repo TYPE REF TO lcl_repo_online
iv_interactive TYPE abap_bool
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
METHODS scripts
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
RAISING lcx_exception.
METHODS header
IMPORTING io_include_style TYPE REF TO lcl_html_helper OPTIONAL
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
PRIVATE SECTION.
METHODS footer
IMPORTING io_include_script TYPE REF TO lcl_html_helper OPTIONAL
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
METHODS html_head
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
METHODS title
IMPORTING iv_title TYPE string
io_menu TYPE REF TO lcl_html_toolbar OPTIONAL
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
METHODS footer
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
METHODS redirect
IMPORTING iv_url TYPE string
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
ENDCLASS.
ENDCLASS. "lcl_gui_page
CLASS lcl_gui_page_super IMPLEMENTATION.
CLASS lcl_gui_page IMPLEMENTATION.
METHOD render_repo_top.
DATA: lo_repo_online TYPE REF TO lcl_repo_online,
lo_pback TYPE REF TO lcl_persistence_background,
lv_icon TYPE string.
CREATE OBJECT ro_html.
CREATE OBJECT lo_pback.
IF io_repo->is_offline( ) = abap_true.
lv_icon = 'img/repo_offline' ##NO_TEXT.
ELSE.
lv_icon = 'img/repo_online' ##NO_TEXT.
ENDIF.
ro_html->add( |<a id="repo{ io_repo->get_key( ) }"></a>| ).
ro_html->add( '<table width="100%"><tr>' ).
ro_html->add( '<td class="repo_name">' ).
ro_html->add( |<img src="{ lv_icon }">| ).
ro_html->add( |<span class="name">{ io_repo->get_name( ) }</span>| ).
IF io_repo->is_offline( ) = abap_false.
lo_repo_online ?= io_repo.
ro_html->add( |<span class="url">{ lo_repo_online->get_url( ) }</span>| ).
ENDIF.
ro_html->add( '</td>' ).
ro_html->add( '<td class="repo_attr right">' ).
IF abap_true = lcl_app=>user( )->is_favorite_repo( io_repo->get_key( ) ).
lv_icon = 'img/star' ##NO_TEXT.
ELSE.
lv_icon = 'img/star-grey' ##NO_TEXT.
ENDIF.
lv_icon = |<img class="pad-sides" src="{ lv_icon }" title="Click to toggle favorite">|.
ro_html->add_anchor( iv_act = |{ gc_action-repo_toggle_fav }?{ io_repo->get_key( ) }|
iv_txt = lv_icon ).
IF lo_pback->exists( io_repo->get_key( ) ) = abap_true.
ro_html->add( '<span class="bg_marker" title="background">BG</span>' ).
ENDIF.
IF io_repo->is_write_protected( ) = abap_true.
ro_html->add( '<img src="img/lock" title="locked">' ).
ENDIF.
IF io_repo->is_offline( ) = abap_false.
lo_repo_online ?= io_repo.
IF iv_show_branch = abap_true.
IF iv_branch IS INITIAL.
ro_html->add( render_branch_span( iv_branch = lo_repo_online->get_branch_name( )
io_repo = lo_repo_online
iv_interactive = iv_interactive_branch ) ).
ELSE.
ro_html->add( render_branch_span( iv_branch = iv_branch
io_repo = lo_repo_online
iv_interactive = iv_interactive_branch ) ).
ENDIF.
ENDIF.
ENDIF.
IF iv_show_package = abap_true.
ro_html->add( '<img src="img/pkg">' ).
ro_html->add( '<span>' ).
ro_html->add_anchor( iv_txt = io_repo->get_package( )
iv_act = |{ gc_action-jump_pkg }?{ io_repo->get_package( ) }| ).
ro_html->add( '</span>' ).
ENDIF.
ro_html->add( '</td>' ).
ro_html->add( '</tr></table>' ).
ENDMETHOD.
METHOD render_item_state.
DATA: lv_system TYPE string.
FIELD-SYMBOLS <state> TYPE char1.
rv_html = '<span class="state-block">'.
DO 2 TIMES.
CASE sy-index.
WHEN 1.
ASSIGN iv1 TO <state>.
lv_system = 'Local:'.
WHEN 2.
ASSIGN iv2 TO <state>.
lv_system = 'Remote:'.
ENDCASE.
CASE <state>.
WHEN gc_state-unchanged. "None or unchanged
IF iv1 = gc_state-added OR iv2 = gc_state-added.
rv_html = rv_html && |<span class="none" title="{ lv_system } Not exists">X</span>|.
ELSE.
rv_html = rv_html && |<span class="none" title="{ lv_system } No changes">&nbsp;</span>|.
ENDIF.
WHEN gc_state-modified. "Changed
rv_html = rv_html && |<span class="changed" title="{ lv_system } Modified">M</span>|.
WHEN gc_state-added. "Added new
rv_html = rv_html && |<span class="added" title="{ lv_system } Added new">A</span>|.
WHEN gc_state-mixed. "Multiple changes (multifile)
rv_html = rv_html && |<span class="mixed" title="{ lv_system } Multiple changes">&#x25A0;</span>|.
WHEN gc_state-deleted. "Deleted
rv_html = rv_html && |<span class="deleted" title="{ lv_system } Deleted">D</span>|.
ENDCASE.
ENDDO.
rv_html = rv_html && '</span>'.
ENDMETHOD. "render_item_state
METHOD render_branch_span.
DATA: lv_text TYPE string,
lv_class TYPE string.
lv_text = lcl_git_branch_list=>get_display_name( iv_branch ).
IF iv_branch = io_repo->get_head_branch_name( ) OR iv_branch = lcl_git_branch_list=>head_name.
lv_class = 'branch branch_head'.
ELSEIF lcl_git_branch_list=>get_type( iv_branch ) = lcl_git_branch_list=>c_type-branch.
lv_class = 'branch branch_branch'.
ELSE.
lv_class = 'branch'.
ENDIF.
CREATE OBJECT ro_html.
ro_html->add( |<span class="{ lv_class }">| ).
ro_html->add( '<img src="img/branch">' ).
IF iv_interactive = abap_true.
ro_html->add_anchor( iv_act = |{ gc_action-git_branch_switch }?{ io_repo->get_key( ) }|
iv_txt = lv_text ).
ELSE.
ro_html->add( lv_text ).
ENDIF.
ro_html->add( '</span>' ).
ENDMETHOD. "render_branch_span
METHOD header.
METHOD html_head.
CREATE OBJECT ro_html.
ro_html->add( '<!DOCTYPE html>' ). "#EC NOTEXT
ro_html->add( '<html>' ). "#EC NOTEXT
ro_html->add( '<head>' ). "#EC NOTEXT
ro_html->add( '<meta http-equiv="content-type" content="text/html; charset=utf-8">' ). "#EC NOTEXT
ro_html->add( '<meta http-equiv="X-UA-Compatible" content="IE=11,10,9,8" />' ). "#EC NOTEXT
ro_html->add( '<title>abapGit</title>' ). "#EC NOTEXT
ro_html->add( '<link rel="stylesheet" type="text/css" href="css/common.css">' ).
ro_html->add( '<meta http-equiv="content-type" content="text/html; charset=utf-8">' ). "#EC NOTEXT
ro_html->add( '<script type="text/javascript" src="js/common.js"></script>' ). "#EC NOTEXT
ro_html->add( '</head>' ). "#EC NOTEXT
ro_html->add( '<body>' ). "#EC NOTEXT
ENDMETHOD. "render html header
ro_html->add( lcl_gui_asset_manager=>get_webfont_link( ) ). " Web fonts
ro_html->add( '</head>' ). "#EC NOTEXT
ENDMETHOD. "html_head
METHOD title.
CREATE OBJECT ro_html.
ro_html->add( '<div id="header">' ). "#EC NOTEXT
ro_html->add( '<table width="100%"><tr>' ). "#EC NOTEXT
ro_html->add( '<table class="w100"><tr>' ). "#EC NOTEXT
ro_html->add( '<td class="logo">' ). "#EC NOTEXT
ro_html->add( |<a href="sapevent:{ gc_action-abapgit_home }">| ). "#EC NOTEXT
ro_html->add( '<img src="img/logo">' ). "#EC NOTEXT
ro_html->add( '</a>' ). "#EC NOTEXT
ro_html->add( '</td>' ). "#EC NOTEXT
ro_html->add( |<td class="logo">{
lcl_html=>a( iv_txt = '<img src="img/logo" alt="logo">'
iv_act = gc_action-abapgit_home )
}</td>| ). "#EC NOTEXT
ro_html->add( '<td class="headpad"><span class="page_title">' ). "#EC NOTEXT
ro_html->add( |&#x25BA; { iv_title }| ). "#EC NOTEXT
ro_html->add( '</span></td>' ). "#EC NOTEXT
ro_html->add( |<td class="headpad"><span class="page_title"> &#x25BA; {
ms_control-page_title
}</span></td>| ). "#EC NOTEXT
IF io_menu IS BOUND.
IF ms_control-page_menu IS BOUND.
ro_html->add( '<td class="headpad right">' ). "#EC NOTEXT
ro_html->add( io_menu->render( ) ).
ro_html->add( ms_control-page_menu->render( ) ).
ro_html->add( '</td>' ). "#EC NOTEXT
ENDIF.
@ -265,47 +114,74 @@ CLASS lcl_gui_page_super IMPLEMENTATION.
CREATE OBJECT ro_html.
ro_html->add( '<div id="footer">' ). "#EC NOTEXT
ro_html->add( '<img src="img/logo" >' ). "#EC NOTEXT
ro_html->add( '<table width="100%"><tr><td width="40%"></td><td>' ). "#EC NOTEXT
ro_html->add( |<span class="version">{ gc_abap_version }</span>| ). "#EC NOTEXT
ro_html->add( '</td><td id="debug-output" width="40%"></td></tr></table>' ). "#EC NOTEXT
ro_html->add( '<img src="img/logo" alt="logo">' ). "#EC NOTEXT
ro_html->add( '<table class="w100"><tr>' ). "#EC NOTEXT
ro_html->add( '<td class="w40"></td>' ). "#EC NOTEXT
ro_html->add( |<td><span class="version">{ gc_abap_version }</span></td>| ). "#EC NOTEXT
ro_html->add( '<td id="debug-output" class="w40"></td>' ). "#EC NOTEXT
ro_html->add( '</tr></table>' ). "#EC NOTEXT
ro_html->add( '</div>' ). "#EC NOTEXT
ENDMETHOD. "footer
METHOD redirect.
CREATE OBJECT ro_html.
ro_html->add( '<!DOCTYPE html>' ). "#EC NOTEXT
ro_html->add( '<html>' ). "#EC NOTEXT
ro_html->add( '<head>' ). "#EC NOTEXT
ro_html->add( |<meta http-equiv="refresh" content="0; url={
ms_control-redirect_url }">| ). "#EC NOTEXT
ro_html->add( '</head>'). "#EC NOTEXT
ro_html->add( '</html>'). "#EC NOTEXT
ENDMETHOD.
METHOD scripts.
ASSERT 1 = 1. " Dummy
ENDMETHOD. "scripts
METHOD lif_gui_page~on_event.
ev_state = gc_event_state-not_handled.
ENDMETHOD. "lif_gui_page~on_event
METHOD lif_gui_page~render.
DATA lo_script TYPE REF TO lcl_html.
" Redirect
IF ms_control-redirect_url IS NOT INITIAL.
ro_html = redirect( ).
RETURN.
ENDIF.
" Real page
CREATE OBJECT ro_html.
ro_html->add( '<!DOCTYPE html>' ). "#EC NOTEXT
ro_html->add( '<html>' ). "#EC NOTEXT
ro_html->add( html_head( ) ).
ro_html->add( '<body>' ). "#EC NOTEXT
ro_html->add( title( ) ).
ro_html->add( render_content( ) ).
ro_html->add( footer( ) ).
ro_html->add( '</body>' ). "#EC NOTEXT
IF io_include_script IS BOUND.
lo_script = scripts( ).
IF lo_script IS BOUND AND lo_script->mv_html IS NOT INITIAL.
ro_html->add( '<script type="text/javascript">' ).
ro_html->add( io_include_script ).
ro_html->add( lo_script ).
ro_html->add( 'debugOutput("js: OK");' ).
ro_html->add( '</script>' ).
ENDIF.
ro_html->add( '</html>'). "#EC NOTEXT
ENDMETHOD. "render html footer & logo
ENDMETHOD. " lif_gui_page~render.
METHOD render_error.
CREATE OBJECT ro_html.
ro_html->add( '<div class="dummydiv attention">' ).
ro_html->add( |Error: { ix_error->mv_text }| ).
ro_html->add( '</div>' ).
ENDMETHOD. "render_error
METHOD redirect.
CREATE OBJECT ro_html.
ro_html->add( '<!DOCTYPE html>' ). "#EC NOTEXT
ro_html->add( '<html><head>' ). "#EC NOTEXT
ro_html->add( |<meta http-equiv="refresh" content="0; url={ iv_url }">| ). "#EC NOTEXT
ro_html->add( '</head></html>'). "#EC NOTEXT
ENDMETHOD.
METHOD lif_gui_page~on_event.
ev_state = gc_event_state-not_handled.
ENDMETHOD. "lif_gui_page~on_event
ENDCLASS.
ENDCLASS. "lcl_gui_page

View File

@ -3,12 +3,14 @@
*&---------------------------------------------------------------------*
CLASS lcl_gui_page_background_run DEFINITION FINAL
INHERITING FROM lcl_gui_page_super.
INHERITING FROM lcl_gui_page.
PUBLIC SECTION.
METHODS:
lif_gui_page~on_event REDEFINITION,
lif_gui_page~render REDEFINITION.
METHODS constructor.
METHODS lif_gui_page~on_event REDEFINITION.
PROTECTED SECTION.
METHODS render_content REDEFINITION.
PRIVATE SECTION.
DATA: mt_text TYPE TABLE OF string.
@ -19,6 +21,11 @@ ENDCLASS.
CLASS lcl_gui_page_background_run IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
ms_control-page_title = 'BACKGROUND_RUN'.
ENDMETHOD. " constructor.
METHOD lif_gui_page~on_event.
RETURN.
ENDMETHOD.
@ -47,46 +54,44 @@ CLASS lcl_gui_page_background_run IMPLEMENTATION.
ENDMETHOD.
METHOD lif_gui_page~render.
METHOD render_content.
DATA: lv_text LIKE LINE OF mt_text.
run( ).
CREATE OBJECT ro_html.
ro_html->add( header( ) ).
ro_html->add( title( 'BACKGROUND_RUN' ) ).
ro_html->add( '<div id="toc">' ).
LOOP AT mt_text INTO lv_text.
ro_html->add( '<pre>' && lv_text && '</pre><br>' ).
ENDLOOP.
ro_html->add( '</div>' ).
ro_html->add( footer( ) ).
ENDMETHOD.
ENDMETHOD. "render_content
ENDCLASS.
CLASS lcl_gui_page_background DEFINITION FINAL
INHERITING FROM lcl_gui_page_super.
INHERITING FROM lcl_gui_page.
PUBLIC SECTION.
METHODS:
constructor
IMPORTING
iv_key TYPE lcl_persistence_repo=>ty_repo-key,
lif_gui_page~on_event REDEFINITION,
lif_gui_page~render REDEFINITION.
constructor IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key,
lif_gui_page~on_event REDEFINITION.
PROTECTED SECTION.
METHODS render_content REDEFINITION.
PRIVATE SECTION.
DATA:
mv_key TYPE lcl_persistence_repo=>ty_repo-key.
METHODS:
build_menu
RETURNING VALUE(ro_menu) TYPE REF TO lcl_html_toolbar,
render_data
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
RAISING lcx_exception.
ENDCLASS.
@ -94,10 +99,21 @@ ENDCLASS.
CLASS lcl_gui_page_background IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
mv_key = iv_key.
ms_control-page_title = 'BACKGROUND'.
ms_control-page_menu = build_menu( ).
ENDMETHOD.
METHOD build_menu.
CREATE OBJECT ro_menu.
ro_menu->add( iv_txt = 'Run background logic'
iv_act = gc_action-go_background_run ) ##NO_TEXT.
ENDMETHOD. "build_menu
METHOD lif_gui_page~on_event.
DATA ls_bg_task TYPE lcl_persistence_background=>ty_background.
@ -162,7 +178,7 @@ CLASS lcl_gui_page_background IMPLEMENTATION.
lv_afixed = ' checked' ##NO_TEXT.
ENDCASE.
ro_html->add( render_repo_top( lo_repo ) ).
ro_html->add( lcl_gui_chunk_lib=>render_repo_top( lo_repo ) ).
ro_html->add( '<br>' ).
ro_html->add( '<u>Method</u><br>' ) ##NO_TEXT.
@ -222,22 +238,12 @@ CLASS lcl_gui_page_background IMPLEMENTATION.
ENDMETHOD.
METHOD lif_gui_page~render.
METHOD render_content.
DATA lo_toolbar TYPE REF TO lcl_html_toolbar.
CREATE OBJECT lo_toolbar.
CREATE OBJECT ro_html.
lo_toolbar->add( iv_txt = 'Run background logic'
iv_act = gc_action-go_background_run ) ##NO_TEXT.
ro_html->add( header( ) ).
ro_html->add( title( iv_title = 'BACKGROUND' io_menu = lo_toolbar ) ).
ro_html->add( render_data( ) ).
ro_html->add( footer( ) ).
ENDMETHOD.
ENDMETHOD. "render_content
ENDCLASS.

View File

@ -302,15 +302,17 @@ ENDCLASS.
***********************
CLASS lcl_gui_page_branch_overview DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
CLASS lcl_gui_page_branch_overview DEFINITION FINAL INHERITING FROM lcl_gui_page.
PUBLIC SECTION.
METHODS:
constructor
IMPORTING io_repo TYPE REF TO lcl_repo_online
RAISING lcx_exception,
lif_gui_page~on_event REDEFINITION,
lif_gui_page~render REDEFINITION.
lif_gui_page~on_event REDEFINITION.
PROTECTED SECTION.
METHODS render_content REDEFINITION.
PRIVATE SECTION.
DATA: mo_repo TYPE REF TO lcl_repo_online,
@ -333,13 +335,13 @@ CLASS lcl_gui_page_branch_overview DEFINITION FINAL INHERITING FROM lcl_gui_page
refresh
RAISING lcx_exception,
body
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
RAISING lcx_exception,
form_select
IMPORTING iv_name TYPE string
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
RETURNING VALUE(ro_html) TYPE REF TO lcl_html,
render_merge
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
RAISING lcx_exception,
decode_merge
IMPORTING it_postdata TYPE cnht_post_data_tab
@ -360,6 +362,8 @@ CLASS lcl_gui_page_branch_overview IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
ms_control-page_title = 'BRANCH_OVERVIEW'.
ms_control-page_menu = build_menu( ).
mo_repo = io_repo.
refresh( ).
ENDMETHOD.
@ -416,7 +420,7 @@ CLASS lcl_gui_page_branch_overview IMPLEMENTATION.
CREATE OBJECT ro_html.
ro_html->add( render_repo_top(
ro_html->add( lcl_gui_chunk_lib=>render_repo_top(
io_repo = mo_repo
iv_show_package = abap_false
iv_show_branch = abap_false ) ).
@ -577,17 +581,14 @@ CLASS lcl_gui_page_branch_overview IMPLEMENTATION.
ENDMETHOD.
METHOD lif_gui_page~render.
METHOD render_content.
CREATE OBJECT ro_html.
ro_html->add( header( ) ).
ro_html->add( title( iv_title = 'BRANCH_OVERVIEW' io_menu = build_menu( ) ) ).
ro_html->add( '<div id="toc">' ).
ro_html->add( body( ) ).
ro_html->add( '</div>' ).
ro_html->add( footer( ) ).
ENDMETHOD.
ENDMETHOD. "render_content
ENDCLASS.

View File

@ -2,7 +2,7 @@
*& Include ZABAPGIT_PAGE_COMMIT
*&---------------------------------------------------------------------*
CLASS lcl_gui_page_commit DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
CLASS lcl_gui_page_commit DEFINITION FINAL INHERITING FROM lcl_gui_page.
PUBLIC SECTION.
@ -16,24 +16,26 @@ CLASS lcl_gui_page_commit DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
IMPORTING io_repo TYPE REF TO lcl_repo_online
io_stage TYPE REF TO lcl_stage
RAISING lcx_exception,
lif_gui_page~render REDEFINITION,
lif_gui_page~on_event REDEFINITION.
PROTECTED SECTION.
METHODS:
render_content REDEFINITION,
scripts REDEFINITION.
PRIVATE SECTION.
DATA: mo_repo TYPE REF TO lcl_repo_online,
mo_stage TYPE REF TO lcl_stage.
METHODS:
render_menu
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
RETURNING VALUE(ro_html) TYPE REF TO lcl_html,
render_stage
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
RAISING lcx_exception,
render_form
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
RAISING lcx_exception,
scripts
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
RAISING lcx_exception.
ENDCLASS.
@ -44,6 +46,8 @@ CLASS lcl_gui_page_commit IMPLEMENTATION.
mo_repo = io_repo.
mo_stage = io_stage.
ms_control-page_title = 'COMMIT'.
ENDMETHOD.
METHOD lif_gui_page~on_event.
@ -68,15 +72,12 @@ CLASS lcl_gui_page_commit IMPLEMENTATION.
ENDMETHOD.
METHOD lif_gui_page~render.
METHOD render_content.
CREATE OBJECT ro_html.
ro_html->add( header( ) ).
ro_html->add( title( 'COMMIT' ) ).
ro_html->add( '<div class="repo">' ).
ro_html->add( render_repo_top(
ro_html->add( lcl_gui_chunk_lib=>render_repo_top(
io_repo = mo_repo
iv_show_package = abap_false
iv_branch = mo_stage->get_branch_name( ) ) ).
@ -86,9 +87,7 @@ CLASS lcl_gui_page_commit IMPLEMENTATION.
ro_html->add( render_stage( ) ).
ro_html->add( '</div>' ).
ro_html->add( footer( io_include_script = scripts( ) ) ).
ENDMETHOD. "lif_gui_page~render
ENDMETHOD. "render_content
METHOD render_stage.
@ -201,7 +200,7 @@ CLASS lcl_gui_page_commit IMPLEMENTATION.
lo_toolbar->add( iv_act = 'submitFormById(''commit_form'');'
iv_txt = 'Commit'
iv_typ = gc_action_type-onclick
iv_opt = gc_html_opt-emphas ) ##NO_TEXT.
iv_opt = gc_html_opt-strong ) ##NO_TEXT.
lo_toolbar->add( iv_act = 'commit_cancel'
iv_txt = 'Cancel'

View File

@ -2,14 +2,15 @@
*& Include ZABAPGIT_PAGE_DB
*&---------------------------------------------------------------------*
CLASS lcl_gui_page_db_display DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
CLASS lcl_gui_page_db_display DEFINITION FINAL INHERITING FROM lcl_gui_page.
PUBLIC SECTION.
METHODS lif_gui_page~render REDEFINITION.
METHODS: constructor
IMPORTING is_key TYPE lcl_persistence_db=>ty_content.
PROTECTED SECTION.
METHODS render_content REDEFINITION.
PRIVATE SECTION.
DATA: ms_key TYPE lcl_persistence_db=>ty_content.
@ -20,9 +21,10 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
ms_key = is_key.
ms_control-page_title = 'CONFIG DISPLAY'.
ENDMETHOD.
METHOD lif_gui_page~render.
METHOD render_content.
DATA: lv_data TYPE lcl_persistence_db=>ty_content-data_str,
ls_action TYPE lcl_persistence_db=>ty_content,
@ -44,8 +46,6 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION.
format = cl_abap_format=>e_html_attr ).
CREATE OBJECT ro_html.
ro_html->add( header( ) ).
ro_html->add( title( 'CONFIG DISPLAY' ) ).
ro_html->add( '<div class="db_entry">' ).
ro_html->add( '<table class="toolbar"><tr><td>' ).
@ -56,26 +56,25 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION.
| <td>{ ms_key-value }</td></tr></table>| ).
ro_html->add( '</td><td class="right">' ).
ro_html->add_anchor( iv_txt = 'Edit' iv_act = |{ gc_action-db_edit }?{ lv_action }| ).
ro_html->add_a( iv_txt = 'Edit' iv_act = |{ gc_action-db_edit }?{ lv_action }| ).
ro_html->add( '</td></tr></table>' ).
ro_html->add( |<pre>{ lv_data }</pre>| ).
ro_html->add( '</div>' ).
ro_html->add( footer( ) ).
ENDMETHOD.
ENDMETHOD. "render_content
ENDCLASS.
CLASS lcl_gui_page_db_edit DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
CLASS lcl_gui_page_db_edit DEFINITION FINAL INHERITING FROM lcl_gui_page.
PUBLIC SECTION.
METHODS lif_gui_page~render REDEFINITION.
METHODS: constructor
IMPORTING is_key TYPE lcl_persistence_db=>ty_content.
PROTECTED SECTION.
METHODS render_content REDEFINITION.
PRIVATE SECTION.
DATA: ms_key TYPE lcl_persistence_db=>ty_content.
@ -86,9 +85,10 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
ms_key = is_key.
ms_control-page_title = 'CONFIG EDIT'.
ENDMETHOD.
METHOD lif_gui_page~render.
METHOD render_content.
DATA: lv_data TYPE lcl_persistence_db=>ty_content-data_str,
lo_toolbar TYPE REF TO lcl_html_toolbar.
@ -112,9 +112,6 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION.
CREATE OBJECT ro_html.
CREATE OBJECT lo_toolbar.
ro_html->add( header( ) ).
ro_html->add( title( 'CONFIG EDIT' ) ).
ro_html->add( '<div class="db_entry">' ).
" Banners
@ -135,7 +132,7 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION.
lo_toolbar->add( iv_act = 'submitFormById(''db_form'');'
iv_txt = 'Save'
iv_typ = gc_action_type-onclick
iv_opt = gc_html_opt-emphas ) ##NO_TEXT.
iv_opt = gc_html_opt-strong ) ##NO_TEXT.
ro_html->add( '<div class="paddings">' ).
ro_html->add( lo_toolbar->render( ) ).
@ -143,16 +140,17 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION.
ro_html->add( '</div>' ). "db_entry
ro_html->add( footer( ) ).
ENDMETHOD.
ENDMETHOD. "render_content
ENDCLASS.
CLASS lcl_gui_page_db DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
CLASS lcl_gui_page_db DEFINITION FINAL INHERITING FROM lcl_gui_page.
PUBLIC SECTION.
METHODS lif_gui_page~render REDEFINITION.
METHODS constructor.
PROTECTED SECTION.
METHODS render_content REDEFINITION.
PRIVATE SECTION.
METHODS explain_content
@ -160,12 +158,16 @@ CLASS lcl_gui_page_db DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
RETURNING VALUE(rv_text) TYPE string
RAISING lcx_exception.
ENDCLASS.
CLASS lcl_gui_page_db IMPLEMENTATION.
METHOD lif_gui_page~render.
METHOD constructor.
super->constructor( ).
ms_control-page_title = 'DATABASE PERSISTENCY'.
ENDMETHOD. " constructor.
METHOD render_content.
DATA: lt_data TYPE lcl_persistence_db=>tt_content,
lv_action TYPE string,
@ -179,9 +181,6 @@ CLASS lcl_gui_page_db IMPLEMENTATION.
CREATE OBJECT ro_html.
ro_html->add( header( ) ).
ro_html->add( title( 'DATABASE PERSISTENCY' ) ).
ro_html->add( '<div class="db_list">' ).
ro_html->add( '<table class="db_tab">' ).
@ -220,9 +219,7 @@ CLASS lcl_gui_page_db IMPLEMENTATION.
ro_html->add( '</table>' ).
ro_html->add( '</div>' ).
ro_html->add( footer( ) ).
ENDMETHOD. "lif_gui_page~render
ENDMETHOD. "render_content
METHOD explain_content.
DATA: lv_result TYPE match_result,
@ -241,9 +238,10 @@ CLASS lcl_gui_page_db IMPLEMENTATION.
FIND FIRST OCCURRENCE OF REGEX '<OFFLINE/>'
IN is_data-data_str IGNORING CASE MATCH COUNT lv_cnt.
IF lv_cnt > 0.
rv_text = |<b>On-line</b>, Name: <b>{ lcl_url=>name( rv_text ) }</b>|.
rv_text = |<strong>On-line</strong>, Name: <strong>{
lcl_url=>name( rv_text ) }</strong>|.
ELSE.
rv_text = |Off-line, Name: <b>{ rv_text }</b>|.
rv_text = |Off-line, Name: <strong>{ rv_text }</strong>|.
ENDIF.
WHEN 'BACKGROUND'.

View File

@ -2,37 +2,40 @@
*& Include ZABAPGIT_PAGE_DEBUG
*&---------------------------------------------------------------------*
CLASS lcl_gui_page_debuginfo DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
CLASS lcl_gui_page_debuginfo DEFINITION FINAL INHERITING FROM lcl_gui_page.
PUBLIC SECTION.
METHODS lif_gui_page~render REDEFINITION.
METHODS constructor.
PROTECTED SECTION.
METHODS:
render_content REDEFINITION,
scripts REDEFINITION.
PRIVATE SECTION.
METHODS scripts
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
METHODS render_debug_info
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
METHODS render_supported_object_types
RETURNING VALUE(rv_html) TYPE string.
RETURNING VALUE(rv_html) TYPE string.
ENDCLASS. "lcl_gui_page_debuginfo
CLASS lcl_gui_page_debuginfo IMPLEMENTATION.
METHOD lif_gui_page~render.
METHOD constructor.
super->constructor( ).
ms_control-page_title = 'DEBUG INFO'.
ENDMETHOD. " constructor.
METHOD render_content.
CREATE OBJECT ro_html.
ro_html->add( header( ) ).
ro_html->add( title( 'DEBUG INFO' ) ).
ro_html->add( '<div id="debug_info" class="debug_container">' ).
ro_html->add( render_debug_info( ) ).
ro_html->add( render_supported_object_types( ) ).
ro_html->add( '</div>' ).
ro_html->add( footer( io_include_script = scripts( ) ) ).
ENDMETHOD.
ENDMETHOD. "render_content
METHOD render_debug_info.
@ -69,7 +72,7 @@ CLASS lcl_gui_page_debuginfo IMPLEMENTATION.
TABLES
wt_object_text = lt_objects
EXCEPTIONS
OTHERS = 1.
OTHERS = 1 ##FM_SUBRC_OK.
LOOP AT lt_objects ASSIGNING <object> WHERE pgmid = 'R3TR'.
ls_item-obj_type = <object>-object.

View File

@ -2,7 +2,7 @@
*& Include ZABAPGIT_PAGE_DIFF
*&---------------------------------------------------------------------*
CLASS lcl_gui_page_diff DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
CLASS lcl_gui_page_diff DEFINITION FINAL INHERITING FROM lcl_gui_page.
PUBLIC SECTION.
@ -28,26 +28,27 @@ CLASS lcl_gui_page_diff DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
is_object TYPE ty_item OPTIONAL
RAISING lcx_exception.
METHODS lif_gui_page~render REDEFINITION.
PROTECTED SECTION.
METHODS render_content REDEFINITION.
PRIVATE SECTION.
DATA: mt_diff_files TYPE tt_file_diff.
METHODS render_diff
IMPORTING is_diff TYPE ty_file_diff
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
METHODS render_diff_head
IMPORTING is_diff TYPE ty_file_diff
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
METHODS render_table_head
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
METHODS render_lines
IMPORTING is_diff TYPE ty_file_diff
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
METHODS render_beacon
IMPORTING is_diff_line TYPE lcl_diff=>ty_diff
is_diff TYPE ty_file_diff
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
METHODS get_line_hl
IMPORTING iv_mod TYPE char1
iv_result TYPE lcl_diff=>ty_diff-result
@ -73,6 +74,7 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
FIELD-SYMBOLS: <ls_status> LIKE LINE OF lt_status.
super->constructor( ).
ms_control-page_title = 'DIFF'.
ASSERT is_file IS INITIAL OR is_object IS INITIAL. " just one passed
@ -93,10 +95,9 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
ELSEIF is_object IS NOT INITIAL. " Diff for whole object
LOOP AT lt_status ASSIGNING <ls_status>
WHERE obj_type = is_object-obj_type
AND obj_name = is_object-obj_name
AND match IS INITIAL.
WHERE obj_type = is_object-obj_type
AND obj_name = is_object-obj_name
AND match IS INITIAL.
append_diff( it_remote = lt_remote
it_local = lt_local
is_status = <ls_status> ).
@ -175,7 +176,7 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
ENDMETHOD. "append_diff
METHOD render_diff_head.
DATA: lo_html TYPE REF TO lcl_html_helper,
DATA: lo_html TYPE REF TO lcl_html,
ls_stats TYPE lcl_diff=>ty_count.
CREATE OBJECT lo_html.
@ -192,7 +193,8 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
lo_html->add( |<span class="diff_banner diff_del">- { ls_stats-delete }</span>| ).
lo_html->add( |<span class="diff_banner diff_upd">~ { ls_stats-update }</span>| ).
lo_html->add( |<span class="diff_name">{ is_diff-filename }</span>| ). "#EC NOTEXT
lo_html->add( render_item_state( iv1 = is_diff-lstate iv2 = is_diff-rstate ) ).
lo_html->add( lcl_gui_chunk_lib=>render_item_state( iv1 = is_diff-lstate
iv2 = is_diff-rstate ) ).
lo_html->add( '</div>' ). "#EC NOTEXT
ro_html = lo_html.
@ -222,7 +224,7 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
" Content
ro_html->add( '<div class="diff_content">' ). "#EC NOTEXT
ro_html->add( '<table width="100%" class="diff_tab">' ). "#EC NOTEXT
ro_html->add( '<table class="diff_tab">' ). "#EC NOTEXT
ro_html->add( render_table_head( ) ).
ro_html->add( render_lines( is_diff ) ).
ro_html->add( '</table>' ). "#EC NOTEXT
@ -343,15 +345,12 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
ENDMETHOD. " get_line_hl.
METHOD lif_gui_page~render.
METHOD render_content.
DATA ls_diff_file LIKE LINE OF mt_diff_files.
CREATE OBJECT ro_html.
ro_html->add( header( ) ).
ro_html->add( title( 'DIFF' ) ).
LOOP AT mt_diff_files INTO ls_diff_file.
lcl_progress=>show( iv_key = 'Diff'
iv_current = sy-tabix
@ -361,8 +360,6 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
ro_html->add( render_diff( ls_diff_file ) ).
ENDLOOP.
ro_html->add( footer( ) ).
ENDMETHOD.
ENDMETHOD. "render_content
ENDCLASS. "lcl_gui_page_diff

View File

@ -2,19 +2,28 @@
*& Include ZABAPGIT_PAGE_EXPLORE
*&---------------------------------------------------------------------*
CLASS lcl_gui_page_explore DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
CLASS lcl_gui_page_explore DEFINITION FINAL INHERITING FROM lcl_gui_page.
PUBLIC SECTION.
METHODS lif_gui_page~render REDEFINITION.
CONSTANTS c_explore_url TYPE string
VALUE 'http://larshp.github.io/abapGit/explore.html'.
METHODS constructor.
PROTECTED SECTION.
METHODS render_content REDEFINITION.
ENDCLASS. "lcl_gui_page_explore DEFINITION
CLASS lcl_gui_page_explore IMPLEMENTATION.
METHOD lif_gui_page~render.
METHOD constructor.
super->constructor( ).
ms_control-redirect_url = c_explore_url.
ENDMETHOD. "constructor
CREATE OBJECT ro_html.
ro_html->add( redirect( 'http://larshp.github.io/abapGit/explore.html' ) ).
ENDMETHOD.
METHOD render_content.
ASSERT 1 = 1. " Dummy
ENDMETHOD. "render_content.
ENDCLASS. "lcl_gui_page_explore IMPLEMENTATION

View File

@ -2,15 +2,17 @@
*& Include ZABAPGIT_PAGE_MAIN
*&---------------------------------------------------------------------*
CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page.
PUBLIC SECTION.
METHODS:
constructor
RAISING lcx_exception,
lif_gui_page~render REDEFINITION,
lif_gui_page~on_event REDEFINITION.
PROTECTED SECTION.
METHODS render_content REDEFINITION.
PRIVATE SECTION.
CONSTANTS: BEGIN OF c_actions,
show TYPE string VALUE 'show' ##NO_TEXT,
@ -27,16 +29,16 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
RAISING lcx_exception,
render_toc
IMPORTING it_repo_list TYPE lcl_repo_srv=>ty_repo_tt
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
RAISING lcx_exception,
build_main_menu
RETURNING VALUE(ro_menu) TYPE REF TO lcl_html_toolbar,
render_explore
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
RAISING lcx_exception,
render_repo
IMPORTING io_repo TYPE REF TO lcl_repo
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
RAISING lcx_exception.
ENDCLASS.
@ -46,6 +48,8 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
ms_control-page_title = 'HOME'.
ms_control-page_menu = build_main_menu( ).
ENDMETHOD. " constructor
METHOD lif_gui_page~on_event.
@ -112,7 +116,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
* RENDERING
**********************************************************************
METHOD lif_gui_page~render.
METHOD render_content.
DATA: lt_repos TYPE lcl_repo_srv=>ty_repo_tt,
lx_error TYPE REF TO lcx_exception,
@ -123,33 +127,26 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
CREATE OBJECT ro_html.
ro_html->add( header( ) ).
ro_html->add( title( iv_title = 'HOME'
io_menu = build_main_menu( ) ) ).
TRY.
lt_repos = lcl_app=>repo_srv( )->list( ).
CATCH lcx_exception INTO lx_error.
ro_html->add( render_error( lx_error ) ).
ro_html->add( lcl_gui_chunk_lib=>render_error( ix_error = lx_error ) ).
RETURN.
ENDTRY.
ro_html->add( render_toc( lt_repos ) ).
IF lines( lt_repos ) = 0 AND lx_error IS INITIAL.
ro_html->add( render_explore( ) ).
ELSEIF mv_show IS INITIAL.
CREATE OBJECT lo_tutorial.
ro_html->add( lo_tutorial->render( ) ).
ELSE.
IF mv_show IS INITIAL.
CREATE OBJECT lo_tutorial.
ro_html->add( lo_tutorial->lif_gui_page~render( ) ).
ELSE.
lo_repo = lcl_app=>repo_srv( )->get( mv_show ).
ro_html->add( render_repo( lo_repo ) ).
ENDIF.
lo_repo = lcl_app=>repo_srv( )->get( mv_show ).
ro_html->add( render_repo( lo_repo ) ).
ENDIF.
ro_html->add( footer( ) ).
ENDMETHOD. "render
ENDMETHOD. "render_content
METHOD retrieve_active_repo.
@ -237,7 +234,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
LOOP AT it_repo_list INTO lo_repo.
lv_key = lo_repo->get_key( ).
IF lv_key = mv_show.
lv_opt = gc_html_opt-emphas.
lv_opt = gc_html_opt-strong.
ELSE.
CLEAR lv_opt.
ENDIF.
@ -258,9 +255,9 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
ENDIF.
IF lo_repo->is_offline( ) = abap_true.
lv_icon = '<img src="img/repo_offline">'.
lv_icon = 'plug/darkgrey'.
ELSE.
lv_icon = '<img src="img/repo_online">'.
lv_icon = 'cloud-upload/blue'.
ENDIF.
lo_allbar->add( iv_txt = lv_repo_title
@ -281,22 +278,24 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
**********************************************************************
ro_html->add( '<table width="100%"><tr>' ).
ro_html->add( '<td class="pad-sides"><img src="img/star"></td>' ).
ro_html->add( '<table class="w100"><tr>' ).
ro_html->add( |<td class="pad-sides">{
lcl_html=>icon( iv_name = 'star/blue' iv_alt = 'Favs' iv_hint = 'Favorites' )
}</td>| ).
ro_html->add( '<td class="pad-sides" width="100%">' ). " Maximize width
ro_html->add( '<td class="pad-sides w100">' ). " Maximize width
IF lo_favbar->count( ) > 0.
ro_html->add( lo_favbar->render( iv_sort = abap_true ) ).
ELSE.
ro_html->add( `<span class="grey">No favorites so far. For more info please check ` ).
ro_html->add_anchor( iv_txt = 'tutorial' iv_act = gc_action-go_tutorial ).
ro_html->add( '</span>' ).
ro_html->add( |<span class="grey">No favorites so far. For more info please check {
lcl_html=>a( iv_txt = 'tutorial' iv_act = gc_action-go_tutorial )
}</span>| ).
ENDIF.
ro_html->add( '</td>' ).
ro_html->add( '<td class="right">' ).
ro_html->add( lo_allbar->render(
iv_as_droplist_with_label = '<img class="pad4px" src="img/burger">'
iv_as_droplist_with_label = lcl_html=>icon( iv_name = 'three-bars/blue' iv_class = 'pad4px' )
iv_sort = abap_true
iv_with_icons = abap_true
iv_add_minizone = abap_true ) ).
@ -332,8 +331,9 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
CREATE OBJECT ro_html.
ro_html->add( |<div class="repo" id="repo{ io_repo->get_key( ) }">| ).
ro_html->add( render_repo_top( io_repo = io_repo iv_interactive_branch = abap_true ) ).
ro_html->add( mo_repo_content->lif_gui_page~render( ) ).
ro_html->add( lcl_gui_chunk_lib=>render_repo_top( io_repo = io_repo
iv_interactive_branch = abap_true ) ).
ro_html->add( mo_repo_content->render( ) ).
ro_html->add( '</div>' ).
ENDMETHOD. "render_repo

View File

@ -315,7 +315,7 @@ ENDCLASS.
*********************************
CLASS lcl_gui_page_merge DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
CLASS lcl_gui_page_merge DEFINITION FINAL INHERITING FROM lcl_gui_page.
PUBLIC SECTION.
METHODS:
@ -324,8 +324,10 @@ CLASS lcl_gui_page_merge DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
iv_source TYPE string
iv_target TYPE string
RAISING lcx_exception,
lif_gui_page~on_event REDEFINITION,
lif_gui_page~render REDEFINITION.
lif_gui_page~on_event REDEFINITION.
PROTECTED SECTION.
METHODS render_content REDEFINITION.
PRIVATE SECTION.
DATA: mo_repo TYPE REF TO lcl_repo_online,
@ -346,6 +348,8 @@ CLASS lcl_gui_page_merge IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
ms_control-page_title = 'MERGE'.
ms_control-page_menu = build_menu( ).
mo_repo = io_repo.
@ -381,7 +385,7 @@ CLASS lcl_gui_page_merge IMPLEMENTATION.
ENDMETHOD.
METHOD lif_gui_page~render.
METHOD render_content.
DEFINE _show_file.
READ TABLE &1 ASSIGNING <ls_show>
@ -410,10 +414,8 @@ CLASS lcl_gui_page_merge IMPLEMENTATION.
CREATE OBJECT ro_html.
ro_html->add( header( ) ).
ro_html->add( title( iv_title = 'MERGE' io_menu = build_menu( ) ) ).
ro_html->add( '<div id="toc">' ).
ro_html->add( render_repo_top(
ro_html->add( lcl_gui_chunk_lib=>render_repo_top(
io_repo = mo_repo
iv_show_package = abap_false
iv_show_branch = abap_false ) ).
@ -473,8 +475,7 @@ CLASS lcl_gui_page_merge IMPLEMENTATION.
ro_html->add( ms_merge-conflict ).
ro_html->add( '</b>' ).
ro_html->add( '</div>' ).
ro_html->add( footer( ) ).
ENDMETHOD.
ENDMETHOD. "render_content
ENDCLASS.

View File

@ -2,17 +2,20 @@
*& Include ZABAPGIT_PAGE_SETTINGS
*&---------------------------------------------------------------------*
CLASS lcl_gui_page_settings DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
CLASS lcl_gui_page_settings DEFINITION FINAL INHERITING FROM lcl_gui_page.
PUBLIC SECTION.
METHODS lif_gui_page~render REDEFINITION.
METHODS lif_gui_page~on_event REDEFINITION.
CONSTANTS:
BEGIN OF c_action,
save_settings TYPE string VALUE 'save_settings',
END OF c_action.
METHODS constructor.
METHODS lif_gui_page~on_event REDEFINITION.
PROTECTED SECTION.
METHODS render_content REDEFINITION.
PRIVATE SECTION.
DATA:
@ -20,13 +23,13 @@ CLASS lcl_gui_page_settings DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
mv_error TYPE abap_bool.
METHODS render_proxy
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
METHODS render_development_internals
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
METHODS render_form_begin
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
METHODS render_form_end
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
METHODS build_settings
IMPORTING
it_post_fields TYPE tihttpnvp.
@ -45,24 +48,24 @@ ENDCLASS.
CLASS lcl_gui_page_settings IMPLEMENTATION.
METHOD lif_gui_page~render.
METHOD constructor.
super->constructor( ).
ms_control-page_title = 'SETTINGS'.
ENDMETHOD. " constructor.
METHOD render_content.
CREATE OBJECT ro_html.
read_settings( ).
ro_html->add( header( ) ).
ro_html->add( title( 'Settings' ) ).
ro_html->add( render_form_begin( ) ).
ro_html->add( render_proxy( ) ).
ro_html->add( |<hr>| ).
ro_html->add( render_development_internals( ) ).
ro_html->add( render_form_end( ) ).
ro_html->add( footer( ) ).
ENDMETHOD.
ENDMETHOD. "render_content
METHOD render_proxy.

View File

@ -2,7 +2,7 @@
*& Include ZABAPGIT_PAGE_STAGE
*&---------------------------------------------------------------------*
CLASS lcl_gui_page_stage DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
CLASS lcl_gui_page_stage DEFINITION FINAL INHERITING FROM lcl_gui_page.
PUBLIC SECTION.
CONSTANTS: BEGIN OF c_action,
@ -14,9 +14,13 @@ CLASS lcl_gui_page_stage DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
constructor
IMPORTING io_repo TYPE REF TO lcl_repo_online
RAISING lcx_exception,
lif_gui_page~render REDEFINITION,
lif_gui_page~on_event REDEFINITION.
PROTECTED SECTION.
METHODS:
render_content REDEFINITION,
scripts REDEFINITION.
PRIVATE SECTION.
DATA: mo_repo TYPE REF TO lcl_repo_online,
ms_files TYPE ty_stage_files,
@ -25,15 +29,13 @@ CLASS lcl_gui_page_stage DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
METHODS:
render_list
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
RETURNING VALUE(ro_html) TYPE REF TO lcl_html,
render_file
IMPORTING is_file TYPE ty_file
iv_context TYPE string
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
RETURNING VALUE(ro_html) TYPE REF TO lcl_html,
render_menu
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
scripts
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
METHODS process_stage_list
IMPORTING it_postdata TYPE cnht_post_data_tab
@ -46,6 +48,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
ms_control-page_title = 'STAGE'.
mo_repo = io_repo.
ms_files = lcl_stage_logic=>get( mo_repo ).
@ -150,8 +153,8 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
ro_html->add('<thead><tr>').
ro_html->add('<th></th><th colspan="2">LOCAL</th><th>' ).
IF lines( ms_files-local ) > 1.
ro_html->add_anchor( iv_txt = |{ lines( ms_files-local ) } diffs|
iv_act = |{ gc_action-go_diff }?key={ mo_repo->get_key( ) }| ).
ro_html->add_a( iv_txt = |{ lines( ms_files-local ) } diffs|
iv_act = |{ gc_action-go_diff }?key={ mo_repo->get_key( ) }| ).
ENDIF.
ro_html->add('</th></tr></thead>').
ro_html->add('<tbody class="local">').
@ -200,7 +203,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
ig_file = is_file ).
ro_html->add( '<td class="cmd"><a>add</a></td>' ).
ro_html->add( '<td>' ).
ro_html->add_anchor( iv_txt = 'diff' iv_act = |{ gc_action-go_diff }?{ lv_param }| ).
ro_html->add_a( iv_txt = 'diff' iv_act = |{ gc_action-go_diff }?{ lv_param }| ).
ro_html->add( '</td>' ).
WHEN 'remote'.
ro_html->add( '<td class="cmd"><a>ignore</a><a>remove</a></td>' ).
@ -211,38 +214,33 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
ENDMETHOD. "render_file
METHOD lif_gui_page~render.
METHOD render_content.
CREATE OBJECT ro_html.
ro_html->add( header( ) ).
ro_html->add( title( 'STAGE' ) ).
ro_html->add( '<div class="repo">' ).
ro_html->add( render_repo_top( mo_repo ) ).
ro_html->add( lcl_gui_chunk_lib=>render_repo_top( mo_repo ) ).
ro_html->add( render_menu( ) ).
ro_html->add( render_list( ) ).
ro_html->add( '</div>' ).
ro_html->add( footer( scripts( ) ) ).
ENDMETHOD. "lif_gui_page~render
ENDMETHOD. "render_content
METHOD render_menu.
CREATE OBJECT ro_html.
ro_html->add( '<div class="paddings">' ).
ro_html->add_anchor( iv_act = 'gHelper.submit();'
iv_typ = gc_action_type-onclick
iv_id = 'act_commit'
iv_style = 'display: none'
iv_txt = 'Commit'
iv_opt = gc_html_opt-emphas ) ##NO_TEXT.
ro_html->add_a( iv_act = 'gHelper.submit();'
iv_typ = gc_action_type-onclick
iv_id = 'act_commit'
iv_style = 'display: none'
iv_txt = 'Commit'
iv_opt = gc_html_opt-strong ) ##NO_TEXT.
IF lines( ms_files-local ) > 0.
ro_html->add_anchor( iv_act = |{ c_action-stage_all }|
iv_id = 'act_commit_all'
iv_txt = 'Add all and commit') ##NO_TEXT.
ro_html->add_a( iv_act = |{ c_action-stage_all }|
iv_id = 'act_commit_all'
iv_txt = 'Add all and commit') ##NO_TEXT.
ENDIF.
ro_html->add( '</div>' ).

View File

@ -1432,14 +1432,12 @@ CLASS lcl_settings DEFINITION FINAL.
METHODS
get_run_critical_tests
RETURNING VALUE(rv_run) TYPE abap_bool.
PROTECTED SECTION.
PRIVATE SECTION.
DATA mv_proxy_url TYPE string.
DATA mv_proxy_port TYPE string.
DATA mv_run_critical_tests TYPE abap_bool.
ENDCLASS.
CLASS lcl_settings IMPLEMENTATION.
@ -1484,10 +1482,6 @@ CLASS lcl_persistence_settings DEFINITION FINAL.
RETURNING
VALUE(ro_settings) TYPE REF TO lcl_settings.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS lcl_persistence_settings IMPLEMENTATION.
@ -1520,8 +1514,7 @@ CLASS lcl_persistence_settings IMPLEMENTATION.
ro_settings->set_proxy_url(
lcl_app=>db( )->read(
iv_type = 'SETTINGS'
iv_value = 'PROXY_URL'
) ).
iv_value = 'PROXY_URL' ) ).
CATCH lcx_not_found.
ro_settings->set_proxy_url( '' ).
ENDTRY.
@ -1529,8 +1522,7 @@ CLASS lcl_persistence_settings IMPLEMENTATION.
ro_settings->set_proxy_port(
lcl_app=>db( )->read(
iv_type = 'SETTINGS'
iv_value = 'PROXY_PORT'
) ).
iv_value = 'PROXY_PORT' ) ).
CATCH lcx_not_found.
ro_settings->set_proxy_port( '' ).
ENDTRY.

View File

@ -549,8 +549,9 @@ CLASS lcl_repo IMPLEMENTATION.
WITH KEY item = ls_item. " type+name+package key
" There is something in cache and the object is unchanged
IF sy-subrc = 0
AND abap_false = lcl_objects=>has_changed_since( is_item = ls_item
iv_timestamp = mv_last_serialization ).
AND abap_false = lcl_objects=>has_changed_since(
is_item = ls_item
iv_timestamp = mv_last_serialization ).
LOOP AT lt_cache ASSIGNING <ls_cache> WHERE item = ls_item.
APPEND <ls_cache> TO rt_files.
ENDLOOP.

View File

@ -117,7 +117,8 @@ CLASS lcl_sap_package IMPLEMENTATION.
SORT lt_res_sort BY obj_type ASCENDING obj_name ASCENDING.
LOOP AT it_results ASSIGNING <ls_res1> WHERE NOT obj_type IS INITIAL.
IF NOT ( <ls_res1>-obj_type = ls_item-obj_type AND <ls_res1>-obj_name = ls_item-obj_name ).
IF NOT ( <ls_res1>-obj_type = ls_item-obj_type
AND <ls_res1>-obj_name = ls_item-obj_name ).
APPEND INITIAL LINE TO lt_item_idx ASSIGNING <ls_res2>.
<ls_res2>-obj_type = <ls_res1>-obj_type.
<ls_res2>-obj_name = <ls_res1>-obj_name.

View File

@ -5,12 +5,18 @@
CLASS lcl_services_abapgit DEFINITION FINAL.
PUBLIC SECTION.
CONSTANTS c_abapgit_homepage TYPE string VALUE 'http://www.abapgit.org' ##NO_TEXT.
CONSTANTS c_abapgit_wikipage TYPE string VALUE 'https://github.com/larshp/abapGit/wiki'.
CONSTANTS c_package_abapgit TYPE devclass VALUE '$ABAPGIT'.
CONSTANTS c_package_plugins TYPE devclass VALUE '$ABAPGIT_PLUGINS'.
CONSTANTS c_abapgit_url TYPE string VALUE 'https://github.com/larshp/abapGit.git'.
CONSTANTS c_plugins_url TYPE string VALUE 'https://github.com/larshp/abapGit-plugins.git'.
CONSTANTS c_abapgit_homepage TYPE string
VALUE 'http://www.abapgit.org' ##NO_TEXT.
CONSTANTS c_abapgit_wikipage TYPE string
VALUE 'https://github.com/larshp/abapGit/wiki'.
CONSTANTS c_package_abapgit TYPE devclass
VALUE '$ABAPGIT'.
CONSTANTS c_package_plugins TYPE devclass
VALUE '$ABAPGIT_PLUGINS'.
CONSTANTS c_abapgit_url TYPE string
VALUE 'https://github.com/larshp/abapGit.git'.
CONSTANTS c_plugins_url TYPE string
VALUE 'https://github.com/larshp/abapGit-plugins.git'.
CLASS-METHODS open_abapgit_homepage
RAISING lcx_exception.

View File

@ -32,8 +32,7 @@ CLASS lcl_services_db IMPLEMENTATION.
text_button_2 = 'Cancel'
icon_button_2 = 'ICON_CANCEL'
default_button = '2'
display_cancel_button = abap_false
). "#EC NOTEXT
display_cancel_button = abap_false ). "#EC NOTEXT
IF lv_answer = '2'.
RAISE EXCEPTION TYPE lcx_cancel.

View File

@ -34,9 +34,9 @@ CLASS lcl_services_git DEFINITION FINAL.
RAISING lcx_exception lcx_cancel.
CLASS-METHODS commit
IMPORTING io_repo TYPE REF TO lcl_repo_online
is_commit TYPE ty_commit_fields
io_stage TYPE REF TO lcl_stage
IMPORTING io_repo TYPE REF TO lcl_repo_online
is_commit TYPE ty_commit_fields
io_stage TYPE REF TO lcl_stage
RAISING lcx_exception lcx_cancel.
ENDCLASS. " lcl_services_git
@ -63,8 +63,7 @@ CLASS lcl_services_git IMPLEMENTATION.
text_button_2 = 'Cancel'
icon_button_2 = 'ICON_CANCEL'
default_button = '2'
display_cancel_button = abap_false
). "#EC NOTEXT
display_cancel_button = abap_false ). "#EC NOTEXT
IF lv_answer = '2'.
RAISE EXCEPTION TYPE lcx_cancel.
@ -124,7 +123,7 @@ CLASS lcl_services_git IMPLEMENTATION.
METHOD switch_branch.
DATA: lo_repo TYPE REF TO lcl_repo_online,
DATA: lo_repo TYPE REF TO lcl_repo_online,
ls_branch TYPE lcl_git_branch_list=>ty_git_branch.

View File

@ -21,7 +21,7 @@ CLASS lcl_services_repo DEFINITION FINAL.
RAISING lcx_exception lcx_cancel.
CLASS-METHODS new_offline
RAISING lcx_exception lcx_cancel.
RAISING lcx_exception lcx_cancel.
CLASS-METHODS remote_attach
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
@ -53,7 +53,7 @@ CLASS lcl_services_repo IMPLEMENTATION.
METHOD clone.
DATA: lo_repo TYPE REF TO lcl_repo_online,
DATA: lo_repo TYPE REF TO lcl_repo_online,
ls_popup TYPE lcl_popups=>ty_popup.
@ -105,8 +105,7 @@ CLASS lcl_services_repo IMPLEMENTATION.
text_button_2 = 'Cancel'
icon_button_2 = 'ICON_CANCEL'
default_button = '2'
display_cancel_button = abap_false
). "#EC NOTEXT
display_cancel_button = abap_false ). "#EC NOTEXT
IF lv_answer = '2'.
RAISE EXCEPTION TYPE lcx_cancel.
@ -149,8 +148,7 @@ CLASS lcl_services_repo IMPLEMENTATION.
text_button_2 = 'Cancel'
icon_button_2 = 'ICON_CANCEL'
default_button = '2'
display_cancel_button = abap_false
). "#EC NOTEXT
display_cancel_button = abap_false ). "#EC NOTEXT
IF lv_answer = '2'.
RAISE EXCEPTION TYPE lcx_cancel.
@ -199,8 +197,7 @@ CLASS lcl_services_repo IMPLEMENTATION.
text_button_2 = 'Cancel'
icon_button_2 = 'ICON_CANCEL'
default_button = '2'
display_cancel_button = abap_false
). "#EC NOTEXT
display_cancel_button = abap_false ). "#EC NOTEXT
IF lv_answer = '2'.
RAISE EXCEPTION TYPE lcx_cancel.
@ -215,8 +212,8 @@ CLASS lcl_services_repo IMPLEMENTATION.
METHOD remote_attach.
DATA: ls_popup TYPE lcl_popups=>ty_popup,
lo_repo TYPE REF TO lcl_repo_online.
DATA: ls_popup TYPE lcl_popups=>ty_popup,
lo_repo TYPE REF TO lcl_repo_online.
ls_popup = lcl_popups=>repo_popup(
iv_title = 'Attach repo to remote ...'
@ -239,8 +236,8 @@ CLASS lcl_services_repo IMPLEMENTATION.
METHOD remote_change.
DATA: ls_popup TYPE lcl_popups=>ty_popup,
lo_repo TYPE REF TO lcl_repo_online.
DATA: ls_popup TYPE lcl_popups=>ty_popup,
lo_repo TYPE REF TO lcl_repo_online.
lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
@ -267,7 +264,8 @@ CLASS lcl_services_repo IMPLEMENTATION.
lv_question TYPE string,
lo_repo TYPE REF TO lcl_repo.
lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
lo_repo = lcl_app=>repo_srv( )->get( iv_key ).
lv_question = 'This will rebuild and overwrite local repo checksums.'.
@ -288,7 +286,7 @@ CLASS lcl_services_repo IMPLEMENTATION.
text_button_2 = 'Cancel'
icon_button_2 = 'ICON_CANCEL'
default_button = '2'
display_cancel_button = abap_false ). "#EC NOTEXT
display_cancel_button = abap_false ). "#EC NOTEXT
IF lv_answer = '2'.
RAISE EXCEPTION TYPE lcx_cancel.
@ -308,11 +306,11 @@ CLASS lcl_services_repo IMPLEMENTATION.
CALL FUNCTION 'RS_TOOL_ACCESS'
EXPORTING
OPERATION = 'SHOW'
IN_NEW_WINDOW = 'X'
OBJECT_NAME = iv_package
OBJECT_TYPE = 'DEVC'
WITH_OBJECTLIST = 'X'.
operation = 'SHOW'
in_new_window = 'X'
object_name = iv_package
object_type = 'DEVC'
with_objectlist = 'X'.
ENDMETHOD. " open_se80.

View File

@ -197,8 +197,7 @@ CLASS lcl_syntax_highlighter IMPLEMENTATION.
FIELD-SYMBOLS:
<regex> LIKE LINE OF mt_rules,
<result> TYPE match_result,
<match> TYPE ty_match.
<result> TYPE match_result.
CLEAR et_matches.
@ -651,8 +650,7 @@ CLASS ltcl_syntax_cases DEFINITION FINAL
METHODS:
do_test IMPORTING iv_line TYPE string
iv_filename TYPE string
RETURNING VALUE(ro_instance) TYPE REF TO lcl_syntax_highlighter,
iv_filename TYPE string,
test_abap_01 FOR TESTING,
test_abap_02 FOR TESTING,
test_abap_03 FOR TESTING,
@ -702,7 +700,7 @@ CLASS ltcl_syntax_cases IMPLEMENTATION.
lo TYPE REF TO lcl_syntax_highlighter.
lo = lcl_syntax_highlighter=>create( iv_filename ).
lo = lcl_syntax_highlighter=>create( iv_filename ).
lo->parse_line( EXPORTING iv_line = iv_line
IMPORTING et_matches = lt_matches_act ).

View File

@ -1237,7 +1237,7 @@ ENDCLASS. "lcl_abap_unit IMPLEMENTATION
CLASS ltcl_html_helper DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
PRIVATE SECTION.
DATA: mo_html TYPE REF TO lcl_html_helper.
DATA: mo_html TYPE REF TO lcl_html.
METHODS:
indent1 FOR TESTING RAISING lcx_exception,
@ -1819,6 +1819,10 @@ CLASS ltcl_path IMPLEMENTATION.
lv_filename = lcl_path=>get_filename_from_syspath( '\\server$\file.txt' ).
assert_equals( act = lv_filename exp = 'file.txt' ).
lv_filename = lcl_path=>get_filename_from_syspath(
'C:\foo\bar\moo.boo\dev\qas\_blah\goog\muuh\sap\hello\world\lorem\ipsum\s_foo.gif' ).
assert_equals( act = lv_filename exp = 's_foo.gif' ).
ENDMETHOD. " get_filename_from_syspath.
ENDCLASS. "ltcl_path
@ -1839,7 +1843,6 @@ CLASS ltcl_file_status IMPLEMENTATION.
DATA: lt_local TYPE ty_files_item_tt,
lt_remote TYPE ty_files_tt,
lt_state TYPE ty_file_signatures_tt,
lt_tadir TYPE ty_tadir_tt,
lt_results TYPE ty_results_tt,
lt_results_exp TYPE ty_results_tt.
@ -2185,24 +2188,570 @@ CLASS ltcl_persistence_settings IMPLEMENTATION.
lcl_app=>db( )->delete(
iv_type = 'SETTINGS'
iv_value = 'PROXY_URL' ).
CATCH cx_static_check.
CATCH cx_static_check ##NO_HANDLER.
"If entry didn't exist, that's okay
ENDTRY.
TRY.
lcl_app=>db( )->delete(
iv_type = 'SETTINGS'
iv_value = 'PROXY_PORT' ).
CATCH cx_static_check.
CATCH cx_static_check ##NO_HANDLER.
"If entry didn't exist, that's okay
ENDTRY.
TRY.
lcl_app=>db( )->delete(
iv_type = 'SETTINGS'
iv_value = 'CRIT_TESTS' ).
CATCH cx_static_check.
CATCH cx_static_check ##NO_HANDLER.
"If entry didn't exist, that's okay
ENDTRY.
ENDMETHOD.
ENDCLASS.
CLASS ltd_spy_oo_object DEFINITION FOR TESTING.
PUBLIC SECTION.
INTERFACES: lif_object_oriented_object.
DATA:
mv_package TYPE devclass,
mv_overwrite TYPE seox_boolean,
ms_interface_properties TYPE vseointerf,
ms_class_properties TYPE vseoclass,
ms_locals_key TYPE seoclskey,
mt_local_definitions TYPE rswsourcet,
mt_local_implementations TYPE rswsourcet,
mt_local_macros TYPE rswsourcet,
mt_local_test_classes TYPE rswsourcet,
mv_force TYPE seoflag,
ms_deserialize_key TYPE seoclskey,
mt_source TYPE ty_string_tt,
ms_item_to_activate TYPE ty_item,
mt_descriptions TYPE ty_seocompotx_tt,
ms_description_key TYPE seoclskey,
mv_text_pool_class_name TYPE seoclsname,
mt_text_pool TYPE textpool_table,
mv_text_pool_inserted TYPE abap_bool,
mt_sotr TYPE ty_sotr_tt,
mt_sotr_package TYPE devclass,
mv_docu_object_name TYPE dokhl-object,
mv_docu_language TYPE spras,
mt_docu_lines TYPE tlinetab.
ENDCLASS.
CLASS ltd_spy_oo_object IMPLEMENTATION.
METHOD lif_object_oriented_object~create.
DATA lv_properties_structure_name TYPE string.
lv_properties_structure_name = cl_abap_typedescr=>describe_by_data( is_properties )->absolute_name.
IF lv_properties_structure_name = cl_abap_typedescr=>describe_by_data( ms_interface_properties )->absolute_name.
ms_interface_properties = is_properties.
ELSE.
ms_class_properties = is_properties.
ENDIF.
mv_package = iv_package.
mv_overwrite = iv_overwrite.
ENDMETHOD.
METHOD lif_object_oriented_object~generate_locals.
ms_locals_key = is_key.
mt_local_definitions = it_local_definitions.
mt_local_implementations = it_local_implementations.
mt_local_macros = it_local_macros.
mt_local_test_classes = it_local_test_classes.
mv_force = iv_force.
ENDMETHOD.
METHOD lif_object_oriented_object~deserialize_source.
ms_deserialize_key = is_key.
mt_source = it_source.
ENDMETHOD.
METHOD lif_object_oriented_object~add_to_activation_list.
ms_item_to_activate = is_item.
ENDMETHOD.
METHOD lif_object_oriented_object~update_descriptions.
ms_description_key = is_key.
mt_descriptions = it_descriptions.
ENDMETHOD.
METHOD lif_object_oriented_object~insert_text_pool.
mv_text_pool_inserted = abap_true.
mv_text_pool_class_name = iv_class_name.
mt_text_pool = it_text_pool.
cl_abap_unit_assert=>assert_equals(
act = iv_language
exp = sy-langu ).
ENDMETHOD.
METHOD lif_object_oriented_object~create_sotr.
mt_sotr = it_sotr.
mt_sotr_package = iv_package.
ENDMETHOD.
METHOD lif_object_oriented_object~create_documentation.
mv_docu_object_name = iv_object_name.
mv_docu_language = iv_language.
mt_docu_lines = it_lines.
ENDMETHOD.
ENDCLASS.
CLASS ltd_fake_object_files DEFINITION FOR TESTING
INHERITING FROM lcl_objects_files.
PUBLIC SECTION.
METHODS constructor.
METHODS read_abap REDEFINITION.
DATA:
mt_sources TYPE seop_source_string,
mt_local_definitions TYPE seop_source_string,
mt_local_implementations TYPE seop_source_string,
mt_local_macros TYPE seop_source_string,
mt_local_test_classes TYPE seop_source_string.
ENDCLASS.
CLASS ltd_fake_object_files IMPLEMENTATION.
METHOD read_abap.
CASE iv_extra.
WHEN 'locals_def'.
rt_abap = mt_local_definitions.
WHEN 'locals_imp'.
rt_abap = mt_local_implementations.
WHEN 'macros'.
rt_abap = mt_local_macros.
WHEN 'testclasses'.
rt_abap = mt_local_test_classes.
WHEN OTHERS.
rt_abap = mt_sources.
RETURN.
ENDCASE.
cl_abap_unit_assert=>assert_equals( act = iv_error
exp = abap_false ).
ENDMETHOD.
METHOD constructor.
DATA ls_empty_item TYPE ty_item.
super->constructor( ls_empty_item ).
APPEND 'source' TO me->mt_sources.
APPEND 'definition' TO me->mt_local_definitions.
APPEND 'implementation' TO me->mt_local_implementations.
APPEND 'macro' TO me->mt_local_macros.
APPEND 'test' TO me->mt_local_test_classes.
ENDMETHOD.
ENDCLASS.
CLASS ltc_oo_test DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
PROTECTED SECTION.
DATA:
mo_spy_oo_object TYPE REF TO ltd_spy_oo_object,
mo_fake_object_files TYPE REF TO ltd_fake_object_files,
mo_xml_input TYPE REF TO lcl_xml_input,
mo_xml_out TYPE REF TO lcl_xml_output,
mo_oo_object TYPE REF TO lif_object,
ms_item TYPE ty_item.
METHODS: when_deserializing
RAISING
lcx_exception,
then_should_deserialize_source,
given_the_descriptions
IMPORTING
it_descriptions TYPE ty_seocompotx_tt
RAISING
lcx_exception,
then_shuld_update_descriptions
IMPORTING
it_descriptions TYPE ty_seocompotx_tt,
then_it_should_add_activation,
given_documentation_in_xml_as
IMPORTING
it_lines TYPE tlinetab
RAISING
lcx_exception,
then_docu_should_be_created
IMPORTING
it_lines TYPE tlinetab.
ENDCLASS.
CLASS ltc_oo_test IMPLEMENTATION.
METHOD then_docu_should_be_created.
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->mt_docu_lines
exp = it_lines ).
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->mv_docu_object_name
exp = ms_item-obj_name ).
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->mv_docu_language
exp = sy-langu ).
ENDMETHOD.
METHOD given_documentation_in_xml_as.
mo_xml_out->add(
iv_name = 'LINES'
ig_data = it_lines ).
ENDMETHOD.
METHOD then_it_should_add_activation.
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->ms_item_to_activate
exp = ms_item ).
ENDMETHOD.
METHOD then_shuld_update_descriptions.
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->mt_descriptions
exp = it_descriptions ).
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->ms_description_key
exp = ms_item-obj_name ).
ENDMETHOD.
METHOD given_the_descriptions.
mo_xml_out->add(
iv_name = 'DESCRIPTIONS'
ig_data = it_descriptions ).
ENDMETHOD.
METHOD then_should_deserialize_source.
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->mt_source
exp = mo_fake_object_files->mt_sources ).
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->ms_deserialize_key
exp = ms_item-obj_name ).
ENDMETHOD.
METHOD when_deserializing.
CREATE OBJECT mo_xml_input
EXPORTING
iv_xml = mo_xml_out->render( ).
mo_oo_object->deserialize(
iv_package = 'package_name'
io_xml = mo_xml_input ).
ENDMETHOD.
ENDCLASS.
CLASS ltcl_class_deserialization DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT
INHERITING FROM ltc_oo_test.
PRIVATE SECTION.
METHODS:
setup,
given_a_class_properties
RAISING
lcx_exception,
then_should_create_class,
then_it_should_generate_locals,
should_create_class FOR TESTING RAISING cx_static_check,
should_generate_locals FOR TESTING RAISING cx_static_check,
should_deserialize_source FOR TESTING RAISING cx_static_check,
should_update_descriptions FOR TESTING RAISING cx_static_check,
should_add_to_activation FOR TESTING RAISING cx_static_check,
no_text_pool_no_insert FOR TESTING RAISING cx_static_check,
insert_text_pool FOR TESTING RAISING cx_static_check,
create_stor_from_xml FOR TESTING RAISING cx_static_check,
create_documentation FOR TESTING RAISING cx_static_check.
DATA:
ms_class_properties TYPE vseoclass.
ENDCLASS.
CLASS ltcl_class_deserialization IMPLEMENTATION.
METHOD setup.
CREATE OBJECT mo_fake_object_files.
CREATE OBJECT mo_spy_oo_object.
CREATE OBJECT mo_xml_out.
lth_oo_factory_injector=>inject( mo_spy_oo_object ).
ms_item-devclass = 'package_name'.
ms_item-obj_name = 'zcl_class'.
ms_item-obj_type = 'CLAS'.
CREATE OBJECT mo_oo_object TYPE lcl_object_clas
EXPORTING
is_item = ms_item
iv_language = sy-langu.
mo_oo_object->mo_files = mo_fake_object_files.
ENDMETHOD.
METHOD should_create_class.
ms_class_properties-clsname = ms_item-obj_name.
given_a_class_properties( ).
when_deserializing( ).
then_should_create_class( ).
ENDMETHOD.
METHOD should_generate_locals.
given_a_class_properties( ).
when_deserializing( ).
then_it_should_generate_locals( ).
ENDMETHOD.
METHOD should_deserialize_source.
given_a_class_properties( ).
when_deserializing( ).
then_should_deserialize_source( ).
ENDMETHOD.
METHOD should_update_descriptions.
DATA:
ls_description TYPE seocompotx,
lt_descriptions TYPE ty_seocompotx_tt.
given_a_class_properties( ).
ls_description-clsname = ms_item-obj_name.
ls_description-cmpname = 'a_method'.
APPEND ls_description TO lt_descriptions.
given_the_descriptions( lt_descriptions ).
when_deserializing( ).
then_shuld_update_descriptions( lt_descriptions ).
ENDMETHOD.
METHOD should_add_to_activation.
given_a_class_properties( ).
when_deserializing( ).
then_it_should_add_activation( ).
ENDMETHOD.
METHOD given_a_class_properties.
mo_xml_out->add(
iv_name = 'VSEOCLASS'
ig_data = ms_class_properties ).
ENDMETHOD.
METHOD then_should_create_class.
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->ms_class_properties
exp = ms_class_properties ).
cl_abap_unit_assert=>assert_equals( act = mo_spy_oo_object->mv_overwrite
exp = abap_true ).
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->mv_package
exp = 'package_name' ).
ENDMETHOD.
METHOD then_it_should_generate_locals.
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->ms_locals_key
exp = ms_item-obj_name ).
cl_abap_unit_assert=>assert_equals( act = mo_spy_oo_object->mv_force
exp = abap_true ).
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->mt_local_definitions
exp = mo_fake_object_files->mt_local_definitions ).
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->mt_local_implementations
exp = mo_fake_object_files->mt_local_implementations ).
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->mt_local_macros
exp = mo_fake_object_files->mt_local_macros ).
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->mt_local_test_classes
exp = mo_fake_object_files->mt_local_test_classes ).
ENDMETHOD.
METHOD no_text_pool_no_insert.
given_a_class_properties( ).
when_deserializing( ).
cl_abap_unit_assert=>assert_equals( act = mo_spy_oo_object->mv_text_pool_inserted
exp = abap_false ).
ENDMETHOD.
METHOD insert_text_pool.
DATA: lt_pool_external TYPE textpool_table,
ls_pool_external TYPE ty_tpool.
ls_pool_external-id = 'ID'.
ls_pool_external-key = 'KEY'.
APPEND ls_pool_external TO lt_pool_external.
given_a_class_properties( ).
mo_xml_out->add(
iv_name = 'TPOOL'
ig_data = lt_pool_external ).
when_deserializing( ).
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->mt_text_pool
exp = lt_pool_external ).
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->mv_text_pool_class_name
exp = 'zcl_class' ).
ENDMETHOD.
METHOD create_stor_from_xml.
DATA:
lt_sotr TYPE ty_sotr_tt,
ls_sotr LIKE LINE OF lt_sotr.
given_a_class_properties( ).
ls_sotr-header-concept = 'HEADER'.
APPEND ls_sotr TO lt_sotr.
mo_xml_out->add(
iv_name = 'SOTR'
ig_data = lt_sotr ).
when_deserializing( ).
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->mt_sotr
exp = lt_sotr ).
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->mt_sotr_package
exp = 'package_name' ).
ENDMETHOD.
METHOD create_documentation.
DATA: lt_lines TYPE tlinetab,
ls_line TYPE LINE OF tlinetab.
ls_line-tdline = 'Class Line Doc'.
APPEND ls_line TO lt_lines.
given_a_class_properties( ).
given_documentation_in_xml_as( lt_lines ).
when_deserializing( ).
then_docu_should_be_created( lt_lines ).
ENDMETHOD.
ENDCLASS.
CLASS ltcl_interface_deserialization DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT
INHERITING FROM ltc_oo_test.
PRIVATE SECTION.
METHODS:
setup,
given_an_interface_properties
RAISING
lcx_exception,
then_should_create_interface,
create_interface FOR TESTING RAISING cx_static_check,
update_descriptions FOR TESTING RAISING cx_static_check,
add_to_activation FOR TESTING RAISING cx_static_check,
deserialize_source FOR TESTING RAISING cx_static_check,
create_documentation FOR TESTING RAISING cx_static_check.
DATA:
ms_interface_properties TYPE vseointerf.
ENDCLASS.
CLASS ltcl_interface_deserialization IMPLEMENTATION.
METHOD setup.
CREATE OBJECT mo_fake_object_files.
CREATE OBJECT mo_spy_oo_object.
CREATE OBJECT mo_xml_out.
lth_oo_factory_injector=>inject( mo_spy_oo_object ).
ms_item-devclass = 'package_name'.
ms_item-obj_name = 'zif_interface'.
ms_item-obj_type = 'INTF'.
CREATE OBJECT mo_oo_object TYPE lcl_object_intf
EXPORTING
is_item = ms_item
iv_language = sy-langu.
mo_oo_object->mo_files = mo_fake_object_files.
ENDMETHOD.
METHOD create_interface.
ms_interface_properties-clsname = ms_item-obj_name.
given_an_interface_properties( ).
when_deserializing( ).
then_should_create_interface( ).
ENDMETHOD.
METHOD update_descriptions.
DATA:
ls_description TYPE seocompotx,
lt_descriptions TYPE ty_seocompotx_tt.
given_an_interface_properties( ).
ls_description-clsname = ms_item-obj_name.
ls_description-cmpname = 'a_method'.
APPEND ls_description TO lt_descriptions.
given_the_descriptions( lt_descriptions ).
when_deserializing( ).
then_shuld_update_descriptions( lt_descriptions ).
ENDMETHOD.
METHOD add_to_activation.
given_an_interface_properties( ).
when_deserializing( ).
then_it_should_add_activation( ).
ENDMETHOD.
METHOD deserialize_source.
given_an_interface_properties( ).
when_deserializing( ).
then_should_deserialize_source( ).
ENDMETHOD.
METHOD given_an_interface_properties.
mo_xml_out->add(
iv_name = 'VSEOINTERF'
ig_data = ms_interface_properties ).
ENDMETHOD.
METHOD then_should_create_interface.
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->ms_interface_properties
exp = ms_interface_properties ).
cl_abap_unit_assert=>assert_equals( act = mo_spy_oo_object->mv_overwrite
exp = abap_true ).
cl_abap_unit_assert=>assert_equals(
act = mo_spy_oo_object->mv_package
exp = 'package_name' ).
ENDMETHOD.
METHOD create_documentation.
DATA: lt_lines TYPE tlinetab,
ls_line TYPE LINE OF tlinetab.
ls_line-tdline = 'Interface Line Doc'.
APPEND ls_line TO lt_lines.
given_an_interface_properties( ).
given_documentation_in_xml_as( lt_lines ).
when_deserializing( ).
then_docu_should_be_created( lt_lines ).
ENDMETHOD.
ENDCLASS.

View File

@ -440,10 +440,22 @@ CLASS lcl_path IMPLEMENTATION.
METHOD get_filename_from_syspath.
" filename | c:\filename | /dir/filename | \\server\filename
FIND FIRST OCCURRENCE OF REGEX '^(?:/(?:.+/)*|(?:\w:|\\)\\(?:.+\\)*)?([^\\/]+)$'
IN iv_path
SUBMATCHES rv_filename.
DATA: lv_split TYPE c LENGTH 1,
lv_index TYPE i,
lt_split TYPE TABLE OF string.
" filename | c:\filename | /dir/filename | \\server\filename
IF iv_path CA '/'.
lv_split = '/'.
ELSE.
lv_split = '\'.
ENDIF.
SPLIT iv_path AT lv_split INTO TABLE lt_split.
lv_index = lines( lt_split ).
READ TABLE lt_split INDEX lv_index INTO rv_filename.
ENDMETHOD. " get_filename_from_syspath.
@ -535,13 +547,13 @@ CLASS lcl_diff DEFINITION FINAL.
END OF c_diff.
TYPES: BEGIN OF ty_diff,
new_line TYPE c LENGTH 6,
new TYPE string,
result TYPE c LENGTH 1,
old_line TYPE c LENGTH 6,
old TYPE string,
short TYPE abap_bool,
beacon TYPE i,
new_line TYPE c LENGTH 6,
new TYPE string,
result TYPE c LENGTH 1,
old_line TYPE c LENGTH 6,
old TYPE string,
short TYPE abap_bool,
beacon TYPE i,
END OF ty_diff.
TYPES: ty_diffs_tt TYPE STANDARD TABLE OF ty_diff WITH DEFAULT KEY.
@ -760,9 +772,9 @@ CLASS lcl_diff IMPLEMENTATION.
METHOD constructor.
DATA: lt_delta TYPE vxabapt255_tab,
lt_new TYPE abaptxt255_tab,
lt_old TYPE abaptxt255_tab.
DATA: lt_delta TYPE vxabapt255_tab,
lt_new TYPE abaptxt255_tab,
lt_old TYPE abaptxt255_tab.
unpack( EXPORTING iv_new = iv_new
@ -828,10 +840,10 @@ CLASS lcl_diff IMPLEMENTATION.
ENDCASE.
ELSE.
CLEAR ls_new.
READ TABLE it_new INTO ls_new INDEX lv_nindex. "#EC CI_SUBRC
READ TABLE it_new INTO ls_new INDEX lv_nindex. "#EC CI_SUBRC
lv_nindex = lv_nindex + 1.
CLEAR ls_old.
READ TABLE it_old INTO ls_old INDEX lv_oindex. "#EC CI_SUBRC
READ TABLE it_old INTO ls_old INDEX lv_oindex. "#EC CI_SUBRC
lv_oindex = lv_oindex + 1.
_append ls_new '' ls_old.
ENDIF.
@ -1031,7 +1043,7 @@ CLASS lcl_log DEFINITION FINAL.
count
RETURNING VALUE(rv_count) TYPE i,
to_html
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
RETURNING VALUE(ro_html) TYPE REF TO lcl_html,
clear,
has_rc "For unit tests mainly
IMPORTING iv_rc TYPE balsort

View File

@ -2,8 +2,10 @@
*& Include ZABAPGIT_VIEW_REPO
*&---------------------------------------------------------------------*
CLASS lcl_gui_view_repo_content DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
CLASS lcl_gui_view_repo_content DEFINITION FINAL.
PUBLIC SECTION.
INTERFACES lif_gui_page.
ALIASES render FOR lif_gui_page~render.
CONSTANTS: BEGIN OF c_actions,
change_dir TYPE string VALUE 'change_dir' ##NO_TEXT,
@ -12,9 +14,6 @@ CLASS lcl_gui_view_repo_content DEFINITION FINAL INHERITING FROM lcl_gui_page_su
toggle_changes TYPE string VALUE 'toggle_changes' ##NO_TEXT,
END OF c_actions.
METHODS: lif_gui_page~render REDEFINITION,
lif_gui_page~on_event REDEFINITION.
METHODS constructor
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
RAISING lcx_exception.
@ -31,21 +30,21 @@ CLASS lcl_gui_view_repo_content DEFINITION FINAL INHERITING FROM lcl_gui_page_su
render_head_menu
IMPORTING iv_lstate TYPE char1
iv_rstate TYPE char1
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
RAISING lcx_exception,
render_grid_menu
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
RAISING lcx_exception,
render_item
IMPORTING is_item TYPE lcl_repo_content_browser=>ty_repo_item
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
RAISING lcx_exception,
render_item_files
IMPORTING is_item TYPE lcl_repo_content_browser=>ty_repo_item
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
RETURNING VALUE(ro_html) TYPE REF TO lcl_html,
render_item_command
IMPORTING is_item TYPE lcl_repo_content_browser=>ty_repo_item
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
RETURNING VALUE(ro_html) TYPE REF TO lcl_html,
get_item_class
IMPORTING is_item TYPE lcl_repo_content_browser=>ty_repo_item
RETURNING VALUE(rv_html) TYPE string,
@ -55,7 +54,7 @@ CLASS lcl_gui_view_repo_content DEFINITION FINAL INHERITING FROM lcl_gui_page_su
render_empty_package
RETURNING VALUE(rv_html) TYPE string,
render_parent_dir
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
RAISING lcx_exception.
METHODS:
@ -150,7 +149,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
ro_html->add( render_grid_menu( ) ).
" Repo content table
ro_html->add( '<table width="100%" class="repo_tab">' ).
ro_html->add( '<table class="repo_tab">' ).
IF lcl_path=>is_root( mv_cur_dir ) = abap_false.
ro_html->add( render_parent_dir( ) ).
@ -169,7 +168,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
CATCH lcx_exception INTO lx_error.
ro_html->add( render_head_menu( iv_lstate = lv_lstate iv_rstate = lv_rstate ) ).
ro_html->add( lcl_gui_page_super=>render_error( lx_error ) ).
ro_html->add( lcl_gui_chunk_lib=>render_error( ix_error = lx_error ) ).
ENDTRY.
ENDMETHOD. "lif_gui_page~render
@ -233,7 +232,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
lv_wp_opt = gc_html_opt-crossout.
lv_pull_opt = gc_html_opt-crossout.
ELSE.
lv_pull_opt = gc_html_opt-emphas.
lv_pull_opt = gc_html_opt-strong.
ENDIF.
" Build branch drop-down ========================
@ -283,12 +282,12 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
IF iv_lstate IS NOT INITIAL. " Something new at local
lo_toolbar->add( iv_txt = 'Stage'
iv_act = |{ gc_action-go_stage }?{ lv_key }|
iv_opt = gc_html_opt-emphas ).
iv_opt = gc_html_opt-strong ).
ENDIF.
IF iv_rstate IS NOT INITIAL OR iv_lstate IS NOT INITIAL. " Any changes
lo_toolbar->add( iv_txt = 'Show diff'
iv_act = |{ gc_action-go_diff }?key={ lv_key }|
iv_opt = gc_html_opt-emphas ).
iv_opt = gc_html_opt-strong ).
ENDIF.
CATCH lcx_exception ##NO_HANDLER.
" authorization error or repository does not exist
@ -299,10 +298,10 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
ELSE.
lo_toolbar->add( iv_txt = 'Import ZIP'
iv_act = |{ gc_action-zip_import }?{ lv_key }|
iv_opt = gc_html_opt-emphas ).
iv_opt = gc_html_opt-strong ).
lo_toolbar->add( iv_txt = 'Export ZIP'
iv_act = |{ gc_action-zip_export }?{ lv_key }|
iv_opt = gc_html_opt-emphas ).
iv_opt = gc_html_opt-strong ).
ENDIF.
lo_toolbar->add( iv_txt = 'Advanced'
@ -312,7 +311,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
" Render ==========================================
ro_html->add( '<div class="paddings">' ).
ro_html->add( '<table width="100%"><tr>' ).
ro_html->add( '<table class="w100"><tr>' ).
IF mv_show_folders = abap_true.
ro_html->add( |<td class="current_dir">{ mv_cur_dir }</td>| ).
@ -321,7 +320,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
ro_html->add( '<td class="right">' ).
ro_html->add( lo_toolbar->render( ) ).
ro_html->add( '</td>' ).
ro_html->add( '<tr></table>' ).
ro_html->add( '</tr></table>' ).
ro_html->add( '</div>' ).
@ -349,17 +348,17 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
CASE is_item-obj_type.
WHEN 'PROG' OR 'CLAS' OR 'FUGR'.
rv_html = |<img src="img/code">|.
rv_html = lcl_html=>icon( 'file-code/darkgrey' ).
WHEN 'W3MI' OR 'W3HT'.
rv_html = |<img src="img/bin">|.
rv_html = lcl_html=>icon( 'file-binary/darkgrey' ).
WHEN ''.
rv_html = space. " no icon
WHEN OTHERS.
rv_html = |<img src="img/obj">|.
rv_html = lcl_html=>icon( 'file/darkgrey' ).
ENDCASE.
IF is_item-is_dir = abap_true.
rv_html = |<img src="img/dir">|.
rv_html = lcl_html=>icon( 'file-directory/darkgrey' ).
ENDIF.
ENDMETHOD. "get_item_icon
@ -436,7 +435,8 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
ro_html->add( '<div>' ).
ro_html->add( |<span class="grey">{ is_item-changes } changes</span>| ).
ro_html->add( render_item_state( iv1 = is_item-lstate iv2 = is_item-rstate ) ).
ro_html->add( lcl_gui_chunk_lib=>render_item_state( iv1 = is_item-lstate
iv2 = is_item-rstate ) ).
ro_html->add( '</div>' ).
ELSEIF is_item-changes > 0.
@ -448,9 +448,10 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
ig_object = is_item ).
ro_html->add( '<div>' ).
ro_html->add_anchor( iv_txt = |view diff ({ is_item-changes })|
iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ).
ro_html->add( render_item_state( iv1 = is_item-lstate iv2 = is_item-rstate ) ).
ro_html->add_a( iv_txt = |view diff ({ is_item-changes })|
iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ).
ro_html->add( lcl_gui_chunk_lib=>render_item_state( iv1 = is_item-lstate
iv2 = is_item-rstate ) ).
ro_html->add( '</div>' ).
ELSE.
@ -461,10 +462,10 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
lv_difflink = lcl_html_action_utils=>file_encode(
iv_key = mo_repo->get_key( )
ig_file = ls_file ).
ro_html->add_anchor(
iv_txt = 'view diff'
iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ).
ro_html->add( render_item_state( iv1 = ls_file-lstate iv2 = ls_file-rstate ) ).
ro_html->add_a( iv_txt = 'view diff'
iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ).
ro_html->add( lcl_gui_chunk_lib=>render_item_state( iv1 = ls_file-lstate
iv2 = ls_file-rstate ) ).
ELSE.
ro_html->add( '&nbsp;' ).
ENDIF.
@ -490,7 +491,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
CREATE OBJECT ro_html.
ro_html->add( '<tr class="folder">' ).
ro_html->add( |<td class="icon"><img src="img/dir"></td>| ).
ro_html->add( |<td class="icon">{ lcl_html=>icon( 'dir' ) }</td>| ).
ro_html->add( |<td class="object" colspan="2">{ build_dir_jump_link( '..' ) }</td>| ).
IF mo_repo->is_offline( ) = abap_false.
ro_html->add( |<td colspan="2"></td>| ). " Dummy for online
@ -503,14 +504,14 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
DATA: lv_path TYPE string,
lv_encode TYPE string,
lo_html TYPE REF TO lcl_html_helper.
lo_html TYPE REF TO lcl_html.
lv_path = iv_path.
REPLACE FIRST OCCURRENCE OF mv_cur_dir IN lv_path WITH ''.
lv_encode = lcl_html_action_utils=>dir_encode( lv_path ).
CREATE OBJECT lo_html.
lo_html->add_anchor( iv_txt = lv_path iv_act = |{ c_actions-change_dir }?{ lv_encode }| ).
lo_html->add_a( iv_txt = lv_path iv_act = |{ c_actions-change_dir }?{ lv_encode }| ).
rv_html = lo_html->mv_html.
ENDMETHOD. "build_dir_jump_link
@ -518,14 +519,14 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
METHOD build_obj_jump_link.
DATA: lv_encode TYPE string,
lo_html TYPE REF TO lcl_html_helper.
lo_html TYPE REF TO lcl_html.
lv_encode = lcl_html_action_utils=>jump_encode( iv_obj_type = is_item-obj_type
iv_obj_name = is_item-obj_name ).
CREATE OBJECT lo_html.
lo_html->add_anchor( iv_txt = |{ is_item-obj_name }|
iv_act = |{ gc_action-jump }?{ lv_encode }| ).
lo_html->add_a( iv_txt = |{ is_item-obj_name }|
iv_act = |{ gc_action-jump }?{ lv_encode }| ).
rv_html = lo_html->mv_html.
ENDMETHOD. "build_obj_jump_link

View File

@ -2,18 +2,23 @@
*& Include ZABAPGIT_PAGE_TUTORIAL
*&---------------------------------------------------------------------*
CLASS lcl_gui_view_tutorial DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
CLASS lcl_gui_view_tutorial DEFINITION FINAL.
PUBLIC SECTION.
METHODS lif_gui_page~render REDEFINITION.
INTERFACES lif_gui_page.
ALIASES render FOR lif_gui_page~render.
PRIVATE SECTION.
METHODS render_content
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
ENDCLASS. "lcl_gui_view_tutorial
CLASS lcl_gui_view_tutorial IMPLEMENTATION.
METHOD lif_gui_page~on_event.
ev_state = gc_event_state-not_handled.
ENDMETHOD. " lif_gui_page~on_event.
METHOD lif_gui_page~render.
CREATE OBJECT ro_html.
@ -34,10 +39,10 @@ CLASS lcl_gui_view_tutorial IMPLEMENTATION.
_add '<h2>Adding and cloning repos</h2>'.
_add '<p><ul>'.
_add `<li>To clone a remote repo (e.g. from github) click `.
ro_html->add_anchor( iv_txt = '+ Clone' iv_act = gc_action-repo_clone ).
ro_html->add_a( iv_txt = '+ Clone' iv_act = gc_action-repo_clone ).
_add ' from the top menu. This will copy a remote repo to your system.</li>'.
_add `<li>To add a local package as a repo click `.
ro_html->add_anchor( iv_txt = '+ Offline' iv_act = gc_action-repo_newoffline ).
ro_html->add_a( iv_txt = '+ Offline' iv_act = gc_action-repo_newoffline ).
_add ' from the top menu. This will track a repo which already exist in'.
_add ' the system with abapGit. You''ll be able to attach it to remote origin'.
_add ' or just serialize as a zip file</li>'.
@ -45,18 +50,20 @@ CLASS lcl_gui_view_tutorial IMPLEMENTATION.
_add '<h2>Repository list and favorites</h2>'.
_add '<p><ul>'.
_add '<li>To choose a repo press <img src="img/burger"> at the favorite bar.</li>'.
_add '<li>To favorite a repo click <img src="img/star-grey"> icon at repo toolbar.</li>'.
ro_html->add( |<li>To choose a repo press {
lcl_html=>icon( 'three-bars/blue' ) } at the favorite bar.</li>| ).
ro_html->add( |<li>To favorite a repo click {
lcl_html=>icon( 'star/darkgrey' ) } icon at repo toolbar.</li>| ).
_add '</ul></p>'.
_add '<h2>abapGit related repositories</h2>'.
_add '<p><ul>'.
_add '<li>'.
ro_html->add_anchor( iv_txt = 'install abapGit repo' iv_act = gc_action-abapgit_install ).
ro_html->add_a( iv_txt = 'install abapGit repo' iv_act = gc_action-abapgit_install ).
_add ' - To keep abapGit up-to-date (or also to contribute) you need to'.
_add 'install it as a repository.</li>'.
_add '<li>'.
ro_html->add_anchor( iv_txt = 'install abapGit plugins' iv_act = gc_action-abapgit_install_pi ).
ro_html->add_a( iv_txt = 'install abapGit plugins' iv_act = gc_action-abapgit_install_pi ).
_add ' - you can also install plugins to extend supported object types</li>'.
_add '</ul></p>'.