From 3106d2dd5877eaf6e7a9397f556f4e88f2c2dd4c Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 29 Dec 2016 11:03:15 +0000 Subject: [PATCH 001/142] ENHO: serialization class enh --- src/zabapgit_object_enho.prog.abap | 51 ++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index 95ba504f9..d65113f62 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -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 *----------------------------------------------------------------------* @@ -40,6 +45,11 @@ 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 @@ -162,8 +172,11 @@ CLASS lcl_object_enho IMPLEMENTATION. 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 +205,9 @@ 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. + BREAK-POINT. * 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. @@ -345,6 +359,39 @@ 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_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( ). + + 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 = '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, From b64c2723d9556d4f371415687e9be9a2f7f4744c Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 29 Dec 2016 11:57:30 +0000 Subject: [PATCH 002/142] ENHO: class deserialization --- src/zabapgit_object_enho.prog.abap | 80 +++++++++++++++++++++++++++--- 1 file changed, 74 insertions(+), 6 deletions(-) diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index d65113f62..5335c9a09 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -34,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 @@ -50,15 +59,10 @@ 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 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 @@ -206,7 +210,8 @@ CLASS lcl_object_enho IMPLEMENTATION. deserialize_hook( io_xml = io_xml iv_package = iv_package ). WHEN cl_enh_tool_class=>tooltype. - BREAK-POINT. + deserialize_class( io_xml = io_xml + iv_package = iv_package ). * ToDo: * WHEN 'ENHFUGRDATA'. "cl_enh_tool_fugr * WHEN cl_enh_tool_intf=>tooltype. @@ -267,6 +272,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 INTO DATA(lx_error). + lcx_exception=>raise( 'error deserializing ENHO class' ). + ENDTRY. + + ENDMETHOD. + METHOD deserialize_hook. DATA: lv_shorttext TYPE string, @@ -366,6 +430,7 @@ CLASS lcl_object_enho IMPLEMENTATION. lt_pre TYPE enhmeth_tabkeys, lt_post TYPE enhmeth_tabkeys, lt_source TYPE rswsourcet, + lv_class TYPE seoclsname, lv_shorttext TYPE string. @@ -376,11 +441,14 @@ CLASS lcl_object_enho IMPLEMENTATION. 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' From b52cfb09df6ed956873404fa594caef9e7a09e72 Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 29 Dec 2016 12:12:44 +0000 Subject: [PATCH 003/142] ENHO: downport, remove test code --- src/zabapgit_object_enho.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index 5335c9a09..669023316 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -325,7 +325,7 @@ CLASS lcl_object_enho IMPLEMENTATION. lo_enh_class->if_enh_object~save( ). lo_enh_class->if_enh_object~unlock( ). - CATCH cx_enh_root INTO DATA(lx_error). + CATCH cx_enh_root. lcx_exception=>raise( 'error deserializing ENHO class' ). ENDTRY. From 81c2025fac01513b23bb79d5f85762966294d01b Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 29 Dec 2016 12:45:16 +0000 Subject: [PATCH 004/142] cleanup and style changes pretty printer remove unused variables cleanup --- src/zabapgit_definitions.prog.abap | 8 +- src/zabapgit_file_status.prog.abap | 6 +- src/zabapgit_git.prog.abap | 9 +- src/zabapgit_git_helpers.prog.abap | 6 +- src/zabapgit_gui_asset_manager.prog.abap | 16 +- src/zabapgit_html.prog.abap | 2 +- src/zabapgit_migrations.prog.abap | 16 +- src/zabapgit_object_clas.prog.abap | 17 +- src/zabapgit_object_shi3.prog.abap | 8 +- src/zabapgit_object_tabl_valid.prog.abap | 6 - src/zabapgit_object_tran.prog.abap | 3 +- src/zabapgit_object_wdyn.prog.abap | 768 +++++++++++----------- src/zabapgit_objects.prog.abap | 9 +- src/zabapgit_objects_impl.prog.abap | 31 +- src/zabapgit_page.prog.abap | 1 - src/zabapgit_page_debug.prog.abap | 8 +- src/zabapgit_page_diff.prog.abap | 7 +- src/zabapgit_page_main.prog.abap | 12 +- src/zabapgit_persistence.prog.abap | 12 +- src/zabapgit_repo_impl.prog.abap | 5 +- src/zabapgit_sap_package.prog.abap | 3 +- src/zabapgit_services_abapgit.prog.abap | 18 +- src/zabapgit_services_db.prog.abap | 3 +- src/zabapgit_services_git.prog.abap | 11 +- src/zabapgit_services_repo.prog.abap | 36 +- src/zabapgit_syntax_highlighter.prog.abap | 8 +- src/zabapgit_unit_test.prog.abap | 9 +- 27 files changed, 504 insertions(+), 534 deletions(-) diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index 9726e9803..f28edbcde 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -14,8 +14,11 @@ 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. @@ -24,7 +27,6 @@ TYPES: data TYPE xstring, 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, diff --git a/src/zabapgit_file_status.prog.abap b/src/zabapgit_file_status.prog.abap index 7aee25688..d30919b97 100644 --- a/src/zabapgit_file_status.prog.abap +++ b/src/zabapgit_file_status.prog.abap @@ -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. diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap index 08ebd1c45..60f81a2db 100644 --- a/src/zabapgit_git.prog.abap +++ b/src/zabapgit_git.prog.abap @@ -337,7 +337,8 @@ CLASS lcl_git_transport IMPLEMENTATION. LOOP AT lt_branches FROM 1 ASSIGNING . 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' && ` ` && -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 ). diff --git a/src/zabapgit_git_helpers.prog.abap b/src/zabapgit_git_helpers.prog.abap index bbcb29962..41fe042a5 100644 --- a/src/zabapgit_git_helpers.prog.abap +++ b/src/zabapgit_git_helpers.prog.abap @@ -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. diff --git a/src/zabapgit_gui_asset_manager.prog.abap b/src/zabapgit_gui_asset_manager.prog.abap index 2ff246994..bafd1f66b 100644 --- a/src/zabapgit_gui_asset_manager.prog.abap +++ b/src/zabapgit_gui_asset_manager.prog.abap @@ -108,11 +108,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. @@ -136,10 +132,6 @@ CLASS lcl_gui_asset_manager IMPLEMENTATION. ENDMETHOD. " get_images. - DEFINE _inline. - APPEND &1 TO lt_data. - END-OF-DEFINITION. - METHOD get_inline_asset. DATA: lt_data TYPE ty_string_tt, @@ -158,11 +150,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. diff --git a/src/zabapgit_html.prog.abap b/src/zabapgit_html.prog.abap index 784e91e9f..96009519e 100644 --- a/src/zabapgit_html.prog.abap +++ b/src/zabapgit_html.prog.abap @@ -93,7 +93,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. diff --git a/src/zabapgit_migrations.prog.abap b/src/zabapgit_migrations.prog.abap index a8f3f0aa0..1ecd6dae0 100644 --- a/src/zabapgit_migrations.prog.abap +++ b/src/zabapgit_migrations.prog.abap @@ -46,7 +46,7 @@ CLASS lcl_migrations IMPLEMENTATION. " Ignore empty repos or repos with file checksums IF lines( ->get_local_checksums( ) ) = 0 - OR lines( ->get_local_checksums_per_file( ) ) > 0 . + OR lines( ->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' diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap index 7dec96873..3a9c2e359 100644 --- a/src/zabapgit_object_clas.prog.abap +++ b/src/zabapgit_object_clas.prog.abap @@ -1114,11 +1114,7 @@ CLASS lcl_object_clas IMPLEMENTATION. 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: LIKE LINE OF lt_sotr. + lt_objects TYPE sotr_objects. io_xml->read( EXPORTING iv_name = 'SOTR' @@ -1155,8 +1151,7 @@ CLASS lcl_object_clas IMPLEMENTATION. 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. @@ -1279,10 +1274,10 @@ CLASS lcl_object_intf IMPLEMENTATION. CHANGING cg_data = ls_vseointerf ). mo_object_oriented_object->create( - EXPORTING - iv_package = iv_package - CHANGING - is_properties = ls_vseointerf ). + EXPORTING + iv_package = iv_package + CHANGING + is_properties = ls_vseointerf ). mo_object_oriented_object->deserialize_source( is_key = ls_clskey diff --git a/src/zabapgit_object_shi3.prog.abap b/src/zabapgit_object_shi3.prog.abap index d7789e964..382b08bcd 100644 --- a/src/zabapgit_object_shi3.prog.abap +++ b/src/zabapgit_object_shi3.prog.abap @@ -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 ). diff --git a/src/zabapgit_object_tabl_valid.prog.abap b/src/zabapgit_object_tabl_valid.prog.abap index 58d0aa20a..a79812452 100644 --- a/src/zabapgit_object_tabl_valid.prog.abap +++ b/src/zabapgit_object_tabl_valid.prog.abap @@ -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. \ No newline at end of file diff --git a/src/zabapgit_object_tran.prog.abap b/src/zabapgit_object_tran.prog.abap index 9eba8a64a..9c0b283fc 100644 --- a/src/zabapgit_object_tran.prog.abap +++ b/src/zabapgit_object_tran.prog.abap @@ -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 diff --git a/src/zabapgit_object_wdyn.prog.abap b/src/zabapgit_object_wdyn.prog.abap index 9f2152da2..faef8e810 100644 --- a/src/zabapgit_object_wdyn.prog.abap +++ b/src/zabapgit_object_wdyn.prog.abap @@ -7,129 +7,129 @@ *----------------------------------------------------------------------* * *----------------------------------------------------------------------* -class lcl_object_wdyn definition inheriting from lcl_objects_super final. +CLASS lcl_object_wdyn DEFINITION INHERITING FROM lcl_objects_super FINAL. - public section. - interfaces lif_object. - aliases mo_files for lif_object~mo_files. + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. - private section. + PRIVATE SECTION. - data: - mt_components type table of wdy_ctlr_compo_vrs, - mt_sources type table of wdy_ctlr_compo_source_vrs. + DATA: + mt_components TYPE TABLE OF wdy_ctlr_compo_vrs, + mt_sources TYPE TABLE OF wdy_ctlr_compo_source_vrs. - methods: + METHODS: get_limu_objects - returning value(rt_objects) type wdy_md_transport_keys, + RETURNING VALUE(rt_objects) TYPE wdy_md_transport_keys, read - returning value(rs_component) type wdy_component_metadata - raising lcx_exception, + RETURNING VALUE(rs_component) TYPE wdy_component_metadata + RAISING lcx_exception, read_controller - importing is_key type wdy_md_controller_key - returning value(rs_controller) type wdy_md_controller_meta_data - raising lcx_exception, + IMPORTING is_key TYPE wdy_md_controller_key + RETURNING VALUE(rs_controller) TYPE wdy_md_controller_meta_data + RAISING lcx_exception, read_definition - importing is_key type wdy_md_component_key - returning value(rs_definition) type wdy_md_component_meta_data - raising lcx_exception, + IMPORTING is_key TYPE wdy_md_component_key + RETURNING VALUE(rs_definition) TYPE wdy_md_component_meta_data + RAISING lcx_exception, read_view - importing is_key type wdy_md_view_key - returning value(rs_view) type wdy_md_view_meta_data - raising lcx_exception, + IMPORTING is_key TYPE wdy_md_view_key + RETURNING VALUE(rs_view) TYPE wdy_md_view_meta_data + RAISING lcx_exception, recover_controller - importing is_controller type wdy_md_controller_meta_data - raising lcx_exception, + IMPORTING is_controller TYPE wdy_md_controller_meta_data + RAISING lcx_exception, recover_definition - importing is_definition type wdy_md_component_meta_data - raising lcx_exception, + IMPORTING is_definition TYPE wdy_md_component_meta_data + RAISING lcx_exception, recover_view - importing is_view type wdy_md_view_meta_data - raising lcx_exception, + IMPORTING is_view TYPE wdy_md_view_meta_data + RAISING lcx_exception, delta_controller - importing is_controller type wdy_md_controller_meta_data - returning value(rs_delta) type svrs2_xversionable_object - raising lcx_exception, + IMPORTING is_controller TYPE wdy_md_controller_meta_data + RETURNING VALUE(rs_delta) TYPE svrs2_xversionable_object + RAISING lcx_exception, delta_definition - importing is_definition type wdy_md_component_meta_data - returning value(rs_delta) type svrs2_xversionable_object - raising lcx_exception, + IMPORTING is_definition TYPE wdy_md_component_meta_data + RETURNING VALUE(rs_delta) TYPE svrs2_xversionable_object + RAISING lcx_exception, delta_view - importing is_view type wdy_md_view_meta_data - returning value(rs_delta) type svrs2_xversionable_object - raising lcx_exception, + IMPORTING is_view TYPE wdy_md_view_meta_data + RETURNING VALUE(rs_delta) TYPE svrs2_xversionable_object + RAISING lcx_exception, add_fm_param_exporting - importing i_name type string - i_value type any - changing ct_param type abap_func_parmbind_tab, + IMPORTING i_name TYPE string + i_value TYPE any + CHANGING ct_param TYPE abap_func_parmbind_tab, add_fm_param_tables - importing i_name type string - changing ct_value type any table - ct_param type abap_func_parmbind_tab, + IMPORTING i_name TYPE string + CHANGING ct_value TYPE ANY TABLE + ct_param TYPE abap_func_parmbind_tab, add_fm_exception - importing i_name type string - i_value type i - changing ct_exception type abap_func_excpbind_tab. + IMPORTING i_name TYPE string + i_value TYPE i + CHANGING ct_exception TYPE abap_func_excpbind_tab. -endclass. "lcl_object_wdyn DEFINITION +ENDCLASS. "lcl_object_wdyn DEFINITION *----------------------------------------------------------------------* * CLASS lcl_object_wdyn IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* -class lcl_object_wdyn implementation. +CLASS lcl_object_wdyn IMPLEMENTATION. - method lif_object~has_changed_since. + METHOD lif_object~has_changed_since. rv_changed = abap_true. - endmethod. "lif_object~has_changed_since + ENDMETHOD. "lif_object~has_changed_since - method lif_object~changed_by. + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo - endmethod. "lif_object~changed_by + ENDMETHOD. "lif_object~changed_by - method lif_object~get_metadata. + METHOD lif_object~get_metadata. rs_metadata = get_metadata( ). - endmethod. "lif_object~get_metadata + ENDMETHOD. "lif_object~get_metadata - method lif_object~exists. + METHOD lif_object~exists. - data: lv_component_name type wdy_component-component_name. + DATA: lv_component_name TYPE wdy_component-component_name. - select single component_name from wdy_component - into lv_component_name - where component_name = ms_item-obj_name - and version = 'A'. "#EC CI_GENBUFF + SELECT SINGLE component_name FROM wdy_component + INTO lv_component_name + WHERE component_name = ms_item-obj_name + AND version = 'A'. "#EC CI_GENBUFF rv_bool = boolc( sy-subrc = 0 ). - endmethod. "lif_object~exists + ENDMETHOD. "lif_object~exists - method delta_definition. + METHOD delta_definition. - data: ls_key type wdy_md_component_key, - lv_found type abap_bool, - ls_obj_new type svrs2_versionable_object, - li_component type ref to if_wdy_md_component, - ls_obj_old type svrs2_versionable_object. + DATA: ls_key TYPE wdy_md_component_key, + lv_found TYPE abap_bool, + ls_obj_new TYPE svrs2_versionable_object, + li_component TYPE REF TO if_wdy_md_component, + ls_obj_old TYPE svrs2_versionable_object. ls_key-component_name = is_definition-definition-component_name. lv_found = cl_wdy_md_component=>check_existency( ls_key-component_name ). - if lv_found = abap_false. - try. + IF lv_found = abap_false. + TRY. cl_wdy_md_component=>create_complete( - exporting + EXPORTING name = ls_key-component_name - importing + IMPORTING component = li_component ). li_component->save_to_database( ). li_component->unlock( ). - catch cx_wdy_md_exception. + CATCH cx_wdy_md_exception. lcx_exception=>raise( 'error creating dummy component' ). - endtry. - endif. + ENDTRY. + ENDIF. ls_obj_new-objtype = wdyn_limu_component_definition. ls_obj_new-objname = ls_key-component_name. @@ -137,7 +137,7 @@ class lcl_object_wdyn implementation. ls_obj_old-objtype = wdyn_limu_component_definition. ls_obj_old-objname = ls_key-component_name. - append is_definition-definition to ls_obj_old-wdyd-defin. + APPEND is_definition-definition TO ls_obj_old-wdyd-defin. ls_obj_old-wdyd-descr = is_definition-descriptions. ls_obj_old-wdyd-cusag = is_definition-component_usages. ls_obj_old-wdyd-intrf = is_definition-interface_implementings. @@ -145,34 +145,34 @@ class lcl_object_wdyn implementation. ls_obj_old-wdyd-ctuse = is_definition-ext_ctlr_usages. ls_obj_old-wdyd-ctmap = is_definition-ext_ctx_mappings. - call function 'SVRS_MAKE_OBJECT_DELTA' - exporting + CALL FUNCTION 'SVRS_MAKE_OBJECT_DELTA' + EXPORTING obj_old = ls_obj_new obj_new = ls_obj_old - changing + CHANGING delta = rs_delta - exceptions + EXCEPTIONS inconsistent_objects = 1. - if sy-subrc <> 0. + IF sy-subrc <> 0. lcx_exception=>raise( 'error from SVRS_MAKE_OBJECT_DELTA' ). - endif. + ENDIF. - endmethod. "delta_definition + ENDMETHOD. "delta_definition - method delta_controller. + METHOD delta_controller. - data: li_controller type ref to if_wdy_md_controller, - lv_found type abap_bool, - ls_key type wdy_md_controller_key, - ls_obj_new type svrs2_versionable_object, - ls_obj_old type svrs2_versionable_object. + DATA: li_controller TYPE REF TO if_wdy_md_controller, + lv_found TYPE abap_bool, + ls_key TYPE wdy_md_controller_key, + ls_obj_new TYPE svrs2_versionable_object, + ls_obj_old TYPE svrs2_versionable_object. - field-symbols: like line of mt_components, - like line of mt_sources, - type any table, - type any table, - type any table, - type any table. + FIELD-SYMBOLS: LIKE LINE OF mt_components, + LIKE LINE OF mt_sources, + TYPE ANY TABLE, + TYPE ANY TABLE, + TYPE ANY TABLE, + TYPE ANY TABLE. ls_key-component_name = is_controller-definition-component_name. @@ -181,18 +181,18 @@ class lcl_object_wdyn implementation. lv_found = cl_wdy_md_controller=>check_existency( component_name = ls_key-component_name controller_name = ls_key-controller_name ). - if lv_found = abap_false. - try. + IF lv_found = abap_false. + TRY. li_controller ?= cl_wdy_md_controller=>create_complete( component_name = ls_key-component_name controller_name = ls_key-controller_name controller_type = is_controller-definition-controller_type ). li_controller->save_to_database( ). li_controller->unlock( ). - catch cx_wdy_md_exception. + CATCH cx_wdy_md_exception. lcx_exception=>raise( 'error creating dummy controller' ). - endtry. - endif. + ENDTRY. + ENDIF. ls_obj_new-objtype = wdyn_limu_component_controller. ls_obj_new-objname = ls_key. @@ -200,18 +200,18 @@ class lcl_object_wdyn implementation. ls_obj_old-objtype = wdyn_limu_component_controller. ls_obj_old-objname = ls_key. - append is_controller-definition to ls_obj_old-wdyc-defin. + APPEND is_controller-definition TO ls_obj_old-wdyc-defin. - loop at mt_components assigning - where component_name = ls_key-component_name - and controller_name = ls_key-controller_name. - append to ls_obj_old-wdyc-ccomp. - endloop. - loop at mt_sources assigning - where component_name = ls_key-component_name - and controller_name = ls_key-controller_name. - append to ls_obj_old-wdyc-ccoms. - endloop. + LOOP AT mt_components ASSIGNING + WHERE component_name = ls_key-component_name + AND controller_name = ls_key-controller_name. + APPEND TO ls_obj_old-wdyc-ccomp. + ENDLOOP. + LOOP AT mt_sources ASSIGNING + WHERE component_name = ls_key-component_name + AND controller_name = ls_key-controller_name. + APPEND TO ls_obj_old-wdyc-ccoms. + ENDLOOP. ls_obj_old-wdyc-descr = is_controller-descriptions. ls_obj_old-wdyc-cusag = is_controller-controller_usages. @@ -223,45 +223,47 @@ class lcl_object_wdyn implementation. ls_obj_old-wdyc-cmapp = is_controller-context_mappings. * Version 702 doesn't have these two attributes so we * use them dynamically for downward compatibility - assign component 'CONTROLLER_EXCEPTIONS' of structure is_controller to . - if sy-subrc = 0. - assign component 'EXCP' of structure ls_obj_old-wdyc to . - if sy-subrc = 0. + ASSIGN COMPONENT 'CONTROLLER_EXCEPTIONS' OF STRUCTURE is_controller + TO . + IF sy-subrc = 0. + ASSIGN COMPONENT 'EXCP' OF STRUCTURE ls_obj_old-wdyc TO . + IF sy-subrc = 0. = . - endif. - endif. - assign component 'CONTROLLER_EXCEPTIONS_TEXTS' of structure is_controller to . - if sy-subrc = 0. - assign component 'EXCPT' of structure ls_obj_old-wdyc to . - if sy-subrc = 0. + ENDIF. + ENDIF. + ASSIGN COMPONENT 'CONTROLLER_EXCEPTIONS_TEXTS' OF STRUCTURE is_controller + TO . + IF sy-subrc = 0. + ASSIGN COMPONENT 'EXCPT' OF STRUCTURE ls_obj_old-wdyc TO . + IF sy-subrc = 0. = . - endif. - endif. + ENDIF. + ENDIF. ls_obj_old-wdyc-fgrps = is_controller-fieldgroups. - call function 'SVRS_MAKE_OBJECT_DELTA' - exporting + CALL FUNCTION 'SVRS_MAKE_OBJECT_DELTA' + EXPORTING obj_old = ls_obj_new obj_new = ls_obj_old - changing + CHANGING delta = rs_delta - exceptions + EXCEPTIONS inconsistent_objects = 1. - if sy-subrc <> 0. + IF sy-subrc <> 0. lcx_exception=>raise( 'error from SVRS_MAKE_OBJECT_DELTA' ). - endif. + ENDIF. - endmethod. "delta_controller + ENDMETHOD. "delta_controller - method delta_view. + METHOD delta_view. - data: ls_key type wdy_md_view_key, - ls_obj_new type svrs2_versionable_object, - ls_obj_old type svrs2_versionable_object, - lv_found type abap_bool, - li_view type ref to if_wdy_md_abstract_view. + DATA: ls_key TYPE wdy_md_view_key, + ls_obj_new TYPE svrs2_versionable_object, + ls_obj_old TYPE svrs2_versionable_object, + lv_found TYPE abap_bool, + li_view TYPE REF TO if_wdy_md_abstract_view. - field-symbols: like line of ls_obj_old-wdyv-defin. + FIELD-SYMBOLS: LIKE LINE OF ls_obj_old-wdyv-defin. ls_key-component_name = is_view-definition-component_name. @@ -270,18 +272,18 @@ class lcl_object_wdyn implementation. lv_found = cl_wdy_md_abstract_view=>check_existency( component_name = ls_key-component_name name = ls_key-view_name ). - if lv_found = abap_false. - try. + IF lv_found = abap_false. + TRY. li_view = cl_wdy_md_abstract_view=>create( component_name = is_view-definition-component_name view_name = is_view-definition-view_name type = is_view-definition-type ). li_view->save_to_database( ). li_view->unlock( ). - catch cx_wdy_md_exception. + CATCH cx_wdy_md_exception. lcx_exception=>raise( 'error creating dummy view' ). - endtry. - endif. + ENDTRY. + ENDIF. ls_obj_new-objtype = wdyn_limu_component_view. ls_obj_new-objname = ls_key. @@ -289,8 +291,8 @@ class lcl_object_wdyn implementation. ls_obj_old-objtype = wdyn_limu_component_view. ls_obj_old-objname = ls_key. - append initial line to ls_obj_old-wdyv-defin assigning . - move-corresponding is_view-definition to . + APPEND INITIAL LINE TO ls_obj_old-wdyv-defin ASSIGNING . + MOVE-CORRESPONDING is_view-definition TO . ls_obj_old-wdyv-descr = is_view-descriptions. ls_obj_old-wdyv-vcont = is_view-view_containers. @@ -310,44 +312,44 @@ class lcl_object_wdyn implementation. ls_obj_old-wdyv-vshpl = is_view-vsh_placeholders. ls_obj_old-wdyv-views = is_view-viewset_properties. - call function 'SVRS_MAKE_OBJECT_DELTA' - exporting + CALL FUNCTION 'SVRS_MAKE_OBJECT_DELTA' + EXPORTING obj_old = ls_obj_new obj_new = ls_obj_old - changing + CHANGING delta = rs_delta - exceptions + EXCEPTIONS inconsistent_objects = 1. - if sy-subrc <> 0. + IF sy-subrc <> 0. lcx_exception=>raise( 'error from SVRS_MAKE_OBJECT_DELTA' ). - endif. + ENDIF. - endmethod. "delta_view + ENDMETHOD. "delta_view - method recover_definition. + METHOD recover_definition. - data: ls_key type wdy_md_component_key, - lv_corrnr type trkorr, - ls_delta type svrs2_xversionable_object. + DATA: ls_key TYPE wdy_md_component_key, + lv_corrnr TYPE trkorr, + ls_delta TYPE svrs2_xversionable_object. ls_delta = delta_definition( is_definition ). ls_key-component_name = is_definition-definition-component_name. cl_wdy_md_component=>recover_version( - exporting + EXPORTING component_key = ls_key delta = ls_delta-wdyd - changing + CHANGING corrnr = lv_corrnr ). - endmethod. "recover_definition + ENDMETHOD. "recover_definition - method recover_controller. + METHOD recover_controller. - data: ls_key type wdy_controller_key, - lv_corrnr type trkorr, - ls_delta type svrs2_xversionable_object. + DATA: ls_key TYPE wdy_controller_key, + lv_corrnr TYPE trkorr, + ls_delta TYPE svrs2_xversionable_object. ls_delta = delta_controller( is_controller ). @@ -355,19 +357,19 @@ class lcl_object_wdyn implementation. ls_key-controller_name = is_controller-definition-controller_name. cl_wdy_md_controller=>recover_version( - exporting + EXPORTING controller_key = ls_key delta = ls_delta-wdyc - changing + CHANGING corrnr = lv_corrnr ). - endmethod. "recover_controller + ENDMETHOD. "recover_controller - method recover_view. + METHOD recover_view. - data: ls_key type wdy_md_view_key, - lv_corrnr type trkorr, - ls_delta type svrs2_xversionable_object. + DATA: ls_key TYPE wdy_md_view_key, + lv_corrnr TYPE trkorr, + ls_delta TYPE svrs2_xversionable_object. ls_delta = delta_view( is_view ). @@ -375,137 +377,137 @@ class lcl_object_wdyn implementation. ls_key-view_name = is_view-definition-view_name. cl_wdy_md_abstract_view=>recover_version( - exporting + EXPORTING view_key = ls_key delta = ls_delta-wdyv - changing + CHANGING corrnr = lv_corrnr ). - endmethod. "recover_view + ENDMETHOD. "recover_view - method read_controller. + METHOD read_controller. - data: lt_components type table of wdy_ctlr_compo_vrs, - lt_sources type table of wdy_ctlr_compo_source_vrs, - lt_definition type table of wdy_controller, - lt_psmodilog type table of smodilog, - lt_psmodisrc type table of smodisrc, - lt_fm_param type abap_func_parmbind_tab, - lt_fm_exception type abap_func_excpbind_tab. + DATA: lt_components TYPE TABLE OF wdy_ctlr_compo_vrs, + lt_sources TYPE TABLE OF wdy_ctlr_compo_source_vrs, + lt_definition TYPE TABLE OF wdy_controller, + lt_psmodilog TYPE TABLE OF smodilog, + lt_psmodisrc TYPE TABLE OF smodisrc, + lt_fm_param TYPE abap_func_parmbind_tab, + lt_fm_exception TYPE abap_func_excpbind_tab. - field-symbols: type any table, - type any table. + FIELD-SYMBOLS: TYPE ANY TABLE, + TYPE ANY TABLE. * Calling FM dynamically because version 702 has less parameters * FM parameters - add_fm_param_exporting( exporting i_name = 'CONTROLLER_KEY' + add_fm_param_exporting( EXPORTING i_name = 'CONTROLLER_KEY' i_value = is_key - changing ct_param = lt_fm_param ). - add_fm_param_exporting( exporting i_name = 'GET_ALL_TRANSLATIONS' + CHANGING ct_param = lt_fm_param ). + add_fm_param_exporting( EXPORTING i_name = 'GET_ALL_TRANSLATIONS' i_value = abap_false - changing ct_param = lt_fm_param ). - add_fm_param_tables( exporting i_name = 'DEFINITION' - changing ct_value = lt_definition + CHANGING ct_param = lt_fm_param ). + add_fm_param_tables( EXPORTING i_name = 'DEFINITION' + CHANGING ct_value = lt_definition ct_param = lt_fm_param ). - add_fm_param_tables( exporting i_name = 'DESCRIPTIONS' - changing ct_value = rs_controller-descriptions + add_fm_param_tables( EXPORTING i_name = 'DESCRIPTIONS' + CHANGING ct_value = rs_controller-descriptions ct_param = lt_fm_param ). - add_fm_param_tables( exporting i_name = 'CONTROLLER_USAGES' - changing ct_value = rs_controller-controller_usages + add_fm_param_tables( EXPORTING i_name = 'CONTROLLER_USAGES' + CHANGING ct_value = rs_controller-controller_usages ct_param = lt_fm_param ). - add_fm_param_tables( exporting i_name = 'CONTROLLER_COMPONENTS' - changing ct_value = lt_components + add_fm_param_tables( EXPORTING i_name = 'CONTROLLER_COMPONENTS' + CHANGING ct_value = lt_components ct_param = lt_fm_param ). - add_fm_param_tables( exporting i_name = 'CONTROLLER_COMPONENT_SOURCES' - changing ct_value = lt_sources + add_fm_param_tables( EXPORTING i_name = 'CONTROLLER_COMPONENT_SOURCES' + CHANGING ct_value = lt_sources ct_param = lt_fm_param ). - add_fm_param_tables( exporting i_name = 'CONTROLLER_COMPONENT_TEXTS' - changing ct_value = rs_controller-controller_component_texts + add_fm_param_tables( EXPORTING i_name = 'CONTROLLER_COMPONENT_TEXTS' + CHANGING ct_value = rs_controller-controller_component_texts ct_param = lt_fm_param ). - add_fm_param_tables( exporting i_name = 'CONTROLLER_PARAMETERS' - changing ct_value = rs_controller-controller_parameters + add_fm_param_tables( EXPORTING i_name = 'CONTROLLER_PARAMETERS' + CHANGING ct_value = rs_controller-controller_parameters ct_param = lt_fm_param ). - add_fm_param_tables( exporting i_name = 'CONTROLLER_PARAMETER_TEXTS' - changing ct_value = rs_controller-controller_parameter_texts + add_fm_param_tables( EXPORTING i_name = 'CONTROLLER_PARAMETER_TEXTS' + CHANGING ct_value = rs_controller-controller_parameter_texts ct_param = lt_fm_param ). - add_fm_param_tables( exporting i_name = 'CONTEXT_NODES' - changing ct_value = rs_controller-context_nodes + add_fm_param_tables( EXPORTING i_name = 'CONTEXT_NODES' + CHANGING ct_value = rs_controller-context_nodes ct_param = lt_fm_param ). - add_fm_param_tables( exporting i_name = 'CONTEXT_ATTRIBUTES' - changing ct_value = rs_controller-context_attributes + add_fm_param_tables( EXPORTING i_name = 'CONTEXT_ATTRIBUTES' + CHANGING ct_value = rs_controller-context_attributes ct_param = lt_fm_param ). - add_fm_param_tables( exporting i_name = 'CONTEXT_MAPPINGS' - changing ct_value = rs_controller-context_mappings + add_fm_param_tables( EXPORTING i_name = 'CONTEXT_MAPPINGS' + CHANGING ct_value = rs_controller-context_mappings ct_param = lt_fm_param ). - add_fm_param_tables( exporting i_name = 'FIELDGROUPS' - changing ct_value = rs_controller-fieldgroups + add_fm_param_tables( EXPORTING i_name = 'FIELDGROUPS' + CHANGING ct_value = rs_controller-fieldgroups ct_param = lt_fm_param ). * Version 702 doesn't have these two attributes so we * use them dynamically for downward compatibility - assign component 'CONTROLLER_EXCEPTIONS' of structure rs_controller to . - if sy-subrc = 0. - add_fm_param_tables( exporting i_name = 'CONTROLLER_EXCEPTIONS' - changing ct_value = + ASSIGN COMPONENT 'CONTROLLER_EXCEPTIONS' OF STRUCTURE rs_controller TO . + IF sy-subrc = 0. + add_fm_param_tables( EXPORTING i_name = 'CONTROLLER_EXCEPTIONS' + CHANGING ct_value = ct_param = lt_fm_param ). - endif. - assign component 'CONTROLLER_EXCEPTION_TEXTS' of structure rs_controller to . - if sy-subrc = 0. - add_fm_param_tables( exporting i_name = 'CONTROLLER_EXCEPTION_TEXTS' - changing ct_value = + ENDIF. + ASSIGN COMPONENT 'CONTROLLER_EXCEPTION_TEXTS' OF STRUCTURE rs_controller TO . + IF sy-subrc = 0. + add_fm_param_tables( EXPORTING i_name = 'CONTROLLER_EXCEPTION_TEXTS' + CHANGING ct_value = ct_param = lt_fm_param ). - endif. - add_fm_param_tables( exporting i_name = 'PSMODILOG' - changing ct_value = lt_psmodilog + ENDIF. + add_fm_param_tables( EXPORTING i_name = 'PSMODILOG' + CHANGING ct_value = lt_psmodilog ct_param = lt_fm_param ). - add_fm_param_tables( exporting i_name = 'PSMODISRC' - changing ct_value = lt_psmodisrc + add_fm_param_tables( EXPORTING i_name = 'PSMODISRC' + CHANGING ct_value = lt_psmodisrc ct_param = lt_fm_param ). * FM exceptions - add_fm_exception( exporting i_name = 'NOT_EXISTING' + add_fm_exception( EXPORTING i_name = 'NOT_EXISTING' i_value = 1 - changing ct_exception = lt_fm_exception ). - add_fm_exception( exporting i_name = 'OTHERS' + CHANGING ct_exception = lt_fm_exception ). + add_fm_exception( EXPORTING i_name = 'OTHERS' i_value = 2 - changing ct_exception = lt_fm_exception ). + CHANGING ct_exception = lt_fm_exception ). - call function 'WDYC_GET_OBJECT' - parameter-table + CALL FUNCTION 'WDYC_GET_OBJECT' + PARAMETER-TABLE lt_fm_param - exception-table + EXCEPTION-TABLE lt_fm_exception. - if sy-subrc <> 0. + IF sy-subrc <> 0. lcx_exception=>raise( 'error from WDYC_GET_OBJECT' ). - endif. + ENDIF. - append lines of lt_components to mt_components. - append lines of lt_sources to mt_sources. + APPEND LINES OF lt_components TO mt_components. + APPEND LINES OF lt_sources TO mt_sources. - read table lt_definition index 1 into rs_controller-definition. - if sy-subrc <> 0. + READ TABLE lt_definition INDEX 1 INTO rs_controller-definition. + IF sy-subrc <> 0. lcx_exception=>raise( 'WDYC, definition not found' ). - endif. + ENDIF. - clear: rs_controller-definition-author, + CLEAR: rs_controller-definition-author, rs_controller-definition-createdon, rs_controller-definition-changedby, rs_controller-definition-changedon. - endmethod. "read_controller + ENDMETHOD. "read_controller - method read_definition. + METHOD read_definition. - data: lt_definition type table of wdy_component, - lt_psmodilog type table of smodilog, - lt_psmodisrc type table of smodisrc. + DATA: lt_definition TYPE TABLE OF wdy_component, + lt_psmodilog TYPE TABLE OF smodilog, + lt_psmodisrc TYPE TABLE OF smodisrc. - call function 'WDYD_GET_OBJECT' - exporting + CALL FUNCTION 'WDYD_GET_OBJECT' + EXPORTING component_key = is_key get_all_translations = abap_false - tables + TABLES definition = lt_definition descriptions = rs_definition-descriptions component_usages = rs_definition-component_usages @@ -515,43 +517,43 @@ class lcl_object_wdyn implementation. ext_ctx_mappings = rs_definition-ext_ctx_mappings psmodilog = lt_psmodilog " not optional in all versions psmodisrc = lt_psmodisrc " not optional in all versions - exceptions + EXCEPTIONS not_existing = 1 - others = 2. - if sy-subrc = 1. - return. - elseif sy-subrc <> 0. + OTHERS = 2. + IF sy-subrc = 1. + RETURN. + ELSEIF sy-subrc <> 0. lcx_exception=>raise( 'error from WDYD_GET_OBJECT' ). - endif. + ENDIF. - read table lt_definition index 1 into rs_definition-definition. - if sy-subrc <> 0. + READ TABLE lt_definition INDEX 1 INTO rs_definition-definition. + IF sy-subrc <> 0. lcx_exception=>raise( 'WDYD, definition not found' ). - endif. + ENDIF. - clear: rs_definition-definition-author, + CLEAR: rs_definition-definition-author, rs_definition-definition-createdon, rs_definition-definition-changedby, rs_definition-definition-changedon, rs_definition-definition-gendate, rs_definition-definition-gentime. - endmethod. "read_definition + ENDMETHOD. "read_definition - method read_view. + METHOD read_view. - data: lt_definition type table of wdy_view_vrs, - lt_psmodilog type table of smodilog, - lt_psmodisrc type table of smodisrc. + DATA: lt_definition TYPE TABLE OF wdy_view_vrs, + lt_psmodilog TYPE TABLE OF smodilog, + lt_psmodisrc TYPE TABLE OF smodisrc. - field-symbols: like line of lt_definition. + FIELD-SYMBOLS: LIKE LINE OF lt_definition. - call function 'WDYV_GET_OBJECT' - exporting + CALL FUNCTION 'WDYV_GET_OBJECT' + EXPORTING view_key = is_key get_all_translations = abap_false - tables + TABLES definition = lt_definition descriptions = rs_view-descriptions view_containers = rs_view-view_containers @@ -572,149 +574,149 @@ class lcl_object_wdyn implementation. viewset_properties = rs_view-viewset_properties psmodilog = lt_psmodilog psmodisrc = lt_psmodisrc - exceptions + EXCEPTIONS not_existing = 1 - others = 2. - if sy-subrc <> 0. + OTHERS = 2. + IF sy-subrc <> 0. lcx_exception=>raise( 'error from WDYV_GET_OBJECT' ). - endif. + ENDIF. - read table lt_definition index 1 assigning . - assert sy-subrc = 0. - move-corresponding to rs_view-definition. + READ TABLE lt_definition INDEX 1 ASSIGNING . + ASSERT sy-subrc = 0. + MOVE-CORRESPONDING TO rs_view-definition. - clear: rs_view-definition-author, + CLEAR: rs_view-definition-author, rs_view-definition-createdon, rs_view-definition-changedby, rs_view-definition-changedon. - endmethod. "read_view + ENDMETHOD. "read_view - method get_limu_objects. + METHOD get_limu_objects. - data: lv_name type wdy_component_name. + DATA: lv_name TYPE wdy_component_name. lv_name = ms_item-obj_name. - call function 'WDYN_GET_LIMU_OBJECTS' - exporting + CALL FUNCTION 'WDYN_GET_LIMU_OBJECTS' + EXPORTING component_name = lv_name - importing + IMPORTING limu_objects = rt_objects. - endmethod. "get_limu_objects + ENDMETHOD. "get_limu_objects - method read. + METHOD read. - data: lt_objects type wdy_md_transport_keys, - ls_controller_key type wdy_md_controller_key, - ls_component_key type wdy_md_component_key, - ls_view_key type wdy_md_view_key. + DATA: lt_objects TYPE wdy_md_transport_keys, + ls_controller_key TYPE wdy_md_controller_key, + ls_component_key TYPE wdy_md_component_key, + ls_view_key TYPE wdy_md_view_key. - field-symbols: like line of lt_objects, - like line of rs_component-ctlr_metadata, - type any table, - type any table. + FIELD-SYMBOLS: LIKE LINE OF lt_objects, + LIKE LINE OF rs_component-ctlr_metadata, + TYPE ANY TABLE, + TYPE ANY TABLE. - clear mt_components. - clear mt_sources. + CLEAR mt_components. + CLEAR mt_sources. lt_objects = get_limu_objects( ). - loop at lt_objects assigning . - case -sub_type. - when wdyn_limu_component_controller. + LOOP AT lt_objects ASSIGNING . + CASE -sub_type. + WHEN wdyn_limu_component_controller. ls_controller_key = -sub_name. - append read_controller( ls_controller_key ) to rs_component-ctlr_metadata. - when wdyn_limu_component_definition. + APPEND read_controller( ls_controller_key ) TO rs_component-ctlr_metadata. + WHEN wdyn_limu_component_definition. ls_component_key = -sub_name. rs_component-comp_metadata = read_definition( ls_component_key ). - when wdyn_limu_component_view. + WHEN wdyn_limu_component_view. ls_view_key = -sub_name. - append read_view( ls_view_key ) to rs_component-view_metadata. - when others. - assert 0 = 1. - endcase. - endloop. + APPEND read_view( ls_view_key ) TO rs_component-view_metadata. + WHEN OTHERS. + ASSERT 0 = 1. + ENDCASE. + ENDLOOP. - sort rs_component-ctlr_metadata by - definition-component_name ascending - definition-controller_name ascending. + SORT rs_component-ctlr_metadata BY + definition-component_name ASCENDING + definition-controller_name ASCENDING. - loop at rs_component-ctlr_metadata assigning . - sort -descriptions. - sort -controller_usages. - sort -controller_components. - sort -controller_component_texts. - sort -controller_parameters. - sort -controller_parameter_texts. - sort -context_nodes. - sort -context_attributes. - sort -context_mappings. - sort -fieldgroups. + LOOP AT rs_component-ctlr_metadata ASSIGNING . + SORT -descriptions. + SORT -controller_usages. + SORT -controller_components. + SORT -controller_component_texts. + SORT -controller_parameters. + SORT -controller_parameter_texts. + SORT -context_nodes. + SORT -context_attributes. + SORT -context_mappings. + SORT -fieldgroups. * Version 702 doesn't have these two attributes so we * use them dynamically for downward compatibility - assign component 'CONTROLLER_EXCEPTIONS' of structure to . - if sy-subrc = 0. - sort . - endif. - assign component 'CONTROLLER_EXCEPTION_TEXTS' of structure to . - if sy-subrc = 0. - sort . - endif. - endloop. + ASSIGN COMPONENT 'CONTROLLER_EXCEPTIONS' OF STRUCTURE TO . + IF sy-subrc = 0. + SORT . + ENDIF. + ASSIGN COMPONENT 'CONTROLLER_EXCEPTION_TEXTS' OF STRUCTURE TO . + IF sy-subrc = 0. + SORT . + ENDIF. + ENDLOOP. - sort mt_components by - component_name ascending - controller_name ascending - cmpname ascending. + SORT mt_components BY + component_name ASCENDING + controller_name ASCENDING + cmpname ASCENDING. - sort mt_sources by - component_name ascending - controller_name ascending - cmpname ascending - line_number ascending. + SORT mt_sources BY + component_name ASCENDING + controller_name ASCENDING + cmpname ASCENDING + line_number ASCENDING. - endmethod. "read + ENDMETHOD. "read - method add_fm_param_exporting. + METHOD add_fm_param_exporting. - data: ls_param like line of ct_param. + DATA: ls_param LIKE LINE OF ct_param. ls_param-kind = abap_func_exporting. ls_param-name = i_name. - get reference of i_value into ls_param-value. + GET REFERENCE OF i_value INTO ls_param-value. - insert ls_param into table ct_param. + INSERT ls_param INTO TABLE ct_param. - endmethod. "add_fm_param_exporting + ENDMETHOD. "add_fm_param_exporting - method add_fm_param_tables. + METHOD add_fm_param_tables. - data: ls_param like line of ct_param. + DATA: ls_param LIKE LINE OF ct_param. ls_param-kind = abap_func_tables. ls_param-name = i_name. - get reference of ct_value into ls_param-value. + GET REFERENCE OF ct_value INTO ls_param-value. - insert ls_param into table ct_param. + INSERT ls_param INTO TABLE ct_param. - endmethod. "add_fm_param_tables + ENDMETHOD. "add_fm_param_tables - method add_fm_exception. + METHOD add_fm_exception. - data: ls_exception like line of ct_exception. + DATA: ls_exception LIKE LINE OF ct_exception. ls_exception-name = i_name. ls_exception-value = i_value. - insert ls_exception into table ct_exception. + INSERT ls_exception INTO TABLE ct_exception. - endmethod. "add_fm_exception + ENDMETHOD. "add_fm_exception - method lif_object~serialize. + METHOD lif_object~serialize. - data: ls_component type wdy_component_metadata. + DATA: ls_component TYPE wdy_component_metadata. ls_component = read( ). @@ -726,55 +728,55 @@ class lcl_object_wdyn implementation. io_xml->add( ig_data = mt_sources iv_name = 'SOURCES' ). - endmethod. "serialize + ENDMETHOD. "serialize - method lif_object~deserialize. + METHOD lif_object~deserialize. - data: ls_component type wdy_component_metadata. + DATA: ls_component TYPE wdy_component_metadata. - field-symbols: like line of ls_component-view_metadata, - like line of ls_component-ctlr_metadata. + FIELD-SYMBOLS: LIKE LINE OF ls_component-view_metadata, + LIKE LINE OF ls_component-ctlr_metadata. - io_xml->read( exporting iv_name = 'COMPONENT' - changing cg_data = ls_component ). - io_xml->read( exporting iv_name = 'COMPONENTS' - changing cg_data = mt_components ). - io_xml->read( exporting iv_name = 'SOURCES' - changing cg_data = mt_sources ). + io_xml->read( EXPORTING iv_name = 'COMPONENT' + CHANGING cg_data = ls_component ). + io_xml->read( EXPORTING iv_name = 'COMPONENTS' + CHANGING cg_data = mt_components ). + io_xml->read( EXPORTING iv_name = 'SOURCES' + CHANGING cg_data = mt_sources ). ls_component-comp_metadata-definition-author = sy-uname. ls_component-comp_metadata-definition-createdon = sy-datum. recover_definition( ls_component-comp_metadata ). - loop at ls_component-ctlr_metadata assigning . + LOOP AT ls_component-ctlr_metadata ASSIGNING . -definition-author = sy-uname. -definition-createdon = sy-datum. recover_controller( ). - endloop. - loop at ls_component-view_metadata assigning . + ENDLOOP. + LOOP AT ls_component-view_metadata ASSIGNING . -definition-author = sy-uname. -definition-createdon = sy-datum. recover_view( ). - endloop. + ENDLOOP. lcl_objects_activation=>add_item( ms_item ). - endmethod. "deserialize + ENDMETHOD. "deserialize - method lif_object~delete. + METHOD lif_object~delete. - data: lo_component type ref to cl_wdy_wb_component, - lo_request type ref to cl_wb_request, - li_state type ref to if_wb_program_state, - lv_object_name type seu_objkey. + DATA: lo_component TYPE REF TO cl_wdy_wb_component, + lo_request TYPE REF TO cl_wb_request, + li_state TYPE REF TO if_wb_program_state, + lv_object_name TYPE seu_objkey. - create object lo_component. + CREATE OBJECT lo_component. lv_object_name = ms_item-obj_name. - create object lo_request - exporting + CREATE OBJECT lo_request + EXPORTING p_object_type = 'YC' p_object_name = lv_object_name p_operation = swbm_c_op_delete_no_dialog. @@ -783,21 +785,21 @@ class lcl_object_wdyn implementation. p_wb_request = lo_request p_wb_program_state = li_state ). - endmethod. "delete + ENDMETHOD. "delete - method lif_object~jump. + METHOD lif_object~jump. - call function 'RS_TOOL_ACCESS' - exporting + CALL FUNCTION 'RS_TOOL_ACCESS' + EXPORTING operation = 'SHOW' object_name = ms_item-obj_name object_type = ms_item-obj_type in_new_window = abap_true. - endmethod. "jump + ENDMETHOD. "jump - method lif_object~compare_to_remote_version. - create object ro_comparison_result type lcl_null_comparison_result. - endmethod. "lif_object~compare_to_remote_version + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. "lif_object~compare_to_remote_version -endclass. "lcl_object_wdyn IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_wdyn IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index 6ac06cf57..b7a282a24 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -187,7 +187,7 @@ ENDCLASS. "lcl_objects_activation IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* -CLASS lcl_objects_files DEFINITION . +CLASS lcl_objects_files DEFINITION. PUBLIC SECTION. METHODS: @@ -1705,9 +1705,9 @@ 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. +* CLASS-METHODS is_language_installed +* IMPORTING iv_language TYPE langu +* RETURNING VALUE(rv_yes) TYPE abap_bool. PRIVATE SECTION. @@ -1747,7 +1747,6 @@ 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. diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap index c90be83ba..f8bd9fe2f 100644 --- a/src/zabapgit_objects_impl.prog.abap +++ b/src/zabapgit_objects_impl.prog.abap @@ -207,17 +207,17 @@ 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 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. @@ -616,8 +616,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 WHERE obj_type IS NOT INITIAL AND NOT ( lstate = gc_state-added AND rstate IS INITIAL ). @@ -656,9 +655,9 @@ CLASS lcl_objects IMPLEMENTATION. is_metadata = lo_xml->get_metadata( ) ). compare_remote_to_local( - io_object = li_obj - it_remote = lt_remote - is_result = ). + io_object = li_obj + it_remote = lt_remote + is_result = ). li_obj->mo_files = lo_files. diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index 0f5d31f6f..49068e805 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -53,7 +53,6 @@ CLASS lcl_gui_page_super DEFINITION ABSTRACT. 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. METHODS footer diff --git a/src/zabapgit_page_debug.prog.abap b/src/zabapgit_page_debug.prog.abap index e7bd0446a..9900f333a 100644 --- a/src/zabapgit_page_debug.prog.abap +++ b/src/zabapgit_page_debug.prog.abap @@ -8,11 +8,11 @@ CLASS lcl_gui_page_debuginfo DEFINITION FINAL INHERITING FROM lcl_gui_page_super PRIVATE SECTION. METHODS scripts - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. + 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_helper. METHODS render_supported_object_types - RETURNING VALUE(rv_html) TYPE string. + RETURNING VALUE(rv_html) TYPE string. ENDCLASS. "lcl_gui_page_debuginfo @@ -69,7 +69,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 WHERE pgmid = 'R3TR'. ls_item-obj_type = -object. diff --git a/src/zabapgit_page_diff.prog.abap b/src/zabapgit_page_diff.prog.abap index 79ed392c0..1d3715ac7 100644 --- a/src/zabapgit_page_diff.prog.abap +++ b/src/zabapgit_page_diff.prog.abap @@ -93,10 +93,9 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. ELSEIF is_object IS NOT INITIAL. " Diff for whole object LOOP AT lt_status ASSIGNING - 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 = ). diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap index 7ab201350..f7bf81023 100644 --- a/src/zabapgit_page_main.prog.abap +++ b/src/zabapgit_page_main.prog.abap @@ -137,14 +137,12 @@ CLASS lcl_gui_page_main IMPLEMENTATION. 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->lif_gui_page~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( ) ). diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index dfd246b72..d5498f8c0 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -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. diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 4953a8fa1..364f8a55b 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -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 WHERE item = ls_item. APPEND TO rt_files. ENDLOOP. diff --git a/src/zabapgit_sap_package.prog.abap b/src/zabapgit_sap_package.prog.abap index f9c214669..d9a0ad838 100644 --- a/src/zabapgit_sap_package.prog.abap +++ b/src/zabapgit_sap_package.prog.abap @@ -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 WHERE NOT obj_type IS INITIAL. - IF NOT ( -obj_type = ls_item-obj_type AND -obj_name = ls_item-obj_name ). + IF NOT ( -obj_type = ls_item-obj_type + AND -obj_name = ls_item-obj_name ). APPEND INITIAL LINE TO lt_item_idx ASSIGNING . -obj_type = -obj_type. -obj_name = -obj_name. diff --git a/src/zabapgit_services_abapgit.prog.abap b/src/zabapgit_services_abapgit.prog.abap index 00e8dd053..94f76577f 100644 --- a/src/zabapgit_services_abapgit.prog.abap +++ b/src/zabapgit_services_abapgit.prog.abap @@ -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. diff --git a/src/zabapgit_services_db.prog.abap b/src/zabapgit_services_db.prog.abap index 502afec72..e32884e55 100644 --- a/src/zabapgit_services_db.prog.abap +++ b/src/zabapgit_services_db.prog.abap @@ -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. diff --git a/src/zabapgit_services_git.prog.abap b/src/zabapgit_services_git.prog.abap index cc24467b2..ee3d03d13 100644 --- a/src/zabapgit_services_git.prog.abap +++ b/src/zabapgit_services_git.prog.abap @@ -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. diff --git a/src/zabapgit_services_repo.prog.abap b/src/zabapgit_services_repo.prog.abap index 2c9863854..59e9157a3 100644 --- a/src/zabapgit_services_repo.prog.abap +++ b/src/zabapgit_services_repo.prog.abap @@ -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. diff --git a/src/zabapgit_syntax_highlighter.prog.abap b/src/zabapgit_syntax_highlighter.prog.abap index c80816ab0..050c9e107 100644 --- a/src/zabapgit_syntax_highlighter.prog.abap +++ b/src/zabapgit_syntax_highlighter.prog.abap @@ -197,8 +197,7 @@ CLASS lcl_syntax_highlighter IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF mt_rules, - TYPE match_result, - TYPE ty_match. + 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 ). diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index a65998076..cf7ecbfa9 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -1839,7 +1839,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,21 +2184,21 @@ 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. @@ -2337,7 +2336,7 @@ CLASS ltd_fake_object_files IMPLEMENTATION. ENDCLASS. -CLASS ltc_oo_test DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT . +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, From 9725d3bf380293089de6ee9071513192b51d44e8 Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 29 Dec 2016 13:33:08 +0000 Subject: [PATCH 005/142] fix issue 500 --- src/zabapgit_objects_impl.prog.abap | 45 +++++++++++++++-------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap index f8bd9fe2f..674afa5d7 100644 --- a/src/zabapgit_objects_impl.prog.abap +++ b/src/zabapgit_objects_impl.prog.abap @@ -238,26 +238,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,15 +592,15 @@ 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_late TYPE TABLE OF ty_late. FIELD-SYMBOLS: TYPE ty_result, LIKE LINE OF lt_late. From 4c10fb71771fc5473137ece34888e32508b41db4 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Thu, 29 Dec 2016 15:10:28 +0100 Subject: [PATCH 006/142] fix syntax error in build --- src/zabapgit_gui_asset_manager.prog.abap | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/zabapgit_gui_asset_manager.prog.abap b/src/zabapgit_gui_asset_manager.prog.abap index bafd1f66b..2ab28c7ac 100644 --- a/src/zabapgit_gui_asset_manager.prog.abap +++ b/src/zabapgit_gui_asset_manager.prog.abap @@ -132,11 +132,20 @@ CLASS lcl_gui_asset_manager IMPLEMENTATION. ENDMETHOD. " get_images. + DEFINE _inline. + APPEND &1 TO lt_data. + END-OF-DEFINITION. + METHOD get_inline_asset. DATA: lt_data TYPE ty_string_tt, lv_str TYPE string. + IF 0 = 1. + * used via abapmerge + _inline 'foo'. + ENDIF. + CASE iv_asset_name. WHEN 'CSS_COMMON'. " @@abapmerge include zabapgit_css_common.w3mi.data.css > _inline '$$'. @@ -403,4 +412,4 @@ CLASS lcl_gui_asset_manager IMPLEMENTATION. ENDMETHOD. " get_inline_images. -ENDCLASS. "lcl_gui_asset_manager \ No newline at end of file +ENDCLASS. "lcl_gui_asset_manager From edc3cb9b14b73812d31a6a319192731923076ae8 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Thu, 29 Dec 2016 15:12:13 +0100 Subject: [PATCH 007/142] Update zabapgit_gui_asset_manager.prog.abap --- src/zabapgit_gui_asset_manager.prog.abap | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/zabapgit_gui_asset_manager.prog.abap b/src/zabapgit_gui_asset_manager.prog.abap index 2ab28c7ac..2af85ad0e 100644 --- a/src/zabapgit_gui_asset_manager.prog.abap +++ b/src/zabapgit_gui_asset_manager.prog.abap @@ -140,11 +140,7 @@ CLASS lcl_gui_asset_manager IMPLEMENTATION. DATA: lt_data TYPE ty_string_tt, lv_str TYPE string. - - IF 0 = 1. - * used via abapmerge - _inline 'foo'. - ENDIF. + CASE iv_asset_name. WHEN 'CSS_COMMON'. From 31599291089dd2462a4725f6e980f780341bec17 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Thu, 29 Dec 2016 15:13:51 +0100 Subject: [PATCH 008/142] Update zabapgit_gui_asset_manager.prog.abap --- src/zabapgit_gui_asset_manager.prog.abap | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/zabapgit_gui_asset_manager.prog.abap b/src/zabapgit_gui_asset_manager.prog.abap index 2af85ad0e..9ddb8a9b0 100644 --- a/src/zabapgit_gui_asset_manager.prog.abap +++ b/src/zabapgit_gui_asset_manager.prog.abap @@ -133,14 +133,14 @@ CLASS lcl_gui_asset_manager IMPLEMENTATION. ENDMETHOD. " get_images. DEFINE _inline. - APPEND &1 TO lt_data. - END-OF-DEFINITION. + APPEND &1 TO lt_data. + END-OF-DEFINITION. METHOD get_inline_asset. DATA: lt_data TYPE ty_string_tt, lv_str TYPE string. - + CASE iv_asset_name. WHEN 'CSS_COMMON'. From 14a002523fa555fafff380903a577a872e5dc6fa Mon Sep 17 00:00:00 2001 From: larshp Date: Fri, 30 Dec 2016 09:19:00 +0100 Subject: [PATCH 009/142] fix newline --- src/zabapgit_gui_asset_manager.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit_gui_asset_manager.prog.abap b/src/zabapgit_gui_asset_manager.prog.abap index 9ddb8a9b0..8c94df8a6 100644 --- a/src/zabapgit_gui_asset_manager.prog.abap +++ b/src/zabapgit_gui_asset_manager.prog.abap @@ -408,4 +408,4 @@ CLASS lcl_gui_asset_manager IMPLEMENTATION. ENDMETHOD. " get_inline_images. -ENDCLASS. "lcl_gui_asset_manager +ENDCLASS. "lcl_gui_asset_manager \ No newline at end of file From f1ca40bc724e90010c79f191695d5f9e00d0ddc5 Mon Sep 17 00:00:00 2001 From: larshp Date: Fri, 30 Dec 2016 11:44:44 +0000 Subject: [PATCH 010/142] VIEW: clear redundant fields, close #491 --- src/zabapgit.prog.abap | 2 +- src/zabapgit_object_view.prog.abap | 32 +++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 5adf0bddf..373594a21 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -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.9'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.24.10'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) diff --git a/src/zabapgit_object_view.prog.abap b/src/zabapgit_object_view.prog.abap index 31481e426..4f0ccdd31 100644 --- a/src/zabapgit_object_view.prog.abap +++ b/src/zabapgit_object_view.prog.abap @@ -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) @@ -115,6 +115,8 @@ CLASS lcl_object_view IMPLEMENTATION. lt_dd28j TYPE TABLE OF dd28j, lt_dd28v TYPE TABLE OF dd28v. + FIELD-SYMBOLS: LIKE LINE OF lt_dd27p. + lv_name = ms_item-obj_name. @@ -149,6 +151,30 @@ CLASS lcl_object_view IMPLEMENTATION. ls_dd09l-as4date, ls_dd09l-as4time. + LOOP AT lt_dd27p ASSIGNING . + CLEAR: -ddtext, + -reptext, + -scrtext_s, + -scrtext_m, + -scrtext_l, + -outputlen, + -decimals, + -lowercase, + -convexit, + -signflag, + -flength, + -domname, + -datatype, + -entitytab, + -inttype, + -intlen, + -headlen, + -scrlen1, + -scrlen2, + -scrlen3, + -memoryid. + ENDLOOP. + io_xml->add( iv_name = 'DD25V' ig_data = ls_dd25v ). io_xml->add( iv_name = 'DD09L' From 93310976649eeed7eee3161af6d25b8a5157000e Mon Sep 17 00:00:00 2001 From: larshp Date: Fri, 30 Dec 2016 13:03:54 +0000 Subject: [PATCH 011/142] TABL: clear additional fields --- src/zabapgit.prog.abap | 2 +- src/zabapgit_object_tabl.prog.abap | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 373594a21..97ad2743f 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -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.10'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.24.11'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) diff --git a/src/zabapgit_object_tabl.prog.abap b/src/zabapgit_object_tabl.prog.abap index 1875fa2c9..45bec76a8 100644 --- a/src/zabapgit_object_tabl.prog.abap +++ b/src/zabapgit_object_tabl.prog.abap @@ -229,7 +229,10 @@ CLASS lcl_object_tabl IMPLEMENTATION. -convexit, -entitytab, -dommaster, - -domname3l. + -domname3l, + -decimals, + -lowercase, + -signflag. ENDIF. IF -shlporigin = 'D'. From 44a6b88092e1b54039736355a78f39d7f920bafc Mon Sep 17 00:00:00 2001 From: larshp Date: Mon, 2 Jan 2017 14:58:27 +0000 Subject: [PATCH 012/142] deserialization sequence changed #511 this seems to work --- src/zabapgit_definitions.prog.abap | 3 +- src/zabapgit_object_doma.prog.abap | 1 + src/zabapgit_object_dtel.prog.abap | 1 + src/zabapgit_object_enqu.prog.abap | 1 + src/zabapgit_object_sfbf.prog.abap | 1 + src/zabapgit_object_sfbs.prog.abap | 1 + src/zabapgit_object_sfsw.prog.abap | 1 + src/zabapgit_object_shlp.prog.abap | 1 + src/zabapgit_object_tabl.prog.abap | 1 + src/zabapgit_object_ttyp.prog.abap | 1 + src/zabapgit_object_view.prog.abap | 1 + src/zabapgit_objects.prog.abap | 77 ++++++++++------------------- src/zabapgit_objects_impl.prog.abap | 75 +++++++++++++++++----------- 13 files changed, 83 insertions(+), 82 deletions(-) diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index f28edbcde..925053ea8 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -51,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, diff --git a/src/zabapgit_object_doma.prog.abap b/src/zabapgit_object_doma.prog.abap index 1864422a2..4e216e9de 100644 --- a/src/zabapgit_object_doma.prog.abap +++ b/src/zabapgit_object_doma.prog.abap @@ -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. diff --git a/src/zabapgit_object_dtel.prog.abap b/src/zabapgit_object_dtel.prog.abap index 024786107..d37f0aa08 100644 --- a/src/zabapgit_object_dtel.prog.abap +++ b/src/zabapgit_object_dtel.prog.abap @@ -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. diff --git a/src/zabapgit_object_enqu.prog.abap b/src/zabapgit_object_enqu.prog.abap index 53d08681f..43ba2a3db 100644 --- a/src/zabapgit_object_enqu.prog.abap +++ b/src/zabapgit_object_enqu.prog.abap @@ -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. diff --git a/src/zabapgit_object_sfbf.prog.abap b/src/zabapgit_object_sfbf.prog.abap index 5caaf627a..03bada100 100644 --- a/src/zabapgit_object_sfbf.prog.abap +++ b/src/zabapgit_object_sfbf.prog.abap @@ -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. diff --git a/src/zabapgit_object_sfbs.prog.abap b/src/zabapgit_object_sfbs.prog.abap index 4bbd85222..4ff5c288e 100644 --- a/src/zabapgit_object_sfbs.prog.abap +++ b/src/zabapgit_object_sfbs.prog.abap @@ -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. diff --git a/src/zabapgit_object_sfsw.prog.abap b/src/zabapgit_object_sfsw.prog.abap index 33e9c21ff..3812c9eaf 100644 --- a/src/zabapgit_object_sfsw.prog.abap +++ b/src/zabapgit_object_sfsw.prog.abap @@ -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. diff --git a/src/zabapgit_object_shlp.prog.abap b/src/zabapgit_object_shlp.prog.abap index 9d32eb6db..e9c34345e 100644 --- a/src/zabapgit_object_shlp.prog.abap +++ b/src/zabapgit_object_shlp.prog.abap @@ -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. diff --git a/src/zabapgit_object_tabl.prog.abap b/src/zabapgit_object_tabl.prog.abap index 45bec76a8..2d01ab4fc 100644 --- a/src/zabapgit_object_tabl.prog.abap +++ b/src/zabapgit_object_tabl.prog.abap @@ -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. diff --git a/src/zabapgit_object_ttyp.prog.abap b/src/zabapgit_object_ttyp.prog.abap index b85104ebc..0ef632c77 100644 --- a/src/zabapgit_object_ttyp.prog.abap +++ b/src/zabapgit_object_ttyp.prog.abap @@ -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. diff --git a/src/zabapgit_object_view.prog.abap b/src/zabapgit_object_view.prog.abap index 4f0ccdd31..cbd51c60e 100644 --- a/src/zabapgit_object_view.prog.abap +++ b/src/zabapgit_object_view.prog.abap @@ -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. diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index b7a282a24..383f0ea69 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -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 . - -object = iv_type. - -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 . - -object = iv_type. - -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 . + -object = iv_type. + -obj_name = lv_obj_name. ENDCASE. ENDMETHOD. "activate @@ -1656,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 @@ -1705,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. @@ -1747,8 +1715,8 @@ CLASS lcl_objects DEFINITION FINAL. RAISING lcx_exception. CLASS-METHODS warning_overwrite - 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 @@ -1771,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 \ No newline at end of file diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap index 674afa5d7..770740d2a 100644 --- a/src/zabapgit_objects_impl.prog.abap +++ b/src/zabapgit_objects_impl.prog.abap @@ -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. @@ -600,10 +588,12 @@ CLASS lcl_objects IMPLEMENTATION. 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. + lt_ddic TYPE TABLE OF ty_deserialization, + lt_rest TYPE TABLE OF ty_deserialization, + lt_late TYPE TABLE OF ty_deserialization. FIELD-SYMBOLS: TYPE ty_result, - LIKE LINE OF lt_late. + LIKE LINE OF lt_late. lcl_objects_activation=>clear( ). @@ -665,27 +655,31 @@ CLASS lcl_objects IMPLEMENTATION. li_obj->mo_files = lo_files. IF li_obj->get_metadata( )-late_deser = abap_true. - APPEND INITIAL LINE TO lt_late ASSIGNING . - -obj = li_obj. - -xml = lo_xml. - -package = lv_package. - CONTINUE. + APPEND INITIAL LINE TO lt_late ASSIGNING . + ELSEIF li_obj->get_metadata( )-ddic = abap_true. + APPEND INITIAL LINE TO lt_ddic ASSIGNING . + ELSE. + APPEND INITIAL LINE TO lt_rest ASSIGNING . ENDIF. + -item = ls_item. + -obj = li_obj. + -xml = lo_xml. + -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 . - -obj->deserialize( iv_package = -package - io_xml = -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( ) ). @@ -694,6 +688,27 @@ CLASS lcl_objects IMPLEMENTATION. ENDMETHOD. "deserialize + METHOD deserialize_objects. + + FIELD-SYMBOLS: LIKE LINE OF it_objects. + + + lcl_objects_activation=>clear( ). + + LOOP AT it_objects ASSIGNING . + lcl_progress=>show( iv_key = |Deserialize { iv_descr }| + iv_current = sy-tabix + iv_total = lines( it_objects ) + iv_text = -item-obj_name ) ##NO_TEXT. + + -obj->deserialize( iv_package = -package + io_xml = -xml ). + APPEND LINES OF -obj->mo_files->get_accessed_files( ) TO ct_files. + ENDLOOP. + + lcl_objects_activation=>activate( iv_ddic ). + + ENDMETHOD. METHOD compare_remote_to_local. From 21bf0a3bd3c6b5ff679ca3256ddf157dae5b8185 Mon Sep 17 00:00:00 2001 From: larshp Date: Tue, 3 Jan 2017 08:04:18 +0000 Subject: [PATCH 013/142] background mode lock, #447 --- src/zabapgit_background.prog.abap | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/zabapgit_background.prog.abap b/src/zabapgit_background.prog.abap index b183c992d..01d643c7c 100644 --- a/src/zabapgit_background.prog.abap +++ b/src/zabapgit_background.prog.abap @@ -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: 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. \ No newline at end of file From 3bfb008e26287e16e7f9be945c21ac9487cd44a9 Mon Sep 17 00:00:00 2001 From: larshp Date: Wed, 4 Jan 2017 17:29:29 +0000 Subject: [PATCH 014/142] fix exists, fix alignment --- src/zabapgit_object_enho.prog.abap | 115 +++++++++++++++-------------- 1 file changed, 59 insertions(+), 56 deletions(-) diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index 669023316..015b5b042 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -134,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. @@ -169,16 +172,16 @@ 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 + serialize_class( io_xml = io_xml + iv_tool = lv_tool ii_enh_tool = li_enh_tool ). * ToDo: * WHEN 'ENHFUGRDATA'. "cl_enh_tool_fugr @@ -239,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 ). @@ -287,15 +290,15 @@ 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 = 'OWR_METHODS' - CHANGING cg_data = lt_owr ). + 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 ). + 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. @@ -303,24 +306,24 @@ CLASS lcl_object_enho IMPLEMENTATION. TRY. cl_enh_factory=>create_enhancement( EXPORTING - enhname = lv_enhname - enhtype = '' - enhtooltype = cl_enh_tool_class=>tooltype + enhname = lv_enhname + enhtype = '' + enhtooltype = cl_enh_tool_class=>tooltype IMPORTING - enhancement = li_tool + enhancement = li_tool CHANGING - devclass = lv_package ). + 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' + lo_enh_class->set_owr_methods( version = 'I' owr_methods = lt_owr ). - lo_enh_class->set_pre_methods( version = 'I' + lo_enh_class->set_pre_methods( version = 'I' pre_methods = lt_pre ). - lo_enh_class->set_post_methods( version = 'I' + lo_enh_class->set_post_methods( version = 'I' post_methods = lt_post ). - lo_enh_class->set_eimp_include( version = 'I' + lo_enh_class->set_eimp_include( version = 'I' eimp_source = lt_source ). lo_enh_class->if_enh_object~save( ). @@ -346,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 ). @@ -383,13 +386,13 @@ CLASS lcl_object_enho IMPLEMENTATION. LOOP AT lt_enhancements ASSIGNING . lo_hook_impl->add_hook_impl( - overwrite = -overwrite - method = -method - enhmode = -enhmode - full_name = -full_name - source = -source - spot = -spotname - parent_full_name = -parent_full_name ). + overwrite = -overwrite + method = -method + enhmode = -enhmode + full_name = -full_name + source = -source + spot = -spotname + parent_full_name = -parent_full_name ). ENDLOOP. lo_hook_impl->if_enh_object~save( ). lo_hook_impl->if_enh_object~unlock( ). From 47e7f91299fdf0824100164913127e73f85c4f02 Mon Sep 17 00:00:00 2001 From: larshp Date: Wed, 4 Jan 2017 17:37:38 +0000 Subject: [PATCH 015/142] v1.24.12 --- src/zabapgit.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 97ad2743f..2cb662771 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -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.11'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.24.12'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) From b58e608a3f5f75173cbbd4c32d4ca88d976fc1b7 Mon Sep 17 00:00:00 2001 From: larshp Date: Wed, 4 Jan 2017 18:57:22 +0000 Subject: [PATCH 016/142] Fix dumps Fields containing invalid values Ignore if descriptions are not found --- src/zabapgit_object_clas.prog.abap | 2 +- src/zabapgit_object_dtel.prog.abap | 7 ++++++- src/zabapgit_object_fugr.prog.abap | 5 +---- src/zabapgit_object_para.prog.abap | 5 +---- src/zabapgit_object_tabl.prog.abap | 29 +++++++++++++++++------------ 5 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap index 3a9c2e359..f75117961 100644 --- a/src/zabapgit_object_clas.prog.abap +++ b/src/zabapgit_object_clas.prog.abap @@ -962,7 +962,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, diff --git a/src/zabapgit_object_dtel.prog.abap b/src/zabapgit_object_dtel.prog.abap index d37f0aa08..52caae569 100644 --- a/src/zabapgit_object_dtel.prog.abap +++ b/src/zabapgit_object_dtel.prog.abap @@ -159,6 +159,11 @@ 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. + io_xml->add( iv_name = 'DD04V' ig_data = ls_dd04v ). io_xml->add( iv_name = 'TPARA' @@ -233,7 +238,7 @@ CLASS lcl_object_dtel IMPLEMENTATION. langu = IMPORTING dd04v_wa = ls_dd04v -* tpara_wa = ls_tpara +* tpara_wa = ls_tpara EXCEPTIONS illegal_input = 1 OTHERS = 2. diff --git a/src/zabapgit_object_fugr.prog.abap b/src/zabapgit_object_fugr.prog.abap index d09713ae7..5f8619bc6 100644 --- a/src/zabapgit_object_fugr.prog.abap +++ b/src/zabapgit_object_fugr.prog.abap @@ -398,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( ). diff --git a/src/zabapgit_object_para.prog.abap b/src/zabapgit_object_para.prog.abap index 585093d68..e13cb24f7 100644 --- a/src/zabapgit_object_para.prog.abap +++ b/src/zabapgit_object_para.prog.abap @@ -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 ). diff --git a/src/zabapgit_object_tabl.prog.abap b/src/zabapgit_object_tabl.prog.abap index 2d01ab4fc..c956017d5 100644 --- a/src/zabapgit_object_tabl.prog.abap +++ b/src/zabapgit_object_tabl.prog.abap @@ -122,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: LIKE LINE OF lt_dd12v, LIKE LINE OF lt_dd05m, @@ -181,6 +182,9 @@ CLASS lcl_object_tabl IMPLEMENTATION. 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, @@ -207,7 +211,8 @@ CLASS lcl_object_tabl IMPLEMENTATION. -scrtext_m, -scrtext_l. - IF -masklen = '' OR NOT -masklen CO '0123456789'. + lv_masklen = -masklen. + IF lv_masklen = '' OR NOT lv_masklen CO '0123456789'. * make sure the field contains valid data, or the XML will dump CLEAR -masklen. ENDIF. From f173b8e30dfe4e370eee6ffdd845f4d78612e262 Mon Sep 17 00:00:00 2001 From: sbcgua Date: Wed, 4 Jan 2017 23:37:45 +0200 Subject: [PATCH 017/142] fix #516 --- src/zabapgit_page.prog.abap | 2 +- src/zabapgit_view_repo.prog.abap | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index 49068e805..f4491616b 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -88,7 +88,6 @@ CLASS lcl_gui_page_super IMPLEMENTATION. lv_icon = 'img/repo_online' ##NO_TEXT. ENDIF. - ro_html->add( || ). ro_html->add( '' ). ro_html->add( '' ). - ro_html->add( '
' ). @@ -225,6 +224,7 @@ CLASS lcl_gui_page_super IMPLEMENTATION. ro_html->add( 'abapGit' ). "#EC NOTEXT ro_html->add( '' ). ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT ro_html->add( '' ). "#EC NOTEXT ro_html->add( '' ). "#EC NOTEXT ro_html->add( '' ). "#EC NOTEXT diff --git a/src/zabapgit_view_repo.prog.abap b/src/zabapgit_view_repo.prog.abap index e71d0064a..da446e9ba 100644 --- a/src/zabapgit_view_repo.prog.abap +++ b/src/zabapgit_view_repo.prog.abap @@ -321,7 +321,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. ro_html->add( '' ). ro_html->add( lo_toolbar->render( ) ). ro_html->add( '
' ). + ro_html->add( '' ). ro_html->add( '' ). From 47e70827473b5d7d5eda7601290bad6cdab86682 Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 5 Jan 2017 06:33:04 +0000 Subject: [PATCH 018/142] CLAS SMIM VCLS: minor fixes --- src/zabapgit_object_clas.prog.abap | 2 +- src/zabapgit_object_smim.prog.abap | 2 +- src/zabapgit_object_vcls.prog.abap | 10 ++++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap index f75117961..1adb24ba0 100644 --- a/src/zabapgit_object_clas.prog.abap +++ b/src/zabapgit_object_clas.prog.abap @@ -770,7 +770,7 @@ 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 lv_line1(3) = '*"*'. mv_skip_testclass = abap_true. ENDIF. ELSEIF lines( rt_source ) = 0. diff --git a/src/zabapgit_object_smim.prog.abap b/src/zabapgit_object_smim.prog.abap index b03edb856..109ace172 100644 --- a/src/zabapgit_object_smim.prog.abap +++ b/src/zabapgit_object_smim.prog.abap @@ -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 <> 3. lcx_exception=>raise( 'error from mime api->get:' && sy-msgv1 ). ENDIF. diff --git a/src/zabapgit_object_vcls.prog.abap b/src/zabapgit_object_vcls.prog.abap index 0fad2048b..05094edfd 100644 --- a/src/zabapgit_object_vcls.prog.abap +++ b/src/zabapgit_object_vcls.prog.abap @@ -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. From 695fd015cb0b5da70ee0bffb569e97faecce0951 Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 5 Jan 2017 11:43:22 +0000 Subject: [PATCH 019/142] CLAS: fix dump --- src/zabapgit_object_clas.prog.abap | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap index 1adb24ba0..5b3b71791 100644 --- a/src/zabapgit_object_clas.prog.abap +++ b/src/zabapgit_object_clas.prog.abap @@ -770,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 IS INITIAL OR lv_line1(3) = '*"*'. + 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. From 3370eecc728256cbc27dda4a691a5c1a441cd576 Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 5 Jan 2017 13:26:28 +0000 Subject: [PATCH 020/142] v1.24.13 --- src/zabapgit.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 2cb662771..d2963f3b4 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -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.12'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.24.13'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) From a6f623a4a1bd049b990bb9da14fb179d1a200b72 Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 5 Jan 2017 14:51:22 +0000 Subject: [PATCH 021/142] ENHO SMIM: fix dumps --- src/zabapgit_object_enho.prog.abap | 19 +++++++++++++++++++ src/zabapgit_object_smim.prog.abap | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index 015b5b042..16c70ae25 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -409,12 +409,31 @@ CLASS lcl_object_enho IMPLEMENTATION. lv_shorttext TYPE string, lt_impl TYPE enh_badi_impl_data_it. + FIELD-SYMBOLS: LIKE LINE OF lt_impl, + LIKE LINE OF -filter_values, + LIKE LINE OF -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 . +* make sure the XML serialization does not dump, field type = N + LOOP AT -filter_values ASSIGNING . + IF -filter_numeric_value1 CA space. + CLEAR -filter_numeric_value1. + ENDIF. + ENDLOOP. + LOOP AT -filters ASSIGNING . + IF -filter_numeric_value1 CA space. + CLEAR -filter_numeric_value1. + ENDIF. + ENDLOOP. + ENDLOOP. + io_xml->add( iv_name = 'TOOL' ig_data = iv_tool ). io_xml->add( ig_data = lv_shorttext diff --git a/src/zabapgit_object_smim.prog.abap b/src/zabapgit_object_smim.prog.abap index 109ace172..7fe035bc1 100644 --- a/src/zabapgit_object_smim.prog.abap +++ b/src/zabapgit_object_smim.prog.abap @@ -191,7 +191,7 @@ CLASS lcl_object_smim IMPLEMENTATION. not_found = 3 permission_failure = 4 OTHERS = 5 ). - IF sy-subrc <> 0 AND sy-subrc <> 3. + IF sy-subrc <> 0 AND sy-subrc <> 2 AND sy-subrc <> 3. lcx_exception=>raise( 'error from mime api->get:' && sy-msgv1 ). ENDIF. From 47f4843e5810822f2688cdc4c9a03c6631c94a59 Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 5 Jan 2017 17:15:36 +0000 Subject: [PATCH 022/142] W3XX: fix dump CX_SY_REGEX_TOO_COMPLEX --- src/zabapgit_unit_test.prog.abap | 4 +++ src/zabapgit_util.prog.abap | 44 ++++++++++++++++++++------------ 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index cf7ecbfa9..2d63e98a7 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -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 diff --git a/src/zabapgit_util.prog.abap b/src/zabapgit_util.prog.abap index 282848d42..7ae234ff9 100644 --- a/src/zabapgit_util.prog.abap +++ b/src/zabapgit_util.prog.abap @@ -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. From 51db93b499711f6ae5b3f82bfeda86dcfe87991c Mon Sep 17 00:00:00 2001 From: sbcgua Date: Sat, 7 Jan 2017 09:50:37 +0200 Subject: [PATCH 023/142] html refactoring, render sequence refactoring - refactor lcl_html_helper (renamed to lcl_html, additional methods) - icons rendered with lcl_html->icon - some common html chunks moved to lcl_gui_chunk_lib - lcl_gui_page_super renamed to lcl_gui_page - page structure rendering concentrated in lcl_gui_page->render --- src/zabapgit_css_common.w3mi.data.css | 15 +- src/zabapgit_definitions.prog.abap | 2 +- src/zabapgit_gui_pages.prog.abap | 5 +- src/zabapgit_html.prog.abap | 124 ++++++-- src/zabapgit_html_chunks.prog.abap | 200 ++++++++++++ src/zabapgit_html_chunks.prog.xml | 48 +++ src/zabapgit_page.prog.abap | 336 ++++++-------------- src/zabapgit_page_background.prog.abap | 66 ++-- src/zabapgit_page_branch_overview.prog.abap | 25 +- src/zabapgit_page_commit.prog.abap | 33 +- src/zabapgit_page_db.prog.abap | 64 ++-- src/zabapgit_page_debug.prog.abap | 27 +- src/zabapgit_page_diff.prog.abap | 32 +- src/zabapgit_page_explore.prog.abap | 23 +- src/zabapgit_page_main.prog.abap | 55 ++-- src/zabapgit_page_merge.prog.abap | 19 +- src/zabapgit_page_settings.prog.abap | 33 +- src/zabapgit_page_stage.prog.abap | 52 ++- src/zabapgit_unit_test.prog.abap | 2 +- src/zabapgit_util.prog.abap | 2 +- src/zabapgit_view_repo.prog.abap | 73 ++--- src/zabapgit_view_tutorial.prog.abap | 25 +- 22 files changed, 743 insertions(+), 518 deletions(-) create mode 100644 src/zabapgit_html_chunks.prog.abap create mode 100644 src/zabapgit_html_chunks.prog.xml diff --git a/src/zabapgit_css_common.w3mi.data.css b/src/zabapgit_css_common.w3mi.data.css index 924b1d664..26a3de560 100644 --- a/src/zabapgit_css_common.w3mi.data.css +++ b/src/zabapgit_css_common.w3mi.data.css @@ -33,15 +33,21 @@ form input:focus, textarea:focus { border: 1px solid #8cadd9; } -/* MODIFIERS */ +/* COLOR PALETTE */ .grey { color: lightgrey !important; } -.emphasis { font-weight: bold !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 +178,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 +255,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 +471,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; diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index 925053ea8..e8612e1b6 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -159,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. diff --git a/src/zabapgit_gui_pages.prog.abap b/src/zabapgit_gui_pages.prog.abap index 910211fd0..2d5b77f67 100644 --- a/src/zabapgit_gui_pages.prog.abap +++ b/src/zabapgit_gui_pages.prog.abap @@ -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. diff --git a/src/zabapgit_html.prog.abap b/src/zabapgit_html.prog.abap index 96009519e..5b0f065a5 100644 --- a/src/zabapgit_html.prog.abap +++ b/src/zabapgit_html.prog.abap @@ -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|!)'. @@ -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,42 @@ CLASS lcl_html_helper IMPLEMENTATION. lv_style = | style="{ iv_style }"|. ENDIF. - _add_str( |{ iv_txt }| ). + rv_str = |{ iv_txt }|. - 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_alt TYPE string, + lv_class TYPE string. + + IF iv_hint IS NOT INITIAL. + lv_hint = | title="{ iv_hint }"|. + ENDIF. + IF iv_class IS NOT INITIAL. + lv_class = | class="{ iv_class }"|. + ENDIF. + IF iv_alt IS INITIAL. + lv_alt = | alt|. " To pass html validation + ELSE. + lv_alt = | alt="{ iv_alt }"|. + ENDIF. + + rv_str = | |. + + ENDMETHOD. "icon + +ENDCLASS. "lcl_html IMPLEMENTATION *----------------------------------------------------------------------* * CLASS lcl_html_toolbar DEFINITION @@ -219,7 +286,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 +362,10 @@ CLASS lcl_html_toolbar IMPLEMENTATION. IF iv_no_separator = abap_true. lv_class = lv_class && ' menu_end' ##NO_TEXT. ENDIF. - ro_html->add( |{ iv_as_droplist_with_label }| ). + + 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 +397,15 @@ CLASS lcl_html_toolbar IMPLEMENTATION. IF iv_with_icons = abap_true. ro_html->add( '' ). - ro_html->add( |{ -ico }| ). - ro_html->add( '' ). + ro_html->add( |{ lcl_html=>icon( -ico ) }| ). + ro_html->add( '' ). ENDIF. - ro_html->add_anchor( iv_txt = -txt - iv_act = -act - iv_opt = -opt - iv_typ = -typ - iv_class = lv_class ). + ro_html->add_a( iv_txt = -txt + iv_act = -act + iv_opt = -opt + iv_typ = -typ + iv_class = lv_class ). IF iv_with_icons = abap_true. ro_html->add( '' ). diff --git a/src/zabapgit_html_chunks.prog.abap b/src/zabapgit_html_chunks.prog.abap new file mode 100644 index 000000000..ed387db81 --- /dev/null +++ b/src/zabapgit_html_chunks.prog.abap @@ -0,0 +1,200 @@ +*&---------------------------------------------------------------------* +*& 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 = 'repo_offline' ##NO_TEXT. + lv_hint = 'Offline repository' ##NO_TEXT. + ELSE. + lv_icon = 'repo_online' ##NO_TEXT. + lv_hint = 'On-line repository' ##NO_TEXT. + ENDIF. + + ro_html->add( '' ). + + ro_html->add( '' ). + + ro_html->add( '' ). + ro_html->add( '
' ). + ro_html->add_icon( iv_name = lv_icon iv_hint = lv_hint ). + ro_html->add( |{ io_repo->get_name( ) }| ). + IF io_repo->is_offline( ) = abap_false. + lo_repo_online ?= io_repo. + ro_html->add( |{ lo_repo_online->get_url( ) }| ). + ENDIF. + ro_html->add( '' ). + + IF abap_true = lcl_app=>user( )->is_favorite_repo( io_repo->get_key( ) ). + lv_icon = 'star' ##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( 'BG' ). + ENDIF. + + IF io_repo->is_write_protected( ) = abap_true. + ro_html->add_icon( iv_name = 'lock' 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 = 'pkg' iv_hint = 'SAP package' ). + ro_html->add( '' ). + ro_html->add_a( iv_txt = io_repo->get_package( ) + iv_act = |{ gc_action-jump_pkg }?{ io_repo->get_package( ) }| ). + ro_html->add( '' ). + ENDIF. + + ro_html->add( '
' ). + + ENDMETHOD. + + METHOD render_item_state. + + DATA: lv_system TYPE string. + + FIELD-SYMBOLS TYPE char1. + + + rv_html = ''. + + DO 2 TIMES. + CASE sy-index. + WHEN 1. + ASSIGN iv1 TO . + lv_system = 'Local:'. + WHEN 2. + ASSIGN iv2 TO . + lv_system = 'Remote:'. + ENDCASE. + + CASE . + WHEN gc_state-unchanged. "None or unchanged + IF iv1 = gc_state-added OR iv2 = gc_state-added. + rv_html = rv_html && |X|. + ELSE. + rv_html = rv_html && | |. + ENDIF. + WHEN gc_state-modified. "Changed + rv_html = rv_html && |M|. + WHEN gc_state-added. "Added new + rv_html = rv_html && |A|. + WHEN gc_state-mixed. "Multiple changes (multifile) + rv_html = rv_html && ||. + WHEN gc_state-deleted. "Deleted + rv_html = rv_html && |D|. + ENDCASE. + ENDDO. + + rv_html = rv_html && ''. + + 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( || ). + ro_html->add_icon( iv_name = 'branch' 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( '' ). + + ENDMETHOD. "render_branch_span + + METHOD render_error. + + CREATE OBJECT ro_html. + + ro_html->add( '
' ). + IF ix_error IS BOUND. + ro_html->add( |Error: { ix_error->mv_text }| ). + ELSE. + ro_html->add( |Error: { iv_error }| ). + ENDIF. + ro_html->add( '
' ). + + ENDMETHOD. "render_error + +ENDCLASS. "lcl_gui_chunk_lib \ No newline at end of file diff --git a/src/zabapgit_html_chunks.prog.xml b/src/zabapgit_html_chunks.prog.xml new file mode 100644 index 000000000..e668d34ba --- /dev/null +++ b/src/zabapgit_html_chunks.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_HTML_CHUNKS + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_HTML_CHUNKS + 28 + + + + + + diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index f4491616b..251e8d72b 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -17,240 +17,85 @@ 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 - RAISING lcx_exception. - METHODS render_item_state - IMPORTING iv1 TYPE char1 - iv2 TYPE char1 - RETURNING VALUE(rv_html) TYPE string. + 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. - 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 - RAISING lcx_exception. + DATA: ms_control TYPE ty_control. - METHODS header - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. - - 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 scripts + RETURNING VALUE(ro_html) TYPE REF TO lcl_html + RAISING lcx_exception. + + 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. + METHODS render_content ABSTRACT + RETURNING VALUE(ro_html) TYPE REF TO lcl_html + RAISING lcx_exception. -CLASS lcl_gui_page_super IMPLEMENTATION. +ENDCLASS. "lcl_gui_page - METHOD render_repo_top. +CLASS lcl_gui_page IMPLEMENTATION. - 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( '' ). - - ro_html->add( '' ). - - ro_html->add( '' ). - ro_html->add( '
' ). - ro_html->add( || ). - ro_html->add( |{ io_repo->get_name( ) }| ). - IF io_repo->is_offline( ) = abap_false. - lo_repo_online ?= io_repo. - ro_html->add( |{ lo_repo_online->get_url( ) }| ). - ENDIF. - ro_html->add( '' ). - - 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 = ||. - 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( 'BG' ). - ENDIF. - - IF io_repo->is_write_protected( ) = abap_true. - ro_html->add( '' ). - 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( '' ). - ro_html->add( '' ). - ro_html->add_anchor( iv_txt = io_repo->get_package( ) - iv_act = |{ gc_action-jump_pkg }?{ io_repo->get_package( ) }| ). - ro_html->add( '' ). - ENDIF. - - ro_html->add( '
' ). - - ENDMETHOD. - - METHOD render_item_state. - - DATA: lv_system TYPE string. - - FIELD-SYMBOLS TYPE char1. - - - rv_html = ''. - - DO 2 TIMES. - CASE sy-index. - WHEN 1. - ASSIGN iv1 TO . - lv_system = 'Local:'. - WHEN 2. - ASSIGN iv2 TO . - lv_system = 'Remote:'. - ENDCASE. - - CASE . - WHEN gc_state-unchanged. "None or unchanged - IF iv1 = gc_state-added OR iv2 = gc_state-added. - rv_html = rv_html && |X|. - ELSE. - rv_html = rv_html && | |. - ENDIF. - WHEN gc_state-modified. "Changed - rv_html = rv_html && |M|. - WHEN gc_state-added. "Added new - rv_html = rv_html && |A|. - WHEN gc_state-mixed. "Multiple changes (multifile) - rv_html = rv_html && ||. - WHEN gc_state-deleted. "Deleted - rv_html = rv_html && |D|. - ENDCASE. - ENDDO. - - rv_html = rv_html && ''. - - 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( || ). - ro_html->add( '' ). - 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( '' ). - - ENDMETHOD. "render_branch_span - - METHOD header. + METHOD html_head. CREATE OBJECT ro_html. - ro_html->add( '' ). "#EC NOTEXT - ro_html->add( '' ). "#EC NOTEXT ro_html->add( '' ). "#EC NOTEXT - ro_html->add( 'abapGit' ). "#EC NOTEXT - ro_html->add( '' ). + ro_html->add( '' ). "#EC NOTEXT ro_html->add( '' ). "#EC NOTEXT - ro_html->add( '' ). "#EC NOTEXT - ro_html->add( '' ). "#EC NOTEXT - ro_html->add( '' ). "#EC NOTEXT - ENDMETHOD. "render html header + ro_html->add( 'abapGit' ). "#EC NOTEXT + ro_html->add( '' ). + ro_html->add( '' ). "#EC NOTEXT + + ro_html->add( '' ). "#EC NOTEXT + + ENDMETHOD. "html_head METHOD title. CREATE OBJECT ro_html. ro_html->add( '' ). "#EC NOTEXT + + ENDMETHOD. "footer + + METHOD redirect. + + CREATE OBJECT ro_html. + + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( || ). "#EC NOTEXT + ro_html->add( ''). "#EC NOTEXT + ro_html->add( ''). "#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( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( html_head( ) ). + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( title( ) ). + ro_html->add( render_content( ) ). + ro_html->add( footer( ) ). ro_html->add( '' ). "#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( '' ). ENDIF. ro_html->add( ''). "#EC NOTEXT - ENDMETHOD. "render html footer & logo + ENDMETHOD. " lif_gui_page~render. - METHOD render_error. - - CREATE OBJECT ro_html. - - ro_html->add( '
' ). - ro_html->add( |Error: { ix_error->mv_text }| ). - ro_html->add( '
' ). - - ENDMETHOD. "render_error - - METHOD redirect. - - CREATE OBJECT ro_html. - - ro_html->add( '' ). "#EC NOTEXT - ro_html->add( '' ). "#EC NOTEXT - ro_html->add( || ). "#EC NOTEXT - ro_html->add( ''). "#EC NOTEXT - - ENDMETHOD. - - METHOD lif_gui_page~on_event. - ev_state = gc_event_state-not_handled. - ENDMETHOD. "lif_gui_page~on_event - -ENDCLASS. \ No newline at end of file +ENDCLASS. "lcl_gui_page \ No newline at end of file diff --git a/src/zabapgit_page_background.prog.abap b/src/zabapgit_page_background.prog.abap index 56e9fd0c0..691bcbf1b 100644 --- a/src/zabapgit_page_background.prog.abap +++ b/src/zabapgit_page_background.prog.abap @@ -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( '
' ). LOOP AT mt_text INTO lv_text. ro_html->add( '
' && lv_text && '

' ). ENDLOOP. ro_html->add( '
' ). - 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( '
' ). ro_html->add( 'Method
' ) ##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. \ No newline at end of file diff --git a/src/zabapgit_page_branch_overview.prog.abap b/src/zabapgit_page_branch_overview.prog.abap index 0873eea5c..297dc2990 100644 --- a/src/zabapgit_page_branch_overview.prog.abap +++ b/src/zabapgit_page_branch_overview.prog.abap @@ -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( '
' ). ro_html->add( body( ) ). ro_html->add( '
' ). - ro_html->add( footer( ) ). - ENDMETHOD. + ENDMETHOD. "render_content ENDCLASS. \ No newline at end of file diff --git a/src/zabapgit_page_commit.prog.abap b/src/zabapgit_page_commit.prog.abap index 434b154c1..4914b6d7d 100644 --- a/src/zabapgit_page_commit.prog.abap +++ b/src/zabapgit_page_commit.prog.abap @@ -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( '
' ). - 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( '
' ). - 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' diff --git a/src/zabapgit_page_db.prog.abap b/src/zabapgit_page_db.prog.abap index 6f8ccf02c..bb637d5a9 100644 --- a/src/zabapgit_page_db.prog.abap +++ b/src/zabapgit_page_db.prog.abap @@ -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( '
' ). ro_html->add( '
' ). @@ -56,26 +56,25 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION. | { ms_key-value }
| ). ro_html->add( '' ). - 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( '' ). ro_html->add( |
{ lv_data }
| ). ro_html->add( '
' ). - 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( '
' ). " 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( '
' ). ro_html->add( lo_toolbar->render( ) ). @@ -143,16 +140,17 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION. ro_html->add( '
' ). "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( '
' ). ro_html->add( '' ). @@ -220,9 +219,7 @@ CLASS lcl_gui_page_db IMPLEMENTATION. ro_html->add( '
' ). ro_html->add( '
' ). - 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 '' IN is_data-data_str IGNORING CASE MATCH COUNT lv_cnt. IF lv_cnt > 0. - rv_text = |On-line, Name: { lcl_url=>name( rv_text ) }|. + rv_text = |On-line, Name: { + lcl_url=>name( rv_text ) }|. ELSE. - rv_text = |Off-line, Name: { rv_text }|. + rv_text = |Off-line, Name: { rv_text }|. ENDIF. WHEN 'BACKGROUND'. diff --git a/src/zabapgit_page_debug.prog.abap b/src/zabapgit_page_debug.prog.abap index 9900f333a..6d2dfa9f3 100644 --- a/src/zabapgit_page_debug.prog.abap +++ b/src/zabapgit_page_debug.prog.abap @@ -2,15 +2,18 @@ *& 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. @@ -18,21 +21,21 @@ 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( '
' ). ro_html->add( render_debug_info( ) ). ro_html->add( render_supported_object_types( ) ). ro_html->add( '
' ). - ro_html->add( footer( io_include_script = scripts( ) ) ). - - ENDMETHOD. + ENDMETHOD. "render_content METHOD render_debug_info. diff --git a/src/zabapgit_page_diff.prog.abap b/src/zabapgit_page_diff.prog.abap index 1d3715ac7..c67ed6523 100644 --- a/src/zabapgit_page_diff.prog.abap +++ b/src/zabapgit_page_diff.prog.abap @@ -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: 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 @@ -174,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. @@ -191,7 +193,8 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. lo_html->add( |- { ls_stats-delete }| ). lo_html->add( |~ { ls_stats-update }| ). lo_html->add( |{ is_diff-filename }| ). "#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( '
' ). "#EC NOTEXT ro_html = lo_html. @@ -221,7 +224,7 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. " Content ro_html->add( '
' ). "#EC NOTEXT - ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '
' ). "#EC NOTEXT ro_html->add( render_table_head( ) ). ro_html->add( render_lines( is_diff ) ). ro_html->add( '
' ). "#EC NOTEXT @@ -342,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 @@ -360,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 \ No newline at end of file diff --git a/src/zabapgit_page_explore.prog.abap b/src/zabapgit_page_explore.prog.abap index eab5b0c95..e46baba68 100644 --- a/src/zabapgit_page_explore.prog.abap +++ b/src/zabapgit_page_explore.prog.abap @@ -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 \ No newline at end of file diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap index f7bf81023..032348029 100644 --- a/src/zabapgit_page_main.prog.abap +++ b/src/zabapgit_page_main.prog.abap @@ -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,14 +127,10 @@ 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 ) ). ENDTRY. ro_html->add( render_toc( lt_repos ) ). @@ -139,15 +139,13 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ro_html->add( render_explore( ) ). ELSEIF mv_show IS INITIAL. CREATE OBJECT lo_tutorial. - ro_html->add( lo_tutorial->lif_gui_page~render( ) ). + ro_html->add( lo_tutorial->render( ) ). ELSE. 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. @@ -235,7 +233,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. @@ -256,9 +254,9 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ENDIF. IF lo_repo->is_offline( ) = abap_true. - lv_icon = ''. + lv_icon = 'repo_offline'. ELSE. - lv_icon = ''. + lv_icon = 'repo_online'. ENDIF. lo_allbar->add( iv_txt = lv_repo_title @@ -279,22 +277,24 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ********************************************************************** - ro_html->add( '' ). - ro_html->add( '' ). + ro_html->add( '
' ). + ro_html->add( || ). - ro_html->add( '' ). ro_html->add( ''). ro_html->add(''). ro_html->add(''). @@ -200,7 +203,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION. ig_file = is_file ). ro_html->add( '' ). ro_html->add( '' ). WHEN 'remote'. ro_html->add( '' ). @@ -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( '
' ). - 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( '
' ). - ro_html->add( footer( scripts( ) ) ). - - ENDMETHOD. "lif_gui_page~render + ENDMETHOD. "render_content METHOD render_menu. CREATE OBJECT ro_html. ro_html->add( '
' ). - 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( '
' ). diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index 2d63e98a7..8fb06bc0c 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -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, diff --git a/src/zabapgit_util.prog.abap b/src/zabapgit_util.prog.abap index 7ae234ff9..20478551d 100644 --- a/src/zabapgit_util.prog.abap +++ b/src/zabapgit_util.prog.abap @@ -1043,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 diff --git a/src/zabapgit_view_repo.prog.abap b/src/zabapgit_view_repo.prog.abap index da446e9ba..cf2cbdd8c 100644 --- a/src/zabapgit_view_repo.prog.abap +++ b/src/zabapgit_view_repo.prog.abap @@ -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( '
{ + lcl_html=>icon( iv_name = 'star' iv_alt = 'Favs' iv_hint = 'Favorites' ) + }' ). " Maximize width + ro_html->add( '' ). " Maximize width IF lo_favbar->count( ) > 0. ro_html->add( lo_favbar->render( iv_sort = abap_true ) ). ELSE. - ro_html->add( `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( '' ). + ro_html->add( |No favorites so far. For more info please check { + lcl_html=>a( iv_txt = 'tutorial' iv_act = gc_action-go_tutorial ) + }| ). ENDIF. ro_html->add( '' ). ro_html->add( lo_allbar->render( - iv_as_droplist_with_label = '' + iv_as_droplist_with_label = lcl_html=>icon( iv_name = 'burger' iv_class = 'pad4px' ) iv_sort = abap_true iv_with_icons = abap_true iv_add_minizone = abap_true ) ). @@ -330,8 +330,9 @@ CLASS lcl_gui_page_main IMPLEMENTATION. CREATE OBJECT ro_html. ro_html->add( |
| ). - 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( '
' ). ENDMETHOD. "render_repo diff --git a/src/zabapgit_page_merge.prog.abap b/src/zabapgit_page_merge.prog.abap index c415d02eb..e51157d7a 100644 --- a/src/zabapgit_page_merge.prog.abap +++ b/src/zabapgit_page_merge.prog.abap @@ -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 @@ -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( '
' ). - 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( '' ). ro_html->add( '
' ). - ro_html->add( footer( ) ). - ENDMETHOD. + ENDMETHOD. "render_content ENDCLASS. \ No newline at end of file diff --git a/src/zabapgit_page_settings.prog.abap b/src/zabapgit_page_settings.prog.abap index 4f11a9d5c..fecba3154 100644 --- a/src/zabapgit_page_settings.prog.abap +++ b/src/zabapgit_page_settings.prog.abap @@ -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( |
| ). ro_html->add( render_development_internals( ) ). ro_html->add( render_form_end( ) ). - ro_html->add( footer( ) ). - - ENDMETHOD. + ENDMETHOD. "render_content METHOD render_proxy. diff --git a/src/zabapgit_page_stage.prog.abap b/src/zabapgit_page_stage.prog.abap index 9c1893be2..e460b7c1b 100644 --- a/src/zabapgit_page_stage.prog.abap +++ b/src/zabapgit_page_stage.prog.abap @@ -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('
LOCAL' ). 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('
add' ). - 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( 'ignoreremove
' ). + ro_html->add( '
' ). 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( '
' ). - ro_html->add( '
' ). + ro_html->add( '
' ). IF mv_show_folders = abap_true. ro_html->add( || ). @@ -349,17 +348,17 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. CASE is_item-obj_type. WHEN 'PROG' OR 'CLAS' OR 'FUGR'. - rv_html = ||. + rv_html = lcl_html=>icon( 'code' ). WHEN 'W3MI' OR 'W3HT'. - rv_html = ||. + rv_html = lcl_html=>icon( 'bin' ). WHEN ''. rv_html = space. " no icon WHEN OTHERS. - rv_html = ||. + rv_html = lcl_html=>icon( 'obj' ). ENDCASE. IF is_item-is_dir = abap_true. - rv_html = ||. + rv_html = lcl_html=>icon( 'dir' ). ENDIF. ENDMETHOD. "get_item_icon @@ -436,7 +435,8 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. ro_html->add( '
' ). ro_html->add( |{ is_item-changes } changes| ). - 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( '
' ). ELSEIF is_item-changes > 0. @@ -448,9 +448,10 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. ig_object = is_item ). ro_html->add( '
' ). - 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( '
' ). 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( ' ' ). ENDIF. @@ -490,7 +491,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. CREATE OBJECT ro_html. ro_html->add( '' ). - ro_html->add( || ). + ro_html->add( || ). ro_html->add( || ). IF mo_repo->is_offline( ) = abap_false. ro_html->add( || ). " 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 diff --git a/src/zabapgit_view_tutorial.prog.abap b/src/zabapgit_view_tutorial.prog.abap index d7ea7f729..1cc2c0105 100644 --- a/src/zabapgit_view_tutorial.prog.abap +++ b/src/zabapgit_view_tutorial.prog.abap @@ -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 '

Adding and cloning repos

'. _add '

    '. _add `
  • 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.
  • '. _add `
  • 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
  • '. @@ -45,18 +50,20 @@ CLASS lcl_gui_view_tutorial IMPLEMENTATION. _add '

    Repository list and favorites

    '. _add '

      '. - _add '
    • To choose a repo press at the favorite bar.
    • '. - _add '
    • To favorite a repo click icon at repo toolbar.
    • '. + ro_html->add( |
    • To choose a repo press { + lcl_html=>icon( 'burger' ) } at the favorite bar.
    • | ). + ro_html->add( |
    • To favorite a repo click { + lcl_html=>icon( 'star-grey' ) } icon at repo toolbar.
    • | ). _add '

    '. _add '

    abapGit related repositories

    '. _add '

      '. _add '
    • '. - 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.
    • '. _add '
    • '. - 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
    • '. _add '

    '. From 69f844a79947b8c1d41e2142c96557bcf70e6a62 Mon Sep 17 00:00:00 2001 From: sbcgua Date: Sat, 7 Jan 2017 10:15:56 +0200 Subject: [PATCH 024/142] lcl_gui_page method visibility tweak --- src/zabapgit_page.prog.abap | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index 251e8d72b..dc3791308 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -36,15 +36,22 @@ CLASS lcl_gui_page DEFINITION ABSTRACT. DATA: ms_control TYPE ty_control. + METHODS render_content ABSTRACT + RETURNING VALUE(ro_html) TYPE REF TO lcl_html + RAISING lcx_exception. + + METHODS scripts + RETURNING VALUE(ro_html) TYPE REF TO lcl_html + RAISING lcx_exception. + + PRIVATE SECTION. + METHODS html_head RETURNING VALUE(ro_html) TYPE REF TO lcl_html. METHODS title RETURNING VALUE(ro_html) TYPE REF TO lcl_html. - METHODS scripts - RETURNING VALUE(ro_html) TYPE REF TO lcl_html - RAISING lcx_exception. METHODS footer RETURNING VALUE(ro_html) TYPE REF TO lcl_html. @@ -52,10 +59,6 @@ CLASS lcl_gui_page DEFINITION ABSTRACT. METHODS redirect RETURNING VALUE(ro_html) TYPE REF TO lcl_html. - METHODS render_content ABSTRACT - RETURNING VALUE(ro_html) TYPE REF TO lcl_html - RAISING lcx_exception. - ENDCLASS. "lcl_gui_page CLASS lcl_gui_page IMPLEMENTATION. From da43f60fdae081e975fc71c67f900f95ba9c03ba Mon Sep 17 00:00:00 2001 From: sbcgua Date: Sat, 7 Jan 2017 11:19:58 +0200 Subject: [PATCH 025/142] webfonts #525 --- src/zabapgit_css_common.w3mi.data.css | 1 + src/zabapgit_gui_asset_manager.prog.abap | 166 ++--------------------- src/zabapgit_html.prog.abap | 15 +- src/zabapgit_html_chunks.prog.abap | 24 ++-- src/zabapgit_page.prog.abap | 2 + src/zabapgit_page_main.prog.abap | 9 +- src/zabapgit_view_repo.prog.abap | 8 +- src/zabapgit_view_tutorial.prog.abap | 4 +- 8 files changed, 48 insertions(+), 181 deletions(-) diff --git a/src/zabapgit_css_common.w3mi.data.css b/src/zabapgit_css_common.w3mi.data.css index 26a3de560..80fd4ebf1 100644 --- a/src/zabapgit_css_common.w3mi.data.css +++ b/src/zabapgit_css_common.w3mi.data.css @@ -35,6 +35,7 @@ form input:focus, textarea:focus { /* COLOR PALETTE */ .grey { color: lightgrey !important; } +.darkgrey { color: #808080 !important; } .attention { color: red !important; } .blue { color: #5e8dc9; !important; } .red { color: red !important; } diff --git a/src/zabapgit_gui_asset_manager.prog.abap b/src/zabapgit_gui_asset_manager.prog.abap index 8c94df8a6..c1419eb12 100644 --- a/src/zabapgit_gui_asset_manager.prog.abap +++ b/src/zabapgit_gui_asset_manager.prog.abap @@ -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 @@ -252,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 = ''. "#EC NOTEXT + + ENDMETHOD. " get_webfont_link + ENDCLASS. "lcl_gui_asset_manager \ No newline at end of file diff --git a/src/zabapgit_html.prog.abap b/src/zabapgit_html.prog.abap index 5b0f065a5..1bddb868f 100644 --- a/src/zabapgit_html.prog.abap +++ b/src/zabapgit_html.prog.abap @@ -238,22 +238,23 @@ CLASS lcl_html IMPLEMENTATION. METHOD icon. DATA: lv_hint TYPE string, - lv_alt 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 = | class="{ iv_class }"|. + lv_class = | { iv_class }|. ENDIF. - IF iv_alt IS INITIAL. - lv_alt = | alt|. " To pass html validation - ELSE. - lv_alt = | alt="{ iv_alt }"|. + IF lv_color IS NOT INITIAL. + lv_color = | { lv_color }|. ENDIF. - rv_str = | |. + rv_str = ||. ENDMETHOD. "icon diff --git a/src/zabapgit_html_chunks.prog.abap b/src/zabapgit_html_chunks.prog.abap index ed387db81..79d4b4fed 100644 --- a/src/zabapgit_html_chunks.prog.abap +++ b/src/zabapgit_html_chunks.prog.abap @@ -48,10 +48,10 @@ CLASS lcl_gui_chunk_lib IMPLEMENTATION. CREATE OBJECT lo_pback. IF io_repo->is_offline( ) = abap_true. - lv_icon = 'repo_offline' ##NO_TEXT. + lv_icon = 'plug/darkgrey' ##NO_TEXT. lv_hint = 'Offline repository' ##NO_TEXT. ELSE. - lv_icon = 'repo_online' ##NO_TEXT. + lv_icon = 'cloud-upload/blue' ##NO_TEXT. lv_hint = 'On-line repository' ##NO_TEXT. ENDIF. @@ -69,9 +69,9 @@ CLASS lcl_gui_chunk_lib IMPLEMENTATION. ro_html->add( '
{ mv_cur_dir }
{ lcl_html=>icon( 'dir' ) }{ build_dir_jump_link( '..' ) }' ). IF abap_true = lcl_app=>user( )->is_favorite_repo( io_repo->get_key( ) ). - lv_icon = 'star' ##NO_TEXT. + lv_icon = 'star/blue' ##NO_TEXT. ELSE. - lv_icon = 'star-grey' ##NO_TEXT. + 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 @@ -83,7 +83,7 @@ CLASS lcl_gui_chunk_lib IMPLEMENTATION. ENDIF. IF io_repo->is_write_protected( ) = abap_true. - ro_html->add_icon( iv_name = 'lock' iv_hint = 'Locked from pulls' ). + ro_html->add_icon( iv_name = 'lock/darkgrey' iv_hint = 'Locked from pulls' ). ENDIF. IF io_repo->is_offline( ) = abap_false. @@ -102,7 +102,7 @@ CLASS lcl_gui_chunk_lib IMPLEMENTATION. ENDIF. IF iv_show_package = abap_true. - ro_html->add_icon( iv_name = 'pkg' iv_hint = 'SAP package' ). + ro_html->add_icon( iv_name = 'package/darkgrey' iv_hint = 'SAP package' ). ro_html->add( '' ). ro_html->add_a( iv_txt = io_repo->get_package( ) iv_act = |{ gc_action-jump_pkg }?{ io_repo->get_package( ) }| ). @@ -172,7 +172,7 @@ CLASS lcl_gui_chunk_lib IMPLEMENTATION. CREATE OBJECT ro_html. ro_html->add( || ). - ro_html->add_icon( iv_name = 'branch' iv_hint = 'Current branch' ). + 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 ). @@ -185,14 +185,18 @@ CLASS lcl_gui_chunk_lib IMPLEMENTATION. METHOD render_error. + DATA lv_error TYPE string. + CREATE OBJECT ro_html. - ro_html->add( '
' ). IF ix_error IS BOUND. - ro_html->add( |Error: { ix_error->mv_text }| ). + lv_error = ix_error->mv_text. ELSE. - ro_html->add( |Error: { iv_error }| ). + lv_error = iv_error. ENDIF. + + ro_html->add( '
' ). + ro_html->add( |{ lcl_html=>icon( 'alert/red' ) } Error: { lv_error }| ). ro_html->add( '
' ). ENDMETHOD. "render_error diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index dc3791308..078a1ea27 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -76,6 +76,8 @@ CLASS lcl_gui_page IMPLEMENTATION. ro_html->add( '' ). ro_html->add( '' ). "#EC NOTEXT + ro_html->add( lcl_gui_asset_manager=>get_webfont_link( ) ). " Web fonts + ro_html->add( '' ). "#EC NOTEXT ENDMETHOD. "html_head diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap index 032348029..1cad667f1 100644 --- a/src/zabapgit_page_main.prog.abap +++ b/src/zabapgit_page_main.prog.abap @@ -131,6 +131,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. lt_repos = lcl_app=>repo_srv( )->list( ). CATCH lcx_exception INTO lx_error. ro_html->add( lcl_gui_chunk_lib=>render_error( ix_error = lx_error ) ). + RETURN. ENDTRY. ro_html->add( render_toc( lt_repos ) ). @@ -254,9 +255,9 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ENDIF. IF lo_repo->is_offline( ) = abap_true. - lv_icon = 'repo_offline'. + lv_icon = 'plug/darkgrey'. ELSE. - lv_icon = 'repo_online'. + lv_icon = 'cloud-upload/blue'. ENDIF. lo_allbar->add( iv_txt = lv_repo_title @@ -279,7 +280,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ro_html->add( '' ). ro_html->add( || ). ro_html->add( '' ). "#EC NOTEXT - ro_html->add( '' ). "#EC NOTEXT - ro_html->add( '' ). "#EC NOTEXT - ro_html->add( '' ). "#EC NOTEXT - ro_html->add( '' ). "#EC NOTEXT - ro_html->add( '' ). "#EC NOTEXT - ro_html->add( '' ). "#EC NOTEXT - ro_html->add( '' ). "#EC NOTEXT + LOOP AT mt_diff_files INTO ls_diff_file. + lcl_progress=>show( iv_key = 'Diff' + iv_current = sy-tabix + iv_total = lines( mt_diff_files ) + iv_text = |Render Diff - { ls_diff_file-filename }| ). - ENDMETHOD. " render_table_head. + ro_html->add( render_diff( ls_diff_file ) ). + ENDLOOP. + + ENDMETHOD. "render_content METHOD render_diff. @@ -232,11 +247,70 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. ro_html->add( '' ). "#EC NOTEXT + ENDMETHOD. " render_diff + +********************************************************************** +* CHUNKS +********************************************************************** + + METHOD render_diff_head. + + DATA: ls_stats TYPE lcl_diff=>ty_count. + + CREATE OBJECT ro_html. + ls_stats = is_diff-o_diff->stats( ). + + IF is_diff-fstate = c_fstate-both. " Merge stats into 'update' if both were changed + ls_stats-update = ls_stats-update + ls_stats-insert + ls_stats-delete. + CLEAR: ls_stats-insert, ls_stats-delete. + ENDIF. + + ro_html->add( '
' ). "#EC NOTEXT + + ro_html->add( |+ { ls_stats-insert }| ). + ro_html->add( |- { ls_stats-delete }| ). + ro_html->add( |~ { ls_stats-update }| ). + ro_html->add( |{ is_diff-filename }| ). "#EC NOTEXT + ro_html->add( lcl_gui_chunk_lib=>render_item_state( iv1 = is_diff-lstate + iv2 = is_diff-rstate ) ). + + IF is_diff-fstate = c_fstate-both AND mv_unified = abap_true. + ro_html->add( 'Attention: Unified mode' + && ' highlighting for MM assumes local file is newer ! ' ). "#EC NOTEXT + ENDIF. + + ro_html->add( '
' ). "#EC NOTEXT + ENDMETHOD. + METHOD render_table_head. + + CREATE OBJECT ro_html. + + IF mv_unified = abap_true. + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ELSE. + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ENDIF. + + ENDMETHOD. " render_table_head. + METHOD render_beacon. - DATA: lv_beacon TYPE string. + DATA: lv_beacon TYPE string. CREATE OBJECT ro_html. @@ -246,10 +320,19 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. lv_beacon = '---'. ENDIF. + ro_html->add( '' ). ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( || ). + + IF mv_unified = abap_true. + ro_html->add( '' ). + ro_html->add( '' ). + ro_html->add( || ). + ELSE. + ro_html->add( '' ). + ro_html->add( || ). + ENDIF. + ro_html->add( '' ). ro_html->add( '' ). @@ -259,10 +342,6 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. DATA: lo_highlighter TYPE REF TO lcl_syntax_highlighter, lt_diffs TYPE lcl_diff=>ty_diffs_tt, - lv_local TYPE string, - lv_remote TYPE string, - lv_lattr TYPE string, - lv_rattr TYPE string, lv_insert_nav TYPE abap_bool. FIELD-SYMBOLS LIKE LINE OF lt_diffs. @@ -283,83 +362,125 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. lv_insert_nav = abap_false. ENDIF. - IF is_diff-mod = c_mod-remote. " Remote file leading changes - lv_local = -old. - lv_remote = -new. - ELSE. " Local leading changes or both were modified - lv_local = -new. - lv_remote = -old. - ENDIF. - IF lo_highlighter IS BOUND. - lv_local = lo_highlighter->process_line( lv_local ). - lv_remote = lo_highlighter->process_line( lv_remote ). + -new = lo_highlighter->process_line( -new ). + -old = lo_highlighter->process_line( -old ). ELSE. - lv_local = escape( val = lv_local format = cl_abap_format=>e_html_attr ). - lv_remote = escape( val = lv_remote format = cl_abap_format=>e_html_attr ). + -new = escape( val = -new format = cl_abap_format=>e_html_attr ). + -old = escape( val = -old format = cl_abap_format=>e_html_attr ). ENDIF. - get_line_hl( EXPORTING iv_mod = is_diff-mod - iv_result = -result - IMPORTING ev_lattr = lv_lattr - ev_rattr = lv_rattr ). + CONDENSE -new_num. "get rid of leading spaces + CONDENSE -old_num. - ro_html->add( '' ). "#EC NOTEXT - ro_html->add( || ). "#EC NOTEXT - ro_html->add( |{ lv_local }| ). "#EC NOTEXT - ro_html->add( || ). "#EC NOTEXT - ro_html->add( |{ lv_remote }| ). "#EC NOTEXT - ro_html->add( '' ). "#EC NOTEXT + IF mv_unified = abap_true. + ro_html->add( render_line_unified( is_diff_line = ) ). + ELSE. + ro_html->add( render_line_split( is_diff_line = + iv_fstate = is_diff-fstate ) ). + ENDIF. ENDLOOP. - ENDMETHOD. - - METHOD get_line_hl. - - CLEAR: ev_lattr, ev_rattr. " Class for changed lines - - IF iv_result IS INITIAL. - RETURN. + IF mv_unified = abap_true. + ro_html->add( render_line_unified( ) ). " Release delayed lines ENDIF. - " Both file changed ? Or line updated ? - All yellow - IF iv_mod = c_mod-both OR iv_result = lcl_diff=>c_diff-update. - ev_lattr = ' class="diff_upd"'. "#EC NOTEXT - ev_rattr = ' class="diff_upd"'. "#EC NOTEXT - ELSEIF iv_mod = c_mod-local. " Changed locally - CASE iv_result. - WHEN lcl_diff=>c_diff-insert. - ev_lattr = ' class="diff_ins"'. "#EC NOTEXT - WHEN lcl_diff=>c_diff-delete. - ev_rattr = ' class="diff_del"'. "#EC NOTEXT - ENDCASE. - ELSEIF iv_mod = c_mod-remote. " Changed remotely - invert sides - CASE iv_result. - WHEN lcl_diff=>c_diff-insert. - ev_rattr = ' class="diff_ins"'. "#EC NOTEXT - WHEN lcl_diff=>c_diff-delete. - ev_lattr = ' class="diff_del"'. "#EC NOTEXT - ENDCASE. - ENDIF. + ENDMETHOD. "render_lines - ENDMETHOD. " get_line_hl. + METHOD render_line_split. - METHOD render_content. - - DATA ls_diff_file LIKE LINE OF mt_diff_files. + DATA: lv_new TYPE string, + lv_old TYPE string, + lv_mark TYPE string, + lv_bg TYPE string. CREATE OBJECT ro_html. - LOOP AT mt_diff_files INTO ls_diff_file. - lcl_progress=>show( iv_key = 'Diff' - iv_current = sy-tabix - iv_total = lines( mt_diff_files ) - iv_text = |Render Diff - { ls_diff_file-filename }| ). + " New line + lv_mark = ` `. + IF iv_fstate = c_fstate-both OR is_diff_line-result = lcl_diff=>c_diff-update. + lv_bg = ' diff_upd'. + lv_mark = `~`. + ELSEIF is_diff_line-result = lcl_diff=>c_diff-insert. + lv_bg = ' diff_ins'. + lv_mark = `+`. + ENDIF. + lv_new = || + && ||. - ro_html->add( render_diff( ls_diff_file ) ). - ENDLOOP. + " Old line + CLEAR lv_bg. + lv_mark = ` `. + IF iv_fstate = c_fstate-both OR is_diff_line-result = lcl_diff=>c_diff-update. + lv_bg = ' diff_upd'. + lv_mark = `~`. + ELSEIF is_diff_line-result = lcl_diff=>c_diff-delete. + lv_bg = ' diff_del'. + lv_mark = `-`. + ENDIF. + lv_old = || + && ||. - ENDMETHOD. "render_content + " render line, inverse sides if remote is newer + ro_html->add( '' ). "#EC NOTEXT + IF iv_fstate = c_fstate-remote. " Remote file leading changes + ro_html->add( lv_old ). " local + ro_html->add( lv_new ). " remote + ELSE. " Local leading changes or both were modified + ro_html->add( lv_new ). " local + ro_html->add( lv_old ). " remote + ENDIF. + ro_html->add( '' ). "#EC NOTEXT + + ENDMETHOD. "render_line_split + + METHOD render_line_unified. + + DATA lv_line TYPE string. + + FIELD-SYMBOLS LIKE LINE OF mt_delayed_lines. + + CREATE OBJECT ro_html. + + " Release delayed subsequent update lines + IF is_diff_line-result <> lcl_diff=>c_diff-update. + LOOP AT mt_delayed_lines ASSIGNING . + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( || + && || + && || ). + ro_html->add( '' ). "#EC NOTEXT + ENDLOOP. + LOOP AT mt_delayed_lines ASSIGNING . + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( || + && || + && || ). + ro_html->add( '' ). "#EC NOTEXT + ENDLOOP. + CLEAR mt_delayed_lines. + ENDIF. + + ro_html->add( '' ). "#EC NOTEXT + CASE is_diff_line-result. + WHEN lcl_diff=>c_diff-update. + APPEND is_diff_line TO mt_delayed_lines. " Delay output of subsequent updates + WHEN lcl_diff=>c_diff-insert. + ro_html->add( || + && || + && || ). + WHEN lcl_diff=>c_diff-delete. + ro_html->add( || + && || + && || ). + WHEN OTHERS. "none + ro_html->add( || + && || + && || ). + ENDCASE. + ro_html->add( '' ). "#EC NOTEXT + + ENDMETHOD. "render_line_unified ENDCLASS. "lcl_gui_page_diff \ No newline at end of file diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index d5498f8c0..af4d6a437 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -422,6 +422,14 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. RETURNING VALUE(rv_changes_only) TYPE abap_bool RAISING lcx_exception. + METHODS toggle_diff_unified + RETURNING VALUE(rv_diff_unified) TYPE abap_bool + RAISING lcx_exception. + + METHODS get_diff_unified + RETURNING VALUE(rv_diff_unified) TYPE abap_bool + RAISING lcx_exception. + METHODS get_favorites RETURNING VALUE(rt_favorites) TYPE tt_favorites RAISING lcx_exception. @@ -454,6 +462,7 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. repo_config TYPE ty_repo_config_tt, hide_files TYPE abap_bool, changes_only TYPE abap_bool, + diff_unified TYPE abap_bool, favorites TYPE tt_favorites, END OF ty_user. @@ -698,6 +707,24 @@ CLASS lcl_persistence_user IMPLEMENTATION. ENDMETHOD. "get_changes_only + METHOD toggle_diff_unified. + + DATA ls_user TYPE ty_user. + + ls_user = read( ). + ls_user-diff_unified = boolc( ls_user-diff_unified = abap_false ). + update( ls_user ). + + rv_diff_unified = ls_user-diff_unified. + + ENDMETHOD. "toggle_diff_unified + + METHOD get_diff_unified. + + rv_diff_unified = read( )-diff_unified. + + ENDMETHOD. "get_diff_unified + METHOD get_favorites. rt_favorites = read( )-favorites. diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index 8fb06bc0c..22631561e 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -242,11 +242,11 @@ CLASS ltcl_diff IMPLEMENTATION. DEFINE _expected. CLEAR ms_expected. - ms_expected-new_line = &1. - ms_expected-new = &2. - ms_expected-result = &3. - ms_expected-old_line = &4. - ms_expected-old = &5. + ms_expected-new_num = &1. + ms_expected-new = &2. + ms_expected-result = &3. + ms_expected-old_num = &4. + ms_expected-old = &5. APPEND ms_expected TO mt_expected. END-OF-DEFINITION. diff --git a/src/zabapgit_util.prog.abap b/src/zabapgit_util.prog.abap index 20478551d..9c9ca66dd 100644 --- a/src/zabapgit_util.prog.abap +++ b/src/zabapgit_util.prog.abap @@ -547,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_num TYPE c LENGTH 6, + new TYPE string, + result TYPE c LENGTH 1, + old_num 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. @@ -697,16 +697,16 @@ CLASS lcl_diff IMPLEMENTATION. LOOP AT mt_diff ASSIGNING . - -new_line = lv_new. - -old_line = lv_old. + -new_num = lv_new. + -old_num = lv_old. CASE -result. " Line nums WHEN c_diff-delete. lv_old = lv_old + 1. - CLEAR -new_line. + CLEAR -new_num. WHEN c_diff-insert. lv_new = lv_new + 1. - CLEAR -old_line. + CLEAR -old_num. WHEN OTHERS. lv_new = lv_new + 1. lv_old = lv_old + 1. From f8562a52d445a649e71c4bc6d3245f5710de9d88 Mon Sep 17 00:00:00 2001 From: larshp Date: Wed, 11 Jan 2017 15:27:05 +0000 Subject: [PATCH 035/142] ENHO: serialize code from new method --- src/zabapgit_object_enho.prog.abap | 60 ++++++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 7 deletions(-) diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index b04bdac39..83f9f2cca 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -2,9 +2,6 @@ *& Include ZABAPGIT_OBJECT_ENHO *&---------------------------------------------------------------------* -* todo, CL_ENH_TOOL_CLASS inherits from CL_ENH_TOOL_CLIF so this -* should also be reflected in the code in this include - * For complete list of tool_type - see ENHTOOLS table INTERFACE lif_object_enho. @@ -31,14 +28,56 @@ CLASS lcl_object_enho_clif DEFINITION. RAISING lcx_exception cx_enh_root, serialize - IMPORTING io_xml TYPE REF TO lcl_xml_output - io_clif TYPE REF TO cl_enh_tool_clif + IMPORTING io_xml TYPE REF TO lcl_xml_output + io_files TYPE REF TO lcl_objects_files + io_clif TYPE REF TO cl_enh_tool_clif RAISING lcx_exception. + PRIVATE SECTION. + CLASS-METHODS: serialize_includes + IMPORTING io_files TYPE REF TO lcl_objects_files + io_clif TYPE REF TO cl_enh_tool_clif + RAISING lcx_exception. + ENDCLASS. CLASS lcl_object_enho_clif IMPLEMENTATION. + METHOD serialize_includes. + + DATA: lt_includes TYPE enhnewmeth_tabincl_plus_enha, + lt_source TYPE TABLE OF abaptxt255, + lv_include TYPE programm. + + FIELD-SYMBOLS: LIKE LINE OF lt_includes. + + + lt_includes = io_clif->get_enh_method_includes( ). + LOOP AT lt_includes ASSIGNING . + lv_include = io_clif->if_enh_tool~get_name( ). + TRANSLATE lv_include USING ' ='. + lv_include+30 = 'EM'. + lv_include+32(8) = -includenr. + + CALL FUNCTION 'RPY_PROGRAM_READ' + EXPORTING + program_name = lv_include + with_lowercase = abap_true + TABLES + source_extended = lt_source + EXCEPTIONS + cancelled = 1 + not_found = 2 + permission_error = 3 + OTHERS = 4. + IF sy-subrc = 0. + io_files->add_abap( iv_extra = |EM{ -includenr }| + it_abap = lt_source ). + ENDIF. + ENDLOOP. + + ENDMETHOD. + METHOD serialize. DATA: lt_tab_attributes TYPE enhclasstabattrib, @@ -56,6 +95,9 @@ CLASS lcl_object_enho_clif IMPLEMENTATION. IMPORTING tab_methodes = lt_tab_methods ). + serialize_includes( io_clif = io_clif + io_files = io_files ). + LOOP AT lt_tab_attributes ASSIGNING . CLEAR: -author, -createdon, @@ -98,6 +140,8 @@ CLASS lcl_object_enho_clif IMPLEMENTATION. io_clif->set_enhattributes( tab_attributes = lt_tab_attributes ). +* todo: deserialize includes + * SAP standard SET_ENH_NEW_METHOS does not work LOOP AT lt_tab_methods ASSIGNING . @@ -484,6 +528,7 @@ CLASS lcl_object_enho_interface IMPLEMENTATION. lcl_object_enho_clif=>serialize( io_xml = io_xml + io_files = mo_files io_clif = lo_enh_intf ). ENDMETHOD. @@ -594,8 +639,9 @@ CLASS lcl_object_enho_class IMPLEMENTATION. mo_files->add_abap( lt_source ). lcl_object_enho_clif=>serialize( - io_xml = io_xml - io_clif = lo_enh_class ). + io_xml = io_xml + io_files = mo_files + io_clif = lo_enh_class ). ENDMETHOD. From 169373825d83c94c89c4d1caf6799965152bd3cb Mon Sep 17 00:00:00 2001 From: larshp Date: Wed, 11 Jan 2017 15:32:43 +0000 Subject: [PATCH 036/142] v1.25.0 new feature = unified split diff --- src/zabapgit.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index d2963f3b4..ce60c9815 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -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.13'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.25.0'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) From b91ab3d9bd17f05fc9d5ca7b5abc0a20ae28f0cf Mon Sep 17 00:00:00 2001 From: sbcgua Date: Thu, 12 Jan 2017 15:35:40 +0200 Subject: [PATCH 037/142] fix highlighting bug after page_diff refactoring --- src/zabapgit_css_common.w3mi.data.css | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/zabapgit_css_common.w3mi.data.css b/src/zabapgit_css_common.w3mi.data.css index 8db14ac39..8da217de9 100644 --- a/src/zabapgit_css_common.w3mi.data.css +++ b/src/zabapgit_css_common.w3mi.data.css @@ -519,19 +519,17 @@ table.diff_tab code { white-space: pre; } table.diff_tab td.code { - /* font-family: inherit; */ - /* white-space: pre; */ word-wrap: break-word; white-space: pre-wrap; overflow: visible; } -table.diff_tab code span.keyword { color: #0a69ce; } -table.diff_tab code span.text { color: #48ce4f; } -table.diff_tab code span.comment { color: #808080; font-style: italic; } -table.diff_tab code span.xml_tag { color: #457ce3; } -table.diff_tab code span.attr { color: #b777fb; } -table.diff_tab code span.attr_val { color: #7a02f9; } +table.diff_tab .code span.keyword { color: #0a69ce; } +table.diff_tab .code span.text { color: #48ce4f; } +table.diff_tab .code span.comment { color: #808080; font-style: italic; } +table.diff_tab .code span.xml_tag { color: #457ce3; } +table.diff_tab .code span.attr { color: #b777fb; } +table.diff_tab .code span.attr_val { color: #7a02f9; } table.diff_tab tbody tr:first-child td { padding-top: 0.5em; } table.diff_tab tbody tr:last-child td { padding-bottom: 0.5em; } From f76b1bfce0e53aae1b864c2d273e032daf54ceb3 Mon Sep 17 00:00:00 2001 From: sbcgua Date: Thu, 12 Jan 2017 16:52:17 +0200 Subject: [PATCH 038/142] HEAD in select branch dialog #531 normilize branch name for new branches -> substitute space to '-' --- src/zabapgit_git_helpers.prog.abap | 26 +++++++++++++++--- src/zabapgit_html_chunks.prog.abap | 3 +- src/zabapgit_popups.prog.abap | 44 ++++++++++++++++++++++-------- 3 files changed, 56 insertions(+), 17 deletions(-) diff --git a/src/zabapgit_git_helpers.prog.abap b/src/zabapgit_git_helpers.prog.abap index 41fe042a5..257730392 100644 --- a/src/zabapgit_git_helpers.prog.abap +++ b/src/zabapgit_git_helpers.prog.abap @@ -111,7 +111,7 @@ CLASS lcl_git_branch_list DEFINITION FINAL. tag TYPE ty_git_branch_type VALUE 'TG', other TYPE ty_git_branch_type VALUE 'ZZ', END OF c_type. - CONSTANTS head_name TYPE string VALUE 'HEAD'. + CONSTANTS c_head_name TYPE string VALUE 'HEAD'. METHODS constructor IMPORTING iv_data TYPE string @@ -126,6 +126,9 @@ CLASS lcl_git_branch_list DEFINITION FINAL. RETURNING VALUE(rs_branch) TYPE ty_git_branch RAISING lcx_exception. + METHODS get_head_symref + RETURNING VALUE(rv_head_symref) TYPE string. + METHODS get_branches_only RETURNING VALUE(rt_branches) TYPE ty_git_branch_list_tt RAISING lcx_exception. @@ -150,6 +153,10 @@ CLASS lcl_git_branch_list DEFINITION FINAL. IMPORTING iv_branch_name TYPE clike RETURNING VALUE(rv_name) TYPE string. + CLASS-METHODS normalize_branch_name + IMPORTING iv_branch_name TYPE clike + RETURNING VALUE(rv_name) TYPE string. + PRIVATE SECTION. DATA mt_branches TYPE ty_git_branch_list_tt. DATA mv_head_symref TYPE string. @@ -178,6 +185,10 @@ CLASS lcl_git_branch_list IMPLEMENTATION. ev_head_symref = me->mv_head_symref ). ENDMETHOD. "create + METHOD get_head_symref. + rv_head_symref = mv_head_symref. + ENDMETHOD. " get_head_symref. + METHOD find_by_name. IF iv_branch_name IS INITIAL. @@ -197,7 +208,7 @@ CLASS lcl_git_branch_list IMPLEMENTATION. IF mv_head_symref IS NOT INITIAL. rs_branch = find_by_name( mv_head_symref ). ELSE. - rs_branch = find_by_name( head_name ). + rs_branch = find_by_name( c_head_name ). ENDIF. ENDMETHOD. "get_head @@ -246,7 +257,7 @@ CLASS lcl_git_branch_list IMPLEMENTATION. -name = lv_name. -display_name = get_display_name( lv_name ). -type = get_type( lv_name ). - IF -name = head_name OR -name = ev_head_symref. + IF -name = c_head_name OR -name = ev_head_symref. -is_head = abap_true. ENDIF. ENDLOOP. @@ -295,7 +306,7 @@ CLASS lcl_git_branch_list IMPLEMENTATION. METHOD get_type. rv_type = c_type-other. - IF iv_branch_name CP 'refs/heads/*' OR iv_branch_name = head_name. + IF iv_branch_name CP 'refs/heads/*' OR iv_branch_name = c_head_name. rv_type = c_type-branch. RETURN. ENDIF. @@ -334,4 +345,11 @@ CLASS lcl_git_branch_list IMPLEMENTATION. ENDLOOP. ENDMETHOD. "get_tags_only + METHOD normalize_branch_name. + + rv_name = iv_branch_name. " Force convert to string + REPLACE ALL OCCURRENCES OF ` ` IN rv_name WITH '-'. " Disallow space in branch name + + ENDMETHOD. " normalize_branch_name. + ENDCLASS. "lcl_git_branch_list \ No newline at end of file diff --git a/src/zabapgit_html_chunks.prog.abap b/src/zabapgit_html_chunks.prog.abap index 79d4b4fed..0161e66dd 100644 --- a/src/zabapgit_html_chunks.prog.abap +++ b/src/zabapgit_html_chunks.prog.abap @@ -162,7 +162,8 @@ CLASS lcl_gui_chunk_lib IMPLEMENTATION. 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. + IF iv_branch = io_repo->get_head_branch_name( ) + OR iv_branch = lcl_git_branch_list=>c_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'. diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index 6ee6af2f0..ff7a4238f 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -174,7 +174,7 @@ CLASS lcl_popups IMPLEMENTATION. CLEAR: ev_name, ev_cancel. * TAB FLD LABEL DEF ATTR - _add_dialog_fld 'TEXTL' 'LINE' 'Name' 'new_branch_name' ''. + _add_dialog_fld 'TEXTL' 'LINE' 'Name' 'new-branch-name' ''. CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING @@ -195,7 +195,8 @@ CLASS lcl_popups IMPLEMENTATION. ELSE. READ TABLE lt_fields INDEX 1 ASSIGNING . ASSERT sy-subrc = 0. - ev_name = lcl_git_branch_list=>complete_heads_branch_name( -value ). + ev_name = lcl_git_branch_list=>complete_heads_branch_name( + lcl_git_branch_list=>normalize_branch_name( -value ) ). ENDIF. ENDMETHOD. @@ -282,26 +283,42 @@ CLASS lcl_popups IMPLEMENTATION. METHOD branch_list_popup. - DATA: lo_branches TYPE REF TO lcl_git_branch_list, - lt_branches TYPE lcl_git_branch_list=>ty_git_branch_list_tt, - lv_answer TYPE c LENGTH 1, - lv_default TYPE i VALUE 1, "Default cursor position - lt_selection TYPE TABLE OF spopli. + DATA: lo_branches TYPE REF TO lcl_git_branch_list, + lt_branches TYPE lcl_git_branch_list=>ty_git_branch_list_tt, + lv_head_suffix TYPE string, + lv_answer TYPE c LENGTH 1, + lv_default TYPE i VALUE 1, "Default cursor position + lt_selection TYPE TABLE OF spopli. FIELD-SYMBOLS: LIKE LINE OF lt_selection, LIKE LINE OF lt_branches. - lo_branches = lcl_git_transport=>branches( iv_url ). + lo_branches = lcl_git_transport=>branches( iv_url ). + lt_branches = lo_branches->get_branches_only( ). + lv_head_suffix = | ({ lcl_git_branch_list=>c_head_name })|. - lt_branches = lo_branches->get_branches_only( ). LOOP AT lt_branches ASSIGNING . - APPEND INITIAL LINE TO lt_selection ASSIGNING . - -varoption = -name. + IF -name = lcl_git_branch_list=>c_head_name + AND -name <> lo_branches->get_head_symref( ). + " HEAD but other HEAD symref exist + CONTINUE. + ENDIF. + + APPEND INITIAL LINE TO lt_selection ASSIGNING . IF iv_default_branch IS NOT INITIAL AND iv_default_branch = -name. lv_default = sy-tabix. ENDIF. + + IF -name = lo_branches->get_head_symref( ) + AND -name <> lcl_git_branch_list=>c_head_name. + " HEAD symref but not HEAD itself + -varoption = -display_name && lv_head_suffix. + ELSE. + -varoption = -display_name. + ENDIF. + ENDLOOP. IF iv_show_new_option = abap_true. @@ -339,7 +356,10 @@ CLASS lcl_popups IMPLEMENTATION. IF iv_show_new_option = abap_true AND -varoption = c_new_branch_label. rs_branch-name = c_new_branch_label. ELSE. - rs_branch = lo_branches->find_by_name( -varoption ). + REPLACE FIRST OCCURRENCE OF lv_head_suffix IN -varoption WITH ''. + READ TABLE lt_branches WITH KEY display_name = -varoption ASSIGNING . + ASSERT sy-subrc = 0. + rs_branch = lo_branches->find_by_name( -name ). ENDIF. From ea28fdfd7b4130c3a22ea97b345157ae0bbf286e Mon Sep 17 00:00:00 2001 From: sbcgua Date: Thu, 12 Jan 2017 17:11:32 +0200 Subject: [PATCH 039/142] small fix for html intentation at page_main --- src/zabapgit_html.prog.abap | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/zabapgit_html.prog.abap b/src/zabapgit_html.prog.abap index 1bddb868f..e6ac84d75 100644 --- a/src/zabapgit_html.prog.abap +++ b/src/zabapgit_html.prog.abap @@ -426,7 +426,8 @@ CLASS lcl_html_toolbar IMPLEMENTATION. ENDIF. IF lv_is_drop = abap_true. " Dropdown - ro_html->add( '' ). + ro_html->add( '' ). + ro_html->add( '' ). ENDIF. ro_html->add( '' ). From ab706e6d6b82b0db640ef08940be9193578c0801 Mon Sep 17 00:00:00 2001 From: sbcgua Date: Thu, 12 Jan 2017 17:28:03 +0200 Subject: [PATCH 040/142] remove "menu_end" logic, moved to CSS --- src/zabapgit_css_common.w3mi.data.css | 15 ++++++++++++++- src/zabapgit_css_common.w3mi.xml | 2 +- src/zabapgit_html.prog.abap | 24 ++++-------------------- 3 files changed, 19 insertions(+), 22 deletions(-) diff --git a/src/zabapgit_css_common.w3mi.data.css b/src/zabapgit_css_common.w3mi.data.css index 8da217de9..95d64ab1e 100644 --- a/src/zabapgit_css_common.w3mi.data.css +++ b/src/zabapgit_css_common.w3mi.data.css @@ -111,9 +111,22 @@ div.menu .menu_end { border-right: 0px !important; } div.menu a { padding-left: 0.5em; padding-right: 0.5em; - border-right: 1px solid lightgrey; font-size: 12pt; } + +div.menu > a { + border-right: 1px solid lightgrey; +} +div.menu > div.dropdown > a { + border-right: 1px solid lightgrey; +} +div.menu > a:last-child { + border-right: 0px !important; +} +div.menu > div.dropdown:last-child > a { + border-right: 0px !important; +} + div.menu_vertical { display: inline; } div.menu_vertical a { display: block; diff --git a/src/zabapgit_css_common.w3mi.xml b/src/zabapgit_css_common.w3mi.xml index 10d1ffd0d..7f7372fc2 100644 --- a/src/zabapgit_css_common.w3mi.xml +++ b/src/zabapgit_css_common.w3mi.xml @@ -3,7 +3,7 @@ ZABAPGIT_CSS_COMMON - AbapGit common styles + MI diff --git a/src/zabapgit_html.prog.abap b/src/zabapgit_html.prog.abap index e6ac84d75..340f7fadb 100644 --- a/src/zabapgit_html.prog.abap +++ b/src/zabapgit_html.prog.abap @@ -332,8 +332,7 @@ CLASS lcl_html_toolbar IMPLEMENTATION. METHOD render. "TODO refactor DATA: lv_class TYPE string, - lv_is_drop TYPE abap_bool, - lv_last TYPE abap_bool. + lv_is_drop TYPE abap_bool. FIELD-SYMBOLS LIKE LINE OF mt_items. @@ -359,13 +358,8 @@ CLASS lcl_html_toolbar IMPLEMENTATION. IF iv_as_angle = abap_true. ro_html->add( '
' ). ELSE. - lv_class = 'dropbtn'. - IF iv_no_separator = abap_true. - lv_class = lv_class && ' menu_end' ##NO_TEXT. - ENDIF. - ro_html->add_a( iv_txt = iv_as_droplist_with_label - iv_class = lv_class + iv_class = 'dropbtn' iv_act = '' ). ENDIF. @@ -386,15 +380,8 @@ CLASS lcl_html_toolbar IMPLEMENTATION. ENDIF. LOOP AT mt_items ASSIGNING . - lv_last = boolc( sy-tabix = lines( mt_items ) ). IF -sub IS INITIAL. - CLEAR lv_class. - IF iv_no_separator = abap_true - OR lv_last = abap_true - AND iv_as_droplist_with_label IS INITIAL. - lv_class = 'menu_end'. - ENDIF. IF iv_with_icons = abap_true. ro_html->add( '
' ). @@ -405,8 +392,7 @@ CLASS lcl_html_toolbar IMPLEMENTATION. ro_html->add_a( iv_txt = -txt iv_act = -act iv_opt = -opt - iv_typ = -typ - iv_class = lv_class ). + iv_typ = -typ ). IF iv_with_icons = abap_true. ro_html->add( '' ). @@ -414,9 +400,7 @@ CLASS lcl_html_toolbar IMPLEMENTATION. ENDIF. ELSE. - ro_html->add( -sub->render( - iv_as_droplist_with_label = -txt - iv_no_separator = lv_last ) ). + ro_html->add( -sub->render( iv_as_droplist_with_label = -txt ) ). ENDIF. ENDLOOP. From e3ba6b5053cc4678870f37d3bd5f0df192976c8d Mon Sep 17 00:00:00 2001 From: kvtorp Date: Mon, 16 Jan 2017 12:09:20 +0000 Subject: [PATCH 041/142] Added workaround to loading zero-length files Changed the use of CL_ABAP_ZIP to use the FILES attribute rather than use the SPLICE method, as the latter does not return zero-length files --- src/zabapgit_zip.prog.abap | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/zabapgit_zip.prog.abap b/src/zabapgit_zip.prog.abap index 45667324e..497f0b474 100644 --- a/src/zabapgit_zip.prog.abap +++ b/src/zabapgit_zip.prog.abap @@ -27,12 +27,12 @@ CLASS lcl_zip DEFINITION FINAL. PRIVATE SECTION. CLASS-METHODS file_upload - RETURNING value(rv_xstr) TYPE xstring + RETURNING VALUE(rv_xstr) TYPE xstring RAISING lcx_exception. CLASS-METHODS unzip_file IMPORTING iv_xstr TYPE xstring - RETURNING value(rt_files) TYPE ty_files_tt + RETURNING VALUE(rt_files) TYPE ty_files_tt RAISING lcx_exception. CLASS-METHODS normalize_path @@ -52,11 +52,11 @@ CLASS lcl_zip DEFINITION FINAL. CLASS-METHODS encode_files IMPORTING it_files TYPE ty_files_item_tt - RETURNING value(rv_xstr) TYPE xstring + RETURNING VALUE(rv_xstr) TYPE xstring RAISING lcx_exception. CLASS-METHODS get_message - RETURNING value(rv_message) TYPE string + RETURNING VALUE(rv_message) TYPE string RAISING lcx_exception. ENDCLASS. "lcl_zip DEFINITION @@ -341,12 +341,11 @@ CLASS lcl_zip IMPLEMENTATION. METHOD unzip_file. - DATA: lo_zip TYPE REF TO cl_abap_zip, - lv_xstr TYPE xstring, - lt_splice TYPE cl_abap_zip=>t_splice_entries. + DATA: lo_zip TYPE REF TO cl_abap_zip, + lv_data TYPE xstring. - FIELD-SYMBOLS: LIKE LINE OF lt_splice, - LIKE LINE OF rt_files. + FIELD-SYMBOLS: TYPE cl_abap_zip=>t_file, + LIKE LINE OF rt_files. CREATE OBJECT lo_zip. @@ -359,14 +358,13 @@ CLASS lcl_zip IMPLEMENTATION. lcx_exception=>raise( 'error from zip' ). ENDIF. - lt_splice = cl_abap_zip=>splice( iv_xstr ). + LOOP AT lo_zip->files ASSIGNING . - LOOP AT lt_splice ASSIGNING . lo_zip->get( EXPORTING - name = -name + name = -name IMPORTING - content = lv_xstr + content = lv_data EXCEPTIONS zip_index_error = 1 zip_decompression_error = 2 @@ -379,12 +377,12 @@ CLASS lcl_zip IMPLEMENTATION. filename( EXPORTING - iv_str = -name + iv_str = -name IMPORTING ev_path = -path ev_filename = -filename ). - -data = lv_xstr. + -data = lv_data. -sha1 = lcl_hash=>sha1( iv_type = gc_type-blob iv_data = -data ). From 8b0b6999fc16f7ded7159ce2a3923db41ea56448 Mon Sep 17 00:00:00 2001 From: larshp Date: Tue, 17 Jan 2017 16:15:36 +0100 Subject: [PATCH 042/142] Background mode: fix commit text, close #540 --- src/zabapgit_background.prog.abap | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/zabapgit_background.prog.abap b/src/zabapgit_background.prog.abap index 01d643c7c..21fce22bf 100644 --- a/src/zabapgit_background.prog.abap +++ b/src/zabapgit_background.prog.abap @@ -97,6 +97,9 @@ CLASS lcl_background IMPLEMENTATION. APPEND lv_str TO lt_objects. ENDLOOP. + SORT lt_objects AS TEXT. + DELETE ADJACENT DUPLICATES FROM lt_objects. + IF lines( lt_objects ) = 1. rv_comment = |BG: { lv_str }|. ELSE. From 68c51626a3d33e88c8f38a240791a9fbad68aca2 Mon Sep 17 00:00:00 2001 From: larshp Date: Tue, 17 Jan 2017 16:05:23 +0000 Subject: [PATCH 043/142] edit xml - fix dump, close #539 --- src/zabapgit_html_action_utils.prog.abap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_html_action_utils.prog.abap b/src/zabapgit_html_action_utils.prog.abap index 8fd1ed7bb..df57ea389 100644 --- a/src/zabapgit_html_action_utils.prog.abap +++ b/src/zabapgit_html_action_utils.prog.abap @@ -271,8 +271,8 @@ CLASS lcl_html_action_utils IMPLEMENTATION. get_field( EXPORTING name = 'XMLDATA' it = lt_fields CHANGING cv = rs_content-data_str ). IF rs_content-data_str(1) <> '<' AND rs_content-data_str+1(1) = '<'. " Hmmm ??? rs_content-data_str = rs_content-data_str+1. - ELSE. - CLEAR rs_content-data_str. +* ELSE. +* CLEAR rs_content-data_str. ENDIF. ENDMETHOD. "dbcontent_decode From e9c6b5a3d6f3ba1af10378f89856eb8a36335b63 Mon Sep 17 00:00:00 2001 From: larshp Date: Wed, 18 Jan 2017 15:24:57 +0000 Subject: [PATCH 044/142] Only show first 500 objects in list #537 Render only the first 500 objects, as it takes a lot of time to render the html if there are _many_ objects --- src/zabapgit_view_repo.prog.abap | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/zabapgit_view_repo.prog.abap b/src/zabapgit_view_repo.prog.abap index 3de6e6655..5c9cd9b74 100644 --- a/src/zabapgit_view_repo.prog.abap +++ b/src/zabapgit_view_repo.prog.abap @@ -110,6 +110,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. lx_error TYPE REF TO lcx_exception, lv_lstate TYPE char1, lv_rstate TYPE char1, + lv_max TYPE abap_bool, lo_log TYPE REF TO lcl_log. FIELD-SYMBOLS LIKE LINE OF lt_repo_items. @@ -159,11 +160,20 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. ro_html->add( render_empty_package( ) ). ELSE. LOOP AT lt_repo_items ASSIGNING . + IF sy-tabix > 500. + lv_max = abap_true. + EXIT. " current loop + ENDIF. ro_html->add( render_item( ) ). ENDLOOP. ENDIF. ro_html->add( '
{ - lcl_html=>icon( iv_name = 'star' iv_alt = 'Favs' iv_hint = 'Favorites' ) + lcl_html=>icon( iv_name = 'star/blue' iv_alt = 'Favs' iv_hint = 'Favorites' ) }' ). " Maximize width @@ -294,7 +295,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ro_html->add( '' ). ro_html->add( lo_allbar->render( - iv_as_droplist_with_label = lcl_html=>icon( iv_name = 'burger' iv_class = 'pad4px' ) + 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 ) ). diff --git a/src/zabapgit_view_repo.prog.abap b/src/zabapgit_view_repo.prog.abap index cf2cbdd8c..3de6e6655 100644 --- a/src/zabapgit_view_repo.prog.abap +++ b/src/zabapgit_view_repo.prog.abap @@ -348,17 +348,17 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. CASE is_item-obj_type. WHEN 'PROG' OR 'CLAS' OR 'FUGR'. - rv_html = lcl_html=>icon( 'code' ). + rv_html = lcl_html=>icon( 'file-code/darkgrey' ). WHEN 'W3MI' OR 'W3HT'. - rv_html = lcl_html=>icon( 'bin' ). + rv_html = lcl_html=>icon( 'file-binary/darkgrey' ). WHEN ''. rv_html = space. " no icon WHEN OTHERS. - rv_html = lcl_html=>icon( 'obj' ). + rv_html = lcl_html=>icon( 'file/darkgrey' ). ENDCASE. IF is_item-is_dir = abap_true. - rv_html = lcl_html=>icon( 'dir' ). + rv_html = lcl_html=>icon( 'file-directory/darkgrey' ). ENDIF. ENDMETHOD. "get_item_icon diff --git a/src/zabapgit_view_tutorial.prog.abap b/src/zabapgit_view_tutorial.prog.abap index 1cc2c0105..bdb915b91 100644 --- a/src/zabapgit_view_tutorial.prog.abap +++ b/src/zabapgit_view_tutorial.prog.abap @@ -51,9 +51,9 @@ CLASS lcl_gui_view_tutorial IMPLEMENTATION. _add '

Repository list and favorites

'. _add '

    '. ro_html->add( |
  • To choose a repo press { - lcl_html=>icon( 'burger' ) } at the favorite bar.
  • | ). + lcl_html=>icon( 'three-bars/blue' ) } at the favorite bar.| ). ro_html->add( |
  • To favorite a repo click { - lcl_html=>icon( 'star-grey' ) } icon at repo toolbar.
  • | ). + lcl_html=>icon( 'star/darkgrey' ) } icon at repo toolbar.| ). _add '

'. _add '

abapGit related repositories

'. From f8234b1deb7ad3d4183396ecb097fe7a64e46775 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 7 Jan 2017 10:23:23 +0000 Subject: [PATCH 026/142] ACID DOMA DTEL FUGR TYPE Fix more dumps and handle invalid data --- src/zabapgit_object_acid.prog.abap | 4 ++- src/zabapgit_object_doma.prog.abap | 17 ++++++++++--- src/zabapgit_object_dtel.prog.abap | 3 +++ src/zabapgit_object_fugr.prog.abap | 41 +++++++++++++++++------------- src/zabapgit_object_type.prog.abap | 2 +- 5 files changed, 45 insertions(+), 22 deletions(-) diff --git a/src/zabapgit_object_acid.prog.abap b/src/zabapgit_object_acid.prog.abap index efc47f9e1..e65983ce0 100644 --- a/src/zabapgit_object_acid.prog.abap +++ b/src/zabapgit_object_acid.prog.abap @@ -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 ). diff --git a/src/zabapgit_object_doma.prog.abap b/src/zabapgit_object_doma.prog.abap index 4e216e9de..cd24e26e9 100644 --- a/src/zabapgit_object_doma.prog.abap +++ b/src/zabapgit_object_doma.prog.abap @@ -129,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. @@ -155,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' diff --git a/src/zabapgit_object_dtel.prog.abap b/src/zabapgit_object_dtel.prog.abap index 52caae569..508d59316 100644 --- a/src/zabapgit_object_dtel.prog.abap +++ b/src/zabapgit_object_dtel.prog.abap @@ -163,6 +163,9 @@ CLASS lcl_object_dtel IMPLEMENTATION. * 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 ). diff --git a/src/zabapgit_object_fugr.prog.abap b/src/zabapgit_object_fugr.prog.abap index 5f8619bc6..2b988430b 100644 --- a/src/zabapgit_object_fugr.prog.abap +++ b/src/zabapgit_object_fugr.prog.abap @@ -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: LIKE LINE OF lt_functab, - LIKE LINE OF rt_functions. + FIELD-SYMBOLS: LIKE LINE OF lt_functab. lt_functab = functions( ). @@ -544,8 +547,8 @@ CLASS lcl_object_fugr IMPLEMENTATION. LOOP AT lt_functab ASSIGNING . * fm RPY_FUNCTIONMODULE_READ does not support source code * lines longer than 72 characters - APPEND INITIAL LINE TO rt_functions ASSIGNING . - MOVE-CORRESPONDING TO . + CLEAR ls_ret. + MOVE-CORRESPONDING TO ls_ret. CLEAR lt_new_source. CLEAR lt_source. @@ -554,18 +557,18 @@ CLASS lcl_object_fugr IMPLEMENTATION. EXPORTING functionname = -funcname IMPORTING - global_flag = -global_flag - remote_call = -remote_call - update_task = -update_task - short_text = -short_text - remote_basxml_supported = -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 = -import - changing_parameter = -changing - export_parameter = -export - tables_parameter = -tables - exception_list = -exception - documentation = -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 = -funcname it_abap = lt_new_source ). diff --git a/src/zabapgit_object_type.prog.abap b/src/zabapgit_object_type.prog.abap index 8c7273888..8068d26c1 100644 --- a/src/zabapgit_object_type.prog.abap +++ b/src/zabapgit_object_type.prog.abap @@ -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. From e8dfcc3ac189e32046593f68960caa490f8632ad Mon Sep 17 00:00:00 2001 From: larshp Date: Mon, 9 Jan 2017 01:19:49 +0000 Subject: [PATCH 027/142] ENHO: refactoring split each type into a class implementing an interface --- src/zabapgit_object_enho.prog.abap | 722 ++++++++++++++++------------- 1 file changed, 395 insertions(+), 327 deletions(-) diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index 16c70ae25..343888d74 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -2,21 +2,147 @@ *& 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 -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_enho DEFINITION INHERITING FROM lcl_objects_super FINAL. * For complete list of tool_type - see ENHTOOLS table + +INTERFACE lif_object_enho. + + METHODS: + deserialize + IMPORTING io_xml TYPE REF TO lcl_xml_input + iv_package TYPE devclass + RAISING lcx_exception, + serialize + IMPORTING io_xml TYPE REF TO lcl_xml_output + ii_enh_tool TYPE REF TO if_enh_tool + RAISING lcx_exception. + +ENDINTERFACE. + +CLASS lcl_object_enho_badi DEFINITION. + PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. + METHODS: constructor + IMPORTING + is_item TYPE ty_item + io_files TYPE REF TO lcl_objects_files. + INTERFACES: lif_object_enho. + + PRIVATE SECTION. + DATA: ms_item TYPE ty_item. + DATA: mo_files TYPE REF TO lcl_objects_files. + +ENDCLASS. + +CLASS lcl_object_enho_badi IMPLEMENTATION. + + METHOD constructor. + ms_item = is_item. + mo_files = io_files. + ENDMETHOD. + + METHOD lif_object_enho~serialize. + + DATA: lo_badi_impl TYPE REF TO cl_enh_tool_badi_impl, + lv_spot_name TYPE enhspotname, + lv_shorttext TYPE string, + lt_impl TYPE enh_badi_impl_data_it. + + FIELD-SYMBOLS: LIKE LINE OF lt_impl, + LIKE LINE OF -filter_values, + LIKE LINE OF -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 . +* make sure the XML serialization does not dump, field type = N + LOOP AT -filter_values ASSIGNING . + IF -filter_numeric_value1 CA space. + CLEAR -filter_numeric_value1. + ENDIF. + ENDLOOP. + LOOP AT -filters ASSIGNING . + IF -filter_numeric_value1 CA space. + CLEAR -filter_numeric_value1. + ENDIF. + ENDLOOP. + ENDLOOP. + + io_xml->add( iv_name = 'TOOL' + ig_data = ii_enh_tool->get_tool( ) ). + io_xml->add( ig_data = lv_shorttext + iv_name = 'SHORTTEXT' ). + io_xml->add( iv_name = 'SPOT_NAME' + ig_data = lv_spot_name ). + io_xml->add( iv_name = 'IMPL' + ig_data = lt_impl ). + + ENDMETHOD. + + METHOD lif_object_enho~deserialize. + + DATA: lv_spot_name TYPE enhspotname, + lv_shorttext TYPE string, + lv_enhname TYPE enhname, + lo_badi TYPE REF TO cl_enh_tool_badi_impl, + li_tool TYPE REF TO if_enh_tool, + lv_package TYPE devclass, + lt_impl TYPE enh_badi_impl_data_it. + + FIELD-SYMBOLS: LIKE LINE OF lt_impl. + + + io_xml->read( EXPORTING iv_name = 'SHORTTEXT' + CHANGING cg_data = lv_shorttext ). + io_xml->read( EXPORTING iv_name = 'SPOT_NAME' + CHANGING cg_data = lv_spot_name ). + io_xml->read( EXPORTING iv_name = '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 + IMPORTING + enhancement = li_tool + CHANGING + devclass = lv_package ). + lo_badi ?= li_tool. + + lo_badi->set_spot_name( lv_spot_name ). + lo_badi->if_enh_object_docu~set_shorttext( lv_shorttext ). + LOOP AT lt_impl ASSIGNING . + lo_badi->add_implementation( ). + ENDLOOP. + lo_badi->if_enh_object~save( ). + lo_badi->if_enh_object~unlock( ). + CATCH cx_enh_root. + lcx_exception=>raise( 'error deserializing ENHO badi' ). + ENDTRY. + + ENDMETHOD. + +ENDCLASS. + +CLASS lcl_object_enho_hook DEFINITION. + PUBLIC SECTION. + METHODS: constructor + IMPORTING + is_item TYPE ty_item + io_files TYPE REF TO lcl_objects_files. + + INTERFACES: lif_object_enho. PRIVATE SECTION. TYPES: BEGIN OF ty_spaces, @@ -26,63 +152,66 @@ CLASS lcl_object_enho DEFINITION INHERITING FROM lcl_objects_super FINAL. TYPES: ty_spaces_tt TYPE STANDARD TABLE OF ty_spaces WITH DEFAULT KEY. - METHODS deserialize_badi - IMPORTING io_xml TYPE REF TO lcl_xml_input - iv_package TYPE devclass - RAISING lcx_exception. - METHODS deserialize_hook - 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. + DATA: ms_item TYPE ty_item. + DATA: mo_files TYPE REF TO lcl_objects_files. + 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 - iv_tool TYPE enhtooltype - ii_enh_tool TYPE REF TO if_enh_tool - RAISING lcx_exception. - METHODS serialize_hook - 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 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. -ENDCLASS. "lcl_object_enho DEFINITION +ENDCLASS. -*----------------------------------------------------------------------* -* CLASS lcl_object_enho IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_enho IMPLEMENTATION. +CLASS lcl_object_enho_hook IMPLEMENTATION. - METHOD lif_object~has_changed_since. - rv_changed = abap_true. - ENDMETHOD. "lif_object~has_changed_since + METHOD constructor. + ms_item = is_item. + mo_files = io_files. + ENDMETHOD. - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata + METHOD lif_object_enho~serialize. + + DATA: lv_shorttext TYPE string, + lo_hook_impl TYPE REF TO cl_enh_tool_hook_impl, + ls_original_object TYPE enh_hook_admin, + lt_spaces TYPE ty_spaces_tt, + lt_enhancements TYPE enh_hook_impl_it. + + + lo_hook_impl ?= ii_enh_tool. + + lv_shorttext = lo_hook_impl->if_enh_object_docu~get_shorttext( ). + lo_hook_impl->get_original_object( + IMPORTING + pgmid = ls_original_object-pgmid + obj_name = ls_original_object-org_obj_name + obj_type = ls_original_object-org_obj_type + main_type = ls_original_object-org_main_type + main_name = ls_original_object-org_main_name + program = ls_original_object-programname ). + ls_original_object-include_bound = lo_hook_impl->get_include_bound( ). + lt_enhancements = lo_hook_impl->get_hook_impls( ). + + hook_impl_serialize( + IMPORTING et_spaces = lt_spaces + CHANGING ct_impl = lt_enhancements ). + + io_xml->add( iv_name = 'TOOL' + ig_data = ii_enh_tool->get_tool( ) ). + io_xml->add( ig_data = lv_shorttext + iv_name = 'SHORTTEXT' ). + io_xml->add( ig_data = ls_original_object + iv_name = 'ORIGINAL_OBJECT' ). + io_xml->add( iv_name = 'ENHANCEMENTS' + ig_data = lt_enhancements ). + io_xml->add( iv_name = 'SPACES' + ig_data = lt_spaces ). - METHOD lif_object~changed_by. - rv_user = c_user_unknown. " todo ENDMETHOD. METHOD hook_impl_serialize. @@ -132,209 +261,7 @@ CLASS lcl_object_enho IMPLEMENTATION. ENDMETHOD. - METHOD lif_object~exists. - - 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. - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~serialize. - - DATA: lv_enh_id TYPE enhname, - lv_tool TYPE enhtooltype, - li_enh_tool TYPE REF TO if_enh_tool. - - - IF lif_object~exists( ) = abap_false. - RETURN. - ENDIF. - - lv_enh_id = ms_item-obj_name. - TRY. - li_enh_tool = cl_enh_factory=>get_enhancement( - enhancement_id = lv_enh_id - bypassing_buffer = abap_true ). - CATCH cx_enh_root. - lcx_exception=>raise( 'Error from CL_ENH_FACTORY' ). - ENDTRY. - lv_tool = li_enh_tool->get_tool( ). - - CASE lv_tool. - WHEN cl_enh_tool_badi_impl=>tooltype. - 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 - 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 'ENHFUGRDATA'. "cl_enh_tool_fugr -* WHEN cl_enh_tool_intf=>tooltype. -* WHEN cl_wdr_cfg_enhancement=>tooltype. -* WHEN 'ENHWDYN'. "cl_enh_tool_wdy - WHEN OTHERS. - lcx_exception=>raise( |Unsupported ENHO type { lv_tool }| ). - ENDCASE. - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. - - DATA: lv_tool TYPE enhtooltype. - - IF lif_object~exists( ) = abap_true. - lif_object~delete( ). - ENDIF. - - io_xml->read( EXPORTING iv_name = 'TOOL' - CHANGING cg_data = lv_tool ). - - CASE lv_tool. - WHEN cl_enh_tool_badi_impl=>tooltype. - deserialize_badi( io_xml = io_xml - iv_package = iv_package ). - 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 'ENHFUGRDATA'. "cl_enh_tool_fugr -* WHEN cl_enh_tool_intf=>tooltype. -* WHEN cl_wdr_cfg_enhancement=>tooltype. -* WHEN 'ENHWDYN'. "cl_enh_tool_wdy - WHEN OTHERS. - lcx_exception=>raise( |Unsupported ENHO type { lv_tool }| ). - ENDCASE. - - lcl_objects_activation=>add_item( ms_item ). - - ENDMETHOD. "deserialize - - METHOD deserialize_badi. - - DATA: lv_spot_name TYPE enhspotname, - lv_shorttext TYPE string, - lv_enhname TYPE enhname, - lo_badi TYPE REF TO cl_enh_tool_badi_impl, - li_tool TYPE REF TO if_enh_tool, - lv_package TYPE devclass, - lt_impl TYPE enh_badi_impl_data_it. - - FIELD-SYMBOLS: LIKE LINE OF lt_impl. - - - io_xml->read( EXPORTING iv_name = 'SHORTTEXT' - CHANGING cg_data = lv_shorttext ). - io_xml->read( EXPORTING iv_name = 'SPOT_NAME' - CHANGING cg_data = lv_spot_name ). - io_xml->read( EXPORTING iv_name = '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 - IMPORTING - enhancement = li_tool - CHANGING - devclass = lv_package ). - lo_badi ?= li_tool. - - lo_badi->set_spot_name( lv_spot_name ). - lo_badi->if_enh_object_docu~set_shorttext( lv_shorttext ). - LOOP AT lt_impl ASSIGNING . - lo_badi->add_implementation( ). - ENDLOOP. - lo_badi->if_enh_object~save( ). - lo_badi->if_enh_object~unlock( ). - CATCH cx_enh_root. - lcx_exception=>raise( 'error deserializing ENHO badi' ). - ENDTRY. - - 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. + METHOD lif_object_enho~deserialize. DATA: lv_shorttext TYPE string, lo_hook_impl TYPE REF TO cl_enh_tool_hook_impl, @@ -400,52 +327,34 @@ CLASS lcl_object_enho IMPLEMENTATION. lcx_exception=>raise( 'error deserializing ENHO hook' ). ENDTRY. - ENDMETHOD. "deserialize_hook + ENDMETHOD. - METHOD serialize_badi. +ENDCLASS. - DATA: lo_badi_impl TYPE REF TO cl_enh_tool_badi_impl, - lv_spot_name TYPE enhspotname, - lv_shorttext TYPE string, - lt_impl TYPE enh_badi_impl_data_it. +CLASS lcl_object_enho_class DEFINITION. - FIELD-SYMBOLS: LIKE LINE OF lt_impl, - LIKE LINE OF -filter_values, - LIKE LINE OF -filters. + PUBLIC SECTION. + METHODS: + constructor + IMPORTING + is_item TYPE ty_item + io_files TYPE REF TO lcl_objects_files. + INTERFACES: lif_object_enho. + PRIVATE SECTION. + DATA: ms_item TYPE ty_item. + DATA: mo_files TYPE REF TO lcl_objects_files. - lo_badi_impl ?= ii_enh_tool. +ENDCLASS. - 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( ). +CLASS lcl_object_enho_class IMPLEMENTATION. - LOOP AT lt_impl ASSIGNING . -* make sure the XML serialization does not dump, field type = N - LOOP AT -filter_values ASSIGNING . - IF -filter_numeric_value1 CA space. - CLEAR -filter_numeric_value1. - ENDIF. - ENDLOOP. - LOOP AT -filters ASSIGNING . - IF -filter_numeric_value1 CA space. - CLEAR -filter_numeric_value1. - ENDIF. - ENDLOOP. - ENDLOOP. + METHOD constructor. + ms_item = is_item. + mo_files = io_files. + ENDMETHOD. - 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 = 'SPOT_NAME' - ig_data = lv_spot_name ). - io_xml->add( iv_name = 'IMPL' - ig_data = lt_impl ). - - ENDMETHOD. "serialize_badi - - METHOD serialize_class. + METHOD lif_object_enho~serialize. DATA: lo_enh_class TYPE REF TO cl_enh_tool_class, lt_owr TYPE enhmeth_tabkeys, @@ -466,7 +375,7 @@ CLASS lcl_object_enho IMPLEMENTATION. lo_enh_class->get_class( IMPORTING class_name = lv_class ). io_xml->add( iv_name = 'TOOL' - ig_data = iv_tool ). + ig_data = ii_enh_tool->get_tool( ) ). io_xml->add( ig_data = lv_shorttext iv_name = 'SHORTTEXT' ). io_xml->add( iv_name = 'CLASS' @@ -482,45 +391,204 @@ CLASS lcl_object_enho IMPLEMENTATION. ENDMETHOD. - METHOD serialize_hook. + METHOD lif_object_enho~deserialize. - DATA: lv_shorttext TYPE string, - lo_hook_impl TYPE REF TO cl_enh_tool_hook_impl, - ls_original_object TYPE enh_hook_admin, - lt_spaces TYPE ty_spaces_tt, - lt_enhancements TYPE enh_hook_impl_it. + 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. - lo_hook_impl ?= ii_enh_tool. + 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_shorttext = lo_hook_impl->if_enh_object_docu~get_shorttext( ). - lo_hook_impl->get_original_object( - IMPORTING - pgmid = ls_original_object-pgmid - obj_name = ls_original_object-org_obj_name - obj_type = ls_original_object-org_obj_type - main_type = ls_original_object-org_main_type - main_name = ls_original_object-org_main_name - program = ls_original_object-programname ). - ls_original_object-include_bound = lo_hook_impl->get_include_bound( ). - lt_enhancements = lo_hook_impl->get_hook_impls( ). + 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. - hook_impl_serialize( - IMPORTING et_spaces = lt_spaces - CHANGING ct_impl = lt_enhancements ). + 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 ). - io_xml->add( iv_name = 'TOOL' - ig_data = iv_tool ). - io_xml->add( ig_data = lv_shorttext - iv_name = 'SHORTTEXT' ). - io_xml->add( ig_data = ls_original_object - iv_name = 'ORIGINAL_OBJECT' ). - io_xml->add( iv_name = 'ENHANCEMENTS' - ig_data = lt_enhancements ). - io_xml->add( iv_name = 'SPACES' - ig_data = lt_spaces ). + 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. "serialize_hook + ENDMETHOD. + +ENDCLASS. + +*----------------------------------------------------------------------* +* CLASS lcl_object_enho DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_enho DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + + PRIVATE SECTION. + + METHODS: + factory + IMPORTING + iv_tool TYPE enhtooltype + RETURNING + VALUE(ri_enho) TYPE REF TO lif_object_enho + RAISING + lcx_exception. + +ENDCLASS. "lcl_object_enho DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_enho IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_enho IMPLEMENTATION. + + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~changed_by. + rv_user = c_user_unknown. " todo + ENDMETHOD. + + METHOD lif_object~exists. + + 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. + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~serialize. + + DATA: lv_enh_id TYPE enhname, + li_enho TYPE REF TO lif_object_enho, + li_enh_tool TYPE REF TO if_enh_tool. + + + IF lif_object~exists( ) = abap_false. + RETURN. + ENDIF. + + lv_enh_id = ms_item-obj_name. + TRY. + li_enh_tool = cl_enh_factory=>get_enhancement( + enhancement_id = lv_enh_id + bypassing_buffer = abap_true ). + CATCH cx_enh_root. + lcx_exception=>raise( 'Error from CL_ENH_FACTORY' ). + ENDTRY. + + li_enho = factory( li_enh_tool->get_tool( ) ). + + li_enho->serialize( io_xml = io_xml + ii_enh_tool = li_enh_tool ). + + ENDMETHOD. "serialize + + METHOD factory. + + CASE iv_tool. + WHEN cl_enh_tool_badi_impl=>tooltype. + CREATE OBJECT ri_enho TYPE lcl_object_enho_badi + EXPORTING + is_item = ms_item + io_files = mo_files. + WHEN cl_enh_tool_hook_impl=>tooltype. + CREATE OBJECT ri_enho TYPE lcl_object_enho_hook + EXPORTING + is_item = ms_item + io_files = mo_files. + WHEN cl_enh_tool_class=>tooltype. + CREATE OBJECT ri_enho TYPE lcl_object_enho_class + EXPORTING + is_item = ms_item + io_files = mo_files. +* ToDo: +* WHEN 'ENHFUGRDATA'. "cl_enh_tool_fugr +* WHEN cl_enh_tool_intf=>tooltype. +* WHEN cl_wdr_cfg_enhancement=>tooltype. +* WHEN 'ENHWDYN'. "cl_enh_tool_wdy + WHEN OTHERS. + lcx_exception=>raise( |Unsupported ENHO type { iv_tool }| ). + ENDCASE. + + ENDMETHOD. + + METHOD lif_object~deserialize. + + DATA: lv_tool TYPE enhtooltype, + li_enho TYPE REF TO lif_object_enho. + + + IF lif_object~exists( ) = abap_true. + lif_object~delete( ). + ENDIF. + + io_xml->read( EXPORTING iv_name = 'TOOL' + CHANGING cg_data = lv_tool ). + + li_enho = factory( lv_tool ). + + li_enho->deserialize( io_xml = io_xml + iv_package = iv_package ). + + lcl_objects_activation=>add_item( ms_item ). + + ENDMETHOD. "deserialize METHOD lif_object~delete. From 258088a24dbcdc756a2b26397dfbcb65468651ad Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Mon, 9 Jan 2017 17:16:11 +0100 Subject: [PATCH 028/142] changed_by refactoring --- src/zabapgit_object_clas.prog.abap | 128 ++++++++++++++++------------- src/zabapgit_unit_test.prog.abap | 84 ++++++++++++++++++- 2 files changed, 153 insertions(+), 59 deletions(-) diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap index 5b3b71791..19e151cd8 100644 --- a/src/zabapgit_object_clas.prog.abap +++ b/src/zabapgit_object_clas.prog.abap @@ -8,6 +8,11 @@ * *----------------------------------------------------------------------* INTERFACE lif_object_oriented_object. + TYPES: BEGIN OF ty_includes, + programm TYPE programm, + END OF ty_includes, + ty_includes_tt TYPE STANDARD TABLE OF ty_includes WITH DEFAULT KEY. + METHODS: create IMPORTING @@ -62,7 +67,12 @@ INTERFACE lif_object_oriented_object. iv_object_name TYPE dokhl-object iv_language TYPE spras RAISING - lcx_exception. + lcx_exception, + get_includes + IMPORTING + iv_object_name TYPE sobj_name + RETURNING + VALUE(rt_includes) TYPE ty_includes_tt. ENDINTERFACE. CLASS lcl_object_oriented_base DEFINITION ABSTRACT. @@ -196,6 +206,11 @@ CLASS lcl_object_oriented_base IMPLEMENTATION. ENDIF. ENDMETHOD. + METHOD lif_object_oriented_object~get_includes. + "Subclass responsibility + RETURN. + ENDMETHOD. + ENDCLASS. @@ -206,7 +221,8 @@ CLASS lcl_object_oriented_class DEFINITION 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. + lif_object_oriented_object~create_sotr REDEFINITION, + lif_object_oriented_object~get_includes REDEFINITION. ENDCLASS. CLASS lcl_object_oriented_class IMPLEMENTATION. @@ -325,13 +341,44 @@ CLASS lcl_object_oriented_class IMPLEMENTATION. ENDLOOP. ENDMETHOD. + METHOD lif_object_oriented_object~get_includes. +* note: includes returned might not exist +* method cl_oo_classname_service=>GET_ALL_CLASS_INCLUDES does not exist in 702 + + DATA: lv_class_name TYPE seoclsname, + lt_methods TYPE seop_methods_w_include. + + FIELD-SYMBOLS: LIKE LINE OF lt_methods. + + lv_class_name = iv_object_name. + + APPEND cl_oo_classname_service=>get_ccdef_name( lv_class_name ) TO rt_includes. + APPEND cl_oo_classname_service=>get_ccmac_name( lv_class_name ) TO rt_includes. + APPEND cl_oo_classname_service=>get_ccimp_name( lv_class_name ) TO rt_includes. + APPEND cl_oo_classname_service=>get_cl_name( lv_class_name ) TO rt_includes. + APPEND cl_oo_classname_service=>get_ccau_name( lv_class_name ) TO rt_includes. + APPEND cl_oo_classname_service=>get_pubsec_name( lv_class_name ) TO rt_includes. + APPEND cl_oo_classname_service=>get_prosec_name( lv_class_name ) TO rt_includes. + APPEND cl_oo_classname_service=>get_prisec_name( lv_class_name ) TO rt_includes. + APPEND cl_oo_classname_service=>get_classpool_name( lv_class_name ) TO rt_includes. + APPEND cl_oo_classname_service=>get_ct_name( lv_class_name ) TO rt_includes. + APPEND cl_oo_classname_service=>get_cs_name( lv_class_name ) TO rt_includes. + + lt_methods = cl_oo_classname_service=>get_all_method_includes( lv_class_name ). + LOOP AT lt_methods ASSIGNING . + APPEND -incname TO rt_includes. + ENDLOOP. + + ENDMETHOD. + ENDCLASS. CLASS lcl_object_oriented_interface DEFINITION INHERITING FROM lcl_object_oriented_base. PUBLIC SECTION. METHODS: - lif_object_oriented_object~create REDEFINITION. + lif_object_oriented_object~create REDEFINITION, + lif_object_oriented_object~get_includes REDEFINITION. ENDCLASS. CLASS lcl_object_oriented_interface IMPLEMENTATION. @@ -354,6 +401,12 @@ CLASS lcl_object_oriented_interface IMPLEMENTATION. lcx_exception=>raise( 'Error from SEO_INTERFACE_CREATE_COMPLETE' ). ENDIF. ENDMETHOD. + METHOD lif_object_oriented_object~get_includes. + DATA lv_interface_name TYPE seoclsname. + lv_interface_name = iv_object_name. + APPEND cl_oo_classname_service=>get_interfacepool_name( lv_interface_name ) TO rt_includes. + ENDMETHOD. + ENDCLASS. CLASS lth_oo_factory_injector DEFINITION DEFERRED. @@ -403,6 +456,11 @@ CLASS lcl_object_clas DEFINITION INHERITING FROM lcl_objects_program. PUBLIC SECTION. INTERFACES lif_object. ALIASES mo_files FOR lif_object~mo_files. + METHODS constructor + IMPORTING + is_item TYPE ty_item + iv_language TYPE spras. + PROTECTED SECTION. METHODS deserialize_abap IMPORTING io_xml TYPE REF TO lcl_xml_input @@ -474,10 +532,6 @@ CLASS lcl_object_clas DEFINITION INHERITING FROM lcl_objects_program. METHODS reduce CHANGING ct_source TYPE ty_string_tt. - - METHODS get_all_class_includes - RETURNING VALUE(rt_includes) TYPE seoincl_t. - ENDCLASS. "lcl_object_dtel DEFINITION *----------------------------------------------------------------------* @@ -487,37 +541,6 @@ ENDCLASS. "lcl_object_dtel DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_clas IMPLEMENTATION. - METHOD get_all_class_includes. -* note: includes returned might not exist -* method cl_oo_classname_service=>GET_ALL_CLASS_INCLUDES does not exist in 702 - - DATA: lv_clsname TYPE seoclsname, - lt_methods TYPE seop_methods_w_include. - - FIELD-SYMBOLS: LIKE LINE OF lt_methods. - - - lv_clsname = ms_item-obj_name. - - APPEND cl_oo_classname_service=>get_ccdef_name( lv_clsname ) TO rt_includes. - APPEND cl_oo_classname_service=>get_ccmac_name( lv_clsname ) TO rt_includes. - APPEND cl_oo_classname_service=>get_ccimp_name( lv_clsname ) TO rt_includes. - APPEND cl_oo_classname_service=>get_cl_name( lv_clsname ) TO rt_includes. - APPEND cl_oo_classname_service=>get_ccau_name( lv_clsname ) TO rt_includes. - APPEND cl_oo_classname_service=>get_pubsec_name( lv_clsname ) TO rt_includes. - APPEND cl_oo_classname_service=>get_prosec_name( lv_clsname ) TO rt_includes. - APPEND cl_oo_classname_service=>get_prisec_name( lv_clsname ) TO rt_includes. - APPEND cl_oo_classname_service=>get_classpool_name( lv_clsname ) TO rt_includes. - APPEND cl_oo_classname_service=>get_ct_name( lv_clsname ) TO rt_includes. - APPEND cl_oo_classname_service=>get_cs_name( lv_clsname ) TO rt_includes. - - lt_methods = cl_oo_classname_service=>get_all_method_includes( lv_clsname ). - LOOP AT lt_methods ASSIGNING . - APPEND -incname TO rt_includes. - ENDLOOP. - - ENDMETHOD. - METHOD lif_object~has_changed_since. DATA: lv_clsname TYPE seoclsname, @@ -579,21 +602,10 @@ CLASS lcl_object_clas IMPLEMENTATION. DATA: lt_reposrc TYPE STANDARD TABLE OF ty_reposrc, ls_reposrc LIKE LINE OF lt_reposrc, - lt_includes TYPE STANDARD TABLE OF ty_includes, - lv_clsname TYPE seoclsname. + lt_includes TYPE STANDARD TABLE OF ty_includes. - - lv_clsname = ms_item-obj_name. - - CASE ms_item-obj_type. - WHEN 'CLAS'. - lt_includes = get_all_class_includes( ). - ASSERT lines( lt_includes ) > 0. - WHEN 'INTF'. - APPEND cl_oo_classname_service=>get_interfacepool_name( lv_clsname ) TO lt_includes. - WHEN OTHERS. - ASSERT 0 = 1. - ENDCASE. + lt_includes = mo_object_oriented_object->get_includes( ms_item-obj_name ). + ASSERT lines( lt_includes ) > 0. SELECT unam udat utime FROM reposrc INTO TABLE lt_reposrc @@ -1099,9 +1111,6 @@ CLASS lcl_object_clas IMPLEMENTATION. ENDMETHOD. "serialize_xml 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 ). @@ -1237,6 +1246,13 @@ CLASS lcl_object_clas IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. + METHOD constructor. + super->constructor( + is_item = is_item + iv_language = iv_language ). + mo_object_oriented_object = lcl_object_oriented_factory=>make( iv_object_type = ms_item-obj_type ). + ENDMETHOD. + ENDCLASS. "lcl_object_CLAS IMPLEMENTATION *----------------------------------------------------------------------* @@ -1256,8 +1272,6 @@ CLASS lcl_object_intf DEFINITION INHERITING FROM lcl_object_clas FINAL. 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 ). diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index 8fb06bc0c..d5eb86bbc 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -2237,8 +2237,8 @@ CLASS ltd_spy_oo_object DEFINITION FOR TESTING. mt_sotr_package TYPE devclass, mv_docu_object_name TYPE dokhl-object, mv_docu_language TYPE spras, - mt_docu_lines TYPE tlinetab. - + mt_docu_lines TYPE tlinetab, + mv_get_includes_called TYPE abap_bool. ENDCLASS. CLASS ltd_spy_oo_object IMPLEMENTATION. METHOD lif_object_oriented_object~create. @@ -2295,6 +2295,11 @@ CLASS ltd_spy_oo_object IMPLEMENTATION. mt_docu_lines = it_lines. ENDMETHOD. + METHOD lif_object_oriented_object~get_includes. + APPEND 'dummy' TO rt_includes. + mv_get_includes_called = abap_true. + ENDMETHOD. + ENDCLASS. CLASS ltd_fake_object_files DEFINITION FOR TESTING @@ -2754,4 +2759,79 @@ CLASS ltcl_interface_deserialization IMPLEMENTATION. then_docu_should_be_created( lt_lines ). ENDMETHOD. +ENDCLASS. + +CLASS ltcl_class_changed DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT +INHERITING FROM ltc_oo_test. + PRIVATE SECTION. + METHODS: + setup, + should_call_get_includes FOR TESTING RAISING cx_static_check. +ENDCLASS. +CLASS ltcl_class_changed 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_call_get_includes. + DATA lv_username TYPE xubname. + lv_username = mo_oo_object->changed_by( ). + + cl_abap_unit_assert=>assert_equals( + act = mo_spy_oo_object->mv_get_includes_called + exp = abap_true ). + + cl_abap_unit_assert=>assert_equals( + act = lv_username + exp = lcl_objects_super=>c_user_unknown ). + ENDMETHOD. +ENDCLASS. +CLASS ltcl_interface_changed DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT +INHERITING FROM ltc_oo_test. + PRIVATE SECTION. + METHODS: + setup, + should_call_get_includes FOR TESTING RAISING cx_static_check. +ENDCLASS. +CLASS ltcl_interface_changed 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 should_call_get_includes. + DATA lv_username TYPE xubname. + lv_username = mo_oo_object->changed_by( ). + + cl_abap_unit_assert=>assert_equals( + act = mo_spy_oo_object->mv_get_includes_called + exp = abap_true ). + + cl_abap_unit_assert=>assert_equals( + act = lv_username + exp = lcl_objects_super=>c_user_unknown ). + ENDMETHOD. ENDCLASS. \ No newline at end of file From 4c966a8e63abd564e97fe07171ab1fdf592864be Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Mon, 9 Jan 2017 17:49:45 +0100 Subject: [PATCH 029/142] has_changed_since refactoring --- src/zabapgit_object_clas.prog.abap | 68 +++++++++++++----------------- src/zabapgit_unit_test.prog.abap | 29 +++++++++++-- 2 files changed, 54 insertions(+), 43 deletions(-) diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap index 19e151cd8..52e25b13c 100644 --- a/src/zabapgit_object_clas.prog.abap +++ b/src/zabapgit_object_clas.prog.abap @@ -542,46 +542,21 @@ ENDCLASS. "lcl_object_dtel DEFINITION CLASS lcl_object_clas IMPLEMENTATION. METHOD lif_object~has_changed_since. + DATA: + lt_includes TYPE seoincl_t. - DATA: lv_clsname TYPE seoclsname, - lv_program TYPE program, - lt_incl TYPE seoincl_t. - - FIELD-SYMBOLS LIKE LINE OF lt_incl. - - lv_clsname = ms_item-obj_name. - - CASE ms_item-obj_type. - WHEN 'CLAS'. - TRY. - CALL METHOD cl_oo_classname_service=>('GET_ALL_CLASS_INCLUDES') - EXPORTING - class_name = lv_clsname - RECEIVING - result = lt_incl. - CATCH cx_sy_dyn_call_illegal_method. -* method does not exist in 702, just report everything as changed - rv_changed = abap_true. - ENDTRY. - LOOP AT lt_incl ASSIGNING . - rv_changed = check_prog_changed_since( - iv_program = - iv_timestamp = iv_timestamp - iv_skip_gui = abap_true ). - IF rv_changed = abap_true. - RETURN. - ENDIF. - ENDLOOP. - WHEN 'INTF'. - lv_program = cl_oo_classname_service=>get_interfacepool_name( lv_clsname ). - rv_changed = check_prog_changed_since( - iv_program = lv_program - iv_timestamp = iv_timestamp - iv_skip_gui = abap_true ). - WHEN OTHERS. - lcx_exception=>raise( 'class delete, unknown type' ). - ENDCASE. + FIELD-SYMBOLS LIKE LINE OF lt_includes. + lt_includes = mo_object_oriented_object->get_includes( ms_item-obj_name ). + LOOP AT lt_includes ASSIGNING . + rv_changed = check_prog_changed_since( + iv_program = + iv_timestamp = iv_timestamp + iv_skip_gui = abap_true ). + IF rv_changed = abap_true. + RETURN. + ENDIF. + ENDLOOP. ENDMETHOD. "lif_object~has_changed_since METHOD lif_object~get_metadata. @@ -1265,7 +1240,8 @@ CLASS lcl_object_intf DEFINITION INHERITING FROM lcl_object_clas FINAL. * https://github.com/larshp/abapGit/issues/21 PUBLIC SECTION. METHODS: - lif_object~deserialize REDEFINITION. + lif_object~deserialize REDEFINITION, + lif_object~has_changed_since REDEFINITION. PROTECTED SECTION. METHODS: deserialize_abap REDEFINITION. @@ -1308,4 +1284,18 @@ CLASS lcl_object_intf IMPLEMENTATION. mo_object_oriented_object->add_to_activation_list( is_item = ms_item ). ENDMETHOD. + METHOD lif_object~has_changed_since. + DATA: + lv_program TYPE program, + lt_includes TYPE seoincl_t. + + lt_includes = mo_object_oriented_object->get_includes( ms_item-obj_name ). + READ TABLE lt_includes INDEX 1 INTO lv_program. + "lv_program = cl_oo_classname_service=>get_interfacepool_name( lv_clsname ). + rv_changed = check_prog_changed_since( + iv_program = lv_program + iv_timestamp = iv_timestamp + iv_skip_gui = abap_true ). + ENDMETHOD. + ENDCLASS. \ No newline at end of file diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index d5eb86bbc..94f16da89 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -2766,7 +2766,9 @@ INHERITING FROM ltc_oo_test. PRIVATE SECTION. METHODS: setup, - should_call_get_includes FOR TESTING RAISING cx_static_check. + changed_by_call_get_includes FOR TESTING RAISING cx_static_check, + changed_since_call_get_include FOR TESTING RAISING cx_static_check. + ENDCLASS. CLASS ltcl_class_changed IMPLEMENTATION. METHOD setup. @@ -2785,7 +2787,7 @@ CLASS ltcl_class_changed IMPLEMENTATION. iv_language = sy-langu. mo_oo_object->mo_files = mo_fake_object_files. ENDMETHOD. - METHOD should_call_get_includes. + METHOD changed_by_call_get_includes. DATA lv_username TYPE xubname. lv_username = mo_oo_object->changed_by( ). @@ -2797,13 +2799,23 @@ CLASS ltcl_class_changed IMPLEMENTATION. act = lv_username exp = lcl_objects_super=>c_user_unknown ). ENDMETHOD. + METHOD changed_since_call_get_include. + DATA lv_timestamp TYPE timestamp. + GET TIME STAMP FIELD lv_timestamp. + mo_oo_object->has_changed_since( lv_timestamp ). + + cl_abap_unit_assert=>assert_equals( + act = mo_spy_oo_object->mv_get_includes_called + exp = abap_true ). + ENDMETHOD. ENDCLASS. CLASS ltcl_interface_changed DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT INHERITING FROM ltc_oo_test. PRIVATE SECTION. METHODS: setup, - should_call_get_includes FOR TESTING RAISING cx_static_check. + changed_by_call_get_includes FOR TESTING RAISING cx_static_check, + changed_since_call_get_include FOR TESTING RAISING cx_static_check. ENDCLASS. CLASS ltcl_interface_changed IMPLEMENTATION. METHOD setup. @@ -2822,7 +2834,7 @@ CLASS ltcl_interface_changed IMPLEMENTATION. iv_language = sy-langu. mo_oo_object->mo_files = mo_fake_object_files. ENDMETHOD. - METHOD should_call_get_includes. + METHOD changed_by_call_get_includes. DATA lv_username TYPE xubname. lv_username = mo_oo_object->changed_by( ). @@ -2834,4 +2846,13 @@ CLASS ltcl_interface_changed IMPLEMENTATION. act = lv_username exp = lcl_objects_super=>c_user_unknown ). ENDMETHOD. + METHOD changed_since_call_get_include. + DATA lv_timestamp TYPE timestamp. + GET TIME STAMP FIELD lv_timestamp. + mo_oo_object->has_changed_since( lv_timestamp ). + + cl_abap_unit_assert=>assert_equals( + act = mo_spy_oo_object->mv_get_includes_called + exp = abap_true ). + ENDMETHOD. ENDCLASS. \ No newline at end of file From 3624942c5fc7ce3d0d2c4cc97bcc0ef0d4a8cc3f Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Tue, 10 Jan 2017 10:17:56 +0100 Subject: [PATCH 030/142] code review adjustments --- src/zabapgit_object_clas.prog.abap | 10 +- src/zabapgit_unit_test.prog.abap | 647 +-------------------- src/zabapgit_unit_test_clas_intf.prog.abap | 646 ++++++++++++++++++++ src/zabapgit_unit_test_clas_intf.prog.xml | 48 ++ 4 files changed, 700 insertions(+), 651 deletions(-) create mode 100644 src/zabapgit_unit_test_clas_intf.prog.abap create mode 100644 src/zabapgit_unit_test_clas_intf.prog.xml diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap index 52e25b13c..2ecece5c7 100644 --- a/src/zabapgit_object_clas.prog.abap +++ b/src/zabapgit_object_clas.prog.abap @@ -95,7 +95,7 @@ CLASS lcl_object_oriented_base IMPLEMENTATION. METHOD lif_object_oriented_object~create. "Subclass responsibility - RETURN. + ASSERT 0 = 1. ENDMETHOD. METHOD lif_object_oriented_object~deserialize_source. @@ -112,7 +112,7 @@ CLASS lcl_object_oriented_base IMPLEMENTATION. METHOD lif_object_oriented_object~generate_locals. "Subclass responsibility - RETURN. + ASSERT 0 = 1. ENDMETHOD. METHOD deserialize_abap_source_old. @@ -182,12 +182,12 @@ CLASS lcl_object_oriented_base IMPLEMENTATION. ENDMETHOD. METHOD lif_object_oriented_object~insert_text_pool. "Subclass responsibility - RETURN. + ASSERT 0 = 1. ENDMETHOD. METHOD lif_object_oriented_object~create_sotr. "Subclass responsibility - RETURN. + ASSERT 0 = 1. ENDMETHOD. METHOD lif_object_oriented_object~create_documentation. @@ -208,7 +208,7 @@ CLASS lcl_object_oriented_base IMPLEMENTATION. METHOD lif_object_oriented_object~get_includes. "Subclass responsibility - RETURN. + ASSERT 0 = 1. ENDMETHOD. ENDCLASS. diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index 94f16da89..1d875935e 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -2210,649 +2210,4 @@ CLASS ltcl_persistence_settings IMPLEMENTATION. 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, - mv_get_includes_called TYPE abap_bool. -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. - - METHOD lif_object_oriented_object~get_includes. - APPEND 'dummy' TO rt_includes. - mv_get_includes_called = abap_true. - 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. - -CLASS ltcl_class_changed DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT -INHERITING FROM ltc_oo_test. - PRIVATE SECTION. - METHODS: - setup, - changed_by_call_get_includes FOR TESTING RAISING cx_static_check, - changed_since_call_get_include FOR TESTING RAISING cx_static_check. - -ENDCLASS. -CLASS ltcl_class_changed 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 changed_by_call_get_includes. - DATA lv_username TYPE xubname. - lv_username = mo_oo_object->changed_by( ). - - cl_abap_unit_assert=>assert_equals( - act = mo_spy_oo_object->mv_get_includes_called - exp = abap_true ). - - cl_abap_unit_assert=>assert_equals( - act = lv_username - exp = lcl_objects_super=>c_user_unknown ). - ENDMETHOD. - METHOD changed_since_call_get_include. - DATA lv_timestamp TYPE timestamp. - GET TIME STAMP FIELD lv_timestamp. - mo_oo_object->has_changed_since( lv_timestamp ). - - cl_abap_unit_assert=>assert_equals( - act = mo_spy_oo_object->mv_get_includes_called - exp = abap_true ). - ENDMETHOD. -ENDCLASS. -CLASS ltcl_interface_changed DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT -INHERITING FROM ltc_oo_test. - PRIVATE SECTION. - METHODS: - setup, - changed_by_call_get_includes FOR TESTING RAISING cx_static_check, - changed_since_call_get_include FOR TESTING RAISING cx_static_check. -ENDCLASS. -CLASS ltcl_interface_changed 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 changed_by_call_get_includes. - DATA lv_username TYPE xubname. - lv_username = mo_oo_object->changed_by( ). - - cl_abap_unit_assert=>assert_equals( - act = mo_spy_oo_object->mv_get_includes_called - exp = abap_true ). - - cl_abap_unit_assert=>assert_equals( - act = lv_username - exp = lcl_objects_super=>c_user_unknown ). - ENDMETHOD. - METHOD changed_since_call_get_include. - DATA lv_timestamp TYPE timestamp. - GET TIME STAMP FIELD lv_timestamp. - mo_oo_object->has_changed_since( lv_timestamp ). - - cl_abap_unit_assert=>assert_equals( - act = mo_spy_oo_object->mv_get_includes_called - exp = abap_true ). - ENDMETHOD. -ENDCLASS. \ No newline at end of file +INCLUDE ZABAPGIT_UNIT_TEST_CLAS_INTF. \ No newline at end of file diff --git a/src/zabapgit_unit_test_clas_intf.prog.abap b/src/zabapgit_unit_test_clas_intf.prog.abap new file mode 100644 index 000000000..d83e798d6 --- /dev/null +++ b/src/zabapgit_unit_test_clas_intf.prog.abap @@ -0,0 +1,646 @@ + +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, + mv_get_includes_called TYPE abap_bool. +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. + + METHOD lif_object_oriented_object~get_includes. + APPEND 'dummy' TO rt_includes. + mv_get_includes_called = abap_true. + 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. + +CLASS ltcl_class_changed DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT +INHERITING FROM ltc_oo_test. + PRIVATE SECTION. + METHODS: + setup, + changed_by_call_get_includes FOR TESTING RAISING cx_static_check, + changed_since_call_get_include FOR TESTING RAISING cx_static_check. + +ENDCLASS. +CLASS ltcl_class_changed 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 changed_by_call_get_includes. + DATA lv_username TYPE xubname. + lv_username = mo_oo_object->changed_by( ). + + cl_abap_unit_assert=>assert_equals( + act = mo_spy_oo_object->mv_get_includes_called + exp = abap_true ). + + cl_abap_unit_assert=>assert_equals( + act = lv_username + exp = lcl_objects_super=>c_user_unknown ). + ENDMETHOD. + METHOD changed_since_call_get_include. + DATA lv_timestamp TYPE timestamp. + GET TIME STAMP FIELD lv_timestamp. + mo_oo_object->has_changed_since( lv_timestamp ). + + cl_abap_unit_assert=>assert_equals( + act = mo_spy_oo_object->mv_get_includes_called + exp = abap_true ). + ENDMETHOD. +ENDCLASS. +CLASS ltcl_interface_changed DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT +INHERITING FROM ltc_oo_test. + PRIVATE SECTION. + METHODS: + setup, + changed_by_call_get_includes FOR TESTING RAISING cx_static_check, + changed_since_call_get_include FOR TESTING RAISING cx_static_check. +ENDCLASS. +CLASS ltcl_interface_changed 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 changed_by_call_get_includes. + DATA lv_username TYPE xubname. + lv_username = mo_oo_object->changed_by( ). + + cl_abap_unit_assert=>assert_equals( + act = mo_spy_oo_object->mv_get_includes_called + exp = abap_true ). + + cl_abap_unit_assert=>assert_equals( + act = lv_username + exp = lcl_objects_super=>c_user_unknown ). + ENDMETHOD. + METHOD changed_since_call_get_include. + DATA lv_timestamp TYPE timestamp. + GET TIME STAMP FIELD lv_timestamp. + mo_oo_object->has_changed_since( lv_timestamp ). + + cl_abap_unit_assert=>assert_equals( + act = mo_spy_oo_object->mv_get_includes_called + exp = abap_true ). + ENDMETHOD. +ENDCLASS. \ No newline at end of file diff --git a/src/zabapgit_unit_test_clas_intf.prog.xml b/src/zabapgit_unit_test_clas_intf.prog.xml new file mode 100644 index 000000000..1d21085bf --- /dev/null +++ b/src/zabapgit_unit_test_clas_intf.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_UNIT_TEST_CLAS_INTF + A + + + X + S + D$ + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + + X + + 0000-00-00 + + 0000-00-00 + + D$S + X + + + + R + + Unit tests for classes and interfaces objecst + 45 + + + + + + From 404a082f8004874060a5857c1cad5b587a57e53e Mon Sep 17 00:00:00 2001 From: larshp Date: Tue, 10 Jan 2017 18:49:00 +0000 Subject: [PATCH 031/142] ENHO: support for new methods --- src/zabapgit_object_enho.prog.abap | 123 ++++++++++++++++++++++++++++- 1 file changed, 121 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index 343888d74..0d084029a 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -21,6 +21,117 @@ INTERFACE lif_object_enho. ENDINTERFACE. +CLASS lcl_object_enho_clif DEFINITION. + + PUBLIC SECTION. + CLASS-METHODS: + deserialize + IMPORTING io_xml TYPE REF TO lcl_xml_input + io_clif TYPE REF TO cl_enh_tool_clif + RAISING lcx_exception + cx_enh_root, + serialize + IMPORTING io_xml TYPE REF TO lcl_xml_output + io_clif TYPE REF TO cl_enh_tool_clif + RAISING lcx_exception. + +ENDCLASS. + +CLASS lcl_object_enho_clif IMPLEMENTATION. + + METHOD serialize. + + DATA: lt_tab_attributes TYPE enhclasstabattrib, + lt_tab_methods TYPE enhnewmeth_tab. + + FIELD-SYMBOLS: LIKE LINE OF lt_tab_attributes, + LIKE LINE OF lt_tab_methods. + + + io_clif->get_enhattributes( + IMPORTING + tab_attributes = lt_tab_attributes ). + + io_clif->get_enh_new_methodes( + IMPORTING + tab_methodes = lt_tab_methods ). + + LOOP AT lt_tab_attributes ASSIGNING . + CLEAR: -author, + -createdon, + -changedby, + -changedon. + ENDLOOP. + + LOOP AT lt_tab_methods ASSIGNING . + CLEAR: -meth_header-author, + -meth_header-createdon, + -meth_header-changedby, + -meth_header-changedon, + -meth_header-descript_id. + ENDLOOP. + + io_xml->add( iv_name = 'TAB_ATTRIBUTES' + ig_data = lt_tab_attributes ). + io_xml->add( iv_name = 'TAB_METHODS' + ig_data = lt_tab_methods ). + + ENDMETHOD. + + METHOD deserialize. + + DATA: lt_tab_attributes TYPE enhclasstabattrib, + lt_tab_methods TYPE enhnewmeth_tab, + ls_header TYPE vseomethod, + ls_param TYPE vseomepara, + ls_exc TYPE vseoexcep. + + FIELD-SYMBOLS: LIKE LINE OF lt_tab_methods, + LIKE LINE OF -meth_param, + LIKE LINE OF -meth_exc. + + + io_xml->read( EXPORTING iv_name = 'TAB_ATTRIBUTES' + CHANGING cg_data = lt_tab_attributes ). + io_xml->read( EXPORTING iv_name = 'TAB_METHODS' + CHANGING cg_data = lt_tab_methods ). + + io_clif->set_enhattributes( + EXPORTING + tab_attributes = lt_tab_attributes ). + +* SAP standard SET_ENH_NEW_METHOS does not work + + LOOP AT lt_tab_methods ASSIGNING . + + MOVE-CORRESPONDING -meth_header TO ls_header. + + io_clif->add_change_new_enh_method( + methkey = -methkey + method_header = ls_header ). + +* parameters + LOOP AT -meth_param ASSIGNING . + MOVE-CORRESPONDING TO ls_param. + io_clif->add_change_enh_methparam( + methname = -methkey-cmpname + param_line = ls_param ). + ENDLOOP. + +* exceptions + LOOP AT -meth_exc ASSIGNING . + MOVE-CORRESPONDING TO ls_exc. + io_clif->add_change_enh_methexc( + methname = -methkey-cmpname + except_line = ls_exc ). + ENDLOOP. + + ENDLOOP. + + ENDMETHOD. + +ENDCLASS. + CLASS lcl_object_enho_badi DEFINITION. PUBLIC SECTION. @@ -31,8 +142,8 @@ CLASS lcl_object_enho_badi DEFINITION. INTERFACES: lif_object_enho. PRIVATE SECTION. - DATA: ms_item TYPE ty_item. - DATA: mo_files TYPE REF TO lcl_objects_files. + DATA: ms_item TYPE ty_item, + mo_files TYPE REF TO lcl_objects_files. ENDCLASS. @@ -389,6 +500,10 @@ CLASS lcl_object_enho_class IMPLEMENTATION. mo_files->add_abap( lt_source ). + lcl_object_enho_clif=>serialize( + io_xml = io_xml + io_clif = lo_enh_class ). + ENDMETHOD. METHOD lif_object_enho~deserialize. @@ -442,6 +557,10 @@ CLASS lcl_object_enho_class IMPLEMENTATION. lo_enh_class->set_eimp_include( version = 'I' eimp_source = lt_source ). + lcl_object_enho_clif=>deserialize( + io_xml = io_xml + io_clif = lo_enh_class ). + lo_enh_class->if_enh_object~save( ). lo_enh_class->if_enh_object~unlock( ). CATCH cx_enh_root. From 5a6a3476f42baac8ec65abacf8c2171890e8bb7c Mon Sep 17 00:00:00 2001 From: larshp Date: Tue, 10 Jan 2017 19:06:06 +0000 Subject: [PATCH 032/142] ENHO: interface enhancement support --- src/zabapgit_object_enho.prog.abap | 101 ++++++++++++++++++++++++++++- 1 file changed, 100 insertions(+), 1 deletion(-) diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index 0d084029a..12186080c 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -442,6 +442,101 @@ CLASS lcl_object_enho_hook IMPLEMENTATION. ENDCLASS. +CLASS lcl_object_enho_interface DEFINITION. + + PUBLIC SECTION. + METHODS: + constructor + IMPORTING + is_item TYPE ty_item + io_files TYPE REF TO lcl_objects_files. + INTERFACES: lif_object_enho. + + PRIVATE SECTION. + DATA: ms_item TYPE ty_item, + mo_files TYPE REF TO lcl_objects_files. + +ENDCLASS. + +CLASS lcl_object_enho_interface IMPLEMENTATION. + + METHOD constructor. + ms_item = is_item. + mo_files = io_files. + ENDMETHOD. + + METHOD lif_object_enho~serialize. + + DATA: lo_enh_intf TYPE REF TO cl_enh_tool_intf, + lv_class TYPE seoclsname, + lv_shorttext TYPE string. + + + lo_enh_intf ?= ii_enh_tool. + + lv_shorttext = lo_enh_intf->if_enh_object_docu~get_shorttext( ). + lo_enh_intf->get_class( IMPORTING class_name = lv_class ). + + io_xml->add( iv_name = 'TOOL' + ig_data = ii_enh_tool->get_tool( ) ). + io_xml->add( ig_data = lv_shorttext + iv_name = 'SHORTTEXT' ). + io_xml->add( iv_name = 'CLASS' + ig_data = lv_class ). + + lcl_object_enho_clif=>serialize( + io_xml = io_xml + io_clif = lo_enh_intf ). + + ENDMETHOD. + + METHOD lif_object_enho~deserialize. + + DATA: lo_enh_intf TYPE REF TO cl_enh_tool_intf, + 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 = 'CLASS' + CHANGING cg_data = lv_class ). + + 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_intf=>tooltype + IMPORTING + enhancement = li_tool + CHANGING + devclass = lv_package ). + lo_enh_intf ?= li_tool. + + lo_enh_intf->if_enh_object_docu~set_shorttext( lv_shorttext ). + lo_enh_intf->set_class( lv_class ). + + lcl_object_enho_clif=>deserialize( + io_xml = io_xml + io_clif = lo_enh_intf ). + + lo_enh_intf->if_enh_object~save( ). + lo_enh_intf->if_enh_object~unlock( ). + CATCH cx_enh_root. + lcx_exception=>raise( 'error deserializing ENHO interface' ). + ENDTRY. + + ENDMETHOD. + +ENDCLASS. + CLASS lcl_object_enho_class DEFINITION. PUBLIC SECTION. @@ -676,9 +771,13 @@ CLASS lcl_object_enho IMPLEMENTATION. EXPORTING is_item = ms_item io_files = mo_files. + WHEN cl_enh_tool_intf=>tooltype. + CREATE OBJECT ri_enho TYPE lcl_object_enho_interface + EXPORTING + is_item = ms_item + io_files = mo_files. * ToDo: * WHEN 'ENHFUGRDATA'. "cl_enh_tool_fugr -* WHEN cl_enh_tool_intf=>tooltype. * WHEN cl_wdr_cfg_enhancement=>tooltype. * WHEN 'ENHWDYN'. "cl_enh_tool_wdy WHEN OTHERS. From a46d7b5da43c4c13527d4fefee77d8accff2bbef Mon Sep 17 00:00:00 2001 From: larshp Date: Tue, 10 Jan 2017 19:10:02 +0000 Subject: [PATCH 033/142] ENHO: remove exporting --- src/zabapgit_object_enho.prog.abap | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index 12186080c..b04bdac39 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -96,9 +96,7 @@ CLASS lcl_object_enho_clif IMPLEMENTATION. io_xml->read( EXPORTING iv_name = 'TAB_METHODS' CHANGING cg_data = lt_tab_methods ). - io_clif->set_enhattributes( - EXPORTING - tab_attributes = lt_tab_attributes ). + io_clif->set_enhattributes( tab_attributes = lt_tab_attributes ). * SAP standard SET_ENH_NEW_METHOS does not work From c8c7ce84710375661827db8076c772ee04039b45 Mon Sep 17 00:00:00 2001 From: sbcgua Date: Tue, 10 Jan 2017 23:48:31 +0200 Subject: [PATCH 034/142] UI diff page unified mode #442 CSS finetune page_diff refactor render_line split+unified plus-minus markers subsequent updated line output user param diff_unified --- src/zabapgit_css_common.w3mi.data.css | 28 +- src/zabapgit_page_diff.prog.abap | 351 +++++++++++++++++--------- src/zabapgit_persistence.prog.abap | 27 ++ src/zabapgit_unit_test.prog.abap | 10 +- src/zabapgit_util.prog.abap | 22 +- 5 files changed, 301 insertions(+), 137 deletions(-) diff --git a/src/zabapgit_css_common.w3mi.data.css b/src/zabapgit_css_common.w3mi.data.css index 80fd4ebf1..8db14ac39 100644 --- a/src/zabapgit_css_common.w3mi.data.css +++ b/src/zabapgit_css_common.w3mi.data.css @@ -37,7 +37,7 @@ form input:focus, textarea:focus { .grey { color: lightgrey !important; } .darkgrey { color: #808080 !important; } .attention { color: red !important; } -.blue { color: #5e8dc9; !important; } +.blue { color: #5e8dc9 !important; } .red { color: red !important; } /* MODIFIERS */ @@ -415,8 +415,8 @@ span.diff_banner { padding-right: 0.3em; } .diff_ins { - border-color: #7bea7b; - background-color: #d3f8d3; + border-color: #abf2ab; + background-color: #e0ffe0; } .diff_del { border-color: #ff667d; @@ -500,21 +500,37 @@ table.diff_tab thead.nav_line th { color: #bbb; } table.diff_tab td.num, th.num { - text-align: right; + width: 1%; + min-width: 2em; + padding-right: 8px; + padding-left: 8px; + text-align: right !important; color: #ccc; border-left: 1px solid #eee; border-right: 1px solid #eee; + -ms-user-select: none; + user-select: none; +} +table.diff_tab td.num::before { + content: attr(line-num); } table.diff_tab code { font-family: inherit; white-space: pre; } +table.diff_tab td.code { + /* font-family: inherit; */ + /* white-space: pre; */ + word-wrap: break-word; + white-space: pre-wrap; + overflow: visible; +} table.diff_tab code span.keyword { color: #0a69ce; } table.diff_tab code span.text { color: #48ce4f; } table.diff_tab code span.comment { color: #808080; font-style: italic; } -table.diff_tab code span.xml_tag { color: #3370e0; } -table.diff_tab code span.attr { color: #f20707; } +table.diff_tab code span.xml_tag { color: #457ce3; } +table.diff_tab code span.attr { color: #b777fb; } table.diff_tab code span.attr_val { color: #7a02f9; } table.diff_tab tbody tr:first-child td { padding-top: 0.5em; } diff --git a/src/zabapgit_page_diff.prog.abap b/src/zabapgit_page_diff.prog.abap index c67ed6523..c00b09add 100644 --- a/src/zabapgit_page_diff.prog.abap +++ b/src/zabapgit_page_diff.prog.abap @@ -7,32 +7,40 @@ CLASS lcl_gui_page_diff DEFINITION FINAL INHERITING FROM lcl_gui_page. PUBLIC SECTION. CONSTANTS: - BEGIN OF c_mod, + BEGIN OF c_fstate, local TYPE char1 VALUE 'L', remote TYPE char1 VALUE 'R', both TYPE char1 VALUE 'B', - END OF c_mod. + END OF c_fstate. TYPES: BEGIN OF ty_file_diff, filename TYPE string, lstate TYPE char1, rstate TYPE char1, - mod TYPE char1, " Abstraction for shorter ifs + fstate TYPE char1, " FILE state - Abstraction for shorter ifs o_diff TYPE REF TO lcl_diff, END OF ty_file_diff, tt_file_diff TYPE STANDARD TABLE OF ty_file_diff. - METHODS: constructor - IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key - is_file TYPE ty_file OPTIONAL - is_object TYPE ty_item OPTIONAL - RAISING lcx_exception. + METHODS: + constructor + IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key + is_file TYPE ty_file OPTIONAL + is_object TYPE ty_item OPTIONAL + RAISING lcx_exception, + lif_gui_page~on_event REDEFINITION. PROTECTED SECTION. METHODS render_content REDEFINITION. PRIVATE SECTION. - DATA: mt_diff_files TYPE tt_file_diff. + CONSTANTS: BEGIN OF c_actions, + toggle_unified TYPE string VALUE 'toggle_unified', + END OF c_actions. + + DATA: mt_diff_files TYPE tt_file_diff, + mt_delayed_lines TYPE lcl_diff=>ty_diffs_tt, + mv_unified TYPE abap_bool VALUE abap_true. METHODS render_diff IMPORTING is_diff TYPE ty_file_diff @@ -49,16 +57,20 @@ CLASS lcl_gui_page_diff DEFINITION FINAL INHERITING FROM lcl_gui_page. IMPORTING is_diff_line TYPE lcl_diff=>ty_diff is_diff TYPE ty_file_diff 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 - EXPORTING ev_lattr TYPE string - ev_rattr TYPE string. + METHODS render_line_split + IMPORTING is_diff_line TYPE lcl_diff=>ty_diff + iv_fstate TYPE char1 + RETURNING VALUE(ro_html) TYPE REF TO lcl_html. + METHODS render_line_unified + IMPORTING is_diff_line TYPE lcl_diff=>ty_diff OPTIONAL + RETURNING VALUE(ro_html) TYPE REF TO lcl_html. METHODS append_diff IMPORTING it_remote TYPE ty_files_tt it_local TYPE ty_files_item_tt is_status TYPE ty_result RAISING lcx_exception. + METHODS build_menu + RETURNING VALUE(ro_menu) TYPE REF TO lcl_html_toolbar. ENDCLASS. "lcl_gui_page_diff @@ -75,6 +87,8 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. super->constructor( ). ms_control-page_title = 'DIFF'. + ms_control-page_menu = build_menu( ). + mv_unified = lcl_app=>user( )->get_diff_unified( ). ASSERT is_file IS INITIAL OR is_object IS INITIAL. " just one passed @@ -154,14 +168,14 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. -rstate = is_status-rstate. IF -lstate IS NOT INITIAL AND -rstate IS NOT INITIAL. - -mod = c_mod-both. + -fstate = c_fstate-both. ELSEIF -lstate IS NOT INITIAL. - -mod = c_mod-local. + -fstate = c_fstate-local. ELSE. "rstate IS NOT INITIAL, lstate = empty. - -mod = c_mod-remote. + -fstate = c_fstate-remote. ENDIF. - IF -mod = c_mod-remote. " Remote file leading changes + IF -fstate = c_fstate-remote. " Remote file leading changes CREATE OBJECT -o_diff EXPORTING iv_new = -data @@ -175,45 +189,46 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. ENDMETHOD. "append_diff - METHOD render_diff_head. - DATA: lo_html TYPE REF TO lcl_html, - ls_stats TYPE lcl_diff=>ty_count. + METHOD build_menu. + CREATE OBJECT ro_menu. + ro_menu->add( iv_txt = 'Split/Unified view' + iv_act = c_actions-toggle_unified ) ##NO_TEXT. + ENDMETHOD. " build_menu. - CREATE OBJECT lo_html. +********************************************************************** +* EVENT HANDLING +********************************************************************** - ls_stats = is_diff-o_diff->stats( ). + METHOD lif_gui_page~on_event. - IF is_diff-mod = c_mod-both. " Merge stats into 'update' if both were changed - ls_stats-update = ls_stats-update + ls_stats-insert + ls_stats-delete. - CLEAR: ls_stats-insert, ls_stats-delete. - ENDIF. + CASE iv_action. + WHEN c_actions-toggle_unified. " Toggle file diplay + mv_unified = lcl_app=>user( )->toggle_diff_unified( ). + ev_state = gc_event_state-re_render. + ENDCASE. - lo_html->add( '
' ). "#EC NOTEXT - lo_html->add( |+ { ls_stats-insert }| ). - lo_html->add( |- { ls_stats-delete }| ). - lo_html->add( |~ { ls_stats-update }| ). - lo_html->add( |{ is_diff-filename }| ). "#EC NOTEXT - lo_html->add( lcl_gui_chunk_lib=>render_item_state( iv1 = is_diff-lstate - iv2 = is_diff-rstate ) ). - lo_html->add( '
' ). "#EC NOTEXT + ENDMETHOD. "lif_gui_page~on_event - ro_html = lo_html. - ENDMETHOD. +********************************************************************** +* RENDER LOGIC +********************************************************************** - METHOD render_table_head. + METHOD render_content. + + DATA ls_diff_file LIKE LINE OF mt_diff_files. CREATE OBJECT ro_html. - ro_html->add( '
LOCALREMOTE
oldnewcode
LOCALREMOTE
@@ { is_diff_line-new_line } @@ { lv_beacon }@@ { is_diff_line-new_num } @@ { lv_beacon }@@ { is_diff_line-new_num } @@ { lv_beacon }
{ -new_line }{ -old_line }
{ lv_mark }{ is_diff_line-new }{ lv_mark }{ is_diff_line-old }
-{ -old }
+{ -new }
+{ is_diff_line-new }-{ is_diff_line-old } { is_diff_line-old }
' ). + + IF lv_max = abap_true. + ro_html->add( 'Only first 500 objects shown in list' ). + ENDIF. + ro_html->add( '
' ). CATCH lcx_exception INTO lx_error. From 62fe6910487a79bf092024af0fa58b1602b262b7 Mon Sep 17 00:00:00 2001 From: larshp Date: Wed, 18 Jan 2017 19:08:18 +0000 Subject: [PATCH 045/142] ENHO: starting wdyconf --- src/zabapgit_object_enho.prog.abap | 104 ++++++++++++++++++++++++++++- 1 file changed, 103 insertions(+), 1 deletion(-) diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index 83f9f2cca..b6c45a16c 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -18,6 +18,104 @@ INTERFACE lif_object_enho. ENDINTERFACE. +CLASS lcl_object_enho_wdyconf DEFINITION. + + PUBLIC SECTION. + METHODS: constructor + IMPORTING + is_item TYPE ty_item + io_files TYPE REF TO lcl_objects_files. + INTERFACES: lif_object_enho. + + PRIVATE SECTION. + DATA: ms_item TYPE ty_item, + mo_files TYPE REF TO lcl_objects_files. + +ENDCLASS. + +CLASS lcl_object_enho_wdyconf IMPLEMENTATION. + + METHOD constructor. + ms_item = is_item. + mo_files = io_files. + ENDMETHOD. + + METHOD lif_object_enho~deserialize. + + DATA: lv_enhname TYPE enhname, + lo_wdyconf TYPE REF TO cl_wdr_cfg_enhancement, + li_tool TYPE REF TO if_enh_tool, + lv_package TYPE devclass. + + +* io_xml->read( EXPORTING iv_name = 'SHORTTEXT' +* CHANGING cg_data = lv_shorttext ). + + lv_enhname = ms_item-obj_name. + lv_package = iv_package. + TRY. + cl_enh_factory=>create_enhancement( + EXPORTING + enhname = lv_enhname + enhtype = '' + enhtooltype = cl_wdr_cfg_enhancement=>tooltype + IMPORTING + enhancement = li_tool + CHANGING + devclass = lv_package ). + lo_wdyconf ?= li_tool. + +* todo +* CL_WDR_CFG_PERSISTENCE_UTILS=>COMP_XML_TO_TABLES( ) +* lo_wdyconf->set_enhancement_data( ) + + ASSERT 0 = 1. + + lo_wdyconf->if_enh_object~save( ). + lo_wdyconf->if_enh_object~unlock( ). + CATCH cx_enh_root. + lcx_exception=>raise( 'error deserializing ENHO wdyconf' ). + ENDTRY. + + ENDMETHOD. + + METHOD lif_object_enho~serialize. + + DATA: lo_wdyconf TYPE REF TO cl_wdr_cfg_enhancement, + lt_data TYPE wdy_cfg_expl_data_tab, + ls_outline TYPE wdy_cfg_outline_data, + li_document TYPE REF TO if_ixml_document, + li_element TYPE REF TO if_ixml_element. + + + lo_wdyconf ?= ii_enh_tool. + + lo_wdyconf->get_enhancement_data( + EXPORTING + p_scope = 1 + IMPORTING + p_enh_data = lt_data ). + + cl_wdr_cfg_persistence_utils=>comp_tables_to_xml( + EXPORTING + outline_data = ls_outline + expl_data_tab = lt_data + IMPORTING + element = li_element + CHANGING + document = li_document ). +* todo + + io_xml->add( iv_name = 'TOOL' + ig_data = ii_enh_tool->get_tool( ) ). +* io_xml->add( ig_data = lv_shorttext +* iv_name = 'SHORTTEXT' ). + + ENDMETHOD. + +ENDCLASS. + + CLASS lcl_object_enho_clif DEFINITION. PUBLIC SECTION. @@ -820,9 +918,13 @@ CLASS lcl_object_enho IMPLEMENTATION. EXPORTING is_item = ms_item io_files = mo_files. + WHEN cl_wdr_cfg_enhancement=>tooltype. + CREATE OBJECT ri_enho TYPE lcl_object_enho_wdyconf + EXPORTING + is_item = ms_item + io_files = mo_files. * ToDo: * WHEN 'ENHFUGRDATA'. "cl_enh_tool_fugr -* WHEN cl_wdr_cfg_enhancement=>tooltype. * WHEN 'ENHWDYN'. "cl_enh_tool_wdy WHEN OTHERS. lcx_exception=>raise( |Unsupported ENHO type { iv_tool }| ). From b2f3bbf881cc3b46693cd4254d788f088f6a3c03 Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Thu, 19 Jan 2017 00:56:41 -0500 Subject: [PATCH 046/142] Unnecessary "no description" error deleted. --- src/zabapgit_object_susc.prog.abap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_object_susc.prog.abap b/src/zabapgit_object_susc.prog.abap index 5830bc7b4..aa0a07580 100644 --- a/src/zabapgit_object_susc.prog.abap +++ b/src/zabapgit_object_susc.prog.abap @@ -62,7 +62,7 @@ CLASS lcl_object_susc IMPLEMENTATION. WHERE oclss = ms_item-obj_name AND langu = mv_language. IF sy-subrc <> 0. - lcx_exception=>raise( 'TOBCT no english description' ). +* lcx_exception=>raise( 'TOBCT no english description' ). ENDIF. io_xml->add( iv_name = 'TOBC' @@ -127,4 +127,4 @@ CLASS lcl_object_susc IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_susc IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_susc IMPLEMENTATION From 7fce8790518710ad20fd22e8a62873361e7dd189 Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Thu, 19 Jan 2017 00:58:24 -0500 Subject: [PATCH 047/142] Unnecessary "no description" error deleted. --- src/zabapgit_object_susc.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit_object_susc.prog.abap b/src/zabapgit_object_susc.prog.abap index aa0a07580..21f68b0f5 100644 --- a/src/zabapgit_object_susc.prog.abap +++ b/src/zabapgit_object_susc.prog.abap @@ -62,7 +62,7 @@ CLASS lcl_object_susc IMPLEMENTATION. WHERE oclss = ms_item-obj_name AND langu = mv_language. IF sy-subrc <> 0. -* lcx_exception=>raise( 'TOBCT no english description' ). +* lcx_exception=>raise( 'TOBCT no english description' ). ENDIF. io_xml->add( iv_name = 'TOBC' From cb288beafdc2eefb380a3d28a66193db6071c0f3 Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Thu, 19 Jan 2017 01:53:40 -0500 Subject: [PATCH 048/142] Unnecessary "no description" error deleted #545 --- src/zabapgit_object_susc.prog.abap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_object_susc.prog.abap b/src/zabapgit_object_susc.prog.abap index 21f68b0f5..e0a5be805 100644 --- a/src/zabapgit_object_susc.prog.abap +++ b/src/zabapgit_object_susc.prog.abap @@ -61,9 +61,9 @@ CLASS lcl_object_susc IMPLEMENTATION. SELECT SINGLE * FROM tobct INTO ls_tobct WHERE oclss = ms_item-obj_name AND langu = mv_language. - IF sy-subrc <> 0. +* IF sy-subrc <> 0. * lcx_exception=>raise( 'TOBCT no english description' ). - ENDIF. +* ENDIF. io_xml->add( iv_name = 'TOBC' ig_data = ls_tobc ). From 10b3e3192fda53149dcbb1d10645dcf7ac0e7375 Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 19 Jan 2017 08:13:59 +0100 Subject: [PATCH 049/142] fix newline should really fix https://github.com/larshp/abapGit/issues/42 sometime soon --- src/zabapgit_object_susc.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit_object_susc.prog.abap b/src/zabapgit_object_susc.prog.abap index e0a5be805..615cb27a6 100644 --- a/src/zabapgit_object_susc.prog.abap +++ b/src/zabapgit_object_susc.prog.abap @@ -127,4 +127,4 @@ CLASS lcl_object_susc IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_susc IMPLEMENTATION +ENDCLASS. "lcl_object_susc IMPLEMENTATION \ No newline at end of file From 6b51b28a6bf14a1f44ac68188bf42fafe6a737ef Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 19 Jan 2017 11:08:47 +0100 Subject: [PATCH 050/142] ENHO: support for serializing wdyconf #542 --- src/zabapgit_object_enho.prog.abap | 21 +++++++++++++-------- src/zabapgit_xml.prog.abap | 17 ++++++++++++++++- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index b6c45a16c..466d59b64 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -45,11 +45,12 @@ CLASS lcl_object_enho_wdyconf IMPLEMENTATION. DATA: lv_enhname TYPE enhname, lo_wdyconf TYPE REF TO cl_wdr_cfg_enhancement, li_tool TYPE REF TO if_enh_tool, + ls_obj TYPE wdy_config_key, lv_package TYPE devclass. -* io_xml->read( EXPORTING iv_name = 'SHORTTEXT' -* CHANGING cg_data = lv_shorttext ). + io_xml->read( EXPORTING iv_name = 'ORIGINAL_OBJECT' + CHANGING cg_data = ls_obj ). lv_enhname = ms_item-obj_name. lv_package = iv_package. @@ -66,9 +67,9 @@ CLASS lcl_object_enho_wdyconf IMPLEMENTATION. lo_wdyconf ?= li_tool. * todo +* io_xml->read_xml() * CL_WDR_CFG_PERSISTENCE_UTILS=>COMP_XML_TO_TABLES( ) * lo_wdyconf->set_enhancement_data( ) - ASSERT 0 = 1. lo_wdyconf->if_enh_object~save( ). @@ -84,12 +85,19 @@ CLASS lcl_object_enho_wdyconf IMPLEMENTATION. DATA: lo_wdyconf TYPE REF TO cl_wdr_cfg_enhancement, lt_data TYPE wdy_cfg_expl_data_tab, ls_outline TYPE wdy_cfg_outline_data, + ls_obj TYPE wdy_config_key, li_document TYPE REF TO if_ixml_document, li_element TYPE REF TO if_ixml_element. lo_wdyconf ?= ii_enh_tool. + ls_obj = lo_wdyconf->get_original_object( ). + io_xml->add( iv_name = 'TOOL' + ig_data = ii_enh_tool->get_tool( ) ). + io_xml->add( iv_name = 'ORIGINAL_OBJECT' + ig_data = ls_obj ). + lo_wdyconf->get_enhancement_data( EXPORTING p_scope = 1 @@ -104,12 +112,9 @@ CLASS lcl_object_enho_wdyconf IMPLEMENTATION. element = li_element CHANGING document = li_document ). -* todo - io_xml->add( iv_name = 'TOOL' - ig_data = ii_enh_tool->get_tool( ) ). -* io_xml->add( ig_data = lv_shorttext -* iv_name = 'SHORTTEXT' ). + io_xml->add_xml( iv_name = 'ENHANCEMENT_DATA' + ii_xml = li_element ). ENDMETHOD. diff --git a/src/zabapgit_xml.prog.abap b/src/zabapgit_xml.prog.abap index 824505338..23e1828c4 100644 --- a/src/zabapgit_xml.prog.abap +++ b/src/zabapgit_xml.prog.abap @@ -180,6 +180,9 @@ CLASS lcl_xml_output DEFINITION FINAL INHERITING FROM lcl_xml CREATE PUBLIC. RAISING lcx_exception, set_raw IMPORTING ii_raw TYPE REF TO if_ixml_element, + add_xml + IMPORTING iv_name TYPE clike + ii_xml TYPE REF TO if_ixml_element, render IMPORTING iv_normalize TYPE sap_bool DEFAULT abap_true is_metadata TYPE ty_metadata OPTIONAL @@ -230,7 +233,18 @@ CLASS lcl_xml_output IMPLEMENTATION. mi_xml_doc->get_root( )->append_child( li_doc->get_root( )->get_first_child( ) ). ENDIF. - ENDMETHOD. "add + ENDMETHOD. + + METHOD add_xml. + + DATA: li_element TYPE REF TO if_ixml_element. + + li_element = mi_xml_doc->create_element( iv_name ). + li_element->append_child( ii_xml ). + + mi_xml_doc->get_root( )->get_first_child( )->get_first_child( )->append_child( li_element ). + + ENDMETHOD. METHOD render. @@ -280,6 +294,7 @@ CLASS lcl_xml_input DEFINITION FINAL INHERITING FROM lcl_xml CREATE PUBLIC. RAISING lcx_exception, get_raw RETURNING VALUE(ri_raw) TYPE REF TO if_ixml_node, +* todo, add read_xml to match add_xml in lcl_xml_output get_metadata RETURNING VALUE(rs_metadata) TYPE ty_metadata. From 1e4884be596b12943b39b2b64e43681642c6736c Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 19 Jan 2017 11:27:22 +0100 Subject: [PATCH 051/142] ENHO: wdyconf downport --- src/zabapgit_object_enho.prog.abap | 143 ++++++++++++++++++++--------- 1 file changed, 102 insertions(+), 41 deletions(-) diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index 466d59b64..3515f207c 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -16,8 +16,13 @@ INTERFACE lif_object_enho. ii_enh_tool TYPE REF TO if_enh_tool RAISING lcx_exception. -ENDINTERFACE. +ENDINTERFACE. "lif_object_enho +*----------------------------------------------------------------------* +* CLASS lcl_object_enho_wdyconf DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* CLASS lcl_object_enho_wdyconf DEFINITION. PUBLIC SECTION. @@ -31,14 +36,19 @@ CLASS lcl_object_enho_wdyconf DEFINITION. DATA: ms_item TYPE ty_item, mo_files TYPE REF TO lcl_objects_files. -ENDCLASS. +ENDCLASS. "lcl_object_enho_wdyconf DEFINITION +*----------------------------------------------------------------------* +* CLASS lcl_object_enho_wdyconf IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* CLASS lcl_object_enho_wdyconf IMPLEMENTATION. METHOD constructor. ms_item = is_item. mo_files = io_files. - ENDMETHOD. + ENDMETHOD. "constructor METHOD lif_object_enho~deserialize. @@ -78,7 +88,7 @@ CLASS lcl_object_enho_wdyconf IMPLEMENTATION. lcx_exception=>raise( 'error deserializing ENHO wdyconf' ). ENDTRY. - ENDMETHOD. + ENDMETHOD. "lif_object_enho~deserialize METHOD lif_object_enho~serialize. @@ -98,29 +108,35 @@ CLASS lcl_object_enho_wdyconf IMPLEMENTATION. io_xml->add( iv_name = 'ORIGINAL_OBJECT' ig_data = ls_obj ). - lo_wdyconf->get_enhancement_data( +* only works on new ABAP versions, parameters differ between versions + CALL METHOD lo_wdyconf->('GET_ENHANCEMENT_DATA') EXPORTING p_scope = 1 IMPORTING - p_enh_data = lt_data ). + p_enh_data = lt_data. - cl_wdr_cfg_persistence_utils=>comp_tables_to_xml( + CALL METHOD cl_wdr_cfg_persistence_utils=>('COMP_TABLES_TO_XML') EXPORTING outline_data = ls_outline expl_data_tab = lt_data IMPORTING element = li_element CHANGING - document = li_document ). + document = li_document. io_xml->add_xml( iv_name = 'ENHANCEMENT_DATA' ii_xml = li_element ). - ENDMETHOD. + ENDMETHOD. "lif_object_enho~serialize -ENDCLASS. +ENDCLASS. "lcl_object_enho_wdyconf IMPLEMENTATION +*----------------------------------------------------------------------* +* CLASS lcl_object_enho_clif DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* CLASS lcl_object_enho_clif DEFINITION. PUBLIC SECTION. @@ -142,8 +158,13 @@ CLASS lcl_object_enho_clif DEFINITION. io_clif TYPE REF TO cl_enh_tool_clif RAISING lcx_exception. -ENDCLASS. +ENDCLASS. "lcl_object_enho_clif DEFINITION +*----------------------------------------------------------------------* +* CLASS lcl_object_enho_clif IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* CLASS lcl_object_enho_clif IMPLEMENTATION. METHOD serialize_includes. @@ -179,7 +200,7 @@ CLASS lcl_object_enho_clif IMPLEMENTATION. ENDIF. ENDLOOP. - ENDMETHOD. + ENDMETHOD. "serialize_includes METHOD serialize. @@ -221,7 +242,7 @@ CLASS lcl_object_enho_clif IMPLEMENTATION. io_xml->add( iv_name = 'TAB_METHODS' ig_data = lt_tab_methods ). - ENDMETHOD. + ENDMETHOD. "serialize METHOD deserialize. @@ -273,10 +294,15 @@ CLASS lcl_object_enho_clif IMPLEMENTATION. ENDLOOP. - ENDMETHOD. + ENDMETHOD. "deserialize -ENDCLASS. +ENDCLASS. "lcl_object_enho_clif IMPLEMENTATION +*----------------------------------------------------------------------* +* CLASS lcl_object_enho_badi DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* CLASS lcl_object_enho_badi DEFINITION. PUBLIC SECTION. @@ -290,14 +316,19 @@ CLASS lcl_object_enho_badi DEFINITION. DATA: ms_item TYPE ty_item, mo_files TYPE REF TO lcl_objects_files. -ENDCLASS. +ENDCLASS. "lcl_object_enho_badi DEFINITION +*----------------------------------------------------------------------* +* CLASS lcl_object_enho_badi IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* CLASS lcl_object_enho_badi IMPLEMENTATION. METHOD constructor. ms_item = is_item. mo_files = io_files. - ENDMETHOD. + ENDMETHOD. "constructor METHOD lif_object_enho~serialize. @@ -340,7 +371,7 @@ CLASS lcl_object_enho_badi IMPLEMENTATION. io_xml->add( iv_name = 'IMPL' ig_data = lt_impl ). - ENDMETHOD. + ENDMETHOD. "lif_object_enho~serialize METHOD lif_object_enho~deserialize. @@ -387,10 +418,15 @@ CLASS lcl_object_enho_badi IMPLEMENTATION. lcx_exception=>raise( 'error deserializing ENHO badi' ). ENDTRY. - ENDMETHOD. + ENDMETHOD. "lif_object_enho~deserialize -ENDCLASS. +ENDCLASS. "lcl_object_enho_badi IMPLEMENTATION +*----------------------------------------------------------------------* +* CLASS lcl_object_enho_hook DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* CLASS lcl_object_enho_hook DEFINITION. PUBLIC SECTION. METHODS: constructor @@ -421,14 +457,19 @@ CLASS lcl_object_enho_hook DEFINITION. CHANGING ct_impl TYPE enh_hook_impl_it RAISING lcx_exception. -ENDCLASS. +ENDCLASS. "lcl_object_enho_hook DEFINITION +*----------------------------------------------------------------------* +* CLASS lcl_object_enho_hook IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* CLASS lcl_object_enho_hook IMPLEMENTATION. METHOD constructor. ms_item = is_item. mo_files = io_files. - ENDMETHOD. + ENDMETHOD. "constructor METHOD lif_object_enho~serialize. @@ -468,7 +509,7 @@ CLASS lcl_object_enho_hook IMPLEMENTATION. io_xml->add( iv_name = 'SPACES' ig_data = lt_spaces ). - ENDMETHOD. + ENDMETHOD. "lif_object_enho~serialize METHOD hook_impl_serialize. * handle normalization of XML values @@ -491,7 +532,7 @@ CLASS lcl_object_enho_hook IMPLEMENTATION. ENDWHILE. ENDLOOP. ENDLOOP. - ENDMETHOD. + ENDMETHOD. "hook_impl_serialize METHOD hook_impl_deserialize. @@ -515,7 +556,7 @@ CLASS lcl_object_enho_hook IMPLEMENTATION. ENDIF. ENDLOOP. - ENDMETHOD. + ENDMETHOD. "hook_impl_deserialize METHOD lif_object_enho~deserialize. @@ -583,10 +624,15 @@ CLASS lcl_object_enho_hook IMPLEMENTATION. lcx_exception=>raise( 'error deserializing ENHO hook' ). ENDTRY. - ENDMETHOD. + ENDMETHOD. "lif_object_enho~deserialize -ENDCLASS. +ENDCLASS. "lcl_object_enho_hook IMPLEMENTATION +*----------------------------------------------------------------------* +* CLASS lcl_object_enho_interface DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* CLASS lcl_object_enho_interface DEFINITION. PUBLIC SECTION. @@ -601,14 +647,19 @@ CLASS lcl_object_enho_interface DEFINITION. DATA: ms_item TYPE ty_item, mo_files TYPE REF TO lcl_objects_files. -ENDCLASS. +ENDCLASS. "lcl_object_enho_interface DEFINITION +*----------------------------------------------------------------------* +* CLASS lcl_object_enho_interface IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* CLASS lcl_object_enho_interface IMPLEMENTATION. METHOD constructor. ms_item = is_item. mo_files = io_files. - ENDMETHOD. + ENDMETHOD. "constructor METHOD lif_object_enho~serialize. @@ -634,7 +685,7 @@ CLASS lcl_object_enho_interface IMPLEMENTATION. io_files = mo_files io_clif = lo_enh_intf ). - ENDMETHOD. + ENDMETHOD. "lif_object_enho~serialize METHOD lif_object_enho~deserialize. @@ -679,10 +730,15 @@ CLASS lcl_object_enho_interface IMPLEMENTATION. lcx_exception=>raise( 'error deserializing ENHO interface' ). ENDTRY. - ENDMETHOD. + ENDMETHOD. "lif_object_enho~deserialize -ENDCLASS. +ENDCLASS. "lcl_object_enho_interface IMPLEMENTATION +*----------------------------------------------------------------------* +* CLASS lcl_object_enho_class DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* CLASS lcl_object_enho_class DEFINITION. PUBLIC SECTION. @@ -697,14 +753,19 @@ CLASS lcl_object_enho_class DEFINITION. DATA: ms_item TYPE ty_item. DATA: mo_files TYPE REF TO lcl_objects_files. -ENDCLASS. +ENDCLASS. "lcl_object_enho_class DEFINITION +*----------------------------------------------------------------------* +* CLASS lcl_object_enho_class IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* CLASS lcl_object_enho_class IMPLEMENTATION. METHOD constructor. ms_item = is_item. mo_files = io_files. - ENDMETHOD. + ENDMETHOD. "constructor METHOD lif_object_enho~serialize. @@ -746,7 +807,7 @@ CLASS lcl_object_enho_class IMPLEMENTATION. io_files = mo_files io_clif = lo_enh_class ). - ENDMETHOD. + ENDMETHOD. "lif_object_enho~serialize METHOD lif_object_enho~deserialize. @@ -809,9 +870,9 @@ CLASS lcl_object_enho_class IMPLEMENTATION. lcx_exception=>raise( 'error deserializing ENHO class' ). ENDTRY. - ENDMETHOD. + ENDMETHOD. "lif_object_enho~deserialize -ENDCLASS. +ENDCLASS. "lcl_object_enho_class IMPLEMENTATION *----------------------------------------------------------------------* * CLASS lcl_object_enho DEFINITION @@ -831,7 +892,7 @@ CLASS lcl_object_enho DEFINITION INHERITING FROM lcl_objects_super FINAL. IMPORTING iv_tool TYPE enhtooltype RETURNING - VALUE(ri_enho) TYPE REF TO lif_object_enho + value(ri_enho) TYPE REF TO lif_object_enho RAISING lcx_exception. @@ -854,7 +915,7 @@ CLASS lcl_object_enho IMPLEMENTATION. METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo - ENDMETHOD. + ENDMETHOD. "lif_object~changed_by METHOD lif_object~exists. @@ -935,7 +996,7 @@ CLASS lcl_object_enho IMPLEMENTATION. lcx_exception=>raise( |Unsupported ENHO type { iv_tool }| ). ENDCASE. - ENDMETHOD. + ENDMETHOD. "factory METHOD lif_object~deserialize. @@ -992,6 +1053,6 @@ CLASS lcl_object_enho IMPLEMENTATION. METHOD lif_object~compare_to_remote_version. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. - ENDMETHOD. + ENDMETHOD. "lif_object~compare_to_remote_version ENDCLASS. "lcl_object_enho IMPLEMENTATION \ No newline at end of file From bf1d9a13e3d643ec5e74c9cbfd0783d54650db7d Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Thu, 19 Jan 2017 14:18:59 +0100 Subject: [PATCH 052/142] Table deletion without pop-up --- src/zabapgit_object_tabl.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit_object_tabl.prog.abap b/src/zabapgit_object_tabl.prog.abap index c956017d5..773fbdd22 100644 --- a/src/zabapgit_object_tabl.prog.abap +++ b/src/zabapgit_object_tabl.prog.abap @@ -106,7 +106,7 @@ CLASS lcl_object_tabl IMPLEMENTATION. CALL FUNCTION 'RS_DD_DELETE_OBJ' EXPORTING - no_ask = abap_false + no_ask = abap_true objname = lv_objname objtype = 'T' EXCEPTIONS From a32ab9d4fb729bca6f5804c1bab88cb7b1214463 Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Thu, 19 Jan 2017 14:24:23 +0100 Subject: [PATCH 053/142] Removes activation pop-up screen --- src/zabapgit_objects.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index 383f0ea69..bf88bc542 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -56,7 +56,7 @@ CLASS lcl_objects_activation IMPLEMENTATION. CALL FUNCTION 'RS_WORKING_OBJECTS_ACTIVATE' EXPORTING activate_ddic_objects = iv_ddic - with_popup = abap_true + with_popup = abap_false TABLES objects = gt_objects EXCEPTIONS From a6186ff53b22558637b44b648f29038b1ca2dc03 Mon Sep 17 00:00:00 2001 From: EduardoCopat Date: Thu, 19 Jan 2017 17:16:28 +0100 Subject: [PATCH 054/142] Revert "Minor UI adjustments" --- src/zabapgit_object_tabl.prog.abap | 2 +- src/zabapgit_objects.prog.abap | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_object_tabl.prog.abap b/src/zabapgit_object_tabl.prog.abap index 773fbdd22..c956017d5 100644 --- a/src/zabapgit_object_tabl.prog.abap +++ b/src/zabapgit_object_tabl.prog.abap @@ -106,7 +106,7 @@ CLASS lcl_object_tabl IMPLEMENTATION. CALL FUNCTION 'RS_DD_DELETE_OBJ' EXPORTING - no_ask = abap_true + no_ask = abap_false objname = lv_objname objtype = 'T' EXCEPTIONS diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index bf88bc542..383f0ea69 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -56,7 +56,7 @@ CLASS lcl_objects_activation IMPLEMENTATION. CALL FUNCTION 'RS_WORKING_OBJECTS_ACTIVATE' EXPORTING activate_ddic_objects = iv_ddic - with_popup = abap_false + with_popup = abap_true TABLES objects = gt_objects EXCEPTIONS From e38a47f25a77d6627c3e332840e50373e381227b Mon Sep 17 00:00:00 2001 From: sbcgua Date: Thu, 19 Jan 2017 19:03:44 +0200 Subject: [PATCH 055/142] fix #532, deleted objects didn't display correctly --- src/zabapgit_file_status.prog.abap | 17 +++++++++++------ src/zabapgit_unit_test.prog.abap | 1 + 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/zabapgit_file_status.prog.abap b/src/zabapgit_file_status.prog.abap index d30919b97..2bc1e77de 100644 --- a/src/zabapgit_file_status.prog.abap +++ b/src/zabapgit_file_status.prog.abap @@ -21,7 +21,8 @@ CLASS lcl_file_status DEFINITION FINAL PRIVATE SECTION. CLASS-METHODS calculate_status - IMPORTING it_local TYPE ty_files_item_tt + IMPORTING iv_devclass TYPE devclass + it_local TYPE ty_files_item_tt it_remote TYPE ty_files_tt it_cur_state TYPE ty_file_signatures_tt RETURNING VALUE(rt_results) TYPE ty_results_tt. @@ -36,7 +37,8 @@ CLASS lcl_file_status DEFINITION FINAL IMPORTING is_local TYPE ty_file_item RETURNING VALUE(rs_result) TYPE ty_result, build_new_remote - IMPORTING is_remote TYPE ty_file + IMPORTING iv_devclass TYPE devclass + is_remote TYPE ty_file it_items TYPE ty_items_ts it_state TYPE ty_file_signatures_ts RETURNING VALUE(rs_result) TYPE ty_result, @@ -61,6 +63,7 @@ CLASS lcl_file_status IMPLEMENTATION. rt_results = calculate_status( + iv_devclass = io_repo->get_package( ) it_local = io_repo->get_files_local( io_log ) it_remote = io_repo->get_files_remote( ) it_cur_state = io_repo->get_local_checksums_per_file( ) ). @@ -147,9 +150,10 @@ CLASS lcl_file_status IMPLEMENTATION. " Process new remote files (marked above with empty SHA1) LOOP AT lt_remote ASSIGNING WHERE sha1 IS NOT INITIAL. APPEND INITIAL LINE TO rt_results ASSIGNING . - = build_new_remote( is_remote = - it_items = lt_items_idx - it_state = lt_state_idx ). + = build_new_remote( iv_devclass = iv_devclass + is_remote = + it_items = lt_items_idx + it_state = lt_state_idx ). ENDLOOP. SORT rt_results BY @@ -278,7 +282,8 @@ CLASS lcl_file_status IMPLEMENTATION. ENDIF. " Item is in state and in cache but with no package - it was deleted - IF ls_item-devclass IS INITIAL. + " OR devclass is the same as repo package (see #532) + IF ls_item-devclass IS INITIAL OR ls_item-devclass = iv_devclass. rs_result-match = abap_false. rs_result-lstate = gc_state-deleted. ENDIF. diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index 98f84d9ef..e9df1bc1c 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -1917,6 +1917,7 @@ CLASS ltcl_file_status IMPLEMENTATION. lt_results_exp = lt_results. lt_results = lcl_file_status=>calculate_status( + iv_devclass = '$Z$' it_local = lt_local it_remote = lt_remote it_cur_state = lt_state ). From c21aaca0c701383547f4391b83d29c97f6308dc2 Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Thu, 19 Jan 2017 15:03:20 -0500 Subject: [PATCH 056/142] Delete blank lines from tadir objects In "Transport to zip" option: Delete blank lines from tadir internal table before calculating the top package. --- src/zabapgit_transport.prog.abap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_transport.prog.abap b/src/zabapgit_transport.prog.abap index 055a4ef63..e9daa4856 100644 --- a/src/zabapgit_transport.prog.abap +++ b/src/zabapgit_transport.prog.abap @@ -172,7 +172,7 @@ CLASS lcl_transport IMPLEMENTATION. SORT rt_tadir BY object ASCENDING obj_name ASCENDING. DELETE ADJACENT DUPLICATES FROM rt_tadir COMPARING object obj_name. - + DELETE rt_tadir WHERE table_line IS INITIAL. ENDMETHOD. -ENDCLASS. \ No newline at end of file +ENDCLASS. From 98cf60c2a800b6fb9b4b8b543e2181aad1debd39 Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Thu, 19 Jan 2017 17:07:59 -0500 Subject: [PATCH 057/142] Transport to zip improvement: #553 Don't serialize objects that are not in the transport request. --- src/zabapgit_zip.prog.abap | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/zabapgit_zip.prog.abap b/src/zabapgit_zip.prog.abap index 497f0b474..528c3a3f8 100644 --- a/src/zabapgit_zip.prog.abap +++ b/src/zabapgit_zip.prog.abap @@ -404,24 +404,25 @@ CLASS lcl_zip IMPLEMENTATION. CREATE OBJECT lo_log. - lt_zip = io_repo->get_files_local( lo_log ). + lt_zip = io_repo->get_files_local( io_log = lo_log + it_filter = it_filter ). IF lo_log->count( ) > 0. lo_log->show( ). ENDIF. - IF lines( it_filter ) > 0. - LOOP AT lt_zip ASSIGNING . - lv_index = sy-tabix. - READ TABLE it_filter WITH KEY - object = -item-obj_type - obj_name = -item-obj_name - TRANSPORTING NO FIELDS. - IF sy-subrc <> 0. - DELETE lt_zip INDEX lv_index. - ENDIF. - ENDLOOP. - ENDIF. +* IF lines( it_filter ) > 0. +* LOOP AT lt_zip ASSIGNING . +* lv_index = sy-tabix. +* READ TABLE it_filter WITH KEY +* object = -item-obj_type +* obj_name = -item-obj_name +* TRANSPORTING NO FIELDS. +* IF sy-subrc <> 0. +* DELETE lt_zip INDEX lv_index. +* ENDIF. +* ENDLOOP. +* ENDIF. file_download( iv_package = io_repo->get_package( ) iv_xstr = encode_files( lt_zip ) ). @@ -551,4 +552,4 @@ CLASS lcl_zip IMPLEMENTATION. ENDMETHOD. "export_package -ENDCLASS. "lcl_zip IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_zip IMPLEMENTATION From f47e4c236321d8c88e7e5704e5c0c9f24ab5d85b Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Thu, 19 Jan 2017 17:11:40 -0500 Subject: [PATCH 058/142] Update zabapgit_repo_impl.prog.abap --- src/zabapgit_repo_impl.prog.abap | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 364f8a55b..16c4e8a35 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -500,19 +500,21 @@ CLASS lcl_repo IMPLEMENTATION. ENDMETHOD. - METHOD get_files_local. + METHOD get_files_local. DATA: lt_tadir TYPE ty_tadir_tt, ls_item TYPE ty_item, lt_files TYPE ty_files_tt. DATA: lt_cache TYPE SORTED TABLE OF ty_file_item - WITH NON-UNIQUE KEY item. + WITH NON-UNIQUE KEY item, + lt_tadir_aux LIKE lt_tadir. FIELD-SYMBOLS: LIKE LINE OF lt_files, LIKE LINE OF rt_files, LIKE LINE OF lt_cache, - LIKE LINE OF lt_tadir. + LIKE LINE OF lt_tadir, + LIKE LINE OF it_filter. " Serialization happened before and no refresh request @@ -533,7 +535,16 @@ CLASS lcl_repo IMPLEMENTATION. lt_cache = mt_local. lt_tadir = lcl_tadir=>read( get_package( ) ). - LOOP AT lt_tadir ASSIGNING . + + LOOP AT it_filter ASSIGNING . + READ TABLE lt_tadir ASSIGNING WITH KEY object = -object + obj_name = -obj_name. + IF sy-subrc = 0. + APPEND TO lt_tadir_aux. + ENDIF. + ENDLOOP. + + LOOP AT lt_tadir_aux ASSIGNING . lcl_progress=>show( iv_key = 'Serialize' iv_current = sy-tabix @@ -923,4 +934,4 @@ CLASS lcl_repo_srv IMPLEMENTATION. ENDMETHOD. "switch_repo_type -ENDCLASS. "lcl_repo_srv IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_repo_srv IMPLEMENTATION From 14b91e5b887447ae754f38d08d82df68e0c073c6 Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Thu, 19 Jan 2017 17:13:10 -0500 Subject: [PATCH 059/142] Update zabapgit_repo.prog.abap --- src/zabapgit_repo.prog.abap | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/zabapgit_repo.prog.abap b/src/zabapgit_repo.prog.abap index 6d6eb40b5..8353d11d9 100644 --- a/src/zabapgit_repo.prog.abap +++ b/src/zabapgit_repo.prog.abap @@ -18,6 +18,7 @@ CLASS lcl_repo DEFINITION ABSTRACT FRIENDS lcl_repo_srv. RAISING lcx_exception, get_files_local IMPORTING io_log TYPE REF TO lcl_log OPTIONAL + it_filter TYPE scts_tadir OPTIONAL RETURNING VALUE(rt_files) TYPE ty_files_item_tt RAISING lcx_exception, get_local_checksums @@ -223,4 +224,4 @@ CLASS lcl_repo_srv DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. IMPORTING iv_package TYPE devclass RAISING lcx_exception. -ENDCLASS. "lcl_repo_srv DEFINITION \ No newline at end of file +ENDCLASS. "lcl_repo_srv DEFINITION From dfa7c4bce3f7b9c449dadd7c866f1faafb0e971e Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Thu, 19 Jan 2017 17:13:49 -0500 Subject: [PATCH 060/142] Update zabapgit_file_status.prog.abap --- src/zabapgit_file_status.prog.abap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_file_status.prog.abap b/src/zabapgit_file_status.prog.abap index d30919b97..87854b255 100644 --- a/src/zabapgit_file_status.prog.abap +++ b/src/zabapgit_file_status.prog.abap @@ -61,7 +61,7 @@ CLASS lcl_file_status IMPLEMENTATION. rt_results = calculate_status( - it_local = io_repo->get_files_local( io_log ) + it_local = io_repo->get_files_local( io_log = io_log ) it_remote = io_repo->get_files_remote( ) it_cur_state = io_repo->get_local_checksums_per_file( ) ). @@ -290,4 +290,4 @@ CLASS lcl_file_status IMPLEMENTATION. ENDMETHOD. "build_new_remote -ENDCLASS. "lcl_file_status IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_file_status IMPLEMENTATION From 21388867c9f274b4cc96986b96a400ff2533b1ad Mon Sep 17 00:00:00 2001 From: EduardoCopat Date: Fri, 20 Jan 2017 15:51:00 +0100 Subject: [PATCH 061/142] Disable popup delete table --- src/zabapgit_object_tabl.prog.abap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_object_tabl.prog.abap b/src/zabapgit_object_tabl.prog.abap index c956017d5..de2f10201 100644 --- a/src/zabapgit_object_tabl.prog.abap +++ b/src/zabapgit_object_tabl.prog.abap @@ -106,7 +106,7 @@ CLASS lcl_object_tabl IMPLEMENTATION. CALL FUNCTION 'RS_DD_DELETE_OBJ' EXPORTING - no_ask = abap_false + no_ask = abap_true objname = lv_objname objtype = 'T' EXCEPTIONS @@ -433,4 +433,4 @@ CLASS lcl_object_tabl IMPLEMENTATION. ENDIF. ENDMETHOD. -ENDCLASS. "lcl_object_TABL IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_TABL IMPLEMENTATION From 2a9084783711021b0163842ac249a8ecc827d5da Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Fri, 20 Jan 2017 11:57:34 -0500 Subject: [PATCH 062/142] Update zabapgit_repo_impl.prog.abap --- src/zabapgit_repo_impl.prog.abap | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 16c4e8a35..9369eab7e 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -500,7 +500,7 @@ CLASS lcl_repo IMPLEMENTATION. ENDMETHOD. - METHOD get_files_local. + METHOD get_files_local. DATA: lt_tadir TYPE ty_tadir_tt, ls_item TYPE ty_item, @@ -535,15 +535,19 @@ CLASS lcl_repo IMPLEMENTATION. lt_cache = mt_local. lt_tadir = lcl_tadir=>read( get_package( ) ). - - LOOP AT it_filter ASSIGNING . - READ TABLE lt_tadir ASSIGNING WITH KEY object = -object - obj_name = -obj_name. - IF sy-subrc = 0. - APPEND TO lt_tadir_aux. - ENDIF. - ENDLOOP. - + + IF it_filter[] IS INITIAL. + lt_tadir_aux[] = lt_tadir[]. + ELSE. + LOOP AT it_filter ASSIGNING . + READ TABLE lt_tadir ASSIGNING WITH KEY object = -object + obj_name = -obj_name. + IF sy-subrc = 0. + APPEND TO lt_tadir_aux. + ENDIF. + ENDLOOP. + ENDIF. + LOOP AT lt_tadir_aux ASSIGNING . lcl_progress=>show( iv_key = 'Serialize' From de05a94c7495e9493b3d0ad2a1ad51bfdad663b6 Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Fri, 20 Jan 2017 11:58:12 -0500 Subject: [PATCH 063/142] Update zabapgit_zip.prog.abap --- src/zabapgit_zip.prog.abap | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/zabapgit_zip.prog.abap b/src/zabapgit_zip.prog.abap index 528c3a3f8..76927dc15 100644 --- a/src/zabapgit_zip.prog.abap +++ b/src/zabapgit_zip.prog.abap @@ -411,19 +411,6 @@ CLASS lcl_zip IMPLEMENTATION. lo_log->show( ). ENDIF. -* IF lines( it_filter ) > 0. -* LOOP AT lt_zip ASSIGNING . -* lv_index = sy-tabix. -* READ TABLE it_filter WITH KEY -* object = -item-obj_type -* obj_name = -item-obj_name -* TRANSPORTING NO FIELDS. -* IF sy-subrc <> 0. -* DELETE lt_zip INDEX lv_index. -* ENDIF. -* ENDLOOP. -* ENDIF. - file_download( iv_package = io_repo->get_package( ) iv_xstr = encode_files( lt_zip ) ). From 772355fcdb030142d0997dd0a1ee190c2f03c8f2 Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Fri, 20 Jan 2017 12:18:42 -0500 Subject: [PATCH 064/142] Update zabapgit_repo_impl.prog.abap --- src/zabapgit_repo_impl.prog.abap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 9369eab7e..8c20cf998 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -535,7 +535,7 @@ CLASS lcl_repo IMPLEMENTATION. lt_cache = mt_local. lt_tadir = lcl_tadir=>read( get_package( ) ). - + IF it_filter[] IS INITIAL. lt_tadir_aux[] = lt_tadir[]. ELSE. @@ -547,7 +547,7 @@ CLASS lcl_repo IMPLEMENTATION. ENDIF. ENDLOOP. ENDIF. - + LOOP AT lt_tadir_aux ASSIGNING . lcl_progress=>show( iv_key = 'Serialize' From 926cbcefbcc5867c8e00ac493ab30d6fead1eed2 Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Fri, 20 Jan 2017 20:18:57 +0100 Subject: [PATCH 065/142] Fixes function modules with exception classes --- src/zabapgit_object_fugr.prog.abap | 98 ++++++++++++++++++++---------- 1 file changed, 66 insertions(+), 32 deletions(-) diff --git a/src/zabapgit_object_fugr.prog.abap b/src/zabapgit_object_fugr.prog.abap index 2b988430b..dddc1db06 100644 --- a/src/zabapgit_object_fugr.prog.abap +++ b/src/zabapgit_object_fugr.prog.abap @@ -17,19 +17,20 @@ CLASS lcl_object_fugr DEFINITION INHERITING FROM lcl_objects_program FINAL. TYPES: ty_rs38l_incl_tt TYPE STANDARD TABLE OF rs38l_incl WITH DEFAULT KEY. TYPES: BEGIN OF ty_function, - funcname TYPE rs38l_fnam, - include TYPE progname, - global_flag TYPE rs38l-global, - remote_call TYPE rs38l-remote, - update_task TYPE rs38l-utask, - short_text TYPE tftit-stext, - remote_basxml TYPE rs38l-basxml_enabled, - import TYPE STANDARD TABLE OF rsimp WITH DEFAULT KEY, - changing TYPE STANDARD TABLE OF rscha WITH DEFAULT KEY, - export TYPE STANDARD TABLE OF rsexp WITH DEFAULT KEY, - tables TYPE STANDARD TABLE OF rstbl WITH DEFAULT KEY, - exception TYPE STANDARD TABLE OF rsexc WITH DEFAULT KEY, - documentation TYPE STANDARD TABLE OF rsfdo WITH DEFAULT KEY, + funcname TYPE rs38l_fnam, + include TYPE progname, + global_flag TYPE rs38l-global, + remote_call TYPE rs38l-remote, + update_task TYPE rs38l-utask, + short_text TYPE tftit-stext, + remote_basxml TYPE rs38l-basxml_enabled, + import TYPE STANDARD TABLE OF rsimp WITH DEFAULT KEY, + changing TYPE STANDARD TABLE OF rscha WITH DEFAULT KEY, + export TYPE STANDARD TABLE OF rsexp WITH DEFAULT KEY, + tables TYPE STANDARD TABLE OF rstbl WITH DEFAULT KEY, + exception TYPE STANDARD TABLE OF rsexc WITH DEFAULT KEY, + documentation TYPE STANDARD TABLE OF rsfdo WITH DEFAULT KEY, + exception_classes TYPE abap_bool, END OF ty_function. TYPES: ty_function_tt TYPE STANDARD TABLE OF ty_function WITH DEFAULT KEY. @@ -71,6 +72,11 @@ CLASS lcl_object_fugr DEFINITION INHERITING FROM lcl_objects_program FINAL. iv_package TYPE devclass RAISING lcx_exception. + METHODS are_exceptions_class_based + IMPORTING iv_function_name TYPE rs38l_fnam + RETURNING VALUE(rv_return) TYPE abap_bool + RAISING lcx_exception. + ENDCLASS. "lcl_object_fugr DEFINITION *----------------------------------------------------------------------* @@ -247,6 +253,7 @@ CLASS lcl_object_fugr IMPLEMENTATION. remote_call = -remote_call short_text = -short_text update_task = -update_task + exception_class = -exception_classes * NAMESPACE = ' ' todo remote_basxml_supported = -remote_basxml IMPORTING @@ -276,10 +283,6 @@ CLASS lcl_object_fugr IMPLEMENTATION. ENDIF. INSERT REPORT lv_include FROM lt_source. - -* lcl_objects_activation=>add( iv_type = 'FUNC' -* iv_name = -funcname ). - ENDLOOP. ENDMETHOD. "deserialize_functions @@ -537,7 +540,7 @@ CLASS lcl_object_fugr IMPLEMENTATION. lt_source TYPE TABLE OF rssource, lt_functab TYPE ty_rs38l_incl_tt, lt_new_source TYPE rsfb_source, - ls_ret LIKE LINE OF rt_functions. + ls_function LIKE LINE OF rt_functions. FIELD-SYMBOLS: LIKE LINE OF lt_functab. @@ -547,8 +550,8 @@ CLASS lcl_object_fugr IMPLEMENTATION. LOOP AT lt_functab ASSIGNING . * fm RPY_FUNCTIONMODULE_READ does not support source code * lines longer than 72 characters - CLEAR ls_ret. - MOVE-CORRESPONDING TO ls_ret. + CLEAR ls_function. + MOVE-CORRESPONDING TO ls_function. CLEAR lt_new_source. CLEAR lt_source. @@ -557,18 +560,18 @@ CLASS lcl_object_fugr IMPLEMENTATION. EXPORTING functionname = -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_function-global_flag + remote_call = ls_function-remote_call + update_task = ls_function-update_task + short_text = ls_function-short_text + remote_basxml_supported = ls_function-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_function-import + changing_parameter = ls_function-changing + export_parameter = ls_function-export + tables_parameter = ls_function-tables + exception_list = ls_function-exception + documentation = ls_function-documentation source = lt_source CHANGING new_source = lt_new_source @@ -583,7 +586,9 @@ CLASS lcl_object_fugr IMPLEMENTATION. lcx_exception=>raise( 'Error from RPY_FUNCTIONMODULE_READ_NEW' ). ENDIF. - APPEND ls_ret TO rt_functions. + ls_function-exception_classes = are_exceptions_class_based( -funcname ). + + APPEND ls_function TO rt_functions. IF NOT lt_new_source IS INITIAL. mo_files->add_abap( iv_extra = -funcname @@ -618,6 +623,35 @@ CLASS lcl_object_fugr IMPLEMENTATION. ENDMETHOD. "serialize_includes + METHOD are_exceptions_class_based. + DATA: + lt_dokumentation TYPE TABLE OF funct, + lt_exception_list TYPE TABLE OF rsexc, + lt_export_parameter TYPE TABLE OF rsexp, + lt_import_parameter TYPE TABLE OF rsimp, + lt_tables_parameter TYPE TABLE OF rstbl. + + CALL FUNCTION 'FUNCTION_IMPORT_DOKU' + EXPORTING + funcname = iv_function_name + IMPORTING + exception_class = rv_return + TABLES + dokumentation = lt_dokumentation + exception_list = lt_exception_list + export_parameter = lt_export_parameter + import_parameter = lt_import_parameter + tables_parameter = lt_tables_parameter + EXCEPTIONS + error_message = 1 + function_not_found = 2 + invalid_name = 3 + OTHERS = 4. + IF sy-subrc <> 0. + lcx_exception=>raise( 'Error from FUNCTION_IMPORT_DOKU' ). + ENDIF. + ENDMETHOD. + METHOD lif_object~serialize. DATA: lt_functions TYPE ty_function_tt, From a917d8946161b182232037dd76f7d2ed3d34889d Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Fri, 20 Jan 2017 15:56:23 -0500 Subject: [PATCH 066/142] Update zabapgit_zip.prog.abap --- src/zabapgit_zip.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit_zip.prog.abap b/src/zabapgit_zip.prog.abap index 76927dc15..b27607ed9 100644 --- a/src/zabapgit_zip.prog.abap +++ b/src/zabapgit_zip.prog.abap @@ -404,7 +404,7 @@ CLASS lcl_zip IMPLEMENTATION. CREATE OBJECT lo_log. - lt_zip = io_repo->get_files_local( io_log = lo_log + lt_zip = io_repo->get_files_local( io_log = lo_log it_filter = it_filter ). IF lo_log->count( ) > 0. From 0479eb36b2f03053ce835ca69e699ca5061fefc4 Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Fri, 20 Jan 2017 18:20:26 -0500 Subject: [PATCH 067/142] Filter logic improvement when serializing --- src/zabapgit_app_impl.prog.abap | 989 ++++++++++++++++++++++++++++++-- 1 file changed, 930 insertions(+), 59 deletions(-) diff --git a/src/zabapgit_app_impl.prog.abap b/src/zabapgit_app_impl.prog.abap index 9af5079b0..36b8f7cce 100644 --- a/src/zabapgit_app_impl.prog.abap +++ b/src/zabapgit_app_impl.prog.abap @@ -1,70 +1,941 @@ *&---------------------------------------------------------------------* -*& Include ZABAPGIT_APP_IMPL +*& Include ZABAPGIT_REPO_IMPL *&---------------------------------------------------------------------* *----------------------------------------------------------------------* -* CLASS lcl_app IMPLEMENTATION +* CLASS lcl_repo_offline IMPLEMENTATION *----------------------------------------------------------------------* -CLASS lcl_app IMPLEMENTATION. +CLASS lcl_repo_offline IMPLEMENTATION. - METHOD run. + METHOD set_files_remote. - IF sy-batch = abap_true. - lcl_background=>run( ). - ELSE. - gui( )->go_home( ). - CALL SELECTION-SCREEN 1001. " trigger screen - ENDIF. + mt_remote = it_files. - ENDMETHOD. "run + find_dot_abapgit( ). - METHOD gui. - - IF go_gui IS NOT BOUND. - CREATE OBJECT go_gui. - ENDIF. - ro_gui = go_gui. - - ENDMETHOD. "gui - - METHOD user. - - IF iv_user = sy-uname ##USER_OK. - IF go_current_user IS NOT BOUND. - CREATE OBJECT go_current_user. - ENDIF. - ro_user = go_current_user. - ELSE. - CREATE OBJECT ro_user - EXPORTING - iv_user = iv_user. - ENDIF. - - ENDMETHOD. "user - - METHOD repo_srv. - - IF go_repo_srv IS NOT BOUND. - CREATE OBJECT go_repo_srv. - ENDIF. - ro_repo_srv = go_repo_srv. - - ENDMETHOD. "repo_srv - - METHOD db. - - IF go_db IS NOT BOUND. - CREATE OBJECT go_db. - ENDIF. - ro_db = go_db. - - ENDMETHOD. "repo_srv - - METHOD settings. - IF go_settings IS NOT BOUND. - CREATE OBJECT go_settings. - ENDIF. - ro_settings = go_settings. ENDMETHOD. -ENDCLASS. "lcl_app \ No newline at end of file +ENDCLASS. "lcl_repo_offline IMPLEMENTATION + +*----------------------------------------------------------------------* +* CLASS lcl_repo_online IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_repo_online IMPLEMENTATION. + + METHOD constructor. + + super->constructor( is_data ). + + mv_initialized = abap_false. + + ENDMETHOD. "constructor + + METHOD initialize. + IF mv_initialized = abap_false. + refresh( ). + ENDIF. + ENDMETHOD. + + METHOD status. + + initialize( ). + + IF lines( mt_status ) = 0. + mt_status = lcl_file_status=>status( io_repo = me + io_log = io_log ). + ENDIF. + rt_results = mt_status. + + ENDMETHOD. "status + + METHOD deserialize. + + IF ms_data-write_protect = abap_true. + lcx_exception=>raise( 'Cannot deserialize. Local code is write-protected by repo config' ). + ENDIF. + + initialize( ). + + super->deserialize( ). + + set( iv_sha1 = mv_branch ). + + reset_status( ). + + COMMIT WORK AND WAIT. + + ENDMETHOD. "deserialize + + METHOD reset_status. + CLEAR mt_status. + ENDMETHOD. " reset_status. + + METHOD refresh. + + super->refresh( iv_drop_cache ). + reset_status( ). + + lcl_progress=>show( iv_key = 'Fetch' + iv_current = 1 + iv_total = 1 + iv_text = 'Remote files' ) ##NO_TEXT. + + lcl_git_porcelain=>pull( EXPORTING io_repo = me + IMPORTING et_files = mt_remote + et_objects = mt_objects + ev_branch = mv_branch ). + + mo_branches = lcl_git_transport=>branches( get_url( ) ). + actualize_head_branch( ). + + find_dot_abapgit( ). + + mv_initialized = abap_true. + + ENDMETHOD. "refresh + + METHOD actualize_head_branch. + DATA lv_branch_name TYPE string. + lv_branch_name = mo_branches->get_head( )-name. + + IF lv_branch_name <> ms_data-head_branch. + set( iv_head_branch = lv_branch_name ). + ENDIF. + + ENDMETHOD. "actualize_head_branch + + METHOD get_sha1_remote. + initialize( ). + + rv_sha1 = mv_branch. + ENDMETHOD. "get_sha1_remote + + METHOD get_files_remote. + initialize( ). + + rt_files = mt_remote. + ENDMETHOD. "get_files + + METHOD get_objects. + initialize( ). + + rt_objects = mt_objects. + ENDMETHOD. "get_objects + + METHOD get_url. + rv_url = ms_data-url. + ENDMETHOD. "get_url + + METHOD get_branch_name. + rv_name = ms_data-branch_name. + ENDMETHOD. "get_branch_name + + METHOD get_head_branch_name. + rv_name = ms_data-head_branch. + ENDMETHOD. "get_head_branch_name + + METHOD get_branches. + IF mo_branches IS NOT BOUND. + mo_branches = lcl_git_transport=>branches( get_url( ) ). + ENDIF. + ro_branches = mo_branches. + ENDMETHOD. "get_branches + + METHOD set_url. + + IF ms_data-write_protect = abap_true. + lcx_exception=>raise( 'Cannot change URL. Local code is write-protected by repo config' ). + ENDIF. + + mv_initialized = abap_false. + set( iv_url = iv_url ). + + ENDMETHOD. + + METHOD set_branch_name. + + IF ms_data-write_protect = abap_true. + lcx_exception=>raise( 'Cannot switch branch. Local code is write-protected by repo config' ). + ENDIF. + + mv_initialized = abap_false. + set( iv_branch_name = iv_branch_name ). + + ENDMETHOD. + + METHOD set_new_remote. + + IF ms_data-write_protect = abap_true. + lcx_exception=>raise( 'Cannot change remote. Local code is write-protected by repo config' ). + ENDIF. + + mv_initialized = abap_false. + set( iv_url = iv_url + iv_branch_name = iv_branch_name + iv_head_branch = '' + iv_sha1 = '' ). + + ENDMETHOD. "set_new_remote + + METHOD get_sha1_local. + rv_sha1 = ms_data-sha1. + ENDMETHOD. "get_sha1_local + + METHOD push. + + DATA: lv_branch TYPE ty_sha1, + lt_updated_files TYPE ty_file_signatures_tt. + + + handle_stage_ignore( io_stage ). + + lcl_git_porcelain=>push( EXPORTING is_comment = is_comment + io_repo = me + io_stage = io_stage + IMPORTING ev_branch = lv_branch + et_updated_files = lt_updated_files ). + + IF io_stage->get_branch_sha1( ) = get_sha1_local( ). +* pushing to the branch currently represented by this repository object + set( iv_sha1 = lv_branch ). + ENDIF. + + refresh( ). + update_local_checksums( lt_updated_files ). + + IF lcl_stage_logic=>count( me ) = 0. + set( iv_sha1 = lv_branch ). + ENDIF. + + ENDMETHOD. "push + + METHOD handle_stage_ignore. + + DATA: lv_add TYPE abap_bool, + lt_stage TYPE lcl_stage=>ty_stage_tt. + + FIELD-SYMBOLS: LIKE LINE OF lt_stage. + + + lt_stage = io_stage->get_all( ). + LOOP AT lt_stage ASSIGNING WHERE method = lcl_stage=>c_method-ignore. + + mo_dot_abapgit->add_ignore( + iv_path = -file-path + iv_filename = -file-filename ). + + " remove it from the staging object, as the action is handled here + io_stage->reset( iv_path = -file-path + iv_filename = -file-filename ). + + lv_add = abap_true. + + ENDLOOP. + + IF lv_add = abap_true. + io_stage->add( + iv_path = gc_root_dir + iv_filename = gc_dot_abapgit + iv_data = mo_dot_abapgit->serialize( ) ). + ENDIF. + + ENDMETHOD. + + METHOD rebuild_local_checksums. "REMOTE + + DATA: lt_remote TYPE ty_files_tt, + lt_local TYPE ty_files_item_tt, + ls_last_item TYPE ty_item, + lv_branch_equal TYPE abap_bool, + lt_checksums TYPE lcl_persistence_repo=>ty_local_checksum_tt. + + FIELD-SYMBOLS: LIKE LINE OF lt_checksums, + LIKE LINE OF -files, + LIKE LINE OF lt_remote, + LIKE LINE OF lt_local. + + lt_remote = get_files_remote( ). + lt_local = get_files_local( ). + lv_branch_equal = boolc( get_sha1_remote( ) = get_sha1_local( ) ). + + DELETE lt_local " Remove non-code related files except .abapgit + WHERE item IS INITIAL + AND NOT ( file-path = gc_root_dir AND file-filename = gc_dot_abapgit ). + + SORT lt_local BY item. + SORT lt_remote BY path filename. + + LOOP AT lt_local ASSIGNING . + IF ls_last_item <> -item OR sy-tabix = 1. " First or New item reached ? + APPEND INITIAL LINE TO lt_checksums ASSIGNING . + -item = -item. + ls_last_item = -item. + ENDIF. + + READ TABLE lt_remote ASSIGNING + WITH KEY path = -file-path filename = -file-filename + BINARY SEARCH. + CHECK sy-subrc = 0. " Ignore new ones + + APPEND INITIAL LINE TO -files ASSIGNING . + MOVE-CORRESPONDING -file TO . + + " If hashes are equal -> local sha1 is OK + " Else if R-branch is ahead -> assume changes were remote, state - local sha1 + " Else (branches equal) -> assume changes were local, state - remote sha1 + IF -file-sha1 <> -sha1 AND lv_branch_equal = abap_true. + -sha1 = -sha1. + ENDIF. + ENDLOOP. + + set( it_checksums = lt_checksums ). + reset_status( ). + + ENDMETHOD. " rebuild_local_checksums. + +ENDCLASS. "lcl_repo_online IMPLEMENTATION + +*----------------------------------------------------------------------* +* CLASS lcl_repo IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_repo IMPLEMENTATION. + + METHOD constructor. + + ASSERT NOT is_data-key IS INITIAL. + + ms_data = is_data. + + ENDMETHOD. "constructor + + METHOD find_dot_abapgit. + + FIELD-SYMBOLS: LIKE LINE OF mt_remote. + + + READ TABLE mt_remote ASSIGNING + WITH KEY path = gc_root_dir + filename = gc_dot_abapgit. + IF sy-subrc = 0. + mo_dot_abapgit = lcl_dot_abapgit=>deserialize( -data ). + ENDIF. + + ENDMETHOD. + + METHOD get_files_remote. + rt_files = mt_remote. + ENDMETHOD. + + METHOD set. + + DATA: lo_persistence TYPE REF TO lcl_persistence_repo. + + + ASSERT iv_sha1 IS SUPPLIED + OR it_checksums IS SUPPLIED + OR iv_url IS SUPPLIED + OR iv_branch_name IS SUPPLIED + OR iv_head_branch IS SUPPLIED + OR iv_offline IS SUPPLIED. + + CREATE OBJECT lo_persistence. + + IF iv_sha1 IS SUPPLIED. + lo_persistence->update_sha1( + iv_key = ms_data-key + iv_branch_sha1 = iv_sha1 ). + ms_data-sha1 = iv_sha1. + ENDIF. + + IF it_checksums IS SUPPLIED. + lo_persistence->update_local_checksums( + iv_key = ms_data-key + it_checksums = it_checksums ). + ms_data-local_checksums = it_checksums. + ENDIF. + + IF iv_url IS SUPPLIED. + lo_persistence->update_url( + iv_key = ms_data-key + iv_url = iv_url ). + ms_data-url = iv_url. + ENDIF. + + IF iv_branch_name IS SUPPLIED. + lo_persistence->update_branch_name( + iv_key = ms_data-key + iv_branch_name = iv_branch_name ). + ms_data-branch_name = iv_branch_name. + ENDIF. + + IF iv_head_branch IS SUPPLIED. + lo_persistence->update_head_branch( + iv_key = ms_data-key + iv_head_branch = iv_head_branch ). + ms_data-head_branch = iv_head_branch. + ENDIF. + + IF iv_offline IS SUPPLIED. + lo_persistence->update_offline( + iv_key = ms_data-key + iv_offline = iv_offline ). + ms_data-offline = iv_offline. + ENDIF. + + ENDMETHOD. "set_sha1 + + METHOD update_local_checksums. + + " ASSUMTION: SHA1 in param is actual and correct. + " Push fills it from local files before pushing, deserialize from remote + " If this is not true that there is an error somewhere but not here + + DATA: lt_checksums TYPE lcl_persistence_repo=>ty_local_checksum_tt, + lt_files_idx TYPE ty_file_signatures_tt, + lt_local TYPE ty_files_item_tt, + lv_chks_row TYPE i, + lv_file_row TYPE i. + + FIELD-SYMBOLS: LIKE LINE OF lt_checksums, + LIKE LINE OF -files, + LIKE LINE OF lt_local, + LIKE LINE OF it_files. + + lt_checksums = get_local_checksums( ). + lt_files_idx = it_files. + SORT lt_files_idx BY path filename. " Sort for binary search + + " Loop through current chacksum state, update sha1 for common files + LOOP AT lt_checksums ASSIGNING . + lv_chks_row = sy-tabix. + + LOOP AT -files ASSIGNING . + lv_file_row = sy-tabix. + + READ TABLE lt_files_idx ASSIGNING + WITH KEY path = -path filename = -filename + BINARY SEARCH. + CHECK sy-subrc = 0. " Missing in param table, skip + + IF -sha1 IS INITIAL. " Empty input sha1 is a deletion marker + DELETE -files INDEX lv_file_row. + ELSE. + -sha1 = -sha1. " Update sha1 + CLEAR -sha1. " Mark as processed + ENDIF. + ENDLOOP. + + IF lines( -files ) = 0. " Remove empty objects + DELETE lt_checksums INDEX lv_chks_row. + ENDIF. + ENDLOOP. + + DELETE lt_files_idx WHERE sha1 IS INITIAL. " Remove processed + IF lines( lt_files_idx ) > 0. + lt_local = get_files_local( ). + SORT lt_local BY file-path file-filename. " Sort for binary search + ENDIF. + + " Add new files - not deleted and not marked as processed above + LOOP AT lt_files_idx ASSIGNING . + + READ TABLE lt_local ASSIGNING + WITH KEY file-path = -path file-filename = -filename + BINARY SEARCH. + IF sy-subrc <> 0. +* if the deserialization fails, the local file might not be there + CONTINUE. + ENDIF. + + READ TABLE lt_checksums ASSIGNING " TODO Optimize + WITH KEY item = -item. + IF sy-subrc > 0. + APPEND INITIAL LINE TO lt_checksums ASSIGNING . + -item = -item. + ENDIF. + + APPEND TO -files. + ENDLOOP. + + SORT lt_checksums BY item. + set( it_checksums = lt_checksums ). + + ENDMETHOD. " update_local_checksums + + METHOD deserialize. + + DATA: lt_updated_files TYPE ty_file_signatures_tt. + + IF mo_dot_abapgit IS INITIAL. + mo_dot_abapgit = lcl_dot_abapgit=>build_default( ms_data-master_language ). + ENDIF. + IF mo_dot_abapgit->get_master_language( ) <> sy-langu. + lcx_exception=>raise( 'Current login language does not match master language' ). + ENDIF. + + lt_updated_files = lcl_objects=>deserialize( me ). + APPEND mo_dot_abapgit->get_signature( ) TO lt_updated_files. + + CLEAR: mt_local, mv_last_serialization. + + update_local_checksums( lt_updated_files ). + + ENDMETHOD. + + METHOD get_local_checksums. + rt_checksums = ms_data-local_checksums. + ENDMETHOD. + + METHOD get_local_checksums_per_file. + + FIELD-SYMBOLS LIKE LINE OF ms_data-local_checksums. + + LOOP AT ms_data-local_checksums ASSIGNING . + APPEND LINES OF -files TO rt_checksums. + ENDLOOP. + + ENDMETHOD. + + METHOD get_files_local. + + DATA: lt_tadir TYPE ty_tadir_tt, + ls_item TYPE ty_item, + lt_files TYPE ty_files_tt, + lt_cache TYPE SORTED TABLE OF ty_file_item + WITH NON-UNIQUE KEY item. + + DATA: lt_filter TYPE SORTED TABLE OF tadir + WITH NON-UNIQUE KEY object obj_name, + lv_filter_exist TYPE abap_bool. + + FIELD-SYMBOLS: LIKE LINE OF lt_files, + LIKE LINE OF rt_files, + LIKE LINE OF lt_cache, + LIKE LINE OF lt_tadir. + + + " Serialization happened before and no refresh request + IF mv_last_serialization IS NOT INITIAL AND mv_do_local_refresh = abap_false. + rt_files = mt_local. + RETURN. + ENDIF. + + IF mo_dot_abapgit IS INITIAL. + mo_dot_abapgit = lcl_dot_abapgit=>build_default( ms_data-master_language ). + ENDIF. + APPEND INITIAL LINE TO rt_files ASSIGNING . + -file-path = gc_root_dir. + -file-filename = gc_dot_abapgit. + -file-data = mo_dot_abapgit->serialize( ). + -file-sha1 = lcl_hash=>sha1( iv_type = gc_type-blob + iv_data = -file-data ). + + lt_cache = mt_local. + lt_tadir = lcl_tadir=>read( get_package( ) ). + + lt_filter = it_filter. + lv_filter_exist = boolc( lines( lt_filter ) > 0 ) . + + LOOP AT lt_tadir ASSIGNING . + IF lv_filter_exist = abap_true. + READ TABLE lt_filter TRANSPORTING NO FIELDS WITH KEY object = -object + obj_name = -obj_name + BINARY SEARCH. + IF sy-subrc <> 0. + CONTINUE. + ENDIF. + ENDIF. + + lcl_progress=>show( iv_key = 'Serialize' + iv_current = sy-tabix + iv_total = lines( lt_tadir ) + iv_text = -obj_name ) ##NO_TEXT. + + ls_item-obj_type = -object. + ls_item-obj_name = -obj_name. + ls_item-devclass = -devclass. + + IF mv_last_serialization IS NOT INITIAL. " Try to fetch from cache + READ TABLE lt_cache TRANSPORTING NO FIELDS + 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 ). + LOOP AT lt_cache ASSIGNING WHERE item = ls_item. + APPEND TO rt_files. + ENDLOOP. + + CONTINUE. + ENDIF. + ENDIF. + + lt_files = lcl_objects=>serialize( + is_item = ls_item + iv_language = get_master_language( ) + io_log = io_log ). + LOOP AT lt_files ASSIGNING . + -path = mo_dot_abapgit->get_starting_folder( ) && -path. + -sha1 = lcl_hash=>sha1( iv_type = gc_type-blob iv_data = -data ). + + APPEND INITIAL LINE TO rt_files ASSIGNING . + -file = . + -item = ls_item. + ENDLOOP. + ENDLOOP. + + GET TIME STAMP FIELD mv_last_serialization. + mt_local = rt_files. + mv_do_local_refresh = abap_false. " Fulfill refresh + + ENDMETHOD. + + METHOD get_dot_abapgit. + ro_dot_abapgit = mo_dot_abapgit. + ENDMETHOD. + + METHOD delete. + + DATA: lo_persistence TYPE REF TO lcl_persistence_repo. + + + CREATE OBJECT lo_persistence. + + lo_persistence->delete( ms_data-key ). + + ENDMETHOD. "delete + + METHOD is_offline. + rv_offline = ms_data-offline. + ENDMETHOD. + + METHOD refresh. + + mv_do_local_refresh = abap_true. + + IF iv_drop_cache = abap_true. + CLEAR: mv_last_serialization, mt_local. + ENDIF. + + ENDMETHOD. "refresh + + METHOD refresh_local. " For testing purposes, maybe removed later + mv_do_local_refresh = abap_true. + ENDMETHOD. "refresh_local + + METHOD get_package. + rv_package = ms_data-package. + ENDMETHOD. "get_package + + METHOD get_master_language. + rv_language = ms_data-master_language. + ENDMETHOD. + + METHOD get_key. + rv_key = ms_data-key. + ENDMETHOD. "get_key + + METHOD get_name. + + IF ms_data-offline = abap_true. + rv_name = ms_data-url. + ELSE. + rv_name = lcl_url=>name( ms_data-url ). + rv_name = cl_http_utility=>if_http_utility~unescape_url( rv_name ). + ENDIF. + + ENDMETHOD. "get_name + + METHOD is_write_protected. + rv_yes = ms_data-write_protect. + ENDMETHOD. "is_write_protected + + METHOD rebuild_local_checksums. "LOCAL (BASE) + + DATA: lt_local TYPE ty_files_item_tt, + ls_last_item TYPE ty_item, + lt_checksums TYPE lcl_persistence_repo=>ty_local_checksum_tt. + + FIELD-SYMBOLS: LIKE LINE OF lt_checksums, + LIKE LINE OF -files, + LIKE LINE OF lt_local. + + lt_local = get_files_local( ). + + DELETE lt_local " Remove non-code related files except .abapgit + WHERE item IS INITIAL + AND NOT ( file-path = gc_root_dir AND file-filename = gc_dot_abapgit ). + + SORT lt_local BY item. + + LOOP AT lt_local ASSIGNING . + IF ls_last_item <> -item OR sy-tabix = 1. " First or New item reached ? + APPEND INITIAL LINE TO lt_checksums ASSIGNING . + -item = -item. + ls_last_item = -item. + ENDIF. + + APPEND INITIAL LINE TO -files ASSIGNING . + MOVE-CORRESPONDING -file TO . + + ENDLOOP. + + set( it_checksums = lt_checksums ). + + ENDMETHOD. " rebuild_local_checksums. + +ENDCLASS. "lcl_repo IMPLEMENTATION + +*----------------------------------------------------------------------* +* CLASS lcl_repo_srv IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_repo_srv IMPLEMENTATION. + + METHOD constructor. + CREATE OBJECT mo_persistence. + ENDMETHOD. "class_constructor + + METHOD list. + + IF mv_init = abap_false. + refresh( ). + ENDIF. + + rt_list = mt_list. + + ENDMETHOD. "list + + METHOD get. + + FIELD-SYMBOLS: LIKE LINE OF mt_list. + + + IF mv_init = abap_false. + refresh( ). + ENDIF. + + LOOP AT mt_list ASSIGNING . + IF ->get_key( ) = iv_key. + ro_repo = . + RETURN. + ENDIF. + ENDLOOP. + + lcx_exception=>raise( 'repo not found, get' ). + + ENDMETHOD. "get + + METHOD refresh. + + DATA: lt_list TYPE lcl_persistence_repo=>tt_repo, + lo_online TYPE REF TO lcl_repo_online, + lo_offline TYPE REF TO lcl_repo_offline. + + FIELD-SYMBOLS: LIKE LINE OF lt_list. + + + CLEAR mt_list. + + lt_list = mo_persistence->list( ). + LOOP AT lt_list ASSIGNING . + IF -offline = abap_false. + CREATE OBJECT lo_online + EXPORTING + is_data = . + APPEND lo_online TO mt_list. + ELSE. + CREATE OBJECT lo_offline + EXPORTING + is_data = . + APPEND lo_offline TO mt_list. + ENDIF. + ENDLOOP. + + mv_init = abap_true. + + ENDMETHOD. "refresh + + METHOD new_online. + + DATA: ls_repo TYPE lcl_persistence_repo=>ty_repo, + lv_key TYPE lcl_persistence_repo=>ty_repo-key. + + + validate_package( iv_package ). + + lv_key = mo_persistence->add( + iv_url = iv_url + iv_branch_name = iv_branch_name + iv_package = iv_package + iv_offline = abap_false ). + + TRY. + ls_repo = mo_persistence->read( lv_key ). + CATCH lcx_not_found. + lcx_exception=>raise( 'new_online not found' ). + ENDTRY. + + CREATE OBJECT ro_repo + EXPORTING + is_data = ls_repo. + + add( ro_repo ). + + ENDMETHOD. "new_online + + METHOD new_offline. + + DATA: ls_repo TYPE lcl_persistence_repo=>ty_repo, + lv_key TYPE lcl_persistence_repo=>ty_repo-key. + + + validate_package( iv_package ). + + lv_key = mo_persistence->add( + iv_url = iv_url + iv_branch_name = '' + iv_package = iv_package + iv_offline = abap_true ). + + TRY. + ls_repo = mo_persistence->read( lv_key ). + CATCH lcx_not_found. + lcx_exception=>raise( 'new_offline not found' ). + ENDTRY. + + CREATE OBJECT ro_repo + EXPORTING + is_data = ls_repo. + + add( ro_repo ). + + ENDMETHOD. "new_offline + + METHOD add. + + DATA: lo_repo LIKE LINE OF mt_list. + + + LOOP AT mt_list INTO lo_repo. + IF lo_repo->get_key( ) = io_repo->get_key( ). + IF lo_repo = io_repo. + RETURN. + ENDIF. + lcx_exception=>raise( 'identical keys' ). + ENDIF. + ENDLOOP. + + APPEND io_repo TO mt_list. + + ENDMETHOD. "add + + METHOD validate_package. + + DATA: lv_devclass TYPE tdevc-devclass, + lt_repos TYPE lcl_persistence_repo=>tt_repo. + + + IF iv_package IS INITIAL. + lcx_exception=>raise( 'add, package empty' ). + ENDIF. + + IF iv_package = '$TMP'. + lcx_exception=>raise( 'not possible to use $TMP, create new (local) package' ). + ENDIF. + + SELECT SINGLE devclass FROM tdevc INTO lv_devclass + WHERE devclass = iv_package + AND as4user <> 'SAP'. "#EC CI_GENBUFF + IF sy-subrc <> 0. + lcx_exception=>raise( 'package not found or not allowed' ). + ENDIF. + + " make sure its not already in use for a different repository + lt_repos = mo_persistence->list( ). + READ TABLE lt_repos WITH KEY package = iv_package TRANSPORTING NO FIELDS. + IF sy-subrc = 0. + lcx_exception=>raise( 'Package already in use' ). + ENDIF. + + ENDMETHOD. "validate_package + + METHOD delete. + + io_repo->delete( ). + + DELETE TABLE mt_list FROM io_repo. + ASSERT sy-subrc = 0. + + ENDMETHOD. "delete + + METHOD is_repo_installed. + + DATA: lt_repo TYPE lcl_repo_srv=>ty_repo_tt, + lo_repo TYPE REF TO lcl_repo, + lv_url TYPE string, + lv_package TYPE devclass, + lo_repo_online TYPE REF TO lcl_repo_online, + lv_err TYPE string. + + lt_repo = list( ). + + LOOP AT lt_repo INTO lo_repo. + CHECK lo_repo->is_offline( ) = abap_false. + lo_repo_online ?= lo_repo. + + lv_url = lo_repo_online->get_url( ). + lv_package = lo_repo_online->get_package( ). + CHECK to_upper( lv_url ) = to_upper( iv_url ). + + " Validate bindings + "TODO refactor: move this message out of this method + IF iv_target_package IS NOT INITIAL AND iv_target_package <> lv_package. + lv_err = |Installation to package { lv_package } detected. | + && |Cancelling installation|. + lcx_exception=>raise( lv_err ). + ENDIF. + + rv_installed = abap_true. + EXIT. + ENDLOOP. + + ENDMETHOD. "is_repo_installed + + METHOD switch_repo_type. + + DATA lo_repo TYPE REF TO lcl_repo. + + FIELD-SYMBOLS LIKE LINE OF mt_list. + + lo_repo = get( iv_key ). + READ TABLE mt_list ASSIGNING FROM lo_repo. + ASSERT sy-subrc IS INITIAL. + ASSERT iv_offline <> lo_repo->ms_data-offline. + + IF iv_offline = abap_true. " On-line -> OFFline + lo_repo->set( + iv_url = lcl_url=>name( lo_repo->ms_data-url ) + iv_branch_name = '' + iv_sha1 = '' + iv_head_branch = '' + iv_offline = abap_true ). + CREATE OBJECT TYPE lcl_repo_offline + EXPORTING + is_data = lo_repo->ms_data. + ELSE. " OFFline -> On-line + lo_repo->set( iv_offline = abap_false ). + CREATE OBJECT TYPE lcl_repo_online + EXPORTING + is_data = lo_repo->ms_data. + ENDIF. + + ENDMETHOD. "switch_repo_type + +ENDCLASS. "lcl_repo_srv IMPLEMENTATION From cb021acb566cadc38566729ebca9fbd6d7d7f9ee Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Fri, 20 Jan 2017 18:25:14 -0500 Subject: [PATCH 068/142] Filter logic improvement when serializing --- src/zabapgit_repo_impl.prog.abap | 36 ++++++++++++++++---------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 8c20cf998..36b8f7cce 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -504,17 +504,18 @@ CLASS lcl_repo IMPLEMENTATION. DATA: lt_tadir TYPE ty_tadir_tt, ls_item TYPE ty_item, - lt_files TYPE ty_files_tt. + lt_files TYPE ty_files_tt, + lt_cache TYPE SORTED TABLE OF ty_file_item + WITH NON-UNIQUE KEY item. - DATA: lt_cache TYPE SORTED TABLE OF ty_file_item - WITH NON-UNIQUE KEY item, - lt_tadir_aux LIKE lt_tadir. + DATA: lt_filter TYPE SORTED TABLE OF tadir + WITH NON-UNIQUE KEY object obj_name, + lv_filter_exist TYPE abap_bool. FIELD-SYMBOLS: LIKE LINE OF lt_files, LIKE LINE OF rt_files, LIKE LINE OF lt_cache, - LIKE LINE OF lt_tadir, - LIKE LINE OF it_filter. + LIKE LINE OF lt_tadir. " Serialization happened before and no refresh request @@ -536,19 +537,18 @@ CLASS lcl_repo IMPLEMENTATION. lt_cache = mt_local. lt_tadir = lcl_tadir=>read( get_package( ) ). - IF it_filter[] IS INITIAL. - lt_tadir_aux[] = lt_tadir[]. - ELSE. - LOOP AT it_filter ASSIGNING . - READ TABLE lt_tadir ASSIGNING WITH KEY object = -object - obj_name = -obj_name. - IF sy-subrc = 0. - APPEND TO lt_tadir_aux. - ENDIF. - ENDLOOP. - ENDIF. + lt_filter = it_filter. + lv_filter_exist = boolc( lines( lt_filter ) > 0 ) . - LOOP AT lt_tadir_aux ASSIGNING . + LOOP AT lt_tadir ASSIGNING . + IF lv_filter_exist = abap_true. + READ TABLE lt_filter TRANSPORTING NO FIELDS WITH KEY object = -object + obj_name = -obj_name + BINARY SEARCH. + IF sy-subrc <> 0. + CONTINUE. + ENDIF. + ENDIF. lcl_progress=>show( iv_key = 'Serialize' iv_current = sy-tabix From 3adc8ca9fd163901c443419595278f856d1b784a Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Fri, 20 Jan 2017 18:34:21 -0500 Subject: [PATCH 069/142] Update zabapgit_app_impl.prog.abap --- src/zabapgit_app_impl.prog.abap | 971 ++------------------------------ 1 file changed, 50 insertions(+), 921 deletions(-) diff --git a/src/zabapgit_app_impl.prog.abap b/src/zabapgit_app_impl.prog.abap index 36b8f7cce..f41691290 100644 --- a/src/zabapgit_app_impl.prog.abap +++ b/src/zabapgit_app_impl.prog.abap @@ -1,941 +1,70 @@ *&---------------------------------------------------------------------* -*& Include ZABAPGIT_REPO_IMPL +*& Include ZABAPGIT_APP_IMPL *&---------------------------------------------------------------------* *----------------------------------------------------------------------* -* CLASS lcl_repo_offline IMPLEMENTATION +* CLASS lcl_app IMPLEMENTATION *----------------------------------------------------------------------* -CLASS lcl_repo_offline IMPLEMENTATION. +CLASS lcl_app IMPLEMENTATION. - METHOD set_files_remote. + METHOD run. - mt_remote = it_files. - - find_dot_abapgit( ). - - ENDMETHOD. - -ENDCLASS. "lcl_repo_offline IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_repo_online IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_repo_online IMPLEMENTATION. - - METHOD constructor. - - super->constructor( is_data ). - - mv_initialized = abap_false. - - ENDMETHOD. "constructor - - METHOD initialize. - IF mv_initialized = abap_false. - refresh( ). - ENDIF. - ENDMETHOD. - - METHOD status. - - initialize( ). - - IF lines( mt_status ) = 0. - mt_status = lcl_file_status=>status( io_repo = me - io_log = io_log ). - ENDIF. - rt_results = mt_status. - - ENDMETHOD. "status - - METHOD deserialize. - - IF ms_data-write_protect = abap_true. - lcx_exception=>raise( 'Cannot deserialize. Local code is write-protected by repo config' ). - ENDIF. - - initialize( ). - - super->deserialize( ). - - set( iv_sha1 = mv_branch ). - - reset_status( ). - - COMMIT WORK AND WAIT. - - ENDMETHOD. "deserialize - - METHOD reset_status. - CLEAR mt_status. - ENDMETHOD. " reset_status. - - METHOD refresh. - - super->refresh( iv_drop_cache ). - reset_status( ). - - lcl_progress=>show( iv_key = 'Fetch' - iv_current = 1 - iv_total = 1 - iv_text = 'Remote files' ) ##NO_TEXT. - - lcl_git_porcelain=>pull( EXPORTING io_repo = me - IMPORTING et_files = mt_remote - et_objects = mt_objects - ev_branch = mv_branch ). - - mo_branches = lcl_git_transport=>branches( get_url( ) ). - actualize_head_branch( ). - - find_dot_abapgit( ). - - mv_initialized = abap_true. - - ENDMETHOD. "refresh - - METHOD actualize_head_branch. - DATA lv_branch_name TYPE string. - lv_branch_name = mo_branches->get_head( )-name. - - IF lv_branch_name <> ms_data-head_branch. - set( iv_head_branch = lv_branch_name ). - ENDIF. - - ENDMETHOD. "actualize_head_branch - - METHOD get_sha1_remote. - initialize( ). - - rv_sha1 = mv_branch. - ENDMETHOD. "get_sha1_remote - - METHOD get_files_remote. - initialize( ). - - rt_files = mt_remote. - ENDMETHOD. "get_files - - METHOD get_objects. - initialize( ). - - rt_objects = mt_objects. - ENDMETHOD. "get_objects - - METHOD get_url. - rv_url = ms_data-url. - ENDMETHOD. "get_url - - METHOD get_branch_name. - rv_name = ms_data-branch_name. - ENDMETHOD. "get_branch_name - - METHOD get_head_branch_name. - rv_name = ms_data-head_branch. - ENDMETHOD. "get_head_branch_name - - METHOD get_branches. - IF mo_branches IS NOT BOUND. - mo_branches = lcl_git_transport=>branches( get_url( ) ). - ENDIF. - ro_branches = mo_branches. - ENDMETHOD. "get_branches - - METHOD set_url. - - IF ms_data-write_protect = abap_true. - lcx_exception=>raise( 'Cannot change URL. Local code is write-protected by repo config' ). - ENDIF. - - mv_initialized = abap_false. - set( iv_url = iv_url ). - - ENDMETHOD. - - METHOD set_branch_name. - - IF ms_data-write_protect = abap_true. - lcx_exception=>raise( 'Cannot switch branch. Local code is write-protected by repo config' ). - ENDIF. - - mv_initialized = abap_false. - set( iv_branch_name = iv_branch_name ). - - ENDMETHOD. - - METHOD set_new_remote. - - IF ms_data-write_protect = abap_true. - lcx_exception=>raise( 'Cannot change remote. Local code is write-protected by repo config' ). - ENDIF. - - mv_initialized = abap_false. - set( iv_url = iv_url - iv_branch_name = iv_branch_name - iv_head_branch = '' - iv_sha1 = '' ). - - ENDMETHOD. "set_new_remote - - METHOD get_sha1_local. - rv_sha1 = ms_data-sha1. - ENDMETHOD. "get_sha1_local - - METHOD push. - - DATA: lv_branch TYPE ty_sha1, - lt_updated_files TYPE ty_file_signatures_tt. - - - handle_stage_ignore( io_stage ). - - lcl_git_porcelain=>push( EXPORTING is_comment = is_comment - io_repo = me - io_stage = io_stage - IMPORTING ev_branch = lv_branch - et_updated_files = lt_updated_files ). - - IF io_stage->get_branch_sha1( ) = get_sha1_local( ). -* pushing to the branch currently represented by this repository object - set( iv_sha1 = lv_branch ). - ENDIF. - - refresh( ). - update_local_checksums( lt_updated_files ). - - IF lcl_stage_logic=>count( me ) = 0. - set( iv_sha1 = lv_branch ). - ENDIF. - - ENDMETHOD. "push - - METHOD handle_stage_ignore. - - DATA: lv_add TYPE abap_bool, - lt_stage TYPE lcl_stage=>ty_stage_tt. - - FIELD-SYMBOLS: LIKE LINE OF lt_stage. - - - lt_stage = io_stage->get_all( ). - LOOP AT lt_stage ASSIGNING WHERE method = lcl_stage=>c_method-ignore. - - mo_dot_abapgit->add_ignore( - iv_path = -file-path - iv_filename = -file-filename ). - - " remove it from the staging object, as the action is handled here - io_stage->reset( iv_path = -file-path - iv_filename = -file-filename ). - - lv_add = abap_true. - - ENDLOOP. - - IF lv_add = abap_true. - io_stage->add( - iv_path = gc_root_dir - iv_filename = gc_dot_abapgit - iv_data = mo_dot_abapgit->serialize( ) ). - ENDIF. - - ENDMETHOD. - - METHOD rebuild_local_checksums. "REMOTE - - DATA: lt_remote TYPE ty_files_tt, - lt_local TYPE ty_files_item_tt, - ls_last_item TYPE ty_item, - lv_branch_equal TYPE abap_bool, - lt_checksums TYPE lcl_persistence_repo=>ty_local_checksum_tt. - - FIELD-SYMBOLS: LIKE LINE OF lt_checksums, - LIKE LINE OF -files, - LIKE LINE OF lt_remote, - LIKE LINE OF lt_local. - - lt_remote = get_files_remote( ). - lt_local = get_files_local( ). - lv_branch_equal = boolc( get_sha1_remote( ) = get_sha1_local( ) ). - - DELETE lt_local " Remove non-code related files except .abapgit - WHERE item IS INITIAL - AND NOT ( file-path = gc_root_dir AND file-filename = gc_dot_abapgit ). - - SORT lt_local BY item. - SORT lt_remote BY path filename. - - LOOP AT lt_local ASSIGNING . - IF ls_last_item <> -item OR sy-tabix = 1. " First or New item reached ? - APPEND INITIAL LINE TO lt_checksums ASSIGNING . - -item = -item. - ls_last_item = -item. - ENDIF. - - READ TABLE lt_remote ASSIGNING - WITH KEY path = -file-path filename = -file-filename - BINARY SEARCH. - CHECK sy-subrc = 0. " Ignore new ones - - APPEND INITIAL LINE TO -files ASSIGNING . - MOVE-CORRESPONDING -file TO . - - " If hashes are equal -> local sha1 is OK - " Else if R-branch is ahead -> assume changes were remote, state - local sha1 - " Else (branches equal) -> assume changes were local, state - remote sha1 - IF -file-sha1 <> -sha1 AND lv_branch_equal = abap_true. - -sha1 = -sha1. - ENDIF. - ENDLOOP. - - set( it_checksums = lt_checksums ). - reset_status( ). - - ENDMETHOD. " rebuild_local_checksums. - -ENDCLASS. "lcl_repo_online IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_repo IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_repo IMPLEMENTATION. - - METHOD constructor. - - ASSERT NOT is_data-key IS INITIAL. - - ms_data = is_data. - - ENDMETHOD. "constructor - - METHOD find_dot_abapgit. - - FIELD-SYMBOLS: LIKE LINE OF mt_remote. - - - READ TABLE mt_remote ASSIGNING - WITH KEY path = gc_root_dir - filename = gc_dot_abapgit. - IF sy-subrc = 0. - mo_dot_abapgit = lcl_dot_abapgit=>deserialize( -data ). - ENDIF. - - ENDMETHOD. - - METHOD get_files_remote. - rt_files = mt_remote. - ENDMETHOD. - - METHOD set. - - DATA: lo_persistence TYPE REF TO lcl_persistence_repo. - - - ASSERT iv_sha1 IS SUPPLIED - OR it_checksums IS SUPPLIED - OR iv_url IS SUPPLIED - OR iv_branch_name IS SUPPLIED - OR iv_head_branch IS SUPPLIED - OR iv_offline IS SUPPLIED. - - CREATE OBJECT lo_persistence. - - IF iv_sha1 IS SUPPLIED. - lo_persistence->update_sha1( - iv_key = ms_data-key - iv_branch_sha1 = iv_sha1 ). - ms_data-sha1 = iv_sha1. - ENDIF. - - IF it_checksums IS SUPPLIED. - lo_persistence->update_local_checksums( - iv_key = ms_data-key - it_checksums = it_checksums ). - ms_data-local_checksums = it_checksums. - ENDIF. - - IF iv_url IS SUPPLIED. - lo_persistence->update_url( - iv_key = ms_data-key - iv_url = iv_url ). - ms_data-url = iv_url. - ENDIF. - - IF iv_branch_name IS SUPPLIED. - lo_persistence->update_branch_name( - iv_key = ms_data-key - iv_branch_name = iv_branch_name ). - ms_data-branch_name = iv_branch_name. - ENDIF. - - IF iv_head_branch IS SUPPLIED. - lo_persistence->update_head_branch( - iv_key = ms_data-key - iv_head_branch = iv_head_branch ). - ms_data-head_branch = iv_head_branch. - ENDIF. - - IF iv_offline IS SUPPLIED. - lo_persistence->update_offline( - iv_key = ms_data-key - iv_offline = iv_offline ). - ms_data-offline = iv_offline. - ENDIF. - - ENDMETHOD. "set_sha1 - - METHOD update_local_checksums. - - " ASSUMTION: SHA1 in param is actual and correct. - " Push fills it from local files before pushing, deserialize from remote - " If this is not true that there is an error somewhere but not here - - DATA: lt_checksums TYPE lcl_persistence_repo=>ty_local_checksum_tt, - lt_files_idx TYPE ty_file_signatures_tt, - lt_local TYPE ty_files_item_tt, - lv_chks_row TYPE i, - lv_file_row TYPE i. - - FIELD-SYMBOLS: LIKE LINE OF lt_checksums, - LIKE LINE OF -files, - LIKE LINE OF lt_local, - LIKE LINE OF it_files. - - lt_checksums = get_local_checksums( ). - lt_files_idx = it_files. - SORT lt_files_idx BY path filename. " Sort for binary search - - " Loop through current chacksum state, update sha1 for common files - LOOP AT lt_checksums ASSIGNING . - lv_chks_row = sy-tabix. - - LOOP AT -files ASSIGNING . - lv_file_row = sy-tabix. - - READ TABLE lt_files_idx ASSIGNING - WITH KEY path = -path filename = -filename - BINARY SEARCH. - CHECK sy-subrc = 0. " Missing in param table, skip - - IF -sha1 IS INITIAL. " Empty input sha1 is a deletion marker - DELETE -files INDEX lv_file_row. - ELSE. - -sha1 = -sha1. " Update sha1 - CLEAR -sha1. " Mark as processed - ENDIF. - ENDLOOP. - - IF lines( -files ) = 0. " Remove empty objects - DELETE lt_checksums INDEX lv_chks_row. - ENDIF. - ENDLOOP. - - DELETE lt_files_idx WHERE sha1 IS INITIAL. " Remove processed - IF lines( lt_files_idx ) > 0. - lt_local = get_files_local( ). - SORT lt_local BY file-path file-filename. " Sort for binary search - ENDIF. - - " Add new files - not deleted and not marked as processed above - LOOP AT lt_files_idx ASSIGNING . - - READ TABLE lt_local ASSIGNING - WITH KEY file-path = -path file-filename = -filename - BINARY SEARCH. - IF sy-subrc <> 0. -* if the deserialization fails, the local file might not be there - CONTINUE. - ENDIF. - - READ TABLE lt_checksums ASSIGNING " TODO Optimize - WITH KEY item = -item. - IF sy-subrc > 0. - APPEND INITIAL LINE TO lt_checksums ASSIGNING . - -item = -item. - ENDIF. - - APPEND TO -files. - ENDLOOP. - - SORT lt_checksums BY item. - set( it_checksums = lt_checksums ). - - ENDMETHOD. " update_local_checksums - - METHOD deserialize. - - DATA: lt_updated_files TYPE ty_file_signatures_tt. - - IF mo_dot_abapgit IS INITIAL. - mo_dot_abapgit = lcl_dot_abapgit=>build_default( ms_data-master_language ). - ENDIF. - IF mo_dot_abapgit->get_master_language( ) <> sy-langu. - lcx_exception=>raise( 'Current login language does not match master language' ). - ENDIF. - - lt_updated_files = lcl_objects=>deserialize( me ). - APPEND mo_dot_abapgit->get_signature( ) TO lt_updated_files. - - CLEAR: mt_local, mv_last_serialization. - - update_local_checksums( lt_updated_files ). - - ENDMETHOD. - - METHOD get_local_checksums. - rt_checksums = ms_data-local_checksums. - ENDMETHOD. - - METHOD get_local_checksums_per_file. - - FIELD-SYMBOLS LIKE LINE OF ms_data-local_checksums. - - LOOP AT ms_data-local_checksums ASSIGNING . - APPEND LINES OF -files TO rt_checksums. - ENDLOOP. - - ENDMETHOD. - - METHOD get_files_local. - - DATA: lt_tadir TYPE ty_tadir_tt, - ls_item TYPE ty_item, - lt_files TYPE ty_files_tt, - lt_cache TYPE SORTED TABLE OF ty_file_item - WITH NON-UNIQUE KEY item. - - DATA: lt_filter TYPE SORTED TABLE OF tadir - WITH NON-UNIQUE KEY object obj_name, - lv_filter_exist TYPE abap_bool. - - FIELD-SYMBOLS: LIKE LINE OF lt_files, - LIKE LINE OF rt_files, - LIKE LINE OF lt_cache, - LIKE LINE OF lt_tadir. - - - " Serialization happened before and no refresh request - IF mv_last_serialization IS NOT INITIAL AND mv_do_local_refresh = abap_false. - rt_files = mt_local. - RETURN. - ENDIF. - - IF mo_dot_abapgit IS INITIAL. - mo_dot_abapgit = lcl_dot_abapgit=>build_default( ms_data-master_language ). - ENDIF. - APPEND INITIAL LINE TO rt_files ASSIGNING . - -file-path = gc_root_dir. - -file-filename = gc_dot_abapgit. - -file-data = mo_dot_abapgit->serialize( ). - -file-sha1 = lcl_hash=>sha1( iv_type = gc_type-blob - iv_data = -file-data ). - - lt_cache = mt_local. - lt_tadir = lcl_tadir=>read( get_package( ) ). - - lt_filter = it_filter. - lv_filter_exist = boolc( lines( lt_filter ) > 0 ) . - - LOOP AT lt_tadir ASSIGNING . - IF lv_filter_exist = abap_true. - READ TABLE lt_filter TRANSPORTING NO FIELDS WITH KEY object = -object - obj_name = -obj_name - BINARY SEARCH. - IF sy-subrc <> 0. - CONTINUE. - ENDIF. - ENDIF. - - lcl_progress=>show( iv_key = 'Serialize' - iv_current = sy-tabix - iv_total = lines( lt_tadir ) - iv_text = -obj_name ) ##NO_TEXT. - - ls_item-obj_type = -object. - ls_item-obj_name = -obj_name. - ls_item-devclass = -devclass. - - IF mv_last_serialization IS NOT INITIAL. " Try to fetch from cache - READ TABLE lt_cache TRANSPORTING NO FIELDS - 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 ). - LOOP AT lt_cache ASSIGNING WHERE item = ls_item. - APPEND TO rt_files. - ENDLOOP. - - CONTINUE. - ENDIF. - ENDIF. - - lt_files = lcl_objects=>serialize( - is_item = ls_item - iv_language = get_master_language( ) - io_log = io_log ). - LOOP AT lt_files ASSIGNING . - -path = mo_dot_abapgit->get_starting_folder( ) && -path. - -sha1 = lcl_hash=>sha1( iv_type = gc_type-blob iv_data = -data ). - - APPEND INITIAL LINE TO rt_files ASSIGNING . - -file = . - -item = ls_item. - ENDLOOP. - ENDLOOP. - - GET TIME STAMP FIELD mv_last_serialization. - mt_local = rt_files. - mv_do_local_refresh = abap_false. " Fulfill refresh - - ENDMETHOD. - - METHOD get_dot_abapgit. - ro_dot_abapgit = mo_dot_abapgit. - ENDMETHOD. - - METHOD delete. - - DATA: lo_persistence TYPE REF TO lcl_persistence_repo. - - - CREATE OBJECT lo_persistence. - - lo_persistence->delete( ms_data-key ). - - ENDMETHOD. "delete - - METHOD is_offline. - rv_offline = ms_data-offline. - ENDMETHOD. - - METHOD refresh. - - mv_do_local_refresh = abap_true. - - IF iv_drop_cache = abap_true. - CLEAR: mv_last_serialization, mt_local. - ENDIF. - - ENDMETHOD. "refresh - - METHOD refresh_local. " For testing purposes, maybe removed later - mv_do_local_refresh = abap_true. - ENDMETHOD. "refresh_local - - METHOD get_package. - rv_package = ms_data-package. - ENDMETHOD. "get_package - - METHOD get_master_language. - rv_language = ms_data-master_language. - ENDMETHOD. - - METHOD get_key. - rv_key = ms_data-key. - ENDMETHOD. "get_key - - METHOD get_name. - - IF ms_data-offline = abap_true. - rv_name = ms_data-url. + IF sy-batch = abap_true. + lcl_background=>run( ). ELSE. - rv_name = lcl_url=>name( ms_data-url ). - rv_name = cl_http_utility=>if_http_utility~unescape_url( rv_name ). + gui( )->go_home( ). + CALL SELECTION-SCREEN 1001. " trigger screen ENDIF. - ENDMETHOD. "get_name + ENDMETHOD. "run - METHOD is_write_protected. - rv_yes = ms_data-write_protect. - ENDMETHOD. "is_write_protected + METHOD gui. - METHOD rebuild_local_checksums. "LOCAL (BASE) + IF go_gui IS NOT BOUND. + CREATE OBJECT go_gui. + ENDIF. + ro_gui = go_gui. - DATA: lt_local TYPE ty_files_item_tt, - ls_last_item TYPE ty_item, - lt_checksums TYPE lcl_persistence_repo=>ty_local_checksum_tt. + ENDMETHOD. "gui - FIELD-SYMBOLS: LIKE LINE OF lt_checksums, - LIKE LINE OF -files, - LIKE LINE OF lt_local. + METHOD user. - lt_local = get_files_local( ). - - DELETE lt_local " Remove non-code related files except .abapgit - WHERE item IS INITIAL - AND NOT ( file-path = gc_root_dir AND file-filename = gc_dot_abapgit ). - - SORT lt_local BY item. - - LOOP AT lt_local ASSIGNING . - IF ls_last_item <> -item OR sy-tabix = 1. " First or New item reached ? - APPEND INITIAL LINE TO lt_checksums ASSIGNING . - -item = -item. - ls_last_item = -item. + IF iv_user = sy-uname ##USER_OK. + IF go_current_user IS NOT BOUND. + CREATE OBJECT go_current_user. ENDIF. - - APPEND INITIAL LINE TO -files ASSIGNING . - MOVE-CORRESPONDING -file TO . - - ENDLOOP. - - set( it_checksums = lt_checksums ). - - ENDMETHOD. " rebuild_local_checksums. - -ENDCLASS. "lcl_repo IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_repo_srv IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_repo_srv IMPLEMENTATION. - - METHOD constructor. - CREATE OBJECT mo_persistence. - ENDMETHOD. "class_constructor - - METHOD list. - - IF mv_init = abap_false. - refresh( ). - ENDIF. - - rt_list = mt_list. - - ENDMETHOD. "list - - METHOD get. - - FIELD-SYMBOLS: LIKE LINE OF mt_list. - - - IF mv_init = abap_false. - refresh( ). - ENDIF. - - LOOP AT mt_list ASSIGNING . - IF ->get_key( ) = iv_key. - ro_repo = . - RETURN. - ENDIF. - ENDLOOP. - - lcx_exception=>raise( 'repo not found, get' ). - - ENDMETHOD. "get - - METHOD refresh. - - DATA: lt_list TYPE lcl_persistence_repo=>tt_repo, - lo_online TYPE REF TO lcl_repo_online, - lo_offline TYPE REF TO lcl_repo_offline. - - FIELD-SYMBOLS: LIKE LINE OF lt_list. - - - CLEAR mt_list. - - lt_list = mo_persistence->list( ). - LOOP AT lt_list ASSIGNING . - IF -offline = abap_false. - CREATE OBJECT lo_online - EXPORTING - is_data = . - APPEND lo_online TO mt_list. - ELSE. - CREATE OBJECT lo_offline - EXPORTING - is_data = . - APPEND lo_offline TO mt_list. - ENDIF. - ENDLOOP. - - mv_init = abap_true. - - ENDMETHOD. "refresh - - METHOD new_online. - - DATA: ls_repo TYPE lcl_persistence_repo=>ty_repo, - lv_key TYPE lcl_persistence_repo=>ty_repo-key. - - - validate_package( iv_package ). - - lv_key = mo_persistence->add( - iv_url = iv_url - iv_branch_name = iv_branch_name - iv_package = iv_package - iv_offline = abap_false ). - - TRY. - ls_repo = mo_persistence->read( lv_key ). - CATCH lcx_not_found. - lcx_exception=>raise( 'new_online not found' ). - ENDTRY. - - CREATE OBJECT ro_repo - EXPORTING - is_data = ls_repo. - - add( ro_repo ). - - ENDMETHOD. "new_online - - METHOD new_offline. - - DATA: ls_repo TYPE lcl_persistence_repo=>ty_repo, - lv_key TYPE lcl_persistence_repo=>ty_repo-key. - - - validate_package( iv_package ). - - lv_key = mo_persistence->add( - iv_url = iv_url - iv_branch_name = '' - iv_package = iv_package - iv_offline = abap_true ). - - TRY. - ls_repo = mo_persistence->read( lv_key ). - CATCH lcx_not_found. - lcx_exception=>raise( 'new_offline not found' ). - ENDTRY. - - CREATE OBJECT ro_repo - EXPORTING - is_data = ls_repo. - - add( ro_repo ). - - ENDMETHOD. "new_offline - - METHOD add. - - DATA: lo_repo LIKE LINE OF mt_list. - - - LOOP AT mt_list INTO lo_repo. - IF lo_repo->get_key( ) = io_repo->get_key( ). - IF lo_repo = io_repo. - RETURN. - ENDIF. - lcx_exception=>raise( 'identical keys' ). - ENDIF. - ENDLOOP. - - APPEND io_repo TO mt_list. - - ENDMETHOD. "add - - METHOD validate_package. - - DATA: lv_devclass TYPE tdevc-devclass, - lt_repos TYPE lcl_persistence_repo=>tt_repo. - - - IF iv_package IS INITIAL. - lcx_exception=>raise( 'add, package empty' ). - ENDIF. - - IF iv_package = '$TMP'. - lcx_exception=>raise( 'not possible to use $TMP, create new (local) package' ). - ENDIF. - - SELECT SINGLE devclass FROM tdevc INTO lv_devclass - WHERE devclass = iv_package - AND as4user <> 'SAP'. "#EC CI_GENBUFF - IF sy-subrc <> 0. - lcx_exception=>raise( 'package not found or not allowed' ). - ENDIF. - - " make sure its not already in use for a different repository - lt_repos = mo_persistence->list( ). - READ TABLE lt_repos WITH KEY package = iv_package TRANSPORTING NO FIELDS. - IF sy-subrc = 0. - lcx_exception=>raise( 'Package already in use' ). - ENDIF. - - ENDMETHOD. "validate_package - - METHOD delete. - - io_repo->delete( ). - - DELETE TABLE mt_list FROM io_repo. - ASSERT sy-subrc = 0. - - ENDMETHOD. "delete - - METHOD is_repo_installed. - - DATA: lt_repo TYPE lcl_repo_srv=>ty_repo_tt, - lo_repo TYPE REF TO lcl_repo, - lv_url TYPE string, - lv_package TYPE devclass, - lo_repo_online TYPE REF TO lcl_repo_online, - lv_err TYPE string. - - lt_repo = list( ). - - LOOP AT lt_repo INTO lo_repo. - CHECK lo_repo->is_offline( ) = abap_false. - lo_repo_online ?= lo_repo. - - lv_url = lo_repo_online->get_url( ). - lv_package = lo_repo_online->get_package( ). - CHECK to_upper( lv_url ) = to_upper( iv_url ). - - " Validate bindings - "TODO refactor: move this message out of this method - IF iv_target_package IS NOT INITIAL AND iv_target_package <> lv_package. - lv_err = |Installation to package { lv_package } detected. | - && |Cancelling installation|. - lcx_exception=>raise( lv_err ). - ENDIF. - - rv_installed = abap_true. - EXIT. - ENDLOOP. - - ENDMETHOD. "is_repo_installed - - METHOD switch_repo_type. - - DATA lo_repo TYPE REF TO lcl_repo. - - FIELD-SYMBOLS LIKE LINE OF mt_list. - - lo_repo = get( iv_key ). - READ TABLE mt_list ASSIGNING FROM lo_repo. - ASSERT sy-subrc IS INITIAL. - ASSERT iv_offline <> lo_repo->ms_data-offline. - - IF iv_offline = abap_true. " On-line -> OFFline - lo_repo->set( - iv_url = lcl_url=>name( lo_repo->ms_data-url ) - iv_branch_name = '' - iv_sha1 = '' - iv_head_branch = '' - iv_offline = abap_true ). - CREATE OBJECT TYPE lcl_repo_offline + ro_user = go_current_user. + ELSE. + CREATE OBJECT ro_user EXPORTING - is_data = lo_repo->ms_data. - ELSE. " OFFline -> On-line - lo_repo->set( iv_offline = abap_false ). - CREATE OBJECT TYPE lcl_repo_online - EXPORTING - is_data = lo_repo->ms_data. + iv_user = iv_user. ENDIF. - ENDMETHOD. "switch_repo_type + ENDMETHOD. "user -ENDCLASS. "lcl_repo_srv IMPLEMENTATION + METHOD repo_srv. + + IF go_repo_srv IS NOT BOUND. + CREATE OBJECT go_repo_srv. + ENDIF. + ro_repo_srv = go_repo_srv. + + ENDMETHOD. "repo_srv + + METHOD db. + + IF go_db IS NOT BOUND. + CREATE OBJECT go_db. + ENDIF. + ro_db = go_db. + + ENDMETHOD. "repo_srv + + METHOD settings. + IF go_settings IS NOT BOUND. + CREATE OBJECT go_settings. + ENDIF. + ro_settings = go_settings. + ENDMETHOD. + +ENDCLASS. "lcl_app From 5596ab3175d8f01519d19811017dd64646d47442 Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Fri, 20 Jan 2017 18:41:38 -0500 Subject: [PATCH 070/142] Update zabapgit_app_impl.prog.abap From c0ccfb73b5281b5d6fff4731b7584fb757522a33 Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Fri, 20 Jan 2017 18:41:57 -0500 Subject: [PATCH 071/142] Update zabapgit_app_impl.prog.abap From 039fdad6947efb0623e7e23e937c58eee10039e4 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 21 Jan 2017 07:19:18 +0000 Subject: [PATCH 072/142] v1.25.1 fix newlines at end of file --- src/zabapgit.prog.abap | 2 +- src/zabapgit_app_impl.prog.abap | 2 +- src/zabapgit_file_status.prog.abap | 2 +- src/zabapgit_object_tabl.prog.abap | 2 +- src/zabapgit_repo.prog.abap | 2 +- src/zabapgit_repo_impl.prog.abap | 2 +- src/zabapgit_transport.prog.abap | 2 +- src/zabapgit_zip.prog.abap | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index ce60c9815..25902ceff 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -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.25.0'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.25.1'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) diff --git a/src/zabapgit_app_impl.prog.abap b/src/zabapgit_app_impl.prog.abap index f41691290..9af5079b0 100644 --- a/src/zabapgit_app_impl.prog.abap +++ b/src/zabapgit_app_impl.prog.abap @@ -67,4 +67,4 @@ CLASS lcl_app IMPLEMENTATION. ro_settings = go_settings. ENDMETHOD. -ENDCLASS. "lcl_app +ENDCLASS. "lcl_app \ No newline at end of file diff --git a/src/zabapgit_file_status.prog.abap b/src/zabapgit_file_status.prog.abap index c81453dae..2c26d9872 100644 --- a/src/zabapgit_file_status.prog.abap +++ b/src/zabapgit_file_status.prog.abap @@ -296,4 +296,4 @@ CLASS lcl_file_status IMPLEMENTATION. ENDMETHOD. "build_new_remote -ENDCLASS. "lcl_file_status IMPLEMENTATION +ENDCLASS. "lcl_file_status IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_tabl.prog.abap b/src/zabapgit_object_tabl.prog.abap index de2f10201..773fbdd22 100644 --- a/src/zabapgit_object_tabl.prog.abap +++ b/src/zabapgit_object_tabl.prog.abap @@ -433,4 +433,4 @@ CLASS lcl_object_tabl IMPLEMENTATION. ENDIF. ENDMETHOD. -ENDCLASS. "lcl_object_TABL IMPLEMENTATION +ENDCLASS. "lcl_object_TABL IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_repo.prog.abap b/src/zabapgit_repo.prog.abap index 8353d11d9..694c27669 100644 --- a/src/zabapgit_repo.prog.abap +++ b/src/zabapgit_repo.prog.abap @@ -224,4 +224,4 @@ CLASS lcl_repo_srv DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. IMPORTING iv_package TYPE devclass RAISING lcx_exception. -ENDCLASS. "lcl_repo_srv DEFINITION +ENDCLASS. "lcl_repo_srv DEFINITION \ No newline at end of file diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 36b8f7cce..8e4ae2ac2 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -938,4 +938,4 @@ CLASS lcl_repo_srv IMPLEMENTATION. ENDMETHOD. "switch_repo_type -ENDCLASS. "lcl_repo_srv IMPLEMENTATION +ENDCLASS. "lcl_repo_srv IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_transport.prog.abap b/src/zabapgit_transport.prog.abap index e9daa4856..c2bf16df7 100644 --- a/src/zabapgit_transport.prog.abap +++ b/src/zabapgit_transport.prog.abap @@ -175,4 +175,4 @@ CLASS lcl_transport IMPLEMENTATION. DELETE rt_tadir WHERE table_line IS INITIAL. ENDMETHOD. -ENDCLASS. +ENDCLASS. \ No newline at end of file diff --git a/src/zabapgit_zip.prog.abap b/src/zabapgit_zip.prog.abap index b27607ed9..27838c096 100644 --- a/src/zabapgit_zip.prog.abap +++ b/src/zabapgit_zip.prog.abap @@ -539,4 +539,4 @@ CLASS lcl_zip IMPLEMENTATION. ENDMETHOD. "export_package -ENDCLASS. "lcl_zip IMPLEMENTATION +ENDCLASS. "lcl_zip IMPLEMENTATION \ No newline at end of file From e73b7973c65afbcc7df93b8460e0d23b5064be74 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 21 Jan 2017 07:59:40 +0000 Subject: [PATCH 073/142] skip initial xml(#478) and fix newline(#42) --- src/zabapgit_objects.prog.abap | 5 ++++- src/zabapgit_xml.prog.abap | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index 383f0ea69..4cc56812d 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -373,6 +373,9 @@ CLASS lcl_objects_files IMPLEMENTATION. CONCATENATE LINES OF it_abap INTO lv_source SEPARATED BY gc_newline. +* when editing files via eg. GitHub web interface it adds a newline at end of file + lv_source = lv_source && gc_newline. + ls_file-path = '/'. ls_file-filename = filename( iv_extra = iv_extra iv_ext = 'abap' ). "#EC NOTEXT @@ -1746,4 +1749,4 @@ CLASS lcl_objects DEFINITION FINAL. CHANGING ct_files TYPE ty_file_signatures_tt RAISING lcx_exception. -ENDCLASS. "lcl_object DEFINITION \ No newline at end of file +ENDCLASS. "lcl_object DEFINITION diff --git a/src/zabapgit_xml.prog.abap b/src/zabapgit_xml.prog.abap index 23e1828c4..e3aece7cb 100644 --- a/src/zabapgit_xml.prog.abap +++ b/src/zabapgit_xml.prog.abap @@ -222,6 +222,7 @@ CLASS lcl_xml_output IMPLEMENTATION. li_doc = cl_ixml=>create( )->create_document( ). CALL TRANSFORMATION id + OPTIONS initial_components = 'suppress' SOURCE (lt_stab) RESULT XML li_doc. @@ -424,4 +425,4 @@ CLASS lcl_xml_pretty IMPLEMENTATION. ENDMETHOD. -ENDCLASS. \ No newline at end of file +ENDCLASS. From b24c63ad1ccafb181eab91da2392401cb13b7386 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 21 Jan 2017 08:15:48 +0000 Subject: [PATCH 074/142] TRAN: fix "Error from RPY_TRANSACTION_INSERT" --- src/zabapgit_object_tran.prog.abap | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/zabapgit_object_tran.prog.abap b/src/zabapgit_object_tran.prog.abap index 9c0b283fc..7b7f20cc0 100644 --- a/src/zabapgit_object_tran.prog.abap +++ b/src/zabapgit_object_tran.prog.abap @@ -287,6 +287,11 @@ CLASS lcl_object_tran IMPLEMENTATION. lt_param_values TYPE TABLE OF rsparam, ls_rsstcd TYPE rsstcd. + + IF lif_object~exists( ) = abap_true. + lif_object~delete( ). + ENDIF. + io_xml->read( EXPORTING iv_name = 'TSTC' CHANGING cg_data = ls_tstc ). io_xml->read( EXPORTING iv_name = 'TSTCC' From 9c436e173145829eb7e87fb1491ea314c92de8be Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 21 Jan 2017 09:31:00 +0100 Subject: [PATCH 075/142] SICF: fix changed_by --- src/zabapgit_object_sicf.prog.abap | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/zabapgit_object_sicf.prog.abap b/src/zabapgit_object_sicf.prog.abap index 3ff67774b..882727021 100644 --- a/src/zabapgit_object_sicf.prog.abap +++ b/src/zabapgit_object_sicf.prog.abap @@ -22,6 +22,7 @@ CLASS lcl_object_sicf DEFINITION INHERITING FROM lcl_objects_super FINAL. END OF ty_sicf_key. METHODS read + IMPORTING iv_clear TYPE abap_bool DEFAULT abap_true EXPORTING es_icfservice TYPE icfservice es_icfdocu TYPE icfdocu et_icfhandler TYPE ty_icfhandler_tt @@ -71,7 +72,8 @@ CLASS lcl_object_sicf IMPLEMENTATION. DATA: ls_icfservice TYPE icfservice. - read( IMPORTING es_icfservice = ls_icfservice ). + read( EXPORTING iv_clear = abap_false + IMPORTING es_icfservice = ls_icfservice ). rv_user = ls_icfservice-icf_muser. @@ -174,10 +176,12 @@ CLASS lcl_object_sicf IMPLEMENTATION. ASSERT sy-subrc = 0. MOVE-CORRESPONDING ls_serv_info-service TO es_icfservice. - CLEAR es_icfservice-icf_cuser. - CLEAR es_icfservice-icf_cdate. - CLEAR es_icfservice-icf_muser. - CLEAR es_icfservice-icf_mdate. + IF iv_clear = abap_true. + CLEAR es_icfservice-icf_cuser. + CLEAR es_icfservice-icf_cdate. + CLEAR es_icfservice-icf_muser. + CLEAR es_icfservice-icf_mdate. + ENDIF. CLEAR es_icfdocu-icfparguid. From 00752c8993867c829a5e814912f6b7c473eed381 Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Sat, 21 Jan 2017 09:36:20 -0500 Subject: [PATCH 076/142] Max lines shown added to global config via Advanced > Settings From a03d54ae79cab3602af7c9cd7b58d2a1d580afcc Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Sat, 21 Jan 2017 09:42:44 -0500 Subject: [PATCH 077/142] Add files via upload From 69148413abe30b0acc14947ed8af6bc05c722243 Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Sat, 21 Jan 2017 09:48:10 -0500 Subject: [PATCH 078/142] Add files via upload --- src/zabapgit_page_settings.prog.abap | 26 +++++++++++++++++++++- src/zabapgit_persistence.prog.abap | 33 +++++++++++++++++++++++++++- src/zabapgit_view_repo.prog.abap | 15 ++++++++++--- 3 files changed, 69 insertions(+), 5 deletions(-) diff --git a/src/zabapgit_page_settings.prog.abap b/src/zabapgit_page_settings.prog.abap index fecba3154..fc286de70 100644 --- a/src/zabapgit_page_settings.prog.abap +++ b/src/zabapgit_page_settings.prog.abap @@ -30,6 +30,8 @@ CLASS lcl_gui_page_settings DEFINITION FINAL INHERITING FROM lcl_gui_page. RETURNING VALUE(ro_html) TYPE REF TO lcl_html. METHODS render_form_end RETURNING VALUE(ro_html) TYPE REF TO lcl_html. + METHODS render_max_lines + RETURNING VALUE(ro_html) TYPE REF TO lcl_html. METHODS build_settings IMPORTING it_post_fields TYPE tihttpnvp. @@ -63,6 +65,8 @@ CLASS lcl_gui_page_settings IMPLEMENTATION. ro_html->add( render_proxy( ) ). ro_html->add( |
| ). ro_html->add( render_development_internals( ) ). + ro_html->add( |
| ). + ro_html->add( render_max_lines( ) ). ro_html->add( render_form_end( ) ). ENDMETHOD. "render_content @@ -110,7 +114,8 @@ CLASS lcl_gui_page_settings IMPLEMENTATION. METHOD build_settings. - DATA ls_post_field TYPE ihttpnvp. + DATA: ls_post_field TYPE ihttpnvp, + lv_max_lines_as_integer TYPE i. CREATE OBJECT mo_settings. READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'proxy_url'. @@ -132,6 +137,14 @@ CLASS lcl_gui_page_settings IMPLEMENTATION. mo_settings->set_run_critical_tests( abap_false ). ENDIF. + READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'max_lines'. + IF sy-subrc = 0. + lv_max_lines_as_integer = ls_post_field-value. + mo_settings->set_max_lines( lv_max_lines_as_integer ). + ELSE. + mo_settings->set_max_lines( 0 ). + ENDIF. + ENDMETHOD. @@ -209,4 +222,15 @@ CLASS lcl_gui_page_settings IMPLEMENTATION. ENDMETHOD. + METHOD render_max_lines. + CREATE OBJECT ro_html. + + ro_html->add( |

List size

| ). + ro_html->add( || ). + ro_html->add( |
| ). + ro_html->add( `` ). + ro_html->add( |
| ). + ro_html->add( |
| ). + ENDMETHOD. + ENDCLASS. \ No newline at end of file diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index af4d6a437..7c0190ccc 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -1459,11 +1459,17 @@ CLASS lcl_settings DEFINITION FINAL. METHODS get_run_critical_tests RETURNING VALUE(rv_run) TYPE abap_bool. + METHODS set_max_lines + IMPORTING iv_lines TYPE i. + METHODS get_max_lines + RETURNING + VALUE(rv_lines) TYPE i. PRIVATE SECTION. DATA mv_proxy_url TYPE string. DATA mv_proxy_port TYPE string. DATA mv_run_critical_tests TYPE abap_bool. + DATA mv_lines TYPE i. ENDCLASS. @@ -1494,6 +1500,14 @@ CLASS lcl_settings IMPLEMENTATION. rv_run = mv_run_critical_tests. ENDMETHOD. + METHOD get_max_lines. + rv_lines = mv_lines. + ENDMETHOD. + + METHOD set_max_lines. + mv_lines = iv_lines. + ENDMETHOD. + ENDCLASS. @@ -1529,12 +1543,20 @@ CLASS lcl_persistence_settings IMPLEMENTATION. iv_type = 'SETTINGS' iv_value = 'CRIT_TESTS' iv_data = io_settings->get_run_critical_tests( ) ). + + lcl_app=>db( )->modify( + iv_type = 'SETTINGS' + iv_value = 'MAX_LINES' + iv_data = |{ io_settings->get_max_lines( ) }| ). + ENDMETHOD. METHOD read. DATA: lv_critical_tests_as_string TYPE string, - lv_critical_tests_as_boolean TYPE abap_bool. + lv_critical_tests_as_boolean TYPE abap_bool, + lv_max_lines_as_string TYPE string, + lv_max_lines_as_integer TYPE i. CREATE OBJECT ro_settings. TRY. @@ -1562,6 +1584,15 @@ CLASS lcl_persistence_settings IMPLEMENTATION. CATCH lcx_not_found. ro_settings->set_run_critical_tests( abap_false ). ENDTRY. + TRY. + lv_max_lines_as_string = lcl_app=>db( )->read( + iv_type = 'SETTINGS' + iv_value = 'MAX_LINES' ). + lv_max_lines_as_integer = lv_max_lines_as_string. + ro_settings->set_max_lines( lv_max_lines_as_integer ). + CATCH lcx_not_found. + ro_settings->set_max_lines( 0 ). + ENDTRY. ENDMETHOD. ENDCLASS. \ No newline at end of file diff --git a/src/zabapgit_view_repo.prog.abap b/src/zabapgit_view_repo.prog.abap index 5c9cd9b74..503cbcee9 100644 --- a/src/zabapgit_view_repo.prog.abap +++ b/src/zabapgit_view_repo.prog.abap @@ -111,10 +111,15 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. lv_lstate TYPE char1, lv_rstate TYPE char1, lv_max TYPE abap_bool, - lo_log TYPE REF TO lcl_log. + lo_log TYPE REF TO lcl_log, + lo_settings TYPE REF TO lcl_settings, + lv_max_lines TYPE i. FIELD-SYMBOLS LIKE LINE OF lt_repo_items. + " Read global settings to get max # of objects to be listed + lo_settings = lcl_app=>settings( )->read( ). + lv_max_lines = lo_settings->get_max_lines( ). " Reinit, for the case of type change mo_repo = lcl_app=>repo_srv( )->get( mo_repo->get_key( ) ). @@ -160,7 +165,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. ro_html->add( render_empty_package( ) ). ELSE. LOOP AT lt_repo_items ASSIGNING . - IF sy-tabix > 500. + IF lv_max_lines > 0 AND sy-tabix > lv_max_lines. lv_max = abap_true. EXIT. " current loop ENDIF. @@ -171,7 +176,11 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. ro_html->add( '
' ). IF lv_max = abap_true. - ro_html->add( 'Only first 500 objects shown in list' ). + IF lv_max_lines = 1. + ro_html->add( |Only 1 object shown in list (Set in Advanced > Settings )| ). + ELSE. + ro_html->add( |Only first { lv_max_lines } objects shown in list (Set in Advanced > Settings )| ). + ENDIF. ENDIF. ro_html->add( '
' ). From 52b71cb02147bf0542b795a8aebc9744f41d0c87 Mon Sep 17 00:00:00 2001 From: Christian Tapia Sabogal Date: Sat, 21 Jan 2017 11:41:04 -0500 Subject: [PATCH 079/142] Added 500 as max. lines shown default. --- src/zabapgit_persistence.prog.abap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index 7c0190ccc..7232279af 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -1591,8 +1591,8 @@ CLASS lcl_persistence_settings IMPLEMENTATION. lv_max_lines_as_integer = lv_max_lines_as_string. ro_settings->set_max_lines( lv_max_lines_as_integer ). CATCH lcx_not_found. - ro_settings->set_max_lines( 0 ). + ro_settings->set_max_lines( 500 ). " default ENDTRY. ENDMETHOD. -ENDCLASS. \ No newline at end of file +ENDCLASS. From 68ffe2a5e48018583d674697b217a3257b071e7b Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 22 Jan 2017 09:11:32 +0000 Subject: [PATCH 080/142] v1.25.2 --- src/zabapgit.prog.abap | 2 +- src/zabapgit_persistence.prog.abap | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 25902ceff..23af51de6 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -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.25.1'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.25.2'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index 7232279af..531cd586b 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -1595,4 +1595,4 @@ CLASS lcl_persistence_settings IMPLEMENTATION. ENDTRY. ENDMETHOD. -ENDCLASS. +ENDCLASS. \ No newline at end of file From 4ca551b74e6816fedfcf99438ddc6c97814ed532 Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 22 Jan 2017 09:37:26 +0000 Subject: [PATCH 081/142] update to latest abapGit format --- src/zabapgit.prog.abap | 2 +- src/zabapgit.prog.xml | 24 ------------------- src/zabapgit.tran.xml | 7 ------ src/zabapgit_app.prog.abap | 2 +- src/zabapgit_app.prog.xml | 26 --------------------- src/zabapgit_app_impl.prog.abap | 2 +- src/zabapgit_app_impl.prog.xml | 26 --------------------- src/zabapgit_background.prog.abap | 2 +- src/zabapgit_background.prog.xml | 26 --------------------- src/zabapgit_definitions.prog.abap | 2 +- src/zabapgit_definitions.prog.xml | 26 --------------------- src/zabapgit_dot_abapgit.prog.abap | 2 +- src/zabapgit_dot_abapgit.prog.xml | 26 --------------------- src/zabapgit_exceptions.prog.abap | 2 +- src/zabapgit_exceptions.prog.xml | 26 --------------------- src/zabapgit_file_status.prog.abap | 2 +- src/zabapgit_file_status.prog.xml | 26 --------------------- src/zabapgit_forms.prog.abap | 2 +- src/zabapgit_forms.prog.xml | 26 --------------------- src/zabapgit_git.prog.abap | 2 +- src/zabapgit_git.prog.xml | 26 --------------------- src/zabapgit_git_helpers.prog.abap | 2 +- src/zabapgit_git_helpers.prog.xml | 26 --------------------- src/zabapgit_gui.prog.abap | 2 +- src/zabapgit_gui.prog.xml | 26 --------------------- src/zabapgit_gui_asset_manager.prog.abap | 2 +- src/zabapgit_gui_asset_manager.prog.xml | 26 --------------------- src/zabapgit_gui_pages.prog.abap | 2 +- src/zabapgit_gui_pages.prog.xml | 26 --------------------- src/zabapgit_gui_router.prog.abap | 2 +- src/zabapgit_gui_router.prog.xml | 26 --------------------- src/zabapgit_html.prog.abap | 2 +- src/zabapgit_html.prog.xml | 26 --------------------- src/zabapgit_html_action_utils.prog.abap | 2 +- src/zabapgit_html_action_utils.prog.xml | 26 --------------------- src/zabapgit_html_chunks.prog.abap | 2 +- src/zabapgit_html_chunks.prog.xml | 26 --------------------- src/zabapgit_http.prog.abap | 2 +- src/zabapgit_http.prog.xml | 26 --------------------- src/zabapgit_macros.prog.abap | 2 +- src/zabapgit_macros.prog.xml | 26 --------------------- src/zabapgit_migrations.prog.abap | 2 +- src/zabapgit_migrations.prog.xml | 26 --------------------- src/zabapgit_object_acid.prog.abap | 2 +- src/zabapgit_object_acid.prog.xml | 26 --------------------- src/zabapgit_object_auth.prog.abap | 2 +- src/zabapgit_object_auth.prog.xml | 26 --------------------- src/zabapgit_object_clas.prog.abap | 2 +- src/zabapgit_object_clas.prog.xml | 26 --------------------- src/zabapgit_object_doct.prog.abap | 2 +- src/zabapgit_object_doct.prog.xml | 26 --------------------- src/zabapgit_object_docv.prog.abap | 2 +- src/zabapgit_object_docv.prog.xml | 26 --------------------- src/zabapgit_object_doma.prog.abap | 2 +- src/zabapgit_object_doma.prog.xml | 26 --------------------- src/zabapgit_object_dtel.prog.abap | 2 +- src/zabapgit_object_dtel.prog.xml | 26 --------------------- src/zabapgit_object_enho.prog.abap | 2 +- src/zabapgit_object_enho.prog.xml | 26 --------------------- src/zabapgit_object_enhs.prog.abap | 2 +- src/zabapgit_object_enhs.prog.xml | 26 --------------------- src/zabapgit_object_enqu.prog.abap | 2 +- src/zabapgit_object_enqu.prog.xml | 26 --------------------- src/zabapgit_object_ensc.prog.abap | 2 +- src/zabapgit_object_ensc.prog.xml | 26 --------------------- src/zabapgit_object_fugr.prog.abap | 2 +- src/zabapgit_object_fugr.prog.xml | 26 --------------------- src/zabapgit_object_iarp.prog.abap | 2 +- src/zabapgit_object_iarp.prog.xml | 26 --------------------- src/zabapgit_object_iasp.prog.abap | 2 +- src/zabapgit_object_iasp.prog.xml | 26 --------------------- src/zabapgit_object_iatu.prog.abap | 2 +- src/zabapgit_object_iatu.prog.xml | 26 --------------------- src/zabapgit_object_msag.prog.abap | 2 +- src/zabapgit_object_msag.prog.xml | 26 --------------------- src/zabapgit_object_nrob.prog.abap | 2 +- src/zabapgit_object_nrob.prog.xml | 26 --------------------- src/zabapgit_object_para.prog.abap | 2 +- src/zabapgit_object_para.prog.xml | 26 --------------------- src/zabapgit_object_pinf.prog.abap | 2 +- src/zabapgit_object_pinf.prog.xml | 26 --------------------- src/zabapgit_object_prog.prog.abap | 2 +- src/zabapgit_object_prog.prog.xml | 26 --------------------- src/zabapgit_object_serializing.prog.abap | 2 +- src/zabapgit_object_serializing.prog.xml | 26 --------------------- src/zabapgit_object_sfbf.prog.abap | 2 +- src/zabapgit_object_sfbf.prog.xml | 26 --------------------- src/zabapgit_object_sfbs.prog.abap | 2 +- src/zabapgit_object_sfbs.prog.xml | 26 --------------------- src/zabapgit_object_sfsw.prog.abap | 2 +- src/zabapgit_object_sfsw.prog.xml | 26 --------------------- src/zabapgit_object_shi3.prog.abap | 2 +- src/zabapgit_object_shi3.prog.xml | 26 --------------------- src/zabapgit_object_shlp.prog.abap | 2 +- src/zabapgit_object_shlp.prog.xml | 26 --------------------- src/zabapgit_object_sicf.prog.abap | 2 +- src/zabapgit_object_sicf.prog.xml | 26 --------------------- src/zabapgit_object_smim.prog.abap | 2 +- src/zabapgit_object_smim.prog.xml | 26 --------------------- src/zabapgit_object_splo.prog.abap | 2 +- src/zabapgit_object_splo.prog.xml | 26 --------------------- src/zabapgit_object_ssfo.prog.abap | 2 +- src/zabapgit_object_ssfo.prog.xml | 26 --------------------- src/zabapgit_object_ssst.prog.abap | 2 +- src/zabapgit_object_ssst.prog.xml | 26 --------------------- src/zabapgit_object_susc.prog.abap | 2 +- src/zabapgit_object_susc.prog.xml | 26 --------------------- src/zabapgit_object_suso.prog.abap | 2 +- src/zabapgit_object_suso.prog.xml | 26 --------------------- src/zabapgit_object_tabl.prog.abap | 2 +- src/zabapgit_object_tabl.prog.xml | 26 --------------------- src/zabapgit_object_tabl_valid.prog.abap | 2 +- src/zabapgit_object_tabl_valid.prog.xml | 26 --------------------- src/zabapgit_object_tobj.prog.abap | 2 +- src/zabapgit_object_tobj.prog.xml | 26 --------------------- src/zabapgit_object_tran.prog.abap | 2 +- src/zabapgit_object_tran.prog.xml | 26 --------------------- src/zabapgit_object_ttyp.prog.abap | 2 +- src/zabapgit_object_ttyp.prog.xml | 26 --------------------- src/zabapgit_object_type.prog.abap | 2 +- src/zabapgit_object_type.prog.xml | 26 --------------------- src/zabapgit_object_vcls.prog.abap | 2 +- src/zabapgit_object_vcls.prog.xml | 26 --------------------- src/zabapgit_object_view.prog.abap | 2 +- src/zabapgit_object_view.prog.xml | 26 --------------------- src/zabapgit_object_w3xx.prog.abap | 2 +- src/zabapgit_object_w3xx.prog.xml | 26 --------------------- src/zabapgit_object_wdya.prog.abap | 2 +- src/zabapgit_object_wdya.prog.xml | 26 --------------------- src/zabapgit_object_wdyn.prog.abap | 2 +- src/zabapgit_object_wdyn.prog.xml | 26 --------------------- src/zabapgit_object_webi.prog.abap | 2 +- src/zabapgit_object_webi.prog.xml | 26 --------------------- src/zabapgit_object_xslt.prog.abap | 2 +- src/zabapgit_object_xslt.prog.xml | 26 --------------------- src/zabapgit_objects.prog.xml | 26 --------------------- src/zabapgit_objects_impl.prog.abap | 2 +- src/zabapgit_objects_impl.prog.xml | 26 --------------------- src/zabapgit_page.prog.abap | 2 +- src/zabapgit_page.prog.xml | 26 --------------------- src/zabapgit_page_background.prog.abap | 2 +- src/zabapgit_page_background.prog.xml | 26 --------------------- src/zabapgit_page_branch_overview.prog.abap | 2 +- src/zabapgit_page_branch_overview.prog.xml | 26 --------------------- src/zabapgit_page_commit.prog.abap | 2 +- src/zabapgit_page_commit.prog.xml | 26 --------------------- src/zabapgit_page_db.prog.abap | 2 +- src/zabapgit_page_db.prog.xml | 26 --------------------- src/zabapgit_page_debug.prog.abap | 2 +- src/zabapgit_page_debug.prog.xml | 26 --------------------- src/zabapgit_page_diff.prog.abap | 2 +- src/zabapgit_page_diff.prog.xml | 26 --------------------- src/zabapgit_page_explore.prog.abap | 2 +- src/zabapgit_page_explore.prog.xml | 26 --------------------- src/zabapgit_page_main.prog.abap | 2 +- src/zabapgit_page_main.prog.xml | 26 --------------------- src/zabapgit_page_merge.prog.abap | 2 +- src/zabapgit_page_merge.prog.xml | 26 --------------------- src/zabapgit_page_settings.prog.abap | 2 +- src/zabapgit_page_settings.prog.xml | 26 --------------------- src/zabapgit_page_stage.prog.abap | 2 +- src/zabapgit_page_stage.prog.xml | 26 --------------------- src/zabapgit_password_dialog.prog.abap | 2 +- src/zabapgit_password_dialog.prog.xml | 26 --------------------- src/zabapgit_persistence.prog.abap | 2 +- src/zabapgit_persistence.prog.xml | 26 --------------------- src/zabapgit_persistence_old.prog.abap | 2 +- src/zabapgit_persistence_old.prog.xml | 26 --------------------- src/zabapgit_popups.prog.abap | 2 +- src/zabapgit_popups.prog.xml | 26 --------------------- src/zabapgit_repo.prog.abap | 2 +- src/zabapgit_repo.prog.xml | 26 --------------------- src/zabapgit_repo_browser_util.prog.abap | 2 +- src/zabapgit_repo_browser_util.prog.xml | 26 --------------------- src/zabapgit_repo_impl.prog.abap | 2 +- src/zabapgit_repo_impl.prog.xml | 26 --------------------- src/zabapgit_sap_package.prog.abap | 2 +- src/zabapgit_sap_package.prog.xml | 26 --------------------- src/zabapgit_services.prog.abap | 2 +- src/zabapgit_services.prog.xml | 26 --------------------- src/zabapgit_services_abapgit.prog.abap | 2 +- src/zabapgit_services_abapgit.prog.xml | 26 --------------------- src/zabapgit_services_background.prog.abap | 2 +- src/zabapgit_services_background.prog.xml | 26 --------------------- src/zabapgit_services_db.prog.abap | 2 +- src/zabapgit_services_db.prog.xml | 26 --------------------- src/zabapgit_services_git.prog.abap | 2 +- src/zabapgit_services_git.prog.xml | 26 --------------------- src/zabapgit_services_repo.prog.abap | 2 +- src/zabapgit_services_repo.prog.xml | 26 --------------------- src/zabapgit_stage.prog.abap | 2 +- src/zabapgit_stage.prog.xml | 26 --------------------- src/zabapgit_stage_logic.prog.abap | 2 +- src/zabapgit_stage_logic.prog.xml | 26 --------------------- src/zabapgit_syntax_highlighter.prog.abap | 2 +- src/zabapgit_syntax_highlighter.prog.xml | 26 --------------------- src/zabapgit_tadir.prog.abap | 2 +- src/zabapgit_tadir.prog.xml | 26 --------------------- src/zabapgit_transport.prog.abap | 2 +- src/zabapgit_transport.prog.xml | 26 --------------------- src/zabapgit_unit_test.prog.abap | 2 +- src/zabapgit_unit_test.prog.xml | 26 --------------------- src/zabapgit_unit_test_clas_intf.prog.abap | 2 +- src/zabapgit_unit_test_clas_intf.prog.xml | 23 ------------------ src/zabapgit_util.prog.abap | 2 +- src/zabapgit_util.prog.xml | 26 --------------------- src/zabapgit_view_repo.prog.abap | 2 +- src/zabapgit_view_repo.prog.xml | 26 --------------------- src/zabapgit_view_tutorial.prog.abap | 2 +- src/zabapgit_view_tutorial.prog.xml | 26 --------------------- src/zabapgit_xml.prog.xml | 26 --------------------- src/zabapgit_zip.prog.abap | 2 +- src/zabapgit_zip.prog.xml | 26 --------------------- src/zabapgit_zlib.prog.abap | 2 +- src/zabapgit_zlib.prog.xml | 26 --------------------- 215 files changed, 106 insertions(+), 2916 deletions(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 23af51de6..bd15da355 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -102,4 +102,4 @@ AT SELECTION-SCREEN ON EXIT-COMMAND. AT SELECTION-SCREEN. IF sy-dynnr = lcl_password_dialog=>dynnr. lcl_password_dialog=>on_screen_event( sscrfields-ucomm ). - ENDIF. \ No newline at end of file + ENDIF. diff --git a/src/zabapgit.prog.xml b/src/zabapgit.prog.xml index aed90ce00..b47a5359e 100644 --- a/src/zabapgit.prog.xml +++ b/src/zabapgit.prog.xml @@ -5,32 +5,10 @@ ZABAPGIT A - - X S - - - - 1 - - - - 0000-00-00 - - 0000-00-00 - - - - - X - - 0000-00-00 - - 0000-00-00 - D$S X @@ -38,10 +16,8 @@ R - abapGit 7 - diff --git a/src/zabapgit.tran.xml b/src/zabapgit.tran.xml index dee3f4873..6e5c39b16 100644 --- a/src/zabapgit.tran.xml +++ b/src/zabapgit.tran.xml @@ -6,20 +6,13 @@ ZABAPGIT ZABAPGIT 1000 - gA== - ZABAPGIT 1 X X - - - - - E diff --git a/src/zabapgit_app.prog.abap b/src/zabapgit_app.prog.abap index 26f17a1b2..f6ea82515 100644 --- a/src/zabapgit_app.prog.abap +++ b/src/zabapgit_app.prog.abap @@ -42,4 +42,4 @@ CLASS lcl_app DEFINITION FINAL. go_repo_srv TYPE REF TO lcl_repo_srv, go_settings TYPE REF TO lcl_persistence_settings. -ENDCLASS. "lcl_app \ No newline at end of file +ENDCLASS. "lcl_app diff --git a/src/zabapgit_app.prog.xml b/src/zabapgit_app.prog.xml index bdb2a00f4..406a57fbc 100644 --- a/src/zabapgit_app.prog.xml +++ b/src/zabapgit_app.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_APP A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_APP 20 - diff --git a/src/zabapgit_app_impl.prog.abap b/src/zabapgit_app_impl.prog.abap index 9af5079b0..f41691290 100644 --- a/src/zabapgit_app_impl.prog.abap +++ b/src/zabapgit_app_impl.prog.abap @@ -67,4 +67,4 @@ CLASS lcl_app IMPLEMENTATION. ro_settings = go_settings. ENDMETHOD. -ENDCLASS. "lcl_app \ No newline at end of file +ENDCLASS. "lcl_app diff --git a/src/zabapgit_app_impl.prog.xml b/src/zabapgit_app_impl.prog.xml index a0840230e..ee0d07361 100644 --- a/src/zabapgit_app_impl.prog.xml +++ b/src/zabapgit_app_impl.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_APP_IMPL A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_APP_IMPL 25 - diff --git a/src/zabapgit_background.prog.abap b/src/zabapgit_background.prog.abap index 21fce22bf..1b3368c04 100644 --- a/src/zabapgit_background.prog.abap +++ b/src/zabapgit_background.prog.abap @@ -229,4 +229,4 @@ CLASS lcl_background IMPLEMENTATION. ENDMETHOD. -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_background.prog.xml b/src/zabapgit_background.prog.xml index 0ac646b8b..c3c16b84d 100644 --- a/src/zabapgit_background.prog.xml +++ b/src/zabapgit_background.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_BACKGROUND A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_BACKGROUND 27 - diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index e8612e1b6..478591319 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -229,4 +229,4 @@ CONSTANTS: BEGIN OF gc_action, go_tutorial TYPE string VALUE 'go_tutorial', jump TYPE string VALUE 'jump', jump_pkg TYPE string VALUE 'jump_pkg', - END OF gc_action. \ No newline at end of file + END OF gc_action. diff --git a/src/zabapgit_definitions.prog.xml b/src/zabapgit_definitions.prog.xml index 6ed0ef3cc..f18279278 100644 --- a/src/zabapgit_definitions.prog.xml +++ b/src/zabapgit_definitions.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_DEFINITIONS A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_DEFINITIONS 28 - diff --git a/src/zabapgit_dot_abapgit.prog.abap b/src/zabapgit_dot_abapgit.prog.abap index 36d823007..24f95ac35 100644 --- a/src/zabapgit_dot_abapgit.prog.abap +++ b/src/zabapgit_dot_abapgit.prog.abap @@ -219,4 +219,4 @@ CLASS lcl_dot_abapgit IMPLEMENTATION. ENDMETHOD. "get_signature -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_dot_abapgit.prog.xml b/src/zabapgit_dot_abapgit.prog.xml index 4225cb8d0..2bb3d0990 100644 --- a/src/zabapgit_dot_abapgit.prog.xml +++ b/src/zabapgit_dot_abapgit.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_DOT_ABAPGIT A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_DOT_ABAPGIT 28 - diff --git a/src/zabapgit_exceptions.prog.abap b/src/zabapgit_exceptions.prog.abap index 076cbd371..8302f029e 100644 --- a/src/zabapgit_exceptions.prog.abap +++ b/src/zabapgit_exceptions.prog.abap @@ -67,4 +67,4 @@ ENDCLASS. "lcx_cancel DEFINITION *----------------------------------------------------------------------* CLASS lcx_cancel IMPLEMENTATION. -ENDCLASS. "lcx_cancel IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcx_cancel IMPLEMENTATION diff --git a/src/zabapgit_exceptions.prog.xml b/src/zabapgit_exceptions.prog.xml index 86be0fe8d..de71cb87e 100644 --- a/src/zabapgit_exceptions.prog.xml +++ b/src/zabapgit_exceptions.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_EXCEPTIONS A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_EXCEPTIONS 27 - diff --git a/src/zabapgit_file_status.prog.abap b/src/zabapgit_file_status.prog.abap index 2c26d9872..c81453dae 100644 --- a/src/zabapgit_file_status.prog.abap +++ b/src/zabapgit_file_status.prog.abap @@ -296,4 +296,4 @@ CLASS lcl_file_status IMPLEMENTATION. ENDMETHOD. "build_new_remote -ENDCLASS. "lcl_file_status IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_file_status IMPLEMENTATION diff --git a/src/zabapgit_file_status.prog.xml b/src/zabapgit_file_status.prog.xml index d4e829924..d137f4325 100644 --- a/src/zabapgit_file_status.prog.xml +++ b/src/zabapgit_file_status.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_FILE_STATUS A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_FILE_STATUS 28 - diff --git a/src/zabapgit_forms.prog.abap b/src/zabapgit_forms.prog.abap index d40ba19e7..ce245c1f1 100644 --- a/src/zabapgit_forms.prog.abap +++ b/src/zabapgit_forms.prog.abap @@ -139,4 +139,4 @@ FORM exit RAISING lcx_exception. LEAVE TO SCREEN 1001. ENDIF. ENDCASE. -ENDFORM. \ No newline at end of file +ENDFORM. diff --git a/src/zabapgit_forms.prog.xml b/src/zabapgit_forms.prog.xml index d5f46747a..21eb950e5 100644 --- a/src/zabapgit_forms.prog.xml +++ b/src/zabapgit_forms.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_FORMS A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_FORMS 22 - diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap index 60f81a2db..ca5340340 100644 --- a/src/zabapgit_git.prog.abap +++ b/src/zabapgit_git.prog.abap @@ -1581,4 +1581,4 @@ CLASS lcl_git_porcelain IMPLEMENTATION. ENDMETHOD. "walk -ENDCLASS. "lcl_porcelain IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_porcelain IMPLEMENTATION diff --git a/src/zabapgit_git.prog.xml b/src/zabapgit_git.prog.xml index 8e3e91b43..829207dc7 100644 --- a/src/zabapgit_git.prog.xml +++ b/src/zabapgit_git.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_GIT A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_GIT 20 - diff --git a/src/zabapgit_git_helpers.prog.abap b/src/zabapgit_git_helpers.prog.abap index 257730392..3d7353882 100644 --- a/src/zabapgit_git_helpers.prog.abap +++ b/src/zabapgit_git_helpers.prog.abap @@ -352,4 +352,4 @@ CLASS lcl_git_branch_list IMPLEMENTATION. ENDMETHOD. " normalize_branch_name. -ENDCLASS. "lcl_git_branch_list \ No newline at end of file +ENDCLASS. "lcl_git_branch_list diff --git a/src/zabapgit_git_helpers.prog.xml b/src/zabapgit_git_helpers.prog.xml index 486b646d6..1f1c5039f 100644 --- a/src/zabapgit_git_helpers.prog.xml +++ b/src/zabapgit_git_helpers.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_GIT_HELPERS A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_GIT_HELPERS 28 - diff --git a/src/zabapgit_gui.prog.abap b/src/zabapgit_gui.prog.abap index b5397ea7d..5cf394f57 100644 --- a/src/zabapgit_gui.prog.abap +++ b/src/zabapgit_gui.prog.abap @@ -325,4 +325,4 @@ CLASS lcl_gui IMPLEMENTATION. ENDMETHOD. "get_current_page_name -ENDCLASS. "lcl_gui IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_gui IMPLEMENTATION diff --git a/src/zabapgit_gui.prog.xml b/src/zabapgit_gui.prog.xml index ed4afb635..99e351529 100644 --- a/src/zabapgit_gui.prog.xml +++ b/src/zabapgit_gui.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_GUI A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_GUI 20 - diff --git a/src/zabapgit_gui_asset_manager.prog.abap b/src/zabapgit_gui_asset_manager.prog.abap index c1419eb12..95b2d0aa1 100644 --- a/src/zabapgit_gui_asset_manager.prog.abap +++ b/src/zabapgit_gui_asset_manager.prog.abap @@ -266,4 +266,4 @@ CLASS lcl_gui_asset_manager IMPLEMENTATION. ENDMETHOD. " get_webfont_link -ENDCLASS. "lcl_gui_asset_manager \ No newline at end of file +ENDCLASS. "lcl_gui_asset_manager diff --git a/src/zabapgit_gui_asset_manager.prog.xml b/src/zabapgit_gui_asset_manager.prog.xml index bcab6cac1..f80a3d729 100644 --- a/src/zabapgit_gui_asset_manager.prog.xml +++ b/src/zabapgit_gui_asset_manager.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_GUI_ASSET_MANAGER A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_GUI_ASSET_MANAGER 34 - diff --git a/src/zabapgit_gui_pages.prog.abap b/src/zabapgit_gui_pages.prog.abap index 2d5b77f67..9d3c60c7c 100644 --- a/src/zabapgit_gui_pages.prog.abap +++ b/src/zabapgit_gui_pages.prog.abap @@ -28,4 +28,4 @@ INCLUDE zabapgit_page_explore. INCLUDE zabapgit_page_main. INCLUDE zabapgit_page_stage. INCLUDE zabapgit_page_debug. -INCLUDE zabapgit_page_settings. \ No newline at end of file +INCLUDE zabapgit_page_settings. diff --git a/src/zabapgit_gui_pages.prog.xml b/src/zabapgit_gui_pages.prog.xml index 068beb75a..e96a5afbe 100644 --- a/src/zabapgit_gui_pages.prog.xml +++ b/src/zabapgit_gui_pages.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_GUI_PAGES A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_GUI_PAGES 26 - diff --git a/src/zabapgit_gui_router.prog.abap b/src/zabapgit_gui_router.prog.abap index 3c259c095..c70393e4a 100644 --- a/src/zabapgit_gui_router.prog.abap +++ b/src/zabapgit_gui_router.prog.abap @@ -342,4 +342,4 @@ CLASS lcl_gui_router IMPLEMENTATION. ENDMETHOD. "get_page_playground -ENDCLASS. " lcl_gui_router \ No newline at end of file +ENDCLASS. " lcl_gui_router diff --git a/src/zabapgit_gui_router.prog.xml b/src/zabapgit_gui_router.prog.xml index 554bbc558..4330cfa4f 100644 --- a/src/zabapgit_gui_router.prog.xml +++ b/src/zabapgit_gui_router.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_GUI_ROUTER A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_GUI_ROUTER 27 - diff --git a/src/zabapgit_html.prog.abap b/src/zabapgit_html.prog.abap index 340f7fadb..b78ebff3e 100644 --- a/src/zabapgit_html.prog.abap +++ b/src/zabapgit_html.prog.abap @@ -418,4 +418,4 @@ CLASS lcl_html_toolbar IMPLEMENTATION. ENDMETHOD. "render -ENDCLASS. "lcl_html_toolbar IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_html_toolbar IMPLEMENTATION diff --git a/src/zabapgit_html.prog.xml b/src/zabapgit_html.prog.xml index 60fedebc9..722e3f464 100644 --- a/src/zabapgit_html.prog.xml +++ b/src/zabapgit_html.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_HTML A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_HTML 21 - diff --git a/src/zabapgit_html_action_utils.prog.abap b/src/zabapgit_html_action_utils.prog.abap index df57ea389..8de0a7462 100644 --- a/src/zabapgit_html_action_utils.prog.abap +++ b/src/zabapgit_html_action_utils.prog.abap @@ -326,4 +326,4 @@ CLASS lcl_html_action_utils IMPLEMENTATION. ENDMETHOD. "decode_bg_update -ENDCLASS. "lcl_html_action_utils IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_html_action_utils IMPLEMENTATION diff --git a/src/zabapgit_html_action_utils.prog.xml b/src/zabapgit_html_action_utils.prog.xml index a83a04c8a..83227eaaa 100644 --- a/src/zabapgit_html_action_utils.prog.xml +++ b/src/zabapgit_html_action_utils.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_HTML_ACTION_UTILS A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_HTML_ACTION_UTILS 34 - diff --git a/src/zabapgit_html_chunks.prog.abap b/src/zabapgit_html_chunks.prog.abap index 0161e66dd..0b5780749 100644 --- a/src/zabapgit_html_chunks.prog.abap +++ b/src/zabapgit_html_chunks.prog.abap @@ -202,4 +202,4 @@ CLASS lcl_gui_chunk_lib IMPLEMENTATION. ENDMETHOD. "render_error -ENDCLASS. "lcl_gui_chunk_lib \ No newline at end of file +ENDCLASS. "lcl_gui_chunk_lib diff --git a/src/zabapgit_html_chunks.prog.xml b/src/zabapgit_html_chunks.prog.xml index e668d34ba..f469b1b49 100644 --- a/src/zabapgit_html_chunks.prog.xml +++ b/src/zabapgit_html_chunks.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_HTML_CHUNKS A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_HTML_CHUNKS 28 - diff --git a/src/zabapgit_http.prog.abap b/src/zabapgit_http.prog.abap index 1f08d18f5..11c1fb551 100644 --- a/src/zabapgit_http.prog.abap +++ b/src/zabapgit_http.prog.abap @@ -517,4 +517,4 @@ CLASS lcl_http IMPLEMENTATION. ENDMETHOD. "acquire_login_details -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_http.prog.xml b/src/zabapgit_http.prog.xml index e17d9183e..916ca0370 100644 --- a/src/zabapgit_http.prog.xml +++ b/src/zabapgit_http.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_HTTP A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_HTTP 21 - diff --git a/src/zabapgit_macros.prog.abap b/src/zabapgit_macros.prog.abap index 5bf603e19..ddb8c245e 100644 --- a/src/zabapgit_macros.prog.abap +++ b/src/zabapgit_macros.prog.abap @@ -20,4 +20,4 @@ DEFINE _object_check_timestamp. rv_changed = abap_true. RETURN. ENDIF. -END-OF-DEFINITION. \ No newline at end of file +END-OF-DEFINITION. diff --git a/src/zabapgit_macros.prog.xml b/src/zabapgit_macros.prog.xml index 0e9ebfa35..0859bb7e0 100644 --- a/src/zabapgit_macros.prog.xml +++ b/src/zabapgit_macros.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_MACROS A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_MACROS 23 - diff --git a/src/zabapgit_migrations.prog.abap b/src/zabapgit_migrations.prog.abap index 1ecd6dae0..cf708f7d1 100644 --- a/src/zabapgit_migrations.prog.abap +++ b/src/zabapgit_migrations.prog.abap @@ -90,4 +90,4 @@ CLASS lcl_migrations IMPLEMENTATION. ENDMETHOD. " rebuild_local_checksums_20161112. -ENDCLASS. "lcl_migrations \ No newline at end of file +ENDCLASS. "lcl_migrations diff --git a/src/zabapgit_migrations.prog.xml b/src/zabapgit_migrations.prog.xml index 69876d498..188245fd5 100644 --- a/src/zabapgit_migrations.prog.xml +++ b/src/zabapgit_migrations.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_MIGRATIONS A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_MIGRATIONS 27 - diff --git a/src/zabapgit_object_acid.prog.abap b/src/zabapgit_object_acid.prog.abap index e65983ce0..24c2d9c50 100644 --- a/src/zabapgit_object_acid.prog.abap +++ b/src/zabapgit_object_acid.prog.abap @@ -152,4 +152,4 @@ CLASS lcl_object_acid IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_acid IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_acid IMPLEMENTATION diff --git a/src/zabapgit_object_acid.prog.xml b/src/zabapgit_object_acid.prog.xml index 8c047a765..5d51af2d2 100644 --- a/src/zabapgit_object_acid.prog.xml +++ b/src/zabapgit_object_acid.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_ACID A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_ACID 28 - diff --git a/src/zabapgit_object_auth.prog.abap b/src/zabapgit_object_auth.prog.abap index f772b72ce..92b7a294f 100644 --- a/src/zabapgit_object_auth.prog.abap +++ b/src/zabapgit_object_auth.prog.abap @@ -123,4 +123,4 @@ CLASS lcl_object_auth IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_auth IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_auth IMPLEMENTATION diff --git a/src/zabapgit_object_auth.prog.xml b/src/zabapgit_object_auth.prog.xml index 9206032e1..e25a487be 100644 --- a/src/zabapgit_object_auth.prog.xml +++ b/src/zabapgit_object_auth.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_AUTH A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_AUTH 28 - diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap index 2ecece5c7..ea8794c50 100644 --- a/src/zabapgit_object_clas.prog.abap +++ b/src/zabapgit_object_clas.prog.abap @@ -1298,4 +1298,4 @@ CLASS lcl_object_intf IMPLEMENTATION. iv_skip_gui = abap_true ). ENDMETHOD. -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_object_clas.prog.xml b/src/zabapgit_object_clas.prog.xml index 5b52c65de..7299c946b 100644 --- a/src/zabapgit_object_clas.prog.xml +++ b/src/zabapgit_object_clas.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_CLAS A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_CLAS 28 - diff --git a/src/zabapgit_object_doct.prog.abap b/src/zabapgit_object_doct.prog.abap index 76ed284a4..250730cd6 100644 --- a/src/zabapgit_object_doct.prog.abap +++ b/src/zabapgit_object_doct.prog.abap @@ -155,4 +155,4 @@ CLASS lcl_object_doct IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_msag IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_msag IMPLEMENTATION diff --git a/src/zabapgit_object_doct.prog.xml b/src/zabapgit_object_doct.prog.xml index 6cf5b9d7b..1a330c342 100644 --- a/src/zabapgit_object_doct.prog.xml +++ b/src/zabapgit_object_doct.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_DOCT A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_DOCT 28 - diff --git a/src/zabapgit_object_docv.prog.abap b/src/zabapgit_object_docv.prog.abap index c54655a2e..ef3374284 100644 --- a/src/zabapgit_object_docv.prog.abap +++ b/src/zabapgit_object_docv.prog.abap @@ -159,4 +159,4 @@ CLASS lcl_object_docv IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_msag IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_msag IMPLEMENTATION diff --git a/src/zabapgit_object_docv.prog.xml b/src/zabapgit_object_docv.prog.xml index 89a002ba1..f35b5a0a3 100644 --- a/src/zabapgit_object_docv.prog.xml +++ b/src/zabapgit_object_docv.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_DOCV A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_DOCT 28 - diff --git a/src/zabapgit_object_doma.prog.abap b/src/zabapgit_object_doma.prog.abap index cd24e26e9..53eacb1c6 100644 --- a/src/zabapgit_object_doma.prog.abap +++ b/src/zabapgit_object_doma.prog.abap @@ -363,4 +363,4 @@ CLASS lcl_object_doma IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_doma IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_doma IMPLEMENTATION diff --git a/src/zabapgit_object_doma.prog.xml b/src/zabapgit_object_doma.prog.xml index fe2045f3b..c9433ef8d 100644 --- a/src/zabapgit_object_doma.prog.xml +++ b/src/zabapgit_object_doma.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_DOMA A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_DOMA 28 - diff --git a/src/zabapgit_object_dtel.prog.abap b/src/zabapgit_object_dtel.prog.abap index 508d59316..bb8cf957f 100644 --- a/src/zabapgit_object_dtel.prog.abap +++ b/src/zabapgit_object_dtel.prog.abap @@ -319,4 +319,4 @@ CLASS lcl_object_dtel IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_dtel IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_dtel IMPLEMENTATION diff --git a/src/zabapgit_object_dtel.prog.xml b/src/zabapgit_object_dtel.prog.xml index f27be3dc9..7993eff31 100644 --- a/src/zabapgit_object_dtel.prog.xml +++ b/src/zabapgit_object_dtel.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_DTEL A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_DTEL 28 - diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index 3515f207c..4df55118e 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -1055,4 +1055,4 @@ CLASS lcl_object_enho IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. "lif_object~compare_to_remote_version -ENDCLASS. "lcl_object_enho IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_enho IMPLEMENTATION diff --git a/src/zabapgit_object_enho.prog.xml b/src/zabapgit_object_enho.prog.xml index 5e8fde11e..506c910ff 100644 --- a/src/zabapgit_object_enho.prog.xml +++ b/src/zabapgit_object_enho.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_ENHO A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_ENHO 28 - diff --git a/src/zabapgit_object_enhs.prog.abap b/src/zabapgit_object_enhs.prog.abap index e3e021e3a..623d4dbbd 100644 --- a/src/zabapgit_object_enhs.prog.abap +++ b/src/zabapgit_object_enhs.prog.abap @@ -215,4 +215,4 @@ CLASS lcl_object_enhs IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_enhs \ No newline at end of file +ENDCLASS. "lcl_object_enhs diff --git a/src/zabapgit_object_enhs.prog.xml b/src/zabapgit_object_enhs.prog.xml index aba2f76bd..afb39dbdc 100644 --- a/src/zabapgit_object_enhs.prog.xml +++ b/src/zabapgit_object_enhs.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_ENHS A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_ENHS 28 - diff --git a/src/zabapgit_object_enqu.prog.abap b/src/zabapgit_object_enqu.prog.abap index 43ba2a3db..0daf862d9 100644 --- a/src/zabapgit_object_enqu.prog.abap +++ b/src/zabapgit_object_enqu.prog.abap @@ -187,4 +187,4 @@ CLASS lcl_object_enqu IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_enqu IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_enqu IMPLEMENTATION diff --git a/src/zabapgit_object_enqu.prog.xml b/src/zabapgit_object_enqu.prog.xml index 205e9f4bd..0b58488cc 100644 --- a/src/zabapgit_object_enqu.prog.xml +++ b/src/zabapgit_object_enqu.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_ENQU A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_ENUQ 28 - diff --git a/src/zabapgit_object_ensc.prog.abap b/src/zabapgit_object_ensc.prog.abap index cc29f012f..c7bdc0a8b 100644 --- a/src/zabapgit_object_ensc.prog.abap +++ b/src/zabapgit_object_ensc.prog.abap @@ -194,4 +194,4 @@ CLASS lcl_object_ensc IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_ensc \ No newline at end of file +ENDCLASS. "lcl_object_ensc diff --git a/src/zabapgit_object_ensc.prog.xml b/src/zabapgit_object_ensc.prog.xml index 24fe588db..735d6a196 100644 --- a/src/zabapgit_object_ensc.prog.xml +++ b/src/zabapgit_object_ensc.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_ENSC A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_ENSC 28 - diff --git a/src/zabapgit_object_fugr.prog.abap b/src/zabapgit_object_fugr.prog.abap index dddc1db06..63a63ab96 100644 --- a/src/zabapgit_object_fugr.prog.abap +++ b/src/zabapgit_object_fugr.prog.abap @@ -764,4 +764,4 @@ CLASS lcl_object_fugr IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_fugr IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_fugr IMPLEMENTATION diff --git a/src/zabapgit_object_fugr.prog.xml b/src/zabapgit_object_fugr.prog.xml index 1d911fdc1..2db659b49 100644 --- a/src/zabapgit_object_fugr.prog.xml +++ b/src/zabapgit_object_fugr.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_FUGR A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_FUGR 28 - diff --git a/src/zabapgit_object_iarp.prog.abap b/src/zabapgit_object_iarp.prog.abap index 9d6fb5bed..ecf2118d5 100644 --- a/src/zabapgit_object_iarp.prog.abap +++ b/src/zabapgit_object_iarp.prog.abap @@ -192,4 +192,4 @@ CLASS lcl_object_iarp IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_iarp IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_iarp IMPLEMENTATION diff --git a/src/zabapgit_object_iarp.prog.xml b/src/zabapgit_object_iarp.prog.xml index 46b112ef2..24b0a2fdf 100644 --- a/src/zabapgit_object_iarp.prog.xml +++ b/src/zabapgit_object_iarp.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_IARP A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_IARP 28 - diff --git a/src/zabapgit_object_iasp.prog.abap b/src/zabapgit_object_iasp.prog.abap index 30ee4e5f7..ae8338707 100644 --- a/src/zabapgit_object_iasp.prog.abap +++ b/src/zabapgit_object_iasp.prog.abap @@ -192,4 +192,4 @@ CLASS lcl_object_iasp IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_iasp IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_iasp IMPLEMENTATION diff --git a/src/zabapgit_object_iasp.prog.xml b/src/zabapgit_object_iasp.prog.xml index 6c4de26bb..5acfdf6dd 100644 --- a/src/zabapgit_object_iasp.prog.xml +++ b/src/zabapgit_object_iasp.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_IASP A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_IASP 28 - diff --git a/src/zabapgit_object_iatu.prog.abap b/src/zabapgit_object_iatu.prog.abap index 2373edf40..57321b2cb 100644 --- a/src/zabapgit_object_iatu.prog.abap +++ b/src/zabapgit_object_iatu.prog.abap @@ -209,4 +209,4 @@ CLASS lcl_object_iatu IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_iatu IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_iatu IMPLEMENTATION diff --git a/src/zabapgit_object_iatu.prog.xml b/src/zabapgit_object_iatu.prog.xml index 449360e3d..56705931a 100644 --- a/src/zabapgit_object_iatu.prog.xml +++ b/src/zabapgit_object_iatu.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_IATU A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_IATU 28 - diff --git a/src/zabapgit_object_msag.prog.abap b/src/zabapgit_object_msag.prog.abap index bfb8d2837..447502686 100644 --- a/src/zabapgit_object_msag.prog.abap +++ b/src/zabapgit_object_msag.prog.abap @@ -300,4 +300,4 @@ CLASS lcl_object_msag IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_msag IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_msag IMPLEMENTATION diff --git a/src/zabapgit_object_msag.prog.xml b/src/zabapgit_object_msag.prog.xml index f2d00825d..6753f5137 100644 --- a/src/zabapgit_object_msag.prog.xml +++ b/src/zabapgit_object_msag.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_MSAG A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_MSAG 28 - diff --git a/src/zabapgit_object_nrob.prog.abap b/src/zabapgit_object_nrob.prog.abap index 47edb4254..62987cf57 100644 --- a/src/zabapgit_object_nrob.prog.abap +++ b/src/zabapgit_object_nrob.prog.abap @@ -272,4 +272,4 @@ CLASS lcl_object_nrob IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_nrob IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_nrob IMPLEMENTATION diff --git a/src/zabapgit_object_nrob.prog.xml b/src/zabapgit_object_nrob.prog.xml index 34309b7e4..77f8a3b7a 100644 --- a/src/zabapgit_object_nrob.prog.xml +++ b/src/zabapgit_object_nrob.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_NROB A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_NROB 28 - diff --git a/src/zabapgit_object_para.prog.abap b/src/zabapgit_object_para.prog.abap index e13cb24f7..c3ad3e5b8 100644 --- a/src/zabapgit_object_para.prog.abap +++ b/src/zabapgit_object_para.prog.abap @@ -148,4 +148,4 @@ CLASS lcl_object_para IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_para IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_para IMPLEMENTATION diff --git a/src/zabapgit_object_para.prog.xml b/src/zabapgit_object_para.prog.xml index 60c2adcf0..6524a0404 100644 --- a/src/zabapgit_object_para.prog.xml +++ b/src/zabapgit_object_para.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_PARA A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_PARA 28 - diff --git a/src/zabapgit_object_pinf.prog.abap b/src/zabapgit_object_pinf.prog.abap index 727fd1fb1..a992e0590 100644 --- a/src/zabapgit_object_pinf.prog.abap +++ b/src/zabapgit_object_pinf.prog.abap @@ -352,4 +352,4 @@ CLASS lcl_object_pinf IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_PINF IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_PINF IMPLEMENTATION diff --git a/src/zabapgit_object_pinf.prog.xml b/src/zabapgit_object_pinf.prog.xml index b9cb78ec0..f670e1a2c 100644 --- a/src/zabapgit_object_pinf.prog.xml +++ b/src/zabapgit_object_pinf.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_PINF A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_PINF 28 - diff --git a/src/zabapgit_object_prog.prog.abap b/src/zabapgit_object_prog.prog.abap index c3a32baee..17700fa4a 100644 --- a/src/zabapgit_object_prog.prog.abap +++ b/src/zabapgit_object_prog.prog.abap @@ -140,4 +140,4 @@ CLASS lcl_object_prog IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_prog IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_prog IMPLEMENTATION diff --git a/src/zabapgit_object_prog.prog.xml b/src/zabapgit_object_prog.prog.xml index 508c79fd4..63cab6974 100644 --- a/src/zabapgit_object_prog.prog.xml +++ b/src/zabapgit_object_prog.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_PROG A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_PROG 28 - diff --git a/src/zabapgit_object_serializing.prog.abap b/src/zabapgit_object_serializing.prog.abap index 0536d687c..1acc6fa52 100644 --- a/src/zabapgit_object_serializing.prog.abap +++ b/src/zabapgit_object_serializing.prog.abap @@ -48,4 +48,4 @@ INCLUDE zabapgit_object_w3xx. INCLUDE zabapgit_object_wdya. INCLUDE zabapgit_object_wdyn. INCLUDE zabapgit_object_webi. -INCLUDE zabapgit_object_xslt. \ No newline at end of file +INCLUDE zabapgit_object_xslt. diff --git a/src/zabapgit_object_serializing.prog.xml b/src/zabapgit_object_serializing.prog.xml index cfd9247d6..fde95641c 100644 --- a/src/zabapgit_object_serializing.prog.xml +++ b/src/zabapgit_object_serializing.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_SERIALIZING A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_SERIALIZATION 37 - diff --git a/src/zabapgit_object_sfbf.prog.abap b/src/zabapgit_object_sfbf.prog.abap index 03bada100..154582f2f 100644 --- a/src/zabapgit_object_sfbf.prog.abap +++ b/src/zabapgit_object_sfbf.prog.abap @@ -238,4 +238,4 @@ CLASS lcl_object_sfbf IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_SFBF IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_SFBF IMPLEMENTATION diff --git a/src/zabapgit_object_sfbf.prog.xml b/src/zabapgit_object_sfbf.prog.xml index b4e34931a..76e5ac9d8 100644 --- a/src/zabapgit_object_sfbf.prog.xml +++ b/src/zabapgit_object_sfbf.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_SFBF A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_SFBF 28 - diff --git a/src/zabapgit_object_sfbs.prog.abap b/src/zabapgit_object_sfbs.prog.abap index 4ff5c288e..78b76e509 100644 --- a/src/zabapgit_object_sfbs.prog.abap +++ b/src/zabapgit_object_sfbs.prog.abap @@ -214,4 +214,4 @@ CLASS lcl_object_sfbs IMPLEMENTATION. -ENDCLASS. "lcl_object_SFBS IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_SFBS IMPLEMENTATION diff --git a/src/zabapgit_object_sfbs.prog.xml b/src/zabapgit_object_sfbs.prog.xml index d92d19c27..c4b4957d6 100644 --- a/src/zabapgit_object_sfbs.prog.xml +++ b/src/zabapgit_object_sfbs.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_SFBS A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_SFBS 28 - diff --git a/src/zabapgit_object_sfsw.prog.abap b/src/zabapgit_object_sfsw.prog.abap index 3812c9eaf..5f0d563c0 100644 --- a/src/zabapgit_object_sfsw.prog.abap +++ b/src/zabapgit_object_sfsw.prog.abap @@ -206,4 +206,4 @@ CLASS lcl_object_sfsw IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_sfsw IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_sfsw IMPLEMENTATION diff --git a/src/zabapgit_object_sfsw.prog.xml b/src/zabapgit_object_sfsw.prog.xml index f21c9b800..6096a8269 100644 --- a/src/zabapgit_object_sfsw.prog.xml +++ b/src/zabapgit_object_sfsw.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_SFSW A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_SFSW 28 - diff --git a/src/zabapgit_object_shi3.prog.abap b/src/zabapgit_object_shi3.prog.abap index 382b08bcd..baf26fb0f 100644 --- a/src/zabapgit_object_shi3.prog.abap +++ b/src/zabapgit_object_shi3.prog.abap @@ -328,4 +328,4 @@ CLASS lcl_object_shi3 IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_shi3 IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_shi3 IMPLEMENTATION diff --git a/src/zabapgit_object_shi3.prog.xml b/src/zabapgit_object_shi3.prog.xml index a6432c322..80b375e9d 100644 --- a/src/zabapgit_object_shi3.prog.xml +++ b/src/zabapgit_object_shi3.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_SHI3 A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_SHI3 28 - diff --git a/src/zabapgit_object_shlp.prog.abap b/src/zabapgit_object_shlp.prog.abap index e9c34345e..604d6f897 100644 --- a/src/zabapgit_object_shlp.prog.abap +++ b/src/zabapgit_object_shlp.prog.abap @@ -208,4 +208,4 @@ CLASS lcl_object_shlp IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_shlp IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_shlp IMPLEMENTATION diff --git a/src/zabapgit_object_shlp.prog.xml b/src/zabapgit_object_shlp.prog.xml index 9a694e7c3..9bd3083e4 100644 --- a/src/zabapgit_object_shlp.prog.xml +++ b/src/zabapgit_object_shlp.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_SHLP A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_SHLP 28 - diff --git a/src/zabapgit_object_sicf.prog.abap b/src/zabapgit_object_sicf.prog.abap index 882727021..c495a443c 100644 --- a/src/zabapgit_object_sicf.prog.abap +++ b/src/zabapgit_object_sicf.prog.abap @@ -426,4 +426,4 @@ CLASS lcl_object_sicf IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_sicf IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_sicf IMPLEMENTATION diff --git a/src/zabapgit_object_sicf.prog.xml b/src/zabapgit_object_sicf.prog.xml index a11ae0758..0af1dfc8c 100644 --- a/src/zabapgit_object_sicf.prog.xml +++ b/src/zabapgit_object_sicf.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_SICF A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_SICF 28 - diff --git a/src/zabapgit_object_smim.prog.abap b/src/zabapgit_object_smim.prog.abap index 7fe035bc1..ac30efc6b 100644 --- a/src/zabapgit_object_smim.prog.abap +++ b/src/zabapgit_object_smim.prog.abap @@ -321,4 +321,4 @@ CLASS lcl_object_smim IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_smim IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_smim IMPLEMENTATION diff --git a/src/zabapgit_object_smim.prog.xml b/src/zabapgit_object_smim.prog.xml index 9bae0d613..ecdeb3942 100644 --- a/src/zabapgit_object_smim.prog.xml +++ b/src/zabapgit_object_smim.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_SMIM A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_SMIM 28 - diff --git a/src/zabapgit_object_splo.prog.abap b/src/zabapgit_object_splo.prog.abap index c8a958482..a056c1b38 100644 --- a/src/zabapgit_object_splo.prog.abap +++ b/src/zabapgit_object_splo.prog.abap @@ -131,4 +131,4 @@ CLASS lcl_object_splo IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_splo IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_splo IMPLEMENTATION diff --git a/src/zabapgit_object_splo.prog.xml b/src/zabapgit_object_splo.prog.xml index 90a46fbaf..af48a7774 100644 --- a/src/zabapgit_object_splo.prog.xml +++ b/src/zabapgit_object_splo.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_SPLO A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_SPLO 28 - diff --git a/src/zabapgit_object_ssfo.prog.abap b/src/zabapgit_object_ssfo.prog.abap index efef1e0c8..248443624 100644 --- a/src/zabapgit_object_ssfo.prog.abap +++ b/src/zabapgit_object_ssfo.prog.abap @@ -242,4 +242,4 @@ CLASS lcl_object_ssfo IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_ssfo IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_ssfo IMPLEMENTATION diff --git a/src/zabapgit_object_ssfo.prog.xml b/src/zabapgit_object_ssfo.prog.xml index 9545a6bce..c3a33beef 100644 --- a/src/zabapgit_object_ssfo.prog.xml +++ b/src/zabapgit_object_ssfo.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_SSFO A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_SSFO 28 - diff --git a/src/zabapgit_object_ssst.prog.abap b/src/zabapgit_object_ssst.prog.abap index 40dced694..def3c24af 100644 --- a/src/zabapgit_object_ssst.prog.abap +++ b/src/zabapgit_object_ssst.prog.abap @@ -207,4 +207,4 @@ CLASS lcl_object_ssst IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_ssst IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_ssst IMPLEMENTATION diff --git a/src/zabapgit_object_ssst.prog.xml b/src/zabapgit_object_ssst.prog.xml index a39f3f914..35653ad0f 100644 --- a/src/zabapgit_object_ssst.prog.xml +++ b/src/zabapgit_object_ssst.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_SSST A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_SSST 28 - diff --git a/src/zabapgit_object_susc.prog.abap b/src/zabapgit_object_susc.prog.abap index 615cb27a6..e0a5be805 100644 --- a/src/zabapgit_object_susc.prog.abap +++ b/src/zabapgit_object_susc.prog.abap @@ -127,4 +127,4 @@ CLASS lcl_object_susc IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_susc IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_susc IMPLEMENTATION diff --git a/src/zabapgit_object_susc.prog.xml b/src/zabapgit_object_susc.prog.xml index 7a3199e11..ec145a928 100644 --- a/src/zabapgit_object_susc.prog.xml +++ b/src/zabapgit_object_susc.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_SUSC A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_SUSC 28 - diff --git a/src/zabapgit_object_suso.prog.abap b/src/zabapgit_object_suso.prog.abap index 09eace64a..ebd09188b 100644 --- a/src/zabapgit_object_suso.prog.abap +++ b/src/zabapgit_object_suso.prog.abap @@ -173,4 +173,4 @@ CLASS lcl_object_suso IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_suso IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_suso IMPLEMENTATION diff --git a/src/zabapgit_object_suso.prog.xml b/src/zabapgit_object_suso.prog.xml index 7630b96d1..6c50ceeb2 100644 --- a/src/zabapgit_object_suso.prog.xml +++ b/src/zabapgit_object_suso.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_SUSO A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_SUSO 28 - diff --git a/src/zabapgit_object_tabl.prog.abap b/src/zabapgit_object_tabl.prog.abap index 773fbdd22..de2f10201 100644 --- a/src/zabapgit_object_tabl.prog.abap +++ b/src/zabapgit_object_tabl.prog.abap @@ -433,4 +433,4 @@ CLASS lcl_object_tabl IMPLEMENTATION. ENDIF. ENDMETHOD. -ENDCLASS. "lcl_object_TABL IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_TABL IMPLEMENTATION diff --git a/src/zabapgit_object_tabl.prog.xml b/src/zabapgit_object_tabl.prog.xml index ca1c45f41..8f6de638d 100644 --- a/src/zabapgit_object_tabl.prog.xml +++ b/src/zabapgit_object_tabl.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_TABL A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_TABL 28 - diff --git a/src/zabapgit_object_tabl_valid.prog.abap b/src/zabapgit_object_tabl_valid.prog.abap index a79812452..6c33de4a5 100644 --- a/src/zabapgit_object_tabl_valid.prog.abap +++ b/src/zabapgit_object_tabl_valid.prog.abap @@ -216,4 +216,4 @@ CLASS lct_table_validation IMPLEMENTATION. iv_xml = mo_current_version_out_xml->render( ). ENDMETHOD. -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_object_tabl_valid.prog.xml b/src/zabapgit_object_tabl_valid.prog.xml index 0a56f24a3..5198ea961 100644 --- a/src/zabapgit_object_tabl_valid.prog.xml +++ b/src/zabapgit_object_tabl_valid.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_TABL_VALID A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_TABL_VALID 34 - diff --git a/src/zabapgit_object_tobj.prog.abap b/src/zabapgit_object_tobj.prog.abap index 3319bbee6..408c2dd6e 100644 --- a/src/zabapgit_object_tobj.prog.abap +++ b/src/zabapgit_object_tobj.prog.abap @@ -187,4 +187,4 @@ CLASS lcl_object_tobj IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_tobj IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_tobj IMPLEMENTATION diff --git a/src/zabapgit_object_tobj.prog.xml b/src/zabapgit_object_tobj.prog.xml index 3198d35a3..7a70a2b7a 100644 --- a/src/zabapgit_object_tobj.prog.xml +++ b/src/zabapgit_object_tobj.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_TOBJ A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_TOBJ 28 - diff --git a/src/zabapgit_object_tran.prog.abap b/src/zabapgit_object_tran.prog.abap index 7b7f20cc0..18b030d4d 100644 --- a/src/zabapgit_object_tran.prog.abap +++ b/src/zabapgit_object_tran.prog.abap @@ -418,4 +418,4 @@ CLASS lcl_object_tran IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_tran IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_tran IMPLEMENTATION diff --git a/src/zabapgit_object_tran.prog.xml b/src/zabapgit_object_tran.prog.xml index 0e52e4fbb..90022ad92 100644 --- a/src/zabapgit_object_tran.prog.xml +++ b/src/zabapgit_object_tran.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_TRAN A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_TRAN 28 - diff --git a/src/zabapgit_object_ttyp.prog.abap b/src/zabapgit_object_ttyp.prog.abap index 0ef632c77..a621527ca 100644 --- a/src/zabapgit_object_ttyp.prog.abap +++ b/src/zabapgit_object_ttyp.prog.abap @@ -187,4 +187,4 @@ CLASS lcl_object_ttyp IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_ttyp IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_ttyp IMPLEMENTATION diff --git a/src/zabapgit_object_ttyp.prog.xml b/src/zabapgit_object_ttyp.prog.xml index ffd8a5c56..8f41a7b2d 100644 --- a/src/zabapgit_object_ttyp.prog.xml +++ b/src/zabapgit_object_ttyp.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_TTYP A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_TTYP 28 - diff --git a/src/zabapgit_object_type.prog.abap b/src/zabapgit_object_type.prog.abap index 8068d26c1..1908b94e0 100644 --- a/src/zabapgit_object_type.prog.abap +++ b/src/zabapgit_object_type.prog.abap @@ -209,4 +209,4 @@ CLASS lcl_object_type IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_type IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_type IMPLEMENTATION diff --git a/src/zabapgit_object_type.prog.xml b/src/zabapgit_object_type.prog.xml index 6e2711cee..aeb879eb0 100644 --- a/src/zabapgit_object_type.prog.xml +++ b/src/zabapgit_object_type.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_TYPE A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_TYPE 28 - diff --git a/src/zabapgit_object_vcls.prog.abap b/src/zabapgit_object_vcls.prog.abap index 05094edfd..4b4952620 100644 --- a/src/zabapgit_object_vcls.prog.abap +++ b/src/zabapgit_object_vcls.prog.abap @@ -199,4 +199,4 @@ CLASS lcl_object_vcls IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_vcls IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_vcls IMPLEMENTATION diff --git a/src/zabapgit_object_vcls.prog.xml b/src/zabapgit_object_vcls.prog.xml index 9d5c37372..43e48849b 100644 --- a/src/zabapgit_object_vcls.prog.xml +++ b/src/zabapgit_object_vcls.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_VCLS A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_VCLS 28 - diff --git a/src/zabapgit_object_view.prog.abap b/src/zabapgit_object_view.prog.abap index cbd51c60e..49632e13f 100644 --- a/src/zabapgit_object_view.prog.abap +++ b/src/zabapgit_object_view.prog.abap @@ -248,4 +248,4 @@ CLASS lcl_object_view IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_view IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_view IMPLEMENTATION diff --git a/src/zabapgit_object_view.prog.xml b/src/zabapgit_object_view.prog.xml index b242baeb5..bd95ce1c0 100644 --- a/src/zabapgit_object_view.prog.xml +++ b/src/zabapgit_object_view.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_VIEW A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_VIEW 28 - diff --git a/src/zabapgit_object_w3xx.prog.abap b/src/zabapgit_object_w3xx.prog.abap index c14bdc062..26e19791b 100644 --- a/src/zabapgit_object_w3xx.prog.abap +++ b/src/zabapgit_object_w3xx.prog.abap @@ -443,4 +443,4 @@ ENDCLASS. "lcl_object_W3MI DEFINITION * Web Reporting/Internet Transaction Server MIME Types (html data) *----------------------------------------------------------------------* CLASS lcl_object_w3ht DEFINITION INHERITING FROM lcl_object_w3super FINAL. -ENDCLASS. "lcl_object_W3HT DEFINITION \ No newline at end of file +ENDCLASS. "lcl_object_W3HT DEFINITION diff --git a/src/zabapgit_object_w3xx.prog.xml b/src/zabapgit_object_w3xx.prog.xml index e5efdbbac..1f67e528b 100644 --- a/src/zabapgit_object_w3xx.prog.xml +++ b/src/zabapgit_object_w3xx.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_W3XX A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_W3XX 28 - diff --git a/src/zabapgit_object_wdya.prog.abap b/src/zabapgit_object_wdya.prog.abap index 3d1defc49..578d901cc 100644 --- a/src/zabapgit_object_wdya.prog.abap +++ b/src/zabapgit_object_wdya.prog.abap @@ -215,4 +215,4 @@ CLASS lcl_object_wdya IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_wdya IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_wdya IMPLEMENTATION diff --git a/src/zabapgit_object_wdya.prog.xml b/src/zabapgit_object_wdya.prog.xml index 4387af0e9..65ce6f1b2 100644 --- a/src/zabapgit_object_wdya.prog.xml +++ b/src/zabapgit_object_wdya.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_WDYA A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_WDYA 28 - diff --git a/src/zabapgit_object_wdyn.prog.abap b/src/zabapgit_object_wdyn.prog.abap index faef8e810..ba33a8a24 100644 --- a/src/zabapgit_object_wdyn.prog.abap +++ b/src/zabapgit_object_wdyn.prog.abap @@ -802,4 +802,4 @@ CLASS lcl_object_wdyn IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. "lif_object~compare_to_remote_version -ENDCLASS. "lcl_object_wdyn IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_wdyn IMPLEMENTATION diff --git a/src/zabapgit_object_wdyn.prog.xml b/src/zabapgit_object_wdyn.prog.xml index 8439027ce..119f8e2d2 100644 --- a/src/zabapgit_object_wdyn.prog.xml +++ b/src/zabapgit_object_wdyn.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_WDYN A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_WDYN 28 - diff --git a/src/zabapgit_object_webi.prog.abap b/src/zabapgit_object_webi.prog.abap index e3a690dbb..d2c5a9110 100644 --- a/src/zabapgit_object_webi.prog.abap +++ b/src/zabapgit_object_webi.prog.abap @@ -447,4 +447,4 @@ CLASS lcl_object_webi IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_webi IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_webi IMPLEMENTATION diff --git a/src/zabapgit_object_webi.prog.xml b/src/zabapgit_object_webi.prog.xml index db71c561c..3d7cd0b72 100644 --- a/src/zabapgit_object_webi.prog.xml +++ b/src/zabapgit_object_webi.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_WEBI A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_WEBI 28 - diff --git a/src/zabapgit_object_xslt.prog.abap b/src/zabapgit_object_xslt.prog.abap index dc359b965..126eec81b 100644 --- a/src/zabapgit_object_xslt.prog.abap +++ b/src/zabapgit_object_xslt.prog.abap @@ -192,4 +192,4 @@ CLASS lcl_object_xslt IMPLEMENTATION. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. -ENDCLASS. "lcl_object_xslt IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_xslt IMPLEMENTATION diff --git a/src/zabapgit_object_xslt.prog.xml b/src/zabapgit_object_xslt.prog.xml index 37eee2114..200b754aa 100644 --- a/src/zabapgit_object_xslt.prog.xml +++ b/src/zabapgit_object_xslt.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECT_XSLT A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT_XSLT 28 - diff --git a/src/zabapgit_objects.prog.xml b/src/zabapgit_objects.prog.xml index a849c4fa4..48776da05 100644 --- a/src/zabapgit_objects.prog.xml +++ b/src/zabapgit_objects.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECTS A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECTS 24 - diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap index 770740d2a..a37f4f419 100644 --- a/src/zabapgit_objects_impl.prog.abap +++ b/src/zabapgit_objects_impl.prog.abap @@ -742,4 +742,4 @@ CLASS lcl_objects IMPLEMENTATION. ENDMETHOD. -ENDCLASS. "lcl_objects IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_objects IMPLEMENTATION diff --git a/src/zabapgit_objects_impl.prog.xml b/src/zabapgit_objects_impl.prog.xml index f426626b7..8fd2077d7 100644 --- a/src/zabapgit_objects_impl.prog.xml +++ b/src/zabapgit_objects_impl.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_OBJECTS_IMPL A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_OBJECT 23 - diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index 078a1ea27..3ec5c331f 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -184,4 +184,4 @@ CLASS lcl_gui_page IMPLEMENTATION. ENDMETHOD. " lif_gui_page~render. -ENDCLASS. "lcl_gui_page \ No newline at end of file +ENDCLASS. "lcl_gui_page diff --git a/src/zabapgit_page.prog.xml b/src/zabapgit_page.prog.xml index e834a5280..be0c12979 100644 --- a/src/zabapgit_page.prog.xml +++ b/src/zabapgit_page.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_PAGE A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_PAGE 21 - diff --git a/src/zabapgit_page_background.prog.abap b/src/zabapgit_page_background.prog.abap index 691bcbf1b..1ffa6cc60 100644 --- a/src/zabapgit_page_background.prog.abap +++ b/src/zabapgit_page_background.prog.abap @@ -246,4 +246,4 @@ CLASS lcl_gui_page_background IMPLEMENTATION. ENDMETHOD. "render_content -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_page_background.prog.xml b/src/zabapgit_page_background.prog.xml index 8edbac35e..f2855627a 100644 --- a/src/zabapgit_page_background.prog.xml +++ b/src/zabapgit_page_background.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_PAGE_BACKGROUND A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_PAGE_BACKGROUND 32 - diff --git a/src/zabapgit_page_branch_overview.prog.abap b/src/zabapgit_page_branch_overview.prog.abap index 297dc2990..a98e66738 100644 --- a/src/zabapgit_page_branch_overview.prog.abap +++ b/src/zabapgit_page_branch_overview.prog.abap @@ -591,4 +591,4 @@ CLASS lcl_gui_page_branch_overview IMPLEMENTATION. ENDMETHOD. "render_content -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_page_branch_overview.prog.xml b/src/zabapgit_page_branch_overview.prog.xml index f9bc1a592..ee044f1f4 100644 --- a/src/zabapgit_page_branch_overview.prog.xml +++ b/src/zabapgit_page_branch_overview.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_PAGE_BRANCH_OVERVIEW A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_PAGE_BRANCH_OVERVIEW 37 - diff --git a/src/zabapgit_page_commit.prog.abap b/src/zabapgit_page_commit.prog.abap index 4914b6d7d..c9550a045 100644 --- a/src/zabapgit_page_commit.prog.abap +++ b/src/zabapgit_page_commit.prog.abap @@ -219,4 +219,4 @@ CLASS lcl_gui_page_commit IMPLEMENTATION. ENDMETHOD. "scripts -ENDCLASS. "lcl_gui_page_commit \ No newline at end of file +ENDCLASS. "lcl_gui_page_commit diff --git a/src/zabapgit_page_commit.prog.xml b/src/zabapgit_page_commit.prog.xml index 902f3a12b..6090e4cd1 100644 --- a/src/zabapgit_page_commit.prog.xml +++ b/src/zabapgit_page_commit.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_PAGE_COMMIT A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_PAGE_COMMIT 28 - diff --git a/src/zabapgit_page_db.prog.abap b/src/zabapgit_page_db.prog.abap index bb637d5a9..d05b1723c 100644 --- a/src/zabapgit_page_db.prog.abap +++ b/src/zabapgit_page_db.prog.abap @@ -268,4 +268,4 @@ CLASS lcl_gui_page_db IMPLEMENTATION. ENDCASE. ENDMETHOD. "explain_content -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_page_db.prog.xml b/src/zabapgit_page_db.prog.xml index 440928dc0..89c5081a0 100644 --- a/src/zabapgit_page_db.prog.xml +++ b/src/zabapgit_page_db.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_PAGE_DB A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_PAGE_DB 24 - diff --git a/src/zabapgit_page_debug.prog.abap b/src/zabapgit_page_debug.prog.abap index 6d2dfa9f3..4e26aa5ee 100644 --- a/src/zabapgit_page_debug.prog.abap +++ b/src/zabapgit_page_debug.prog.abap @@ -97,4 +97,4 @@ CLASS lcl_gui_page_debuginfo IMPLEMENTATION. ENDMETHOD. "scripts -ENDCLASS. "lcl_gui_page_debuginfo \ No newline at end of file +ENDCLASS. "lcl_gui_page_debuginfo diff --git a/src/zabapgit_page_debug.prog.xml b/src/zabapgit_page_debug.prog.xml index 3a6595916..fd99ac7c5 100644 --- a/src/zabapgit_page_debug.prog.xml +++ b/src/zabapgit_page_debug.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_PAGE_DEBUG A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_PAGE_DEBUG 27 - diff --git a/src/zabapgit_page_diff.prog.abap b/src/zabapgit_page_diff.prog.abap index c00b09add..22316357a 100644 --- a/src/zabapgit_page_diff.prog.abap +++ b/src/zabapgit_page_diff.prog.abap @@ -483,4 +483,4 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. ENDMETHOD. "render_line_unified -ENDCLASS. "lcl_gui_page_diff \ No newline at end of file +ENDCLASS. "lcl_gui_page_diff diff --git a/src/zabapgit_page_diff.prog.xml b/src/zabapgit_page_diff.prog.xml index c4a21410c..ddcc8fbd9 100644 --- a/src/zabapgit_page_diff.prog.xml +++ b/src/zabapgit_page_diff.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_PAGE_DIFF A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_PAGE_DIFF 26 - diff --git a/src/zabapgit_page_explore.prog.abap b/src/zabapgit_page_explore.prog.abap index e46baba68..ea5e75bcd 100644 --- a/src/zabapgit_page_explore.prog.abap +++ b/src/zabapgit_page_explore.prog.abap @@ -26,4 +26,4 @@ CLASS lcl_gui_page_explore IMPLEMENTATION. ASSERT 1 = 1. " Dummy ENDMETHOD. "render_content. -ENDCLASS. "lcl_gui_page_explore IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_gui_page_explore IMPLEMENTATION diff --git a/src/zabapgit_page_explore.prog.xml b/src/zabapgit_page_explore.prog.xml index e1a90a7d3..cfedbf9a9 100644 --- a/src/zabapgit_page_explore.prog.xml +++ b/src/zabapgit_page_explore.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_PAGE_EXPLORE A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_PAGE_EXPLORE 29 - diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap index 1cad667f1..fe47740c7 100644 --- a/src/zabapgit_page_main.prog.abap +++ b/src/zabapgit_page_main.prog.abap @@ -338,4 +338,4 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ENDMETHOD. "render_repo -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_page_main.prog.xml b/src/zabapgit_page_main.prog.xml index 3ac53fc8d..f677a3ae3 100644 --- a/src/zabapgit_page_main.prog.xml +++ b/src/zabapgit_page_main.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_PAGE_MAIN A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_PAGE_MAIN 26 - diff --git a/src/zabapgit_page_merge.prog.abap b/src/zabapgit_page_merge.prog.abap index e51157d7a..f55542f18 100644 --- a/src/zabapgit_page_merge.prog.abap +++ b/src/zabapgit_page_merge.prog.abap @@ -478,4 +478,4 @@ CLASS lcl_gui_page_merge IMPLEMENTATION. ENDMETHOD. "render_content -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_page_merge.prog.xml b/src/zabapgit_page_merge.prog.xml index 8643e362b..a08ecbcba 100644 --- a/src/zabapgit_page_merge.prog.xml +++ b/src/zabapgit_page_merge.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_PAGE_MERGE A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_PAGE_MERGE 27 - diff --git a/src/zabapgit_page_settings.prog.abap b/src/zabapgit_page_settings.prog.abap index fc286de70..075ecedc6 100644 --- a/src/zabapgit_page_settings.prog.abap +++ b/src/zabapgit_page_settings.prog.abap @@ -233,4 +233,4 @@ CLASS lcl_gui_page_settings IMPLEMENTATION. ro_html->add( |
| ). ENDMETHOD. -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_page_settings.prog.xml b/src/zabapgit_page_settings.prog.xml index 8506d80c5..31a798767 100644 --- a/src/zabapgit_page_settings.prog.xml +++ b/src/zabapgit_page_settings.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_PAGE_SETTINGS A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_PAGE_SETTINGS 30 - diff --git a/src/zabapgit_page_stage.prog.abap b/src/zabapgit_page_stage.prog.abap index e460b7c1b..70ab47e95 100644 --- a/src/zabapgit_page_stage.prog.abap +++ b/src/zabapgit_page_stage.prog.abap @@ -261,4 +261,4 @@ CLASS lcl_gui_page_stage IMPLEMENTATION. ENDMETHOD. "scripts -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_page_stage.prog.xml b/src/zabapgit_page_stage.prog.xml index 4c5081d0c..39f1bd3dc 100644 --- a/src/zabapgit_page_stage.prog.xml +++ b/src/zabapgit_page_stage.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_PAGE_STAGE A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_PAGE_STAGE 27 - diff --git a/src/zabapgit_password_dialog.prog.abap b/src/zabapgit_password_dialog.prog.abap index 896d94e0a..354f0d44d 100644 --- a/src/zabapgit_password_dialog.prog.abap +++ b/src/zabapgit_password_dialog.prog.abap @@ -128,4 +128,4 @@ CLASS lcl_password_dialog IMPLEMENTATION. ENDMETHOD. "on_screen_event -ENDCLASS. " lcl_password_dialog IMPLEMENTATION \ No newline at end of file +ENDCLASS. " lcl_password_dialog IMPLEMENTATION diff --git a/src/zabapgit_password_dialog.prog.xml b/src/zabapgit_password_dialog.prog.xml index bbc81505b..6792ff817 100644 --- a/src/zabapgit_password_dialog.prog.xml +++ b/src/zabapgit_password_dialog.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_PASSWORD_DIALOG A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Password dialog and selection screen 36 - diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index 531cd586b..7232279af 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -1595,4 +1595,4 @@ CLASS lcl_persistence_settings IMPLEMENTATION. ENDTRY. ENDMETHOD. -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_persistence.prog.xml b/src/zabapgit_persistence.prog.xml index 49f6b180a..9f6f980ea 100644 --- a/src/zabapgit_persistence.prog.xml +++ b/src/zabapgit_persistence.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_PERSISTENCE A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_PERSISTENCE 28 - diff --git a/src/zabapgit_persistence_old.prog.abap b/src/zabapgit_persistence_old.prog.abap index 78b900f2e..a30b6ae36 100644 --- a/src/zabapgit_persistence_old.prog.abap +++ b/src/zabapgit_persistence_old.prog.abap @@ -566,4 +566,4 @@ CLASS lcl_user IMPLEMENTATION. ENDMETHOD. "get_email -ENDCLASS. "lcl_user IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_user IMPLEMENTATION diff --git a/src/zabapgit_persistence_old.prog.xml b/src/zabapgit_persistence_old.prog.xml index 5204f19c3..670887559 100644 --- a/src/zabapgit_persistence_old.prog.xml +++ b/src/zabapgit_persistence_old.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_PERSISTENCE_OLD A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_PERSISTENCE_OLD 32 - diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index ff7a4238f..46f82d07a 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -482,4 +482,4 @@ CLASS lcl_popups IMPLEMENTATION. ENDMETHOD. " popup_to_inform. -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_popups.prog.xml b/src/zabapgit_popups.prog.xml index ff7fba395..bb223be13 100644 --- a/src/zabapgit_popups.prog.xml +++ b/src/zabapgit_popups.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_POPUPS A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_POPUPS 23 - diff --git a/src/zabapgit_repo.prog.abap b/src/zabapgit_repo.prog.abap index 694c27669..8353d11d9 100644 --- a/src/zabapgit_repo.prog.abap +++ b/src/zabapgit_repo.prog.abap @@ -224,4 +224,4 @@ CLASS lcl_repo_srv DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. IMPORTING iv_package TYPE devclass RAISING lcx_exception. -ENDCLASS. "lcl_repo_srv DEFINITION \ No newline at end of file +ENDCLASS. "lcl_repo_srv DEFINITION diff --git a/src/zabapgit_repo.prog.xml b/src/zabapgit_repo.prog.xml index ee25763d5..928e7e911 100644 --- a/src/zabapgit_repo.prog.xml +++ b/src/zabapgit_repo.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_REPO A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_REPO 21 - diff --git a/src/zabapgit_repo_browser_util.prog.abap b/src/zabapgit_repo_browser_util.prog.abap index cfee28bed..7cab7d7e7 100644 --- a/src/zabapgit_repo_browser_util.prog.abap +++ b/src/zabapgit_repo_browser_util.prog.abap @@ -240,4 +240,4 @@ CLASS lcl_repo_content_browser IMPLEMENTATION. ENDMETHOD. "build_repo_items_online -ENDCLASS. "lcl_repo_content_browser \ No newline at end of file +ENDCLASS. "lcl_repo_content_browser diff --git a/src/zabapgit_repo_browser_util.prog.xml b/src/zabapgit_repo_browser_util.prog.xml index 53f8f567b..d70b73f28 100644 --- a/src/zabapgit_repo_browser_util.prog.xml +++ b/src/zabapgit_repo_browser_util.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_REPO_BROWSER_UTIL A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_REPO_BROWSER_UTIL 34 - diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 8e4ae2ac2..36b8f7cce 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -938,4 +938,4 @@ CLASS lcl_repo_srv IMPLEMENTATION. ENDMETHOD. "switch_repo_type -ENDCLASS. "lcl_repo_srv IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_repo_srv IMPLEMENTATION diff --git a/src/zabapgit_repo_impl.prog.xml b/src/zabapgit_repo_impl.prog.xml index a1b4b53bc..eb737a7ba 100644 --- a/src/zabapgit_repo_impl.prog.xml +++ b/src/zabapgit_repo_impl.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_REPO_IMPL A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_REPO_IMPL 26 - diff --git a/src/zabapgit_sap_package.prog.abap b/src/zabapgit_sap_package.prog.abap index d9a0ad838..632941449 100644 --- a/src/zabapgit_sap_package.prog.abap +++ b/src/zabapgit_sap_package.prog.abap @@ -363,4 +363,4 @@ CLASS lcl_sap_package IMPLEMENTATION. ENDMETHOD. "create -ENDCLASS. "lcl_package IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_package IMPLEMENTATION diff --git a/src/zabapgit_sap_package.prog.xml b/src/zabapgit_sap_package.prog.xml index 8b7003d0c..4cb21c124 100644 --- a/src/zabapgit_sap_package.prog.xml +++ b/src/zabapgit_sap_package.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_SAP_PACKAGE A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_SAP_PACKAGE 28 - diff --git a/src/zabapgit_services.prog.abap b/src/zabapgit_services.prog.abap index 88e26e99b..801ffd6d7 100644 --- a/src/zabapgit_services.prog.abap +++ b/src/zabapgit_services.prog.abap @@ -6,4 +6,4 @@ INCLUDE zabapgit_services_repo. INCLUDE zabapgit_services_abapgit. INCLUDE zabapgit_services_git. INCLUDE zabapgit_services_db. -INCLUDE zabapgit_services_background. \ No newline at end of file +INCLUDE zabapgit_services_background. diff --git a/src/zabapgit_services.prog.xml b/src/zabapgit_services.prog.xml index 94fd322ab..e21ee1f24 100644 --- a/src/zabapgit_services.prog.xml +++ b/src/zabapgit_services.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_SERVICES A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_SERVICES 25 - diff --git a/src/zabapgit_services_abapgit.prog.abap b/src/zabapgit_services_abapgit.prog.abap index 94f76577f..58ecbbe21 100644 --- a/src/zabapgit_services_abapgit.prog.abap +++ b/src/zabapgit_services_abapgit.prog.abap @@ -178,4 +178,4 @@ CLASS lcl_services_abapgit IMPLEMENTATION. ENDMETHOD. "is_installed_pi -ENDCLASS. "lcl_services_abapgit \ No newline at end of file +ENDCLASS. "lcl_services_abapgit diff --git a/src/zabapgit_services_abapgit.prog.xml b/src/zabapgit_services_abapgit.prog.xml index 4db10411f..70ac94319 100644 --- a/src/zabapgit_services_abapgit.prog.xml +++ b/src/zabapgit_services_abapgit.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_SERVICES_ABAPGIT A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_SERVICES_ABAPGIT 33 - diff --git a/src/zabapgit_services_background.prog.abap b/src/zabapgit_services_background.prog.abap index 701f36538..4e372ddc2 100644 --- a/src/zabapgit_services_background.prog.abap +++ b/src/zabapgit_services_background.prog.abap @@ -32,4 +32,4 @@ CLASS lcl_services_background IMPLEMENTATION. ENDMETHOD. "update_task -ENDCLASS. "lcl_services_background \ No newline at end of file +ENDCLASS. "lcl_services_background diff --git a/src/zabapgit_services_background.prog.xml b/src/zabapgit_services_background.prog.xml index ac4f12b1d..1a6276ed2 100644 --- a/src/zabapgit_services_background.prog.xml +++ b/src/zabapgit_services_background.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_SERVICES_BACKGROUND A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_SERVICES_BACKGROUND 36 - diff --git a/src/zabapgit_services_db.prog.abap b/src/zabapgit_services_db.prog.abap index e32884e55..4bd7d8e24 100644 --- a/src/zabapgit_services_db.prog.abap +++ b/src/zabapgit_services_db.prog.abap @@ -60,4 +60,4 @@ CLASS lcl_services_db IMPLEMENTATION. ENDMETHOD. "update -ENDCLASS. "lcl_services_db \ No newline at end of file +ENDCLASS. "lcl_services_db diff --git a/src/zabapgit_services_db.prog.xml b/src/zabapgit_services_db.prog.xml index 98309e91c..0ad2b046a 100644 --- a/src/zabapgit_services_db.prog.xml +++ b/src/zabapgit_services_db.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_SERVICES_DB A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_SERVICES_DB 28 - diff --git a/src/zabapgit_services_git.prog.abap b/src/zabapgit_services_git.prog.abap index ee3d03d13..929803158 100644 --- a/src/zabapgit_services_git.prog.abap +++ b/src/zabapgit_services_git.prog.abap @@ -212,4 +212,4 @@ CLASS lcl_services_git IMPLEMENTATION. ENDMETHOD. "commit -ENDCLASS. " lcl_services_git \ No newline at end of file +ENDCLASS. " lcl_services_git diff --git a/src/zabapgit_services_git.prog.xml b/src/zabapgit_services_git.prog.xml index 8e5e125f7..5357b8a80 100644 --- a/src/zabapgit_services_git.prog.xml +++ b/src/zabapgit_services_git.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_SERVICES_GIT A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_SERVICES_GIT 29 - diff --git a/src/zabapgit_services_repo.prog.abap b/src/zabapgit_services_repo.prog.abap index 59e9157a3..90f052424 100644 --- a/src/zabapgit_services_repo.prog.abap +++ b/src/zabapgit_services_repo.prog.abap @@ -314,4 +314,4 @@ CLASS lcl_services_repo IMPLEMENTATION. ENDMETHOD. " open_se80. -ENDCLASS. "lcl_services_repo \ No newline at end of file +ENDCLASS. "lcl_services_repo diff --git a/src/zabapgit_services_repo.prog.xml b/src/zabapgit_services_repo.prog.xml index 8e628a2f6..12c63c2b5 100644 --- a/src/zabapgit_services_repo.prog.xml +++ b/src/zabapgit_services_repo.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_SERVICES_REPO A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_SERVICES_REPO 30 - diff --git a/src/zabapgit_stage.prog.abap b/src/zabapgit_stage.prog.abap index 958a136cc..2567a3178 100644 --- a/src/zabapgit_stage.prog.abap +++ b/src/zabapgit_stage.prog.abap @@ -193,4 +193,4 @@ CLASS lcl_stage IMPLEMENTATION. rv_count = lines( mt_stage ). ENDMETHOD. "count -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_stage.prog.xml b/src/zabapgit_stage.prog.xml index 7dc0d55d1..454bc358e 100644 --- a/src/zabapgit_stage.prog.xml +++ b/src/zabapgit_stage.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_STAGE A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_STAGE 22 - diff --git a/src/zabapgit_stage_logic.prog.abap b/src/zabapgit_stage_logic.prog.abap index 2857381aa..20266e33d 100644 --- a/src/zabapgit_stage_logic.prog.abap +++ b/src/zabapgit_stage_logic.prog.abap @@ -91,4 +91,4 @@ CLASS lcl_stage_logic IMPLEMENTATION. ENDMETHOD. -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_stage_logic.prog.xml b/src/zabapgit_stage_logic.prog.xml index feb6d4f0c..a39f3eb56 100644 --- a/src/zabapgit_stage_logic.prog.xml +++ b/src/zabapgit_stage_logic.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_STAGE_LOGIC A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_STAGE_LOGIC 28 - diff --git a/src/zabapgit_syntax_highlighter.prog.abap b/src/zabapgit_syntax_highlighter.prog.abap index 050c9e107..cb1e391d3 100644 --- a/src/zabapgit_syntax_highlighter.prog.abap +++ b/src/zabapgit_syntax_highlighter.prog.abap @@ -1236,4 +1236,4 @@ CLASS ltcl_syntax_basic_logic IMPLEMENTATION. ENDMETHOD. " process_line -ENDCLASS. " ltcl_syntax_highlighter \ No newline at end of file +ENDCLASS. " ltcl_syntax_highlighter diff --git a/src/zabapgit_syntax_highlighter.prog.xml b/src/zabapgit_syntax_highlighter.prog.xml index 6e2f1cb34..4f1a01c95 100644 --- a/src/zabapgit_syntax_highlighter.prog.xml +++ b/src/zabapgit_syntax_highlighter.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_SYNTAX_HIGHLIGHTER A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_SYNTAX_HIGHLIGHTER 35 - diff --git a/src/zabapgit_tadir.prog.abap b/src/zabapgit_tadir.prog.abap index 42ca99fcd..0dff031d8 100644 --- a/src/zabapgit_tadir.prog.abap +++ b/src/zabapgit_tadir.prog.abap @@ -190,4 +190,4 @@ CLASS lcl_tadir IMPLEMENTATION. ENDMETHOD. "build -ENDCLASS. "lcl_tadir IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_tadir IMPLEMENTATION diff --git a/src/zabapgit_tadir.prog.xml b/src/zabapgit_tadir.prog.xml index 16942b0ac..54f70dd51 100644 --- a/src/zabapgit_tadir.prog.xml +++ b/src/zabapgit_tadir.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_TADIR A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_TADIR 22 - diff --git a/src/zabapgit_transport.prog.abap b/src/zabapgit_transport.prog.abap index c2bf16df7..e9daa4856 100644 --- a/src/zabapgit_transport.prog.abap +++ b/src/zabapgit_transport.prog.abap @@ -175,4 +175,4 @@ CLASS lcl_transport IMPLEMENTATION. DELETE rt_tadir WHERE table_line IS INITIAL. ENDMETHOD. -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_transport.prog.xml b/src/zabapgit_transport.prog.xml index b31498d76..d27b57809 100644 --- a/src/zabapgit_transport.prog.xml +++ b/src/zabapgit_transport.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_TRANSPORT A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_TRANSPORT 26 - diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index e9df1bc1c..11e58a8c5 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -2211,4 +2211,4 @@ CLASS ltcl_persistence_settings IMPLEMENTATION. ENDCLASS. -INCLUDE ZABAPGIT_UNIT_TEST_CLAS_INTF. \ No newline at end of file +INCLUDE ZABAPGIT_UNIT_TEST_CLAS_INTF. diff --git a/src/zabapgit_unit_test.prog.xml b/src/zabapgit_unit_test.prog.xml index 57d4937b5..4a8363652 100644 --- a/src/zabapgit_unit_test.prog.xml +++ b/src/zabapgit_unit_test.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_UNIT_TEST A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Program ZABAPGIT_UNIT_TEST 26 - diff --git a/src/zabapgit_unit_test_clas_intf.prog.abap b/src/zabapgit_unit_test_clas_intf.prog.abap index d83e798d6..a5f4c7b37 100644 --- a/src/zabapgit_unit_test_clas_intf.prog.abap +++ b/src/zabapgit_unit_test_clas_intf.prog.abap @@ -643,4 +643,4 @@ CLASS ltcl_interface_changed IMPLEMENTATION. act = mo_spy_oo_object->mv_get_includes_called exp = abap_true ). ENDMETHOD. -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_unit_test_clas_intf.prog.xml b/src/zabapgit_unit_test_clas_intf.prog.xml index 1d21085bf..b5b051403 100644 --- a/src/zabapgit_unit_test_clas_intf.prog.xml +++ b/src/zabapgit_unit_test_clas_intf.prog.xml @@ -5,42 +5,19 @@ ZABAPGIT_UNIT_TEST_CLAS_INTF A - - X S D$ - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - - X - - 0000-00-00 - - 0000-00-00 - D$S X R - Unit tests for classes and interfaces objecst 45 - diff --git a/src/zabapgit_util.prog.abap b/src/zabapgit_util.prog.abap index 9c9ca66dd..de87acd11 100644 --- a/src/zabapgit_util.prog.abap +++ b/src/zabapgit_util.prog.abap @@ -1122,4 +1122,4 @@ CLASS lcl_log IMPLEMENTATION. rv_yes = boolc( sy-subrc = 0 ). ENDMETHOD. "has_rc -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_util.prog.xml b/src/zabapgit_util.prog.xml index 8fc89ca26..c7068cc40 100644 --- a/src/zabapgit_util.prog.xml +++ b/src/zabapgit_util.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_UTIL A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_UTIL 21 - diff --git a/src/zabapgit_view_repo.prog.abap b/src/zabapgit_view_repo.prog.abap index 503cbcee9..f35b67758 100644 --- a/src/zabapgit_view_repo.prog.abap +++ b/src/zabapgit_view_repo.prog.abap @@ -550,4 +550,4 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. ENDMETHOD. "build_obj_jump_link -ENDCLASS. "lcl_gui_view_repo_content \ No newline at end of file +ENDCLASS. "lcl_gui_view_repo_content diff --git a/src/zabapgit_view_repo.prog.xml b/src/zabapgit_view_repo.prog.xml index 6da1c7449..2bf307e7f 100644 --- a/src/zabapgit_view_repo.prog.xml +++ b/src/zabapgit_view_repo.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_VIEW_REPO A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_VIEW_REPO 26 - diff --git a/src/zabapgit_view_tutorial.prog.abap b/src/zabapgit_view_tutorial.prog.abap index bdb915b91..b61c7e976 100644 --- a/src/zabapgit_view_tutorial.prog.abap +++ b/src/zabapgit_view_tutorial.prog.abap @@ -69,4 +69,4 @@ CLASS lcl_gui_view_tutorial IMPLEMENTATION. ENDMETHOD. " render_content. -ENDCLASS. "lcl_gui_view_tutorial \ No newline at end of file +ENDCLASS. "lcl_gui_view_tutorial diff --git a/src/zabapgit_view_tutorial.prog.xml b/src/zabapgit_view_tutorial.prog.xml index d7ba73043..232ea0b98 100644 --- a/src/zabapgit_view_tutorial.prog.xml +++ b/src/zabapgit_view_tutorial.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_VIEW_TUTORIAL A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_PAGE_TUTORIAL 30 - diff --git a/src/zabapgit_xml.prog.xml b/src/zabapgit_xml.prog.xml index 3a2acf6a0..1d7df9bac 100644 --- a/src/zabapgit_xml.prog.xml +++ b/src/zabapgit_xml.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_XML A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_XML 20 - diff --git a/src/zabapgit_zip.prog.abap b/src/zabapgit_zip.prog.abap index 27838c096..b27607ed9 100644 --- a/src/zabapgit_zip.prog.abap +++ b/src/zabapgit_zip.prog.abap @@ -539,4 +539,4 @@ CLASS lcl_zip IMPLEMENTATION. ENDMETHOD. "export_package -ENDCLASS. "lcl_zip IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_zip IMPLEMENTATION diff --git a/src/zabapgit_zip.prog.xml b/src/zabapgit_zip.prog.xml index 8fea0a06e..6c9ce7fbe 100644 --- a/src/zabapgit_zip.prog.xml +++ b/src/zabapgit_zip.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_ZIP A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_ZIP 20 - diff --git a/src/zabapgit_zlib.prog.abap b/src/zabapgit_zlib.prog.abap index c22d67822..b0b128435 100644 --- a/src/zabapgit_zlib.prog.abap +++ b/src/zabapgit_zlib.prog.abap @@ -707,4 +707,4 @@ CLASS lcl_zlib IMPLEMENTATION. ENDMETHOD. "decompress -ENDCLASS. "lcl_zlib IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_zlib IMPLEMENTATION diff --git a/src/zabapgit_zlib.prog.xml b/src/zabapgit_zlib.prog.xml index a5e41f38d..fe4ce5f27 100644 --- a/src/zabapgit_zlib.prog.xml +++ b/src/zabapgit_zlib.prog.xml @@ -5,42 +5,16 @@ ZABAPGIT_ZLIB A - - X - - - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - E - - - 0000-00-00 - - 0000-00-00 - - X R - Include ZABAPGIT_ZLIB 21 - From cdcbb12e9d671bc66b45db523cf29a9ae97f1f44 Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 22 Jan 2017 09:40:26 +0000 Subject: [PATCH 082/142] v1.26.0 --- changelog.txt | 9 +++++++++ src/zabapgit.prog.abap | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index 6cabba47f..62f52c34a 100644 --- a/changelog.txt +++ b/changelog.txt @@ -8,6 +8,15 @@ Legend + : added - : removed +2017-01-22 v1.26.0 +------------------ ++ XML ignore initial fields ++ Newline added to end of all ABAP code + +2017-01-22 v1.25.2 +------------------ ++ Possibility to set max number of objects in list + 2016-12-01 v1.24.0 ------------------ + abap syntax highlighting diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index bd15da355..1c7a15d73 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -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.25.2'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.26.0'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) From 36b817b405b891899ac4d61d68d14b409f7521bb Mon Sep 17 00:00:00 2001 From: Fabian Lupa Date: Fri, 13 Jan 2017 20:21:55 +0100 Subject: [PATCH 083/142] Support GitHub two factor authentication --- src/zabapgit.prog.abap | 1 + src/zabapgit_2fa.prog.abap | 586 +++++++++++++++++++++++++ src/zabapgit_2fa.prog.xml | 48 ++ src/zabapgit_http.prog.abap | 98 ++++- src/zabapgit_password_dialog.prog.abap | 110 ++++- src/zabapgit_persistence.prog.abap | 90 ++++ 6 files changed, 908 insertions(+), 25 deletions(-) create mode 100644 src/zabapgit_2fa.prog.abap create mode 100644 src/zabapgit_2fa.prog.xml diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 1c7a15d73..b81885ed0 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -53,6 +53,7 @@ INCLUDE zabapgit_stage. INCLUDE zabapgit_git_helpers. INCLUDE zabapgit_repo. INCLUDE zabapgit_stage_logic. +INCLUDE zabapgit_2fa. INCLUDE zabapgit_http. INCLUDE zabapgit_git. INCLUDE zabapgit_objects. diff --git a/src/zabapgit_2fa.prog.abap b/src/zabapgit_2fa.prog.abap new file mode 100644 index 000000000..c41e0acb5 --- /dev/null +++ b/src/zabapgit_2fa.prog.abap @@ -0,0 +1,586 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_2FA +*&---------------------------------------------------------------------* + +"! Exception base class for two factor authentication related errors +CLASS lcx_2fa_error DEFINITION INHERITING FROM cx_static_check. + PUBLIC SECTION. + METHODS: + constructor IMPORTING is_textid LIKE textid OPTIONAL + ix_previous LIKE previous OPTIONAL + iv_error_text TYPE csequence OPTIONAL, + get_text REDEFINITION. + DATA: + mv_text TYPE string READ-ONLY. + PROTECTED SECTION. + METHODS: + get_default_text RETURNING VALUE(rv_text) TYPE string. +ENDCLASS. + +CLASS lcx_2fa_error IMPLEMENTATION. + METHOD constructor. + super->constructor( textid = is_textid previous = ix_previous ). + mv_text = iv_error_text. + ENDMETHOD. + + METHOD get_text. + IF mv_text IS NOT INITIAL. + result = mv_text. + ELSEIF get_default_text( ) IS NOT INITIAL. + result = get_default_text( ). + ELSE. + result = super->get_text( ). + ENDIF. + ENDMETHOD. + + METHOD get_default_text. + rv_text = 'Error in two factor authentication.' ##NO_TEXT. + ENDMETHOD. +ENDCLASS. + +CLASS lcx_2fa_auth_failed DEFINITION INHERITING FROM lcx_2fa_error FINAL. + PROTECTED SECTION. + METHODS: + get_default_text REDEFINITION. +ENDCLASS. + +CLASS lcx_2fa_auth_failed IMPLEMENTATION. + METHOD get_default_text. + rv_text = 'Authentication failed using 2FA.' ##NO_TEXT. + ENDMETHOD. +ENDCLASS. + +CLASS lcx_2fa_token_gen_failed DEFINITION INHERITING FROM lcx_2fa_error FINAL. + PROTECTED SECTION. + METHODS: + get_default_text REDEFINITION. +ENDCLASS. + +CLASS lcx_2fa_token_gen_failed IMPLEMENTATION. + METHOD get_default_text. + rv_text = 'Two factor access token generation failed.' ##NO_TEXT. + ENDMETHOD. +ENDCLASS. + +CLASS lcx_2fa_unsupported DEFINITION INHERITING FROM lcx_2fa_error FINAL. + PROTECTED SECTION. + METHODS: + get_default_text REDEFINITION. +ENDCLASS. + +CLASS lcx_2fa_unsupported IMPLEMENTATION. + METHOD get_default_text. + rv_text = 'The service is not supported for two factor authentication.' ##NO_TEXT. + ENDMETHOD. +ENDCLASS. + +CLASS lcx_2fa_no_cached_token DEFINITION INHERITING FROM lcx_2fa_error FINAL. + PROTECTED SECTION. + METHODS: + get_default_text REDEFINITION. +ENDCLASS. + +CLASS lcx_2fa_no_cached_token IMPLEMENTATION. + METHOD get_default_text. + rv_text = 'Cached two factor access token requested but not available.' ##NO_TEXT. + ENDMETHOD. +ENDCLASS. + +CLASS lcx_2fa_cache_deletion_failed DEFINITION INHERITING FROM lcx_2fa_error FINAL. + PROTECTED SECTION. + METHODS: + get_default_text REDEFINITION. +ENDCLASS. + +CLASS lcx_2fa_cache_deletion_failed IMPLEMENTATION. + METHOD get_default_text. + rv_text = 'Cache deletion failed.' ##NO_TEXT. + ENDMETHOD. +ENDCLASS. + +"! Defines a two factor authentication authenticator +"!

+"! Authenticators support one or multiple services and are able to generate access tokens using the +"! service's API using the users username, password and two factor authentication token +"! (app/sms/tokengenerator). With these access tokens the user can be authenticated to the service's +"! implementation of the git http api, just like the "normal" password would. The authenticator can +"! also store and retrieve the access token it generated. +"!

+"!

+"! LCL_2FA_AUTHENTICATOR_REGISTRY can be used to find a suitable implementation for a given +"! repository. +"!

+INTERFACE lif_2fa_authenticator. + METHODS: + "! Generate an access token + "! @parameter iv_url | Repository url + "! @parameter iv_username | Username + "! @parameter iv_password | Password + "! @parameter iv_2fa_token | Two factor token + "! @parameter rv_access_token | Generated access token + "! @raising lcx_2fa_auth_failed | Authentication failed + "! @raising lcx_2fa_token_gen_failed | Token generation failed + authenticate IMPORTING iv_url TYPE string + iv_username TYPE string + iv_password TYPE string + iv_2fa_token TYPE string + RETURNING VALUE(rv_access_token) TYPE string + RAISING lcx_2fa_auth_failed + lcx_2fa_token_gen_failed, + "! Check if this authenticator instance supports the give repository url + "! @parameter iv_url | Repository url + "! @parameter rv_supported | Is supported + supports_url IMPORTING iv_url TYPE string + RETURNING VALUE(rv_supported) TYPE abap_bool, + "! Get a unique identifier for the service that hosts the repository + "! @parameter iv_url | Repository url + "! @parameter rv_id | Service id + get_service_id_from_url IMPORTING iv_url TYPE string + RETURNING VALUE(rv_id) TYPE string, + "! Check if there is a cached access token (for the current user) + "! @parameter iv_url | Repository url + "! @parameter rv_available | Token is cached + is_cached_access_token_avail IMPORTING iv_url TYPE string + RETURNING VALUE(rv_available) TYPE abap_bool, + "! Get a cached access token + "!

+ "! Username and password are also parameters to decrypt the token if needed. They must no + "! necessarily be provided if the used authenticator does not use encryption. + "!

+ "! @parameter iv_url | Repository url + "! @parameter iv_username | Username + "! @parameter iv_password | Password + "! @parameter rv_token | Access token + "! @raising lcx_2fa_no_cached_token | There is no cached token + get_cached_access_token IMPORTING iv_url TYPE string + iv_username TYPE string OPTIONAL + iv_password TYPE string OPTIONAL + RETURNING VALUE(rv_token) TYPE string + RAISING lcx_2fa_no_cached_token, + "! Delete a cached token + "! @parameter iv_url | Repository url + "! @raising lcx_2fa_cache_deletion_failed | Deletion failed + delete_cached_access_token IMPORTING iv_url TYPE string + RAISING lcx_2fa_cache_deletion_failed. +ENDINTERFACE. + +"! Default LIF_2FA-AUTHENTICATOR implememtation +"!

+"! This uses the user settings to store cached access tokens and encrypts / decrypts them as needed. +"!

+CLASS lcl_2fa_authenticator_base DEFINITION + ABSTRACT + CREATE PUBLIC. + + PUBLIC SECTION. + INTERFACES: + lif_2fa_authenticator. + ALIASES: + authenticate FOR lif_2fa_authenticator~authenticate, + supports_url FOR lif_2fa_authenticator~supports_url, + get_service_id_from_url FOR lif_2fa_authenticator~get_service_id_from_url, + is_cached_access_token_avail FOR lif_2fa_authenticator~is_cached_access_token_avail, + get_cached_access_token FOR lif_2fa_authenticator~get_cached_access_token, + delete_cached_token FOR lif_2fa_authenticator~delete_cached_access_token. + METHODS: + "! @parameter iv_supported_url_regex | Regular expression to check if a repository url is + "! supported, used for default implementation of + "! SUPPORTS_URL + constructor IMPORTING iv_supported_url_regex TYPE clike. + PROTECTED SECTION. + METHODS: + "! Subclass implementation of LIF_2FA_AUTHENTICATOR=>AUTHENTICATE + "!

+ "! The caller will take care of caching the token. + "!

+ "! @parameter iv_url | Repository url + "! @parameter iv_username | Username + "! @parameter iv_password | Password + "! @parameter iv_2fa_token | Two factor token + "! @parameter rv_access_token | Generated access token + "! @raising lcx_2fa_auth_failed | Authentication failed + "! @raising lcx_2fa_token_gen_failed | Token generation failed + authenticate_internal ABSTRACT IMPORTING iv_url TYPE string + iv_username TYPE string + iv_password TYPE string + iv_2fa_token TYPE string + RETURNING VALUE(rv_access_token) TYPE string + RAISING lcx_2fa_auth_failed + lcx_2fa_token_gen_failed, + "! Helper method to raise class based exception after traditional exception was raised + "!

+ "! sy-msg... must be set right before calling! + "!

+ raise_internal_error_from_sy FINAL RAISING lcx_2fa_auth_failed. + PRIVATE SECTION. + DATA: + mo_url_regex TYPE REF TO cl_abap_regex. +ENDCLASS. + +CLASS lcl_2fa_authenticator_base IMPLEMENTATION. + METHOD constructor. + CREATE OBJECT mo_url_regex + EXPORTING + pattern = iv_supported_url_regex + ignore_case = abap_true. + ENDMETHOD. + + METHOD authenticate. + DATA: lv_encrypted_token TYPE string. + + rv_access_token = authenticate_internal( iv_url = iv_url + iv_username = iv_username + iv_password = iv_password + iv_2fa_token = iv_2fa_token ). + + " Store the access token, by default in the user settings + + " 1. Encrypt it +* lv_encrypted_token = cl_encryption_helper=>encrypt_symmetric( iv_text = rv_access_token +* iv_key = iv_password ). + " TODO: Find something like the above for symmetric encryption + lv_encrypted_token = rv_access_token. + + " 2. Store it + TRY. + lcl_app=>user( )->set_2fa_access_token( iv_service_id = get_service_id_from_url( iv_url ) + iv_username = iv_username + iv_token = lv_encrypted_token ). + CATCH lcx_exception ##NO_HANDLER. + " Not the biggest of deals if caching the token fails + ENDTRY. + ENDMETHOD. + + METHOD supports_url. + rv_supported = mo_url_regex->create_matcher( text = iv_url )->match( ). + ENDMETHOD. + + METHOD get_service_id_from_url. + rv_id = 'UNKNOWN SERVICE'. " Please overwrite in subclasses + ENDMETHOD. + + METHOD is_cached_access_token_avail. + DATA: lv_service_id TYPE string. + + lv_service_id = get_service_id_from_url( iv_url ). + + " Default storage location is user settings + TRY. + rv_available = boolc( lcl_app=>user( )->get_2fa_access_token( lv_service_id ) + IS NOT INITIAL ). + CATCH lcx_exception. + rv_available = abap_false. + ENDTRY. + ENDMETHOD. + + METHOD get_cached_access_token. + DATA: lv_access_token_encrypted TYPE string, + lx_error TYPE REF TO cx_root. + + TRY. + lv_access_token_encrypted + = lcl_app=>user( )->get_2fa_access_token( get_service_id_from_url( iv_url ) ). + CATCH lcx_exception INTO lx_error. + RAISE EXCEPTION TYPE lcx_2fa_no_cached_token + EXPORTING + ix_previous = lx_error + iv_error_text = lx_error->get_text( ). + ENDTRY. + + IF lv_access_token_encrypted IS INITIAL. + RAISE EXCEPTION TYPE lcx_2fa_no_cached_token. + ENDIF. + + " TODO: Decryption +* rv_token = cl_encryption_helper=>decrypt_symmetric( iv_encrypted = rv_access_token +* iv_key = iv_password ). + rv_token = lv_access_token_encrypted. + ENDMETHOD. + + METHOD delete_cached_token. + DATA: lx_ex TYPE REF TO cx_root. + + TRY. + " Default storage location is user settings + lcl_app=>user( )->delete_2fa_config( get_service_id_from_url( iv_url ) ). + CATCH lcx_exception INTO lx_ex. + RAISE EXCEPTION TYPE lcx_2fa_cache_deletion_failed + EXPORTING + ix_previous = lx_ex + iv_error_text = |Cache deletion failed: { lx_ex->get_text( ) }|. + ENDTRY. + ENDMETHOD. + + METHOD raise_internal_error_from_sy. + DATA: lv_error_msg TYPE string. + + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 + INTO lv_error_msg. + RAISE EXCEPTION TYPE lcx_2fa_auth_failed + EXPORTING + iv_error_text = |Internal error: { lv_error_msg }| ##NO_TEXT. + ENDMETHOD. +ENDCLASS. + +CLASS lcl_2fa_github_authenticator DEFINITION + INHERITING FROM lcl_2fa_authenticator_base + FINAL + CREATE PUBLIC. + + PUBLIC SECTION. + METHODS: + constructor, + get_service_id_from_url REDEFINITION. + PROTECTED SECTION. + METHODS: + authenticate_internal REDEFINITION. + PRIVATE SECTION. + METHODS: + set_access_token_request IMPORTING ii_entity TYPE REF TO if_rest_entity + iv_repo_name TYPE string, + get_token_from_response IMPORTING ii_entity TYPE REF TO if_rest_entity + RETURNING VALUE(rv_token) TYPE string, + parse_repo_from_url IMPORTING iv_url TYPE string + RETURNING VALUE(rv_repo_name) TYPE string. +ENDCLASS. + +CLASS lcl_2fa_github_authenticator IMPLEMENTATION. + METHOD constructor. + super->constructor( 'https?:\/\/(www\.)?github.com.*$' ). + ENDMETHOD. + + METHOD authenticate_internal. + CONSTANTS: lc_github_api_url TYPE string VALUE `https://api.github.com/`, + lc_otp_header_name TYPE string VALUE `X-Github-OTP`, + lc_restendpoint_authorizations TYPE string VALUE `/authorizations`. + DATA: li_rest_client TYPE REF TO if_rest_client, + li_http_client TYPE REF TO if_http_client, + lv_http_code TYPE i, + lv_http_code_description TYPE string, + li_request_entity TYPE REF TO if_rest_entity, + li_response_entity TYPE REF TO if_rest_entity, + lv_binary_response TYPE xstring, + BEGIN OF ls_success_response, + token TYPE string, + END OF ls_success_response. + + " 1. Try to login to GitHub API with username, password and 2fa token + cl_http_client=>create_by_url( + EXPORTING + url = lc_github_api_url + IMPORTING + client = li_http_client + EXCEPTIONS + argument_not_found = 1 + plugin_not_active = 2 + internal_error = 3 + OTHERS = 4 ). + IF sy-subrc <> 0. + raise_internal_error_from_sy( ). + ENDIF. + + " https://developer.github.com/v3/auth/#working-with-two-factor-authentication + li_http_client->propertytype_accept_cookie = if_http_client=>co_enabled. + li_http_client->request->set_header_field( name = lc_otp_header_name value = iv_2fa_token ). + li_http_client->authenticate( username = iv_username password = iv_password ). + li_http_client->propertytype_logon_popup = if_http_client=>co_disabled. + + li_http_client->send( EXCEPTIONS OTHERS = 1 ). + IF sy-subrc <> 0. + raise_internal_error_from_sy( ). + ENDIF. + + li_http_client->receive( EXCEPTIONS OTHERS = 1 ). + IF sy-subrc <> 0. + raise_internal_error_from_sy( ). + ENDIF. + + " Check if authentication has succeeded + li_http_client->response->get_status( + IMPORTING + code = lv_http_code + reason = lv_http_code_description + ). + IF lv_http_code <> 200. + RAISE EXCEPTION TYPE lcx_2fa_auth_failed + EXPORTING + iv_error_text = |Authentication failed: { lv_http_code_description }|. + ENDIF. + + " Authentication worked, now the rest client can be used + CREATE OBJECT li_rest_client TYPE cl_rest_http_client + EXPORTING + io_http_client = li_http_client. + + + " 2. Create an access token which can be used instead of a password + " https://developer.github.com/v3/oauth_authorizations/#create-a-new-authorization + + li_request_entity = li_rest_client->create_request_entity( ). + set_access_token_request( ii_entity = li_request_entity + iv_repo_name = parse_repo_from_url( iv_url ) ). + li_rest_client->set_request_header( iv_name = if_http_header_fields_sap=>request_uri + iv_value = lc_restendpoint_authorizations ). + li_rest_client->post( li_request_entity ). + + lv_http_code = li_rest_client->get_status( ). + IF lv_http_code <> 201. + RAISE EXCEPTION TYPE lcx_2fa_token_gen_failed + EXPORTING + iv_error_text = |Token generation failed: { lv_http_code }|. + ENDIF. + + rv_access_token = get_token_from_response( li_rest_client->get_response_entity( ) ). + IF rv_access_token IS INITIAL. + RAISE EXCEPTION TYPE lcx_2fa_token_gen_failed. + ENDIF. + ENDMETHOD. + + METHOD set_access_token_request. + CONSTANTS: BEGIN OF lc_create_access_token_request, + scopes TYPE string VALUE 'repo', + note TYPE string VALUE 'abapGit', + END OF lc_create_access_token_request. + DATA: lo_json_writer TYPE REF TO cl_sxml_string_writer, + lt_scopes TYPE stringtab, + lt_rest_parvalues TYPE abap_trans_srcbind_tab, + ls_rest_line LIKE LINE OF lt_rest_parvalues, + lt_result_parvalues TYPE abap_trans_resbind_tab, + ls_result_line LIKE LINE OF lt_result_parvalues, + lr_data_ref TYPE REF TO data, + lv_note TYPE string, + lv_fingerprint TYPE string. + + lo_json_writer = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ). + APPEND lc_create_access_token_request-scopes TO lt_scopes. + + GET REFERENCE OF lc_create_access_token_request-scopes INTO lr_data_ref. + ls_rest_line-name = 'scopes'. + ls_rest_line-value = lr_data_ref. + APPEND ls_rest_line TO lt_rest_parvalues. + + GET REFERENCE OF lc_create_access_token_request-note INTO lr_data_ref. + ls_rest_line-name = 'note'. + ls_rest_line-value = lr_data_ref. + APPEND ls_rest_line TO lt_rest_parvalues. + + " The fingerprint must be unique, otherwise only one token can be generated, unless the user + " deletes it in Github's settings. This is problematic if he deletes it in abapGit but keeps it + " on GitHub. + lv_fingerprint = |abapGit-{ sy-sysid }-{ sy-uname }-{ sy-datum }-{ sy-uzeit }|. + GET REFERENCE OF lv_fingerprint INTO lr_data_ref. + ls_rest_line-name = 'fingerprint'. + ls_rest_line-value = lr_data_ref. + APPEND ls_rest_line TO lt_rest_parvalues. + + " Dynamic source table is used because otherwise identifiers will always be written in uppercase + " which is not supported by the GitHub's API. + CALL TRANSFORMATION id SOURCE (lt_rest_parvalues) + RESULT XML lo_json_writer. + + ii_entity->set_string_data( cl_abap_codepage=>convert_from( lo_json_writer->get_output( ) ) ). + ENDMETHOD. + + METHOD get_token_from_response. + CONSTANTS: lc_token_field_name TYPE string VALUE 'token'. + DATA: lt_result_parvalues TYPE abap_trans_resbind_tab, + ls_result_line LIKE LINE OF lt_result_parvalues, + lr_data_ref TYPE REF TO data, + lv_binary_response TYPE xstring. + + GET REFERENCE OF rv_token INTO lr_data_ref. + ls_result_line-name = lc_token_field_name. + ls_result_line-value = lr_data_ref. + APPEND ls_result_line TO lt_result_parvalues. + + lv_binary_response = ii_entity->get_binary_data( ). + CALL TRANSFORMATION id SOURCE XML lv_binary_response + RESULT (lt_result_parvalues). + ENDMETHOD. + + METHOD parse_repo_from_url. + DATA: lo_regex TYPE REF TO cl_abap_regex, + lo_matcher TYPE REF TO cl_abap_matcher. + + CREATE OBJECT lo_regex + EXPORTING + pattern = 'https?:\/\/(www\.)?github.com\/(.*)$'. + + lo_matcher = lo_regex->create_matcher( text = iv_url ). + IF lo_matcher->match( ) = abap_true. + rv_repo_name = lo_matcher->get_submatch( 1 ). + ELSE. + rv_repo_name = '???' ##NO_TEXT. + ENDIF. + ENDMETHOD. + + METHOD get_service_id_from_url. + rv_id = 'github'. + ENDMETHOD. +ENDCLASS. + +"! Static registry class to find LIF_2FA_AUTHENTICATOR instances +CLASS lcl_2fa_authenticator_registry DEFINITION + FINAL + CREATE PRIVATE. + + PUBLIC SECTION. + CLASS-METHODS: + class_constructor, + "! Retrieve an authenticator instance by url + "! @parameter iv_url | Url of the repository / service + "! @parameter ro_authenticator | Found authenticator instance + "! @raising lcx_2fa_unsupported | No authenticator found that supports the service + get_authenticator_for_url IMPORTING iv_url TYPE string + RETURNING VALUE(ro_authenticator) TYPE REF TO lif_2fa_authenticator + RAISING lcx_2fa_unsupported, + "! Check if there is a two factor authenticator available for the url + "! @parameter iv_url | Url of the repository / service + "! @parameter rv_supported | 2FA is supported + is_url_supported IMPORTING iv_url TYPE string + RETURNING VALUE(rv_supported) TYPE abap_bool. + CLASS-DATA: + "! All authenticators managed by the registry + gt_registered_authenticators TYPE HASHED TABLE OF REF TO lif_2fa_authenticator + WITH UNIQUE KEY table_line READ-ONLY. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + +CLASS lcl_2fa_authenticator_registry IMPLEMENTATION. + METHOD class_constructor. + DEFINE register. + CREATE OBJECT li_authenticator TYPE &1. + INSERT li_authenticator INTO TABLE gt_registered_authenticators. + END-OF-DEFINITION. + + DATA: li_authenticator TYPE REF TO lif_2fa_authenticator. + + " If there are new authenticators these need to be added here manually. + " I do not think there is an equivalent to SEO_INTERFACE_IMPLEM_GET_ALL for local classes + " without invoking the compiler directly. + register: lcl_2fa_github_authenticator. + ENDMETHOD. + + METHOD get_authenticator_for_url. + FIELD-SYMBOLS: LIKE LINE OF gt_registered_authenticators. + + LOOP AT gt_registered_authenticators ASSIGNING . + IF ->supports_url( iv_url ) = abap_true. + ro_authenticator = . + RETURN. + ENDIF. + ENDLOOP. + + RAISE EXCEPTION TYPE lcx_2fa_unsupported. + ENDMETHOD. + + METHOD is_url_supported. + TRY. + get_authenticator_for_url( iv_url ). + rv_supported = abap_true. + CATCH lcx_2fa_unsupported ##NO_HANDLER. + ENDTRY. + ENDMETHOD. +ENDCLASS. \ No newline at end of file diff --git a/src/zabapgit_2fa.prog.xml b/src/zabapgit_2fa.prog.xml new file mode 100644 index 000000000..84863cedb --- /dev/null +++ b/src/zabapgit_2fa.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_2FA + A + + + X + S + D$ + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + + X + + 0000-00-00 + + 0000-00-00 + + D$S + X + + + + R + + ZABAPGIT_2FA + 12 + + + + + + diff --git a/src/zabapgit_http.prog.abap b/src/zabapgit_http.prog.abap index 11c1fb551..bca230808 100644 --- a/src/zabapgit_http.prog.abap +++ b/src/zabapgit_http.prog.abap @@ -469,21 +469,82 @@ CLASS lcl_http IMPLEMENTATION. METHOD acquire_login_details. - DATA: lv_default_user TYPE string, - lv_user TYPE string, - lv_pass TYPE string, - lo_digest TYPE REF TO lcl_http_digest. + DATA: lv_default_user TYPE string, + lv_user TYPE string, + lv_pass TYPE string, + lv_2fa_token TYPE string, + lv_access_token TYPE string, + lo_digest TYPE REF TO lcl_http_digest, + lv_2fa_available TYPE abap_bool, + li_authenticator TYPE REF TO lif_2fa_authenticator, + lx_error TYPE REF TO cx_root, + lv_popup_mode TYPE lcl_password_dialog=>gty_mode, + lv_popup_requested_token_del TYPE abap_bool, + lv_service_id TYPE string. lv_default_user = lcl_app=>user( )->get_repo_username( iv_url ). lv_user = lv_default_user. + + IF lcl_2fa_authenticator_registry=>is_url_supported( iv_url ) = abap_true. + TRY. + li_authenticator = lcl_2fa_authenticator_registry=>get_authenticator_for_url( iv_url ). + lv_service_id = li_authenticator->get_service_id_from_url( iv_url ). + IF li_authenticator->is_cached_access_token_avail( iv_url ) = abap_true. + lv_popup_mode = lcl_password_dialog=>gc_modes-unlock_2fa_token. + ELSE. + lv_popup_mode = lcl_password_dialog=>gc_modes-user_pass_2fa. + ENDIF. + + CATCH lcx_2fa_error. + lv_2fa_available = abap_false. + CLEAR lv_access_token. + ENDTRY. + ELSE. + lv_popup_mode = lcl_password_dialog=>gc_modes-user_pass. + ENDIF. + lcl_password_dialog=>popup( EXPORTING - iv_repo_url = iv_url + iv_repo_url = iv_url + iv_mode = lv_popup_mode + IMPORTING + ev_delete_token = lv_popup_requested_token_del CHANGING - cv_user = lv_user - cv_pass = lv_pass ). + cv_user = lv_user + cv_pass = lv_pass + cv_2fa_token = lv_2fa_token ). + + IF lv_popup_requested_token_del = abap_true. + TRY. + li_authenticator->delete_cached_access_token( lv_service_id ). + CATCH lcx_2fa_cache_deletion_failed INTO lx_error. + RAISE EXCEPTION TYPE lcx_exception + EXPORTING + iv_text = lx_error->get_text( ) + ix_previous = lx_error. + ENDTRY. + + " Cancel authentication, no credentials were provided. This will cause the next http request + " somewhere up the callstack to result in a 401 error. + RETURN. + ENDIF. + + " Unlock cached access token + IF lv_popup_mode = lcl_password_dialog=>gc_modes-unlock_2fa_token. + TRY. + ASSERT li_authenticator IS BOUND. + lv_access_token = li_authenticator->get_cached_access_token( iv_url = iv_url + iv_username = lv_user + iv_password = lv_pass ). + CATCH lcx_2fa_no_cached_token INTO lx_error. + RAISE EXCEPTION TYPE lcx_exception + EXPORTING + iv_text = lx_error->get_text( ) + ix_previous = lx_error. + ENDTRY. + ENDIF. IF lv_user IS INITIAL. lcx_exception=>raise( 'HTTP 401, unauthorized' ). @@ -494,6 +555,29 @@ CLASS lcl_http IMPLEMENTATION. iv_username = lv_user ). ENDIF. + IF lv_access_token IS INITIAL AND lv_2fa_token IS NOT INITIAL. + " There is no cached access token but the user provided a two factor token to generate a new + " access token + TRY. + ASSERT li_authenticator IS BOUND. + lv_access_token = li_authenticator->authenticate( iv_url = iv_url + iv_username = lv_user + iv_password = lv_pass + iv_2fa_token = lv_2fa_token ). + CATCH lcx_2fa_error INTO lx_error. + RAISE EXCEPTION TYPE lcx_exception + EXPORTING + iv_text = lx_error->get_text( ) + ix_previous = lx_error. + ENDTRY. + ENDIF. + + " If there is an access token by now use that as the password instead because two factor + " authentication was requested. + IF lv_access_token IS NOT INITIAL. + lv_pass = lv_access_token. + ENDIF. + rv_scheme = ii_client->response->get_header_field( 'www-authenticate' ). FIND REGEX '^(\w+)' IN rv_scheme SUBMATCHES rv_scheme. diff --git a/src/zabapgit_password_dialog.prog.abap b/src/zabapgit_password_dialog.prog.abap index 354f0d44d..b87406890 100644 --- a/src/zabapgit_password_dialog.prog.abap +++ b/src/zabapgit_password_dialog.prog.abap @@ -16,6 +16,13 @@ SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(10) s_pass FOR FIELD p_pass. PARAMETERS: p_pass TYPE string LOWER CASE VISIBLE LENGTH 40 ##SEL_WRONG. SELECTION-SCREEN END OF LINE. +SELECTION-SCREEN BEGIN OF LINE. +PARAMETERS: p_en2fa TYPE abap_bool DEFAULT abap_false USER-COMMAND u1 MODIF ID m1 AS CHECKBOX. +SELECTION-SCREEN COMMENT 4(6) s_2fat FOR FIELD p_2fat MODIF ID m1. +SELECTION-SCREEN POSITION 12. +PARAMETERS: p_2fat TYPE string LOWER CASE VISIBLE LENGTH 40 MODIF ID m1. +SELECTION-SCREEN END OF LINE. +SELECTION-SCREEN FUNCTION KEY 1. SELECTION-SCREEN END OF SCREEN 1002. *----------------------------------------------------------------------- @@ -24,14 +31,26 @@ SELECTION-SCREEN END OF SCREEN 1002. CLASS lcl_password_dialog DEFINITION FINAL. PUBLIC SECTION. - CONSTANTS dynnr TYPE char4 VALUE '1002'. + TYPES: + gty_mode TYPE i. + CONSTANTS: + dynnr TYPE char4 VALUE '1002', + BEGIN OF gc_modes, + user_pass TYPE gty_mode VALUE 1, + user_pass_2fa TYPE gty_mode VALUE 2, + unlock_2fa_token TYPE gty_mode VALUE 3, + END OF gc_modes. CLASS-METHODS popup IMPORTING - iv_repo_url TYPE string + iv_repo_url TYPE string + iv_mode TYPE gty_mode DEFAULT gc_modes-user_pass + EXPORTING + ev_delete_token TYPE abap_bool CHANGING - cv_user TYPE string - cv_pass TYPE string. + cv_user TYPE string + cv_pass TYPE string + cv_2fa_token TYPE string. CLASS-METHODS on_screen_init. CLASS-METHODS on_screen_output. @@ -40,7 +59,10 @@ CLASS lcl_password_dialog DEFINITION FINAL. iv_ucomm TYPE syucomm. PRIVATE SECTION. - CLASS-DATA mv_confirm TYPE abap_bool. + CLASS-DATA: + mv_confirm TYPE abap_bool, + gv_mode TYPE gty_mode, + gv_delete_token TYPE abap_bool. ENDCLASS. "lcl_password_dialog DEFINITION @@ -52,17 +74,22 @@ CLASS lcl_password_dialog IMPLEMENTATION. p_url = iv_repo_url. p_user = cv_user. mv_confirm = abap_false. + gv_mode = iv_mode. + gv_delete_token = abap_false. CALL SELECTION-SCREEN dynnr STARTING AT 5 5 ENDING AT 60 8. IF mv_confirm = abap_true. cv_user = p_user. cv_pass = p_pass. + cv_2fa_token = p_2fat. ELSE. - CLEAR: cv_user, cv_pass. + CLEAR: cv_user, cv_pass, cv_2fa_token. ENDIF. - CLEAR: p_url, p_user, p_pass. + ev_delete_token = gv_delete_token. + + CLEAR: p_url, p_user, p_pass, p_2fat. ENDMETHOD. "popup @@ -71,6 +98,7 @@ CLASS lcl_password_dialog IMPLEMENTATION. s_url = 'Repo URL' ##NO_TEXT. s_user = 'User' ##NO_TEXT. s_pass = 'Password' ##NO_TEXT. + s_2fat = '2FA' ##NO_TEXT. ENDMETHOD. "on_screen_init METHOD on_screen_output. @@ -78,19 +106,51 @@ CLASS lcl_password_dialog IMPLEMENTATION. ASSERT sy-dynnr = dynnr. + CLEAR p_2fat. + LOOP AT SCREEN. - IF screen-name = 'P_URL'. - screen-input = '0'. - screen-intensified = '1'. - screen-display_3d = '0'. - MODIFY SCREEN. - ENDIF. - IF screen-name = 'P_PASS'. - screen-invisible = '1'. + CASE screen-name. + WHEN 'P_URL'. + screen-input = '0'. + screen-intensified = '1'. + screen-display_3d = '0'. + MODIFY SCREEN. + + WHEN 'P_PASS'. + screen-invisible = '1'. + MODIFY SCREEN. + + WHEN 'P_USER'. + IF gv_mode = gc_modes-unlock_2fa_token. + screen-input = 0. + MODIFY SCREEN. + ENDIF. + + WHEN 'P_2FAT'. + IF p_en2fa = abap_true. + screen-input = '1'. + ELSE. + screen-input = '0'. + p_2fat = 'Two factor authentication token' ##NO_TEXT. + ENDIF. + MODIFY SCREEN. + + ENDCASE. + + IF screen-group1 = 'M1' AND gv_mode <> gc_modes-user_pass_2fa. + screen-invisible = '1'. MODIFY SCREEN. ENDIF. ENDLOOP. + IF gv_mode = gc_modes-unlock_2fa_token. + s_title = 'Unlock two factor authentication token' ##NO_TEXT. + sscrfields-functxt_01 = 'Remove token' ##NO_TEXT. + ELSE. + s_title = 'Login'. + CLEAR sscrfields-functxt_01. + ENDIF. + " Program RSSYSTDB, GUI Status %_CSP PERFORM set_pf_status IN PROGRAM rsdbrunt IF FOUND. APPEND 'NONE' TO lt_ucomm. "Button Check @@ -102,28 +162,42 @@ CLASS lcl_password_dialog IMPLEMENTATION. TABLES p_exclude = lt_ucomm. - IF p_user IS NOT INITIAL. + IF p_user IS NOT INITIAL AND p_pass IS NOT INITIAL AND p_en2fa = abap_true. + SET CURSOR FIELD 'P_2FAT'. + ELSEIF p_user IS NOT INITIAL. SET CURSOR FIELD 'P_PASS'. ENDIF. ENDMETHOD. "on_screen_output METHOD on_screen_event. + DATA: lv_answer TYPE c. ASSERT sy-dynnr = dynnr. " CRET - F8 " OTHERS - simulate Enter press CASE iv_ucomm. + WHEN 'FC01'. " Delete two factor code + CALL FUNCTION 'POPUP_TO_CONFIRM' + EXPORTING + text_question = 'Do you really want to remove this two factor access token?' + IMPORTING + answer = lv_answer. + IF lv_answer = '1'. + gv_delete_token = abap_true. + LEAVE TO SCREEN 0. + ENDIF. WHEN 'CRET'. mv_confirm = abap_true. + LEAVE TO SCREEN 0. WHEN OTHERS. "TODO REFACTOR !!! A CLUTCH ! " This will work unless any new specific logic appear " for other commands. The problem is that the password dialog " does not have Enter event (or I don't know how to activate it ;) " so Enter issues previous command from previous screen " But for now this works :) Fortunately Esc produces another flow - mv_confirm = abap_true. - LEAVE TO SCREEN 0. +* mv_confirm = abap_true. +* LEAVE TO SCREEN 0. ENDCASE. ENDMETHOD. "on_screen_event diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index 7232279af..e8e8d96a1 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -406,6 +406,21 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. RETURNING VALUE(rv_email) TYPE string RAISING lcx_exception. + METHODS get_2fa_access_token + IMPORTING iv_service_id TYPE string + RETURNING VALUE(rv_token) TYPE string + RAISING lcx_exception. + + METHODS set_2fa_access_token + IMPORTING iv_service_id TYPE string + iv_username TYPE string + iv_token TYPE string + RAISING lcx_exception. + + METHODS delete_2fa_config + IMPORTING iv_service_id TYPE string + RAISING lcx_exception. + METHODS toggle_hide_files RETURNING VALUE(rv_hide) TYPE abap_bool RAISING lcx_exception. @@ -455,6 +470,13 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. END OF ty_repo_config. TYPES: ty_repo_config_tt TYPE STANDARD TABLE OF ty_repo_config WITH DEFAULT KEY. + TYPES: BEGIN OF ty_git_hosting_service, + service_id TYPE string, + username TYPE string, + access_token TYPE string, + END OF ty_git_hosting_service. + TYPES: ty_git_hosting_service_tab TYPE STANDARD TABLE OF ty_git_hosting_service WITH DEFAULT KEY. + TYPES: BEGIN OF ty_user, username TYPE string, email TYPE string, @@ -464,6 +486,7 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. changes_only TYPE abap_bool, diff_unified TYPE abap_bool, favorites TYPE tt_favorites, + two_fact_cfg TYPE ty_git_hosting_service_tab, END OF ty_user. METHODS constructor @@ -496,6 +519,16 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. is_repo_config TYPE ty_repo_config RAISING lcx_exception. + METHODS read_2fa_config + IMPORTING iv_service_id TYPE ty_git_hosting_service-service_id + RETURNING VALUE(rs_2fa_config) TYPE ty_git_hosting_service + RAISING lcx_exception. + + METHODS update_2fa_config + IMPORTING iv_service_id TYPE ty_git_hosting_service-service_id + is_2fa_config TYPE ty_git_hosting_service + RAISING lcx_exception. + ENDCLASS. "lcl_persistence_user DEFINITION CLASS lcl_persistence_user IMPLEMENTATION. @@ -639,6 +672,48 @@ CLASS lcl_persistence_user IMPLEMENTATION. ENDMETHOD. "update_repo_config + METHOD read_2fa_config. + DATA: lt_2fa_config TYPE ty_git_hosting_service_tab, + lv_key TYPE string. + + lv_key = to_lower( iv_service_id ). + lt_2fa_config = read( )-two_fact_cfg. + READ TABLE lt_2fa_config INTO rs_2fa_config WITH KEY service_id = lv_key. + ENDMETHOD. + + METHOD update_2fa_config. + DATA: ls_user TYPE ty_user, + lv_key TYPE string. + FIELD-SYMBOLS TYPE ty_git_hosting_service. + + ls_user = read( ). + lv_key = to_lower( iv_service_id ). + + READ TABLE ls_user-two_fact_cfg ASSIGNING WITH KEY service_id = lv_key. + IF sy-subrc IS NOT INITIAL. + APPEND INITIAL LINE TO ls_user-two_fact_cfg ASSIGNING . + ENDIF. + = is_2fa_config. + -service_id = lv_key. + + update( ls_user ). + ENDMETHOD. + + METHOD delete_2fa_config. + DATA: ls_user TYPE ty_user, + lv_key TYPE string. + + ls_user = read( ). + lv_key = to_lower( iv_service_id ). + + DELETE ls_user-two_fact_cfg WHERE service_id = lv_key. + IF sy-subrc <> 0. + lcx_exception=>raise( '2FA config could not be deleted.' ) ##NO_TEXT. + ENDIF. + + update( ls_user ). + ENDMETHOD. + METHOD set_repo_username. DATA: ls_repo_config TYPE ty_repo_config. @@ -671,6 +746,21 @@ CLASS lcl_persistence_user IMPLEMENTATION. ENDMETHOD. "get_repo_email + METHOD get_2fa_access_token. + rv_token = read_2fa_config( iv_service_id )-access_token. + ENDMETHOD. + + METHOD set_2fa_access_token. + DATA: ls_config TYPE ty_git_hosting_service. + + ls_config = read_2fa_config( iv_service_id ). + ls_config-service_id = iv_service_id. + ls_config-username = iv_username. + ls_config-access_token = iv_token. + + update_2fa_config( iv_service_id = iv_service_id is_2fa_config = ls_config ). + ENDMETHOD. + METHOD toggle_hide_files. DATA ls_user TYPE ty_user. From cb0161d3e332d64b79dc0ef1a166b3488ba1d227 Mon Sep 17 00:00:00 2001 From: Fabian Lupa Date: Sat, 14 Jan 2017 18:22:53 +0100 Subject: [PATCH 084/142] Remove usages of REST API for compatibility --- src/zabapgit_2fa.prog.abap | 48 +++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/src/zabapgit_2fa.prog.abap b/src/zabapgit_2fa.prog.abap index c41e0acb5..57487717c 100644 --- a/src/zabapgit_2fa.prog.abap +++ b/src/zabapgit_2fa.prog.abap @@ -337,9 +337,9 @@ CLASS lcl_2fa_github_authenticator DEFINITION authenticate_internal REDEFINITION. PRIVATE SECTION. METHODS: - set_access_token_request IMPORTING ii_entity TYPE REF TO if_rest_entity + set_access_token_request IMPORTING ii_request TYPE REF TO if_http_request iv_repo_name TYPE string, - get_token_from_response IMPORTING ii_entity TYPE REF TO if_rest_entity + get_token_from_response IMPORTING ii_response TYPE REF TO if_http_response RETURNING VALUE(rv_token) TYPE string, parse_repo_from_url IMPORTING iv_url TYPE string RETURNING VALUE(rv_repo_name) TYPE string. @@ -354,12 +354,9 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. CONSTANTS: lc_github_api_url TYPE string VALUE `https://api.github.com/`, lc_otp_header_name TYPE string VALUE `X-Github-OTP`, lc_restendpoint_authorizations TYPE string VALUE `/authorizations`. - DATA: li_rest_client TYPE REF TO if_rest_client, - li_http_client TYPE REF TO if_http_client, + DATA: li_http_client TYPE REF TO if_http_client, lv_http_code TYPE i, lv_http_code_description TYPE string, - li_request_entity TYPE REF TO if_rest_entity, - li_response_entity TYPE REF TO if_rest_entity, lv_binary_response TYPE xstring, BEGIN OF ls_success_response, token TYPE string, @@ -408,30 +405,38 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. iv_error_text = |Authentication failed: { lv_http_code_description }|. ENDIF. - " Authentication worked, now the rest client can be used - CREATE OBJECT li_rest_client TYPE cl_rest_http_client - EXPORTING - io_http_client = li_http_client. - " 2. Create an access token which can be used instead of a password " https://developer.github.com/v3/oauth_authorizations/#create-a-new-authorization - li_request_entity = li_rest_client->create_request_entity( ). - set_access_token_request( ii_entity = li_request_entity + set_access_token_request( ii_request = li_http_client->request iv_repo_name = parse_repo_from_url( iv_url ) ). - li_rest_client->set_request_header( iv_name = if_http_header_fields_sap=>request_uri - iv_value = lc_restendpoint_authorizations ). - li_rest_client->post( li_request_entity ). + li_http_client->request->set_header_field( name = if_http_header_fields_sap=>request_uri + value = lc_restendpoint_authorizations ). + li_http_client->request->set_method( if_http_request=>co_request_method_post ). - lv_http_code = li_rest_client->get_status( ). + li_http_client->send( EXCEPTIONS OTHERS = 1 ). + IF sy-subrc <> 0. + raise_internal_error_from_sy( ). + ENDIF. + + li_http_client->receive( EXCEPTIONS OTHERS = 1 ). + IF sy-subrc <> 0. + raise_internal_error_from_sy( ). + ENDIF. + + li_http_client->response->get_status( + IMPORTING + code = lv_http_code + reason = lv_http_code_description + ). IF lv_http_code <> 201. RAISE EXCEPTION TYPE lcx_2fa_token_gen_failed EXPORTING - iv_error_text = |Token generation failed: { lv_http_code }|. + iv_error_text = |Token generation failed: { lv_http_code } { lv_http_code_description }|. ENDIF. - rv_access_token = get_token_from_response( li_rest_client->get_response_entity( ) ). + rv_access_token = get_token_from_response( li_http_client->response ). IF rv_access_token IS INITIAL. RAISE EXCEPTION TYPE lcx_2fa_token_gen_failed. ENDIF. @@ -479,7 +484,7 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. CALL TRANSFORMATION id SOURCE (lt_rest_parvalues) RESULT XML lo_json_writer. - ii_entity->set_string_data( cl_abap_codepage=>convert_from( lo_json_writer->get_output( ) ) ). + ii_request->set_data( lo_json_writer->get_output( ) ). ENDMETHOD. METHOD get_token_from_response. @@ -494,7 +499,8 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. ls_result_line-value = lr_data_ref. APPEND ls_result_line TO lt_result_parvalues. - lv_binary_response = ii_entity->get_binary_data( ). + lv_binary_response = ii_response->get_data( ). + CALL TRANSFORMATION id SOURCE XML lv_binary_response RESULT (lt_result_parvalues). ENDMETHOD. From dd516fbea1ea2a84bb4c2e3c4c6f99f048756cf1 Mon Sep 17 00:00:00 2001 From: Fabian Lupa Date: Sat, 14 Jan 2017 18:35:52 +0100 Subject: [PATCH 085/142] Fix code style issues and documentation --- src/zabapgit_2fa.prog.abap | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/zabapgit_2fa.prog.abap b/src/zabapgit_2fa.prog.abap index 57487717c..0401965a5 100644 --- a/src/zabapgit_2fa.prog.abap +++ b/src/zabapgit_2fa.prog.abap @@ -397,8 +397,7 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. li_http_client->response->get_status( IMPORTING code = lv_http_code - reason = lv_http_code_description - ). + reason = lv_http_code_description ). IF lv_http_code <> 200. RAISE EXCEPTION TYPE lcx_2fa_auth_failed EXPORTING @@ -428,8 +427,7 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. li_http_client->response->get_status( IMPORTING code = lv_http_code - reason = lv_http_code_description - ). + reason = lv_http_code_description ). IF lv_http_code <> 201. RAISE EXCEPTION TYPE lcx_2fa_token_gen_failed EXPORTING @@ -471,7 +469,7 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. APPEND ls_rest_line TO lt_rest_parvalues. " The fingerprint must be unique, otherwise only one token can be generated, unless the user - " deletes it in Github's settings. This is problematic if he deletes it in abapGit but keeps it + " deletes it in GitHub's settings. This is problematic if he deletes it in abapGit but keeps it " on GitHub. lv_fingerprint = |abapGit-{ sy-sysid }-{ sy-uname }-{ sy-datum }-{ sy-uzeit }|. GET REFERENCE OF lv_fingerprint INTO lr_data_ref. @@ -480,7 +478,7 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. APPEND ls_rest_line TO lt_rest_parvalues. " Dynamic source table is used because otherwise identifiers will always be written in uppercase - " which is not supported by the GitHub's API. + " which is not supported by GitHub's API. CALL TRANSFORMATION id SOURCE (lt_rest_parvalues) RESULT XML lo_json_writer. From 7715bdc59df7b2fcea3abb32a620fa1df4270994 Mon Sep 17 00:00:00 2001 From: Fabian Lupa Date: Sun, 15 Jan 2017 18:35:20 +0100 Subject: [PATCH 086/142] Replace usages of cl_sxml* for compatibility cl_sxml_writer/reader do not support json on AS ABAP 7.02 --- src/zabapgit_2fa.prog.abap | 70 ++++++++++++-------------------------- 1 file changed, 21 insertions(+), 49 deletions(-) diff --git a/src/zabapgit_2fa.prog.abap b/src/zabapgit_2fa.prog.abap index 0401965a5..ea3f9879a 100644 --- a/src/zabapgit_2fa.prog.abap +++ b/src/zabapgit_2fa.prog.abap @@ -436,80 +436,52 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. rv_access_token = get_token_from_response( li_http_client->response ). IF rv_access_token IS INITIAL. - RAISE EXCEPTION TYPE lcx_2fa_token_gen_failed. + RAISE EXCEPTION TYPE lcx_2fa_token_gen_failed + EXPORTING + iv_error_text = 'Token generation failed: parser error' ##NO_TEXT. ENDIF. ENDMETHOD. METHOD set_access_token_request. - CONSTANTS: BEGIN OF lc_create_access_token_request, - scopes TYPE string VALUE 'repo', - note TYPE string VALUE 'abapGit', - END OF lc_create_access_token_request. - DATA: lo_json_writer TYPE REF TO cl_sxml_string_writer, - lt_scopes TYPE stringtab, - lt_rest_parvalues TYPE abap_trans_srcbind_tab, - ls_rest_line LIKE LINE OF lt_rest_parvalues, - lt_result_parvalues TYPE abap_trans_resbind_tab, - ls_result_line LIKE LINE OF lt_result_parvalues, - lr_data_ref TYPE REF TO data, - lv_note TYPE string, - lv_fingerprint TYPE string. - - lo_json_writer = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ). - APPEND lc_create_access_token_request-scopes TO lt_scopes. - - GET REFERENCE OF lc_create_access_token_request-scopes INTO lr_data_ref. - ls_rest_line-name = 'scopes'. - ls_rest_line-value = lr_data_ref. - APPEND ls_rest_line TO lt_rest_parvalues. - - GET REFERENCE OF lc_create_access_token_request-note INTO lr_data_ref. - ls_rest_line-name = 'note'. - ls_rest_line-value = lr_data_ref. - APPEND ls_rest_line TO lt_rest_parvalues. + DATA: lv_fingerprint TYPE string, + lv_json_string TYPE string. " The fingerprint must be unique, otherwise only one token can be generated, unless the user " deletes it in GitHub's settings. This is problematic if he deletes it in abapGit but keeps it " on GitHub. lv_fingerprint = |abapGit-{ sy-sysid }-{ sy-uname }-{ sy-datum }-{ sy-uzeit }|. - GET REFERENCE OF lv_fingerprint INTO lr_data_ref. - ls_rest_line-name = 'fingerprint'. - ls_rest_line-value = lr_data_ref. - APPEND ls_rest_line TO lt_rest_parvalues. - " Dynamic source table is used because otherwise identifiers will always be written in uppercase - " which is not supported by GitHub's API. - CALL TRANSFORMATION id SOURCE (lt_rest_parvalues) - RESULT XML lo_json_writer. + lv_json_string = |\{"scopes":["repo"],"note":"abapGit","fingerprint":"{ lv_fingerprint }"\}|. - ii_request->set_data( lo_json_writer->get_output( ) ). + ii_request->set_data( cl_abap_codepage=>convert_to( lv_json_string ) ). ENDMETHOD. METHOD get_token_from_response. - CONSTANTS: lc_token_field_name TYPE string VALUE 'token'. - DATA: lt_result_parvalues TYPE abap_trans_resbind_tab, - ls_result_line LIKE LINE OF lt_result_parvalues, - lr_data_ref TYPE REF TO data, - lv_binary_response TYPE xstring. + CONSTANTS: lc_search_regex TYPE string VALUE '.*"token":"([^"]*).*$'. + DATA: lv_response TYPE string, + lo_regex TYPE REF TO cl_abap_regex, + lo_matcher TYPE REF TO cl_abap_matcher. - GET REFERENCE OF rv_token INTO lr_data_ref. - ls_result_line-name = lc_token_field_name. - ls_result_line-value = lr_data_ref. - APPEND ls_result_line TO lt_result_parvalues. + lv_response = cl_abap_codepage=>convert_from( ii_response->get_data( ) ). - lv_binary_response = ii_response->get_data( ). + CREATE OBJECT lo_regex + EXPORTING + pattern = lc_search_regex. - CALL TRANSFORMATION id SOURCE XML lv_binary_response - RESULT (lt_result_parvalues). + lo_matcher = lo_regex->create_matcher( text = lv_response ). + IF lo_matcher->match( ) = abap_true. + rv_token = lo_matcher->get_submatch( 1 ). + ENDIF. ENDMETHOD. METHOD parse_repo_from_url. + CONSTANTS: lc_search_regex TYPE string VALUE 'https?:\/\/(www\.)?github.com\/(.*)$'. DATA: lo_regex TYPE REF TO cl_abap_regex, lo_matcher TYPE REF TO cl_abap_matcher. CREATE OBJECT lo_regex EXPORTING - pattern = 'https?:\/\/(www\.)?github.com\/(.*)$'. + pattern = lc_search_regex. lo_matcher = lo_regex->create_matcher( text = iv_url ). IF lo_matcher->match( ) = abap_true. From f8cf8706013ef80fd9309fdbf01fc117760ae7bb Mon Sep 17 00:00:00 2001 From: Fabian Lupa Date: Sun, 15 Jan 2017 19:11:12 +0100 Subject: [PATCH 087/142] Re-enable enter key in authentication dialog --- src/zabapgit.prog.abap | 5 ++++- src/zabapgit_password_dialog.prog.abap | 11 ++--------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index b81885ed0..a6f7e5758 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -102,5 +102,8 @@ AT SELECTION-SCREEN ON EXIT-COMMAND. AT SELECTION-SCREEN. IF sy-dynnr = lcl_password_dialog=>dynnr. + IF sscrfields-ucomm IS INITIAL. + sscrfields-ucomm = 'ENTER'. + ENDIF. lcl_password_dialog=>on_screen_event( sscrfields-ucomm ). - ENDIF. + ENDIF. \ No newline at end of file diff --git a/src/zabapgit_password_dialog.prog.abap b/src/zabapgit_password_dialog.prog.abap index b87406890..3c6f04637 100644 --- a/src/zabapgit_password_dialog.prog.abap +++ b/src/zabapgit_password_dialog.prog.abap @@ -73,6 +73,7 @@ CLASS lcl_password_dialog IMPLEMENTATION. CLEAR p_pass. p_url = iv_repo_url. p_user = cv_user. + p_2fat = abap_false. mv_confirm = abap_false. gv_mode = iv_mode. gv_delete_token = abap_false. @@ -187,17 +188,9 @@ CLASS lcl_password_dialog IMPLEMENTATION. gv_delete_token = abap_true. LEAVE TO SCREEN 0. ENDIF. - WHEN 'CRET'. + WHEN 'CRET' OR 'ENTER'. mv_confirm = abap_true. LEAVE TO SCREEN 0. - WHEN OTHERS. "TODO REFACTOR !!! A CLUTCH ! - " This will work unless any new specific logic appear - " for other commands. The problem is that the password dialog - " does not have Enter event (or I don't know how to activate it ;) - " so Enter issues previous command from previous screen - " But for now this works :) Fortunately Esc produces another flow -* mv_confirm = abap_true. -* LEAVE TO SCREEN 0. ENDCASE. ENDMETHOD. "on_screen_event From f93bb681b9897f1adfe20bb6491800f866d6587e Mon Sep 17 00:00:00 2001 From: Fabian Lupa Date: Sun, 15 Jan 2017 19:29:12 +0100 Subject: [PATCH 088/142] Improve exception handling --- src/zabapgit_2fa.prog.abap | 17 ++++++++++++----- src/zabapgit_http.prog.abap | 12 +++++++----- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/zabapgit_2fa.prog.abap b/src/zabapgit_2fa.prog.abap index ea3f9879a..b695acb77 100644 --- a/src/zabapgit_2fa.prog.abap +++ b/src/zabapgit_2fa.prog.abap @@ -135,13 +135,17 @@ INTERFACE lif_2fa_authenticator. "! Get a unique identifier for the service that hosts the repository "! @parameter iv_url | Repository url "! @parameter rv_id | Service id + "! @raising lcx_2fa_unsupported | Url is not supported get_service_id_from_url IMPORTING iv_url TYPE string - RETURNING VALUE(rv_id) TYPE string, + RETURNING VALUE(rv_id) TYPE string + RAISING lcx_2fa_unsupported, "! Check if there is a cached access token (for the current user) "! @parameter iv_url | Repository url "! @parameter rv_available | Token is cached + "! @raising lcx_2fa_unsupported | Url is not supported is_cached_access_token_avail IMPORTING iv_url TYPE string - RETURNING VALUE(rv_available) TYPE abap_bool, + RETURNING VALUE(rv_available) TYPE abap_bool + RAISING lcx_2fa_unsupported, "! Get a cached access token "!

"! Username and password are also parameters to decrypt the token if needed. They must no @@ -152,16 +156,19 @@ INTERFACE lif_2fa_authenticator. "! @parameter iv_password | Password "! @parameter rv_token | Access token "! @raising lcx_2fa_no_cached_token | There is no cached token + "! @raising lcx_2fa_unsupported | Url is not supported get_cached_access_token IMPORTING iv_url TYPE string iv_username TYPE string OPTIONAL iv_password TYPE string OPTIONAL RETURNING VALUE(rv_token) TYPE string - RAISING lcx_2fa_no_cached_token, + RAISING lcx_2fa_no_cached_token + lcx_2fa_unsupported, "! Delete a cached token "! @parameter iv_url | Repository url "! @raising lcx_2fa_cache_deletion_failed | Deletion failed delete_cached_access_token IMPORTING iv_url TYPE string - RAISING lcx_2fa_cache_deletion_failed. + RAISING lcx_2fa_cache_deletion_failed + lcx_2fa_unsupported. ENDINTERFACE. "! Default LIF_2FA-AUTHENTICATOR implememtation @@ -246,7 +253,7 @@ CLASS lcl_2fa_authenticator_base IMPLEMENTATION. lcl_app=>user( )->set_2fa_access_token( iv_service_id = get_service_id_from_url( iv_url ) iv_username = iv_username iv_token = lv_encrypted_token ). - CATCH lcx_exception ##NO_HANDLER. + CATCH lcx_exception lcx_2fa_unsupported ##NO_HANDLER. " Not the biggest of deals if caching the token fails ENDTRY. ENDMETHOD. diff --git a/src/zabapgit_http.prog.abap b/src/zabapgit_http.prog.abap index bca230808..e465b9193 100644 --- a/src/zabapgit_http.prog.abap +++ b/src/zabapgit_http.prog.abap @@ -497,9 +497,11 @@ CLASS lcl_http IMPLEMENTATION. lv_popup_mode = lcl_password_dialog=>gc_modes-user_pass_2fa. ENDIF. - CATCH lcx_2fa_error. - lv_2fa_available = abap_false. - CLEAR lv_access_token. + CATCH lcx_2fa_error INTO lx_error. + RAISE EXCEPTION TYPE lcx_exception + EXPORTING + iv_text = lx_error->get_text( ) + ix_previous = lx_error. ENDTRY. ELSE. lv_popup_mode = lcl_password_dialog=>gc_modes-user_pass. @@ -519,7 +521,7 @@ CLASS lcl_http IMPLEMENTATION. IF lv_popup_requested_token_del = abap_true. TRY. li_authenticator->delete_cached_access_token( lv_service_id ). - CATCH lcx_2fa_cache_deletion_failed INTO lx_error. + CATCH lcx_2fa_cache_deletion_failed lcx_2fa_unsupported INTO lx_error. RAISE EXCEPTION TYPE lcx_exception EXPORTING iv_text = lx_error->get_text( ) @@ -538,7 +540,7 @@ CLASS lcl_http IMPLEMENTATION. lv_access_token = li_authenticator->get_cached_access_token( iv_url = iv_url iv_username = lv_user iv_password = lv_pass ). - CATCH lcx_2fa_no_cached_token INTO lx_error. + CATCH lcx_2fa_no_cached_token lcx_2fa_unsupported INTO lx_error. RAISE EXCEPTION TYPE lcx_exception EXPORTING iv_text = lx_error->get_text( ) From 0026e74d799d640fd134294eaef24693f67632d5 Mon Sep 17 00:00:00 2001 From: Fabian Lupa Date: Sat, 21 Jan 2017 18:41:50 +0100 Subject: [PATCH 089/142] Refactor 2FA to not require access token storage --- src/zabapgit.prog.abap | 3 - src/zabapgit_2fa.prog.abap | 207 ++++++------------------- src/zabapgit_http.prog.abap | 136 ++++++---------- src/zabapgit_password_dialog.prog.abap | 115 +++----------- src/zabapgit_persistence.prog.abap | 92 +---------- 5 files changed, 122 insertions(+), 431 deletions(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index a6f7e5758..aaaf89121 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -102,8 +102,5 @@ AT SELECTION-SCREEN ON EXIT-COMMAND. AT SELECTION-SCREEN. IF sy-dynnr = lcl_password_dialog=>dynnr. - IF sscrfields-ucomm IS INITIAL. - sscrfields-ucomm = 'ENTER'. - ENDIF. lcl_password_dialog=>on_screen_event( sscrfields-ucomm ). ENDIF. \ No newline at end of file diff --git a/src/zabapgit_2fa.prog.abap b/src/zabapgit_2fa.prog.abap index b695acb77..f3e8ff8e3 100644 --- a/src/zabapgit_2fa.prog.abap +++ b/src/zabapgit_2fa.prog.abap @@ -74,37 +74,13 @@ CLASS lcx_2fa_unsupported IMPLEMENTATION. ENDMETHOD. ENDCLASS. -CLASS lcx_2fa_no_cached_token DEFINITION INHERITING FROM lcx_2fa_error FINAL. - PROTECTED SECTION. - METHODS: - get_default_text REDEFINITION. -ENDCLASS. - -CLASS lcx_2fa_no_cached_token IMPLEMENTATION. - METHOD get_default_text. - rv_text = 'Cached two factor access token requested but not available.' ##NO_TEXT. - ENDMETHOD. -ENDCLASS. - -CLASS lcx_2fa_cache_deletion_failed DEFINITION INHERITING FROM lcx_2fa_error FINAL. - PROTECTED SECTION. - METHODS: - get_default_text REDEFINITION. -ENDCLASS. - -CLASS lcx_2fa_cache_deletion_failed IMPLEMENTATION. - METHOD get_default_text. - rv_text = 'Cache deletion failed.' ##NO_TEXT. - ENDMETHOD. -ENDCLASS. "! Defines a two factor authentication authenticator "!

"! Authenticators support one or multiple services and are able to generate access tokens using the "! service's API using the users username, password and two factor authentication token "! (app/sms/tokengenerator). With these access tokens the user can be authenticated to the service's -"! implementation of the git http api, just like the "normal" password would. The authenticator can -"! also store and retrieve the access token it generated. +"! implementation of the git http api, just like the "normal" password would. "!

"!

"! LCL_2FA_AUTHENTICATOR_REGISTRY can be used to find a suitable implementation for a given @@ -139,42 +115,18 @@ INTERFACE lif_2fa_authenticator. get_service_id_from_url IMPORTING iv_url TYPE string RETURNING VALUE(rv_id) TYPE string RAISING lcx_2fa_unsupported, - "! Check if there is a cached access token (for the current user) - "! @parameter iv_url | Repository url - "! @parameter rv_available | Token is cached - "! @raising lcx_2fa_unsupported | Url is not supported - is_cached_access_token_avail IMPORTING iv_url TYPE string - RETURNING VALUE(rv_available) TYPE abap_bool - RAISING lcx_2fa_unsupported, - "! Get a cached access token - "!

- "! Username and password are also parameters to decrypt the token if needed. They must no - "! necessarily be provided if the used authenticator does not use encryption. - "!

+ "! Check if two factor authentication is required "! @parameter iv_url | Repository url "! @parameter iv_username | Username "! @parameter iv_password | Password - "! @parameter rv_token | Access token - "! @raising lcx_2fa_no_cached_token | There is no cached token - "! @raising lcx_2fa_unsupported | Url is not supported - get_cached_access_token IMPORTING iv_url TYPE string - iv_username TYPE string OPTIONAL - iv_password TYPE string OPTIONAL - RETURNING VALUE(rv_token) TYPE string - RAISING lcx_2fa_no_cached_token - lcx_2fa_unsupported, - "! Delete a cached token - "! @parameter iv_url | Repository url - "! @raising lcx_2fa_cache_deletion_failed | Deletion failed - delete_cached_access_token IMPORTING iv_url TYPE string - RAISING lcx_2fa_cache_deletion_failed - lcx_2fa_unsupported. + "! @parameter rv_required | 2FA is required + is_2fa_required IMPORTING iv_url TYPE string + iv_username TYPE string + iv_password TYPE string + RETURNING VALUE(rv_required) TYPE abap_bool. ENDINTERFACE. "! Default LIF_2FA-AUTHENTICATOR implememtation -"!

-"! This uses the user settings to store cached access tokens and encrypts / decrypts them as needed. -"!

CLASS lcl_2fa_authenticator_base DEFINITION ABSTRACT CREATE PUBLIC. @@ -186,9 +138,7 @@ CLASS lcl_2fa_authenticator_base DEFINITION authenticate FOR lif_2fa_authenticator~authenticate, supports_url FOR lif_2fa_authenticator~supports_url, get_service_id_from_url FOR lif_2fa_authenticator~get_service_id_from_url, - is_cached_access_token_avail FOR lif_2fa_authenticator~is_cached_access_token_avail, - get_cached_access_token FOR lif_2fa_authenticator~get_cached_access_token, - delete_cached_token FOR lif_2fa_authenticator~delete_cached_access_token. + is_2fa_required FOR lif_2fa_authenticator~is_2fa_required. METHODS: "! @parameter iv_supported_url_regex | Regular expression to check if a repository url is "! supported, used for default implementation of @@ -196,24 +146,6 @@ CLASS lcl_2fa_authenticator_base DEFINITION constructor IMPORTING iv_supported_url_regex TYPE clike. PROTECTED SECTION. METHODS: - "! Subclass implementation of LIF_2FA_AUTHENTICATOR=>AUTHENTICATE - "!

- "! The caller will take care of caching the token. - "!

- "! @parameter iv_url | Repository url - "! @parameter iv_username | Username - "! @parameter iv_password | Password - "! @parameter iv_2fa_token | Two factor token - "! @parameter rv_access_token | Generated access token - "! @raising lcx_2fa_auth_failed | Authentication failed - "! @raising lcx_2fa_token_gen_failed | Token generation failed - authenticate_internal ABSTRACT IMPORTING iv_url TYPE string - iv_username TYPE string - iv_password TYPE string - iv_2fa_token TYPE string - RETURNING VALUE(rv_access_token) TYPE string - RAISING lcx_2fa_auth_failed - lcx_2fa_token_gen_failed, "! Helper method to raise class based exception after traditional exception was raised "!

"! sy-msg... must be set right before calling! @@ -233,29 +165,7 @@ CLASS lcl_2fa_authenticator_base IMPLEMENTATION. ENDMETHOD. METHOD authenticate. - DATA: lv_encrypted_token TYPE string. - - rv_access_token = authenticate_internal( iv_url = iv_url - iv_username = iv_username - iv_password = iv_password - iv_2fa_token = iv_2fa_token ). - - " Store the access token, by default in the user settings - - " 1. Encrypt it -* lv_encrypted_token = cl_encryption_helper=>encrypt_symmetric( iv_text = rv_access_token -* iv_key = iv_password ). - " TODO: Find something like the above for symmetric encryption - lv_encrypted_token = rv_access_token. - - " 2. Store it - TRY. - lcl_app=>user( )->set_2fa_access_token( iv_service_id = get_service_id_from_url( iv_url ) - iv_username = iv_username - iv_token = lv_encrypted_token ). - CATCH lcx_exception lcx_2fa_unsupported ##NO_HANDLER. - " Not the biggest of deals if caching the token fails - ENDTRY. + RAISE EXCEPTION TYPE lcx_2fa_auth_failed. " Needs to be overwritten in subclasses ENDMETHOD. METHOD supports_url. @@ -266,56 +176,8 @@ CLASS lcl_2fa_authenticator_base IMPLEMENTATION. rv_id = 'UNKNOWN SERVICE'. " Please overwrite in subclasses ENDMETHOD. - METHOD is_cached_access_token_avail. - DATA: lv_service_id TYPE string. - - lv_service_id = get_service_id_from_url( iv_url ). - - " Default storage location is user settings - TRY. - rv_available = boolc( lcl_app=>user( )->get_2fa_access_token( lv_service_id ) - IS NOT INITIAL ). - CATCH lcx_exception. - rv_available = abap_false. - ENDTRY. - ENDMETHOD. - - METHOD get_cached_access_token. - DATA: lv_access_token_encrypted TYPE string, - lx_error TYPE REF TO cx_root. - - TRY. - lv_access_token_encrypted - = lcl_app=>user( )->get_2fa_access_token( get_service_id_from_url( iv_url ) ). - CATCH lcx_exception INTO lx_error. - RAISE EXCEPTION TYPE lcx_2fa_no_cached_token - EXPORTING - ix_previous = lx_error - iv_error_text = lx_error->get_text( ). - ENDTRY. - - IF lv_access_token_encrypted IS INITIAL. - RAISE EXCEPTION TYPE lcx_2fa_no_cached_token. - ENDIF. - - " TODO: Decryption -* rv_token = cl_encryption_helper=>decrypt_symmetric( iv_encrypted = rv_access_token -* iv_key = iv_password ). - rv_token = lv_access_token_encrypted. - ENDMETHOD. - - METHOD delete_cached_token. - DATA: lx_ex TYPE REF TO cx_root. - - TRY. - " Default storage location is user settings - lcl_app=>user( )->delete_2fa_config( get_service_id_from_url( iv_url ) ). - CATCH lcx_exception INTO lx_ex. - RAISE EXCEPTION TYPE lcx_2fa_cache_deletion_failed - EXPORTING - ix_previous = lx_ex - iv_error_text = |Cache deletion failed: { lx_ex->get_text( ) }|. - ENDTRY. + METHOD is_2fa_required. + rv_required = abap_false. ENDMETHOD. METHOD raise_internal_error_from_sy. @@ -338,11 +200,15 @@ CLASS lcl_2fa_github_authenticator DEFINITION PUBLIC SECTION. METHODS: constructor, - get_service_id_from_url REDEFINITION. + get_service_id_from_url REDEFINITION, + authenticate REDEFINITION, + is_2fa_required REDEFINITION. PROTECTED SECTION. - METHODS: - authenticate_internal REDEFINITION. PRIVATE SECTION. + CONSTANTS: + gc_github_api_url TYPE string VALUE `https://api.github.com/`, + gc_otp_header_name TYPE string VALUE `X-Github-OTP`, + gc_restendpoint_authorizations TYPE string VALUE `/authorizations`. METHODS: set_access_token_request IMPORTING ii_request TYPE REF TO if_http_request iv_repo_name TYPE string, @@ -357,10 +223,8 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. super->constructor( 'https?:\/\/(www\.)?github.com.*$' ). ENDMETHOD. - METHOD authenticate_internal. - CONSTANTS: lc_github_api_url TYPE string VALUE `https://api.github.com/`, - lc_otp_header_name TYPE string VALUE `X-Github-OTP`, - lc_restendpoint_authorizations TYPE string VALUE `/authorizations`. + METHOD authenticate. + DATA: li_http_client TYPE REF TO if_http_client, lv_http_code TYPE i, lv_http_code_description TYPE string, @@ -372,7 +236,7 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. " 1. Try to login to GitHub API with username, password and 2fa token cl_http_client=>create_by_url( EXPORTING - url = lc_github_api_url + url = gc_github_api_url IMPORTING client = li_http_client EXCEPTIONS @@ -386,7 +250,7 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. " https://developer.github.com/v3/auth/#working-with-two-factor-authentication li_http_client->propertytype_accept_cookie = if_http_client=>co_enabled. - li_http_client->request->set_header_field( name = lc_otp_header_name value = iv_2fa_token ). + li_http_client->request->set_header_field( name = gc_otp_header_name value = iv_2fa_token ). li_http_client->authenticate( username = iv_username password = iv_password ). li_http_client->propertytype_logon_popup = if_http_client=>co_disabled. @@ -418,7 +282,7 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. set_access_token_request( ii_request = li_http_client->request iv_repo_name = parse_repo_from_url( iv_url ) ). li_http_client->request->set_header_field( name = if_http_header_fields_sap=>request_uri - value = lc_restendpoint_authorizations ). + value = gc_restendpoint_authorizations ). li_http_client->request->set_method( if_http_request=>co_request_method_post ). li_http_client->send( EXCEPTIONS OTHERS = 1 ). @@ -501,6 +365,29 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. METHOD get_service_id_from_url. rv_id = 'github'. ENDMETHOD. + + METHOD is_2fa_required. + DATA: li_client TYPE REF TO if_http_client, + lv_header_value TYPE string. + + cl_http_client=>create_by_url( + EXPORTING + url = gc_github_api_url + IMPORTING + client = li_client ). + + li_client->propertytype_logon_popup = if_http_client=>co_disabled. + + " Try to authenticate without password, if 2FA is required there will be a specific response + " header + li_client->authenticate( username = iv_username password = iv_password ). + li_client->send( ). + li_client->receive( ). + + IF li_client->response->get_header_field( gc_otp_header_name ) CP 'required*'. + rv_required = abap_true. + ENDIF. + ENDMETHOD. ENDCLASS. "! Static registry class to find LIF_2FA_AUTHENTICATOR instances @@ -566,4 +453,4 @@ CLASS lcl_2fa_authenticator_registry IMPLEMENTATION. CATCH lcx_2fa_unsupported ##NO_HANDLER. ENDTRY. ENDMETHOD. -ENDCLASS. \ No newline at end of file +ENDCLASS. diff --git a/src/zabapgit_http.prog.abap b/src/zabapgit_http.prog.abap index e465b9193..e5231d8eb 100644 --- a/src/zabapgit_http.prog.abap +++ b/src/zabapgit_http.prog.abap @@ -469,84 +469,26 @@ CLASS lcl_http IMPLEMENTATION. METHOD acquire_login_details. - DATA: lv_default_user TYPE string, - lv_user TYPE string, - lv_pass TYPE string, - lv_2fa_token TYPE string, - lv_access_token TYPE string, - lo_digest TYPE REF TO lcl_http_digest, - lv_2fa_available TYPE abap_bool, - li_authenticator TYPE REF TO lif_2fa_authenticator, - lx_error TYPE REF TO cx_root, - lv_popup_mode TYPE lcl_password_dialog=>gty_mode, - lv_popup_requested_token_del TYPE abap_bool, - lv_service_id TYPE string. + DATA: lv_default_user TYPE string, + lv_user TYPE string, + lv_pass TYPE string, + lv_2fa_token TYPE string, + lv_access_token TYPE string, + lo_digest TYPE REF TO lcl_http_digest, + li_authenticator TYPE REF TO lif_2fa_authenticator, + lx_error TYPE REF TO cx_root, + lv_use_2fa TYPE abap_bool. lv_default_user = lcl_app=>user( )->get_repo_username( iv_url ). lv_user = lv_default_user. - - IF lcl_2fa_authenticator_registry=>is_url_supported( iv_url ) = abap_true. - TRY. - li_authenticator = lcl_2fa_authenticator_registry=>get_authenticator_for_url( iv_url ). - lv_service_id = li_authenticator->get_service_id_from_url( iv_url ). - IF li_authenticator->is_cached_access_token_avail( iv_url ) = abap_true. - lv_popup_mode = lcl_password_dialog=>gc_modes-unlock_2fa_token. - ELSE. - lv_popup_mode = lcl_password_dialog=>gc_modes-user_pass_2fa. - ENDIF. - - CATCH lcx_2fa_error INTO lx_error. - RAISE EXCEPTION TYPE lcx_exception - EXPORTING - iv_text = lx_error->get_text( ) - ix_previous = lx_error. - ENDTRY. - ELSE. - lv_popup_mode = lcl_password_dialog=>gc_modes-user_pass. - ENDIF. - lcl_password_dialog=>popup( EXPORTING iv_repo_url = iv_url - iv_mode = lv_popup_mode - IMPORTING - ev_delete_token = lv_popup_requested_token_del CHANGING cv_user = lv_user - cv_pass = lv_pass - cv_2fa_token = lv_2fa_token ). - - IF lv_popup_requested_token_del = abap_true. - TRY. - li_authenticator->delete_cached_access_token( lv_service_id ). - CATCH lcx_2fa_cache_deletion_failed lcx_2fa_unsupported INTO lx_error. - RAISE EXCEPTION TYPE lcx_exception - EXPORTING - iv_text = lx_error->get_text( ) - ix_previous = lx_error. - ENDTRY. - - " Cancel authentication, no credentials were provided. This will cause the next http request - " somewhere up the callstack to result in a 401 error. - RETURN. - ENDIF. - - " Unlock cached access token - IF lv_popup_mode = lcl_password_dialog=>gc_modes-unlock_2fa_token. - TRY. - ASSERT li_authenticator IS BOUND. - lv_access_token = li_authenticator->get_cached_access_token( iv_url = iv_url - iv_username = lv_user - iv_password = lv_pass ). - CATCH lcx_2fa_no_cached_token lcx_2fa_unsupported INTO lx_error. - RAISE EXCEPTION TYPE lcx_exception - EXPORTING - iv_text = lx_error->get_text( ) - ix_previous = lx_error. - ENDTRY. - ENDIF. + cv_pass = lv_pass ). IF lv_user IS INITIAL. lcx_exception=>raise( 'HTTP 401, unauthorized' ). @@ -557,25 +499,47 @@ CLASS lcl_http IMPLEMENTATION. iv_username = lv_user ). ENDIF. - IF lv_access_token IS INITIAL AND lv_2fa_token IS NOT INITIAL. - " There is no cached access token but the user provided a two factor token to generate a new - " access token - TRY. - ASSERT li_authenticator IS BOUND. - lv_access_token = li_authenticator->authenticate( iv_url = iv_url - iv_username = lv_user - iv_password = lv_pass - iv_2fa_token = lv_2fa_token ). - CATCH lcx_2fa_error INTO lx_error. - RAISE EXCEPTION TYPE lcx_exception - EXPORTING - iv_text = lx_error->get_text( ) - ix_previous = lx_error. - ENDTRY. - ENDIF. + " Is the repository hoster supported for using two factor authentication? + TRY. + IF lcl_2fa_authenticator_registry=>is_url_supported( iv_url ) = abap_true. + li_authenticator = lcl_2fa_authenticator_registry=>get_authenticator_for_url( iv_url ). - " If there is an access token by now use that as the password instead because two factor - " authentication was requested. + " Is two factor authentication required for this account? + IF li_authenticator->is_2fa_required( iv_url = iv_url + iv_username = lv_user + iv_password = lv_pass ) = abap_true. + + " Get a 2FA token (app/sms) + CALL FUNCTION 'POPUP_GET_STRING' + EXPORTING + label = 'Two factor auth. token' + IMPORTING + value = lv_2fa_token + okay = lv_use_2fa. + IF lv_use_2fa = abap_false. + lcx_exception=>raise( 'Authentication cancelled' ). + ENDIF. + + " Get a new access token + lv_access_token = li_authenticator->authenticate( iv_url = iv_url + iv_username = lv_user + iv_password = lv_pass + iv_2fa_token = lv_2fa_token ). + + " Delete any old ones + ##TODO. + ENDIF. + ENDIF. + + CATCH lcx_2fa_error INTO lx_error. + RAISE EXCEPTION TYPE lcx_exception + EXPORTING + iv_text = lx_error->get_text( ) + ix_previous = lx_error. + ENDTRY. + + " If there is an access token use that as the password instead because two factor authentication + " is required. IF lv_access_token IS NOT INITIAL. lv_pass = lv_access_token. ENDIF. diff --git a/src/zabapgit_password_dialog.prog.abap b/src/zabapgit_password_dialog.prog.abap index 3c6f04637..354f0d44d 100644 --- a/src/zabapgit_password_dialog.prog.abap +++ b/src/zabapgit_password_dialog.prog.abap @@ -16,13 +16,6 @@ SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(10) s_pass FOR FIELD p_pass. PARAMETERS: p_pass TYPE string LOWER CASE VISIBLE LENGTH 40 ##SEL_WRONG. SELECTION-SCREEN END OF LINE. -SELECTION-SCREEN BEGIN OF LINE. -PARAMETERS: p_en2fa TYPE abap_bool DEFAULT abap_false USER-COMMAND u1 MODIF ID m1 AS CHECKBOX. -SELECTION-SCREEN COMMENT 4(6) s_2fat FOR FIELD p_2fat MODIF ID m1. -SELECTION-SCREEN POSITION 12. -PARAMETERS: p_2fat TYPE string LOWER CASE VISIBLE LENGTH 40 MODIF ID m1. -SELECTION-SCREEN END OF LINE. -SELECTION-SCREEN FUNCTION KEY 1. SELECTION-SCREEN END OF SCREEN 1002. *----------------------------------------------------------------------- @@ -31,26 +24,14 @@ SELECTION-SCREEN END OF SCREEN 1002. CLASS lcl_password_dialog DEFINITION FINAL. PUBLIC SECTION. - TYPES: - gty_mode TYPE i. - CONSTANTS: - dynnr TYPE char4 VALUE '1002', - BEGIN OF gc_modes, - user_pass TYPE gty_mode VALUE 1, - user_pass_2fa TYPE gty_mode VALUE 2, - unlock_2fa_token TYPE gty_mode VALUE 3, - END OF gc_modes. + CONSTANTS dynnr TYPE char4 VALUE '1002'. CLASS-METHODS popup IMPORTING - iv_repo_url TYPE string - iv_mode TYPE gty_mode DEFAULT gc_modes-user_pass - EXPORTING - ev_delete_token TYPE abap_bool + iv_repo_url TYPE string CHANGING - cv_user TYPE string - cv_pass TYPE string - cv_2fa_token TYPE string. + cv_user TYPE string + cv_pass TYPE string. CLASS-METHODS on_screen_init. CLASS-METHODS on_screen_output. @@ -59,10 +40,7 @@ CLASS lcl_password_dialog DEFINITION FINAL. iv_ucomm TYPE syucomm. PRIVATE SECTION. - CLASS-DATA: - mv_confirm TYPE abap_bool, - gv_mode TYPE gty_mode, - gv_delete_token TYPE abap_bool. + CLASS-DATA mv_confirm TYPE abap_bool. ENDCLASS. "lcl_password_dialog DEFINITION @@ -73,24 +51,18 @@ CLASS lcl_password_dialog IMPLEMENTATION. CLEAR p_pass. p_url = iv_repo_url. p_user = cv_user. - p_2fat = abap_false. mv_confirm = abap_false. - gv_mode = iv_mode. - gv_delete_token = abap_false. CALL SELECTION-SCREEN dynnr STARTING AT 5 5 ENDING AT 60 8. IF mv_confirm = abap_true. cv_user = p_user. cv_pass = p_pass. - cv_2fa_token = p_2fat. ELSE. - CLEAR: cv_user, cv_pass, cv_2fa_token. + CLEAR: cv_user, cv_pass. ENDIF. - ev_delete_token = gv_delete_token. - - CLEAR: p_url, p_user, p_pass, p_2fat. + CLEAR: p_url, p_user, p_pass. ENDMETHOD. "popup @@ -99,7 +71,6 @@ CLASS lcl_password_dialog IMPLEMENTATION. s_url = 'Repo URL' ##NO_TEXT. s_user = 'User' ##NO_TEXT. s_pass = 'Password' ##NO_TEXT. - s_2fat = '2FA' ##NO_TEXT. ENDMETHOD. "on_screen_init METHOD on_screen_output. @@ -107,51 +78,19 @@ CLASS lcl_password_dialog IMPLEMENTATION. ASSERT sy-dynnr = dynnr. - CLEAR p_2fat. - LOOP AT SCREEN. - CASE screen-name. - WHEN 'P_URL'. - screen-input = '0'. - screen-intensified = '1'. - screen-display_3d = '0'. - MODIFY SCREEN. - - WHEN 'P_PASS'. - screen-invisible = '1'. - MODIFY SCREEN. - - WHEN 'P_USER'. - IF gv_mode = gc_modes-unlock_2fa_token. - screen-input = 0. - MODIFY SCREEN. - ENDIF. - - WHEN 'P_2FAT'. - IF p_en2fa = abap_true. - screen-input = '1'. - ELSE. - screen-input = '0'. - p_2fat = 'Two factor authentication token' ##NO_TEXT. - ENDIF. - MODIFY SCREEN. - - ENDCASE. - - IF screen-group1 = 'M1' AND gv_mode <> gc_modes-user_pass_2fa. - screen-invisible = '1'. + IF screen-name = 'P_URL'. + screen-input = '0'. + screen-intensified = '1'. + screen-display_3d = '0'. + MODIFY SCREEN. + ENDIF. + IF screen-name = 'P_PASS'. + screen-invisible = '1'. MODIFY SCREEN. ENDIF. ENDLOOP. - IF gv_mode = gc_modes-unlock_2fa_token. - s_title = 'Unlock two factor authentication token' ##NO_TEXT. - sscrfields-functxt_01 = 'Remove token' ##NO_TEXT. - ELSE. - s_title = 'Login'. - CLEAR sscrfields-functxt_01. - ENDIF. - " Program RSSYSTDB, GUI Status %_CSP PERFORM set_pf_status IN PROGRAM rsdbrunt IF FOUND. APPEND 'NONE' TO lt_ucomm. "Button Check @@ -163,32 +102,26 @@ CLASS lcl_password_dialog IMPLEMENTATION. TABLES p_exclude = lt_ucomm. - IF p_user IS NOT INITIAL AND p_pass IS NOT INITIAL AND p_en2fa = abap_true. - SET CURSOR FIELD 'P_2FAT'. - ELSEIF p_user IS NOT INITIAL. + IF p_user IS NOT INITIAL. SET CURSOR FIELD 'P_PASS'. ENDIF. ENDMETHOD. "on_screen_output METHOD on_screen_event. - DATA: lv_answer TYPE c. ASSERT sy-dynnr = dynnr. " CRET - F8 " OTHERS - simulate Enter press CASE iv_ucomm. - WHEN 'FC01'. " Delete two factor code - CALL FUNCTION 'POPUP_TO_CONFIRM' - EXPORTING - text_question = 'Do you really want to remove this two factor access token?' - IMPORTING - answer = lv_answer. - IF lv_answer = '1'. - gv_delete_token = abap_true. - LEAVE TO SCREEN 0. - ENDIF. - WHEN 'CRET' OR 'ENTER'. + WHEN 'CRET'. + mv_confirm = abap_true. + WHEN OTHERS. "TODO REFACTOR !!! A CLUTCH ! + " This will work unless any new specific logic appear + " for other commands. The problem is that the password dialog + " does not have Enter event (or I don't know how to activate it ;) + " so Enter issues previous command from previous screen + " But for now this works :) Fortunately Esc produces another flow mv_confirm = abap_true. LEAVE TO SCREEN 0. ENDCASE. diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index e8e8d96a1..6a383dfbc 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -1,4 +1,4 @@ -*&---------------------------- +*&---------------------------------------------------------------------* *& Include ZABAPGIT_PERSISTENCE *&---------------------------------------------------------------------* @@ -406,21 +406,6 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. RETURNING VALUE(rv_email) TYPE string RAISING lcx_exception. - METHODS get_2fa_access_token - IMPORTING iv_service_id TYPE string - RETURNING VALUE(rv_token) TYPE string - RAISING lcx_exception. - - METHODS set_2fa_access_token - IMPORTING iv_service_id TYPE string - iv_username TYPE string - iv_token TYPE string - RAISING lcx_exception. - - METHODS delete_2fa_config - IMPORTING iv_service_id TYPE string - RAISING lcx_exception. - METHODS toggle_hide_files RETURNING VALUE(rv_hide) TYPE abap_bool RAISING lcx_exception. @@ -470,13 +455,6 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. END OF ty_repo_config. TYPES: ty_repo_config_tt TYPE STANDARD TABLE OF ty_repo_config WITH DEFAULT KEY. - TYPES: BEGIN OF ty_git_hosting_service, - service_id TYPE string, - username TYPE string, - access_token TYPE string, - END OF ty_git_hosting_service. - TYPES: ty_git_hosting_service_tab TYPE STANDARD TABLE OF ty_git_hosting_service WITH DEFAULT KEY. - TYPES: BEGIN OF ty_user, username TYPE string, email TYPE string, @@ -486,7 +464,6 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. changes_only TYPE abap_bool, diff_unified TYPE abap_bool, favorites TYPE tt_favorites, - two_fact_cfg TYPE ty_git_hosting_service_tab, END OF ty_user. METHODS constructor @@ -519,16 +496,6 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. is_repo_config TYPE ty_repo_config RAISING lcx_exception. - METHODS read_2fa_config - IMPORTING iv_service_id TYPE ty_git_hosting_service-service_id - RETURNING VALUE(rs_2fa_config) TYPE ty_git_hosting_service - RAISING lcx_exception. - - METHODS update_2fa_config - IMPORTING iv_service_id TYPE ty_git_hosting_service-service_id - is_2fa_config TYPE ty_git_hosting_service - RAISING lcx_exception. - ENDCLASS. "lcl_persistence_user DEFINITION CLASS lcl_persistence_user IMPLEMENTATION. @@ -672,48 +639,6 @@ CLASS lcl_persistence_user IMPLEMENTATION. ENDMETHOD. "update_repo_config - METHOD read_2fa_config. - DATA: lt_2fa_config TYPE ty_git_hosting_service_tab, - lv_key TYPE string. - - lv_key = to_lower( iv_service_id ). - lt_2fa_config = read( )-two_fact_cfg. - READ TABLE lt_2fa_config INTO rs_2fa_config WITH KEY service_id = lv_key. - ENDMETHOD. - - METHOD update_2fa_config. - DATA: ls_user TYPE ty_user, - lv_key TYPE string. - FIELD-SYMBOLS TYPE ty_git_hosting_service. - - ls_user = read( ). - lv_key = to_lower( iv_service_id ). - - READ TABLE ls_user-two_fact_cfg ASSIGNING WITH KEY service_id = lv_key. - IF sy-subrc IS NOT INITIAL. - APPEND INITIAL LINE TO ls_user-two_fact_cfg ASSIGNING . - ENDIF. - = is_2fa_config. - -service_id = lv_key. - - update( ls_user ). - ENDMETHOD. - - METHOD delete_2fa_config. - DATA: ls_user TYPE ty_user, - lv_key TYPE string. - - ls_user = read( ). - lv_key = to_lower( iv_service_id ). - - DELETE ls_user-two_fact_cfg WHERE service_id = lv_key. - IF sy-subrc <> 0. - lcx_exception=>raise( '2FA config could not be deleted.' ) ##NO_TEXT. - ENDIF. - - update( ls_user ). - ENDMETHOD. - METHOD set_repo_username. DATA: ls_repo_config TYPE ty_repo_config. @@ -746,21 +671,6 @@ CLASS lcl_persistence_user IMPLEMENTATION. ENDMETHOD. "get_repo_email - METHOD get_2fa_access_token. - rv_token = read_2fa_config( iv_service_id )-access_token. - ENDMETHOD. - - METHOD set_2fa_access_token. - DATA: ls_config TYPE ty_git_hosting_service. - - ls_config = read_2fa_config( iv_service_id ). - ls_config-service_id = iv_service_id. - ls_config-username = iv_username. - ls_config-access_token = iv_token. - - update_2fa_config( iv_service_id = iv_service_id is_2fa_config = ls_config ). - ENDMETHOD. - METHOD toggle_hide_files. DATA ls_user TYPE ty_user. From afd1c4e766cf491bbf0cd5afe8cd1eb83df24280 Mon Sep 17 00:00:00 2001 From: Fabian Lupa Date: Sun, 22 Jan 2017 11:26:57 +0100 Subject: [PATCH 090/142] Update 2FA PR for v1.26.0 --- src/zabapgit.prog.abap | 2 +- src/zabapgit_2fa.prog.xml | 23 ----------------------- 2 files changed, 1 insertion(+), 24 deletions(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index aaaf89121..b81885ed0 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -103,4 +103,4 @@ AT SELECTION-SCREEN ON EXIT-COMMAND. AT SELECTION-SCREEN. IF sy-dynnr = lcl_password_dialog=>dynnr. lcl_password_dialog=>on_screen_event( sscrfields-ucomm ). - ENDIF. \ No newline at end of file + ENDIF. diff --git a/src/zabapgit_2fa.prog.xml b/src/zabapgit_2fa.prog.xml index 84863cedb..048b86095 100644 --- a/src/zabapgit_2fa.prog.xml +++ b/src/zabapgit_2fa.prog.xml @@ -5,42 +5,19 @@ ZABAPGIT_2FA A - - X S D$ - - - I - - - - 0000-00-00 - - 0000-00-00 - - - - - X - - 0000-00-00 - - 0000-00-00 - D$S X R - ZABAPGIT_2FA 12 - From 6b016bbb11b41b63fe6e2c259cdeb10022d3c097 Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 22 Jan 2017 11:11:37 +0000 Subject: [PATCH 091/142] Git: show error for unknown refname --- src/zabapgit_git.prog.abap | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap index ca5340340..42d46cee5 100644 --- a/src/zabapgit_git.prog.abap +++ b/src/zabapgit_git.prog.abap @@ -261,6 +261,8 @@ CLASS lcl_git_transport IMPLEMENTATION. lcx_exception=>raise( 'unpack not ok' ). ELSEIF lv_string CP '*pre-receive hook declined*'. lcx_exception=>raise( 'pre-receive hook declined' ). + ELSEIF lv_string CP '*funny refname*'. + lcx_exception=>raise( 'funny refname' ). ENDIF. ENDMETHOD. "receive_pack From 3f2156ffa93fe2a84c2daa73ba41188d7fb8dce3 Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 22 Jan 2017 12:57:00 +0100 Subject: [PATCH 092/142] XSLT: fix overwriting --- src/zabapgit_object_xslt.prog.abap | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/zabapgit_object_xslt.prog.abap b/src/zabapgit_object_xslt.prog.abap index 126eec81b..6fb2babf5 100644 --- a/src/zabapgit_object_xslt.prog.abap +++ b/src/zabapgit_object_xslt.prog.abap @@ -94,6 +94,10 @@ CLASS lcl_object_xslt IMPLEMENTATION. ls_attributes TYPE o2xsltattr. + IF lif_object~exists( ) = abap_true. + lif_object~delete( ). + ENDIF. + io_xml->read( EXPORTING iv_name = 'ATTRIBUTES' CHANGING cg_data = ls_attributes ). From 3e5a97483ab64cc93c1b78eda64d12609423db64 Mon Sep 17 00:00:00 2001 From: sbcgua Date: Sun, 22 Jan 2017 19:32:04 +0200 Subject: [PATCH 093/142] lcl_html performance tuning #537 --- src/zabapgit_gui.prog.abap | 6 +- src/zabapgit_html.prog.abap | 334 ++++++++++++++++++++---------- src/zabapgit_page.prog.abap | 2 +- src/zabapgit_page_debug.prog.abap | 2 +- src/zabapgit_page_stage.prog.abap | 6 +- src/zabapgit_unit_test.prog.abap | 70 +++++-- src/zabapgit_view_repo.prog.abap | 17 +- 7 files changed, 284 insertions(+), 153 deletions(-) diff --git a/src/zabapgit_gui.prog.abap b/src/zabapgit_gui.prog.abap index b5397ea7d..a73c6d5c4 100644 --- a/src/zabapgit_gui.prog.abap +++ b/src/zabapgit_gui.prog.abap @@ -251,9 +251,11 @@ CLASS lcl_gui IMPLEMENTATION. METHOD render. - DATA lv_url TYPE w3url. + DATA: lv_url TYPE w3url, + lo_html TYPE REF TO lcl_html. - lv_url = cache_html( mi_cur_page->render( )->mv_html ). + lo_html = mi_cur_page->render( ). + lv_url = cache_html( lo_html->render( iv_no_indent_jscss = abap_true ) ). mo_html_viewer->show_url( lv_url ). diff --git a/src/zabapgit_html.prog.abap b/src/zabapgit_html.prog.abap index 340f7fadb..4c644e3e3 100644 --- a/src/zabapgit_html.prog.abap +++ b/src/zabapgit_html.prog.abap @@ -9,49 +9,92 @@ END-OF-DEFINITION. *----------------------------------------------------------------------* * CLASS lcl_html DEFINITION *----------------------------------------------------------------------* + CLASS lcl_html DEFINITION FINAL. PUBLIC SECTION. CONSTANTS: c_indent_size TYPE i VALUE 2. - DATA mv_html TYPE string READ-ONLY. - DATA mv_indent TYPE i READ-ONLY. - DATA mv_within_style TYPE i READ-ONLY. - DATA mv_within_js TYPE i READ-ONLY. - - METHODS add IMPORTING iv_chunk TYPE any. + CLASS-METHODS class_constructor. METHODS reset. + METHODS add + IMPORTING iv_chunk TYPE any. + METHODS render + IMPORTING iv_no_indent_jscss TYPE abap_bool OPTIONAL + RETURNING VALUE(rv_html) TYPE string. + METHODS is_empty + RETURNING VALUE(rv_yes) TYPE abap_bool. - 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_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. + 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 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 - 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 + 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. + CLASS-DATA go_single_tags_re TYPE REF TO cl_abap_regex. + DATA mt_buffer TYPE string_table. + + TYPES: + BEGIN OF ty_indent_context, + no_indent_jscss TYPE abap_bool, + within_style TYPE abap_bool, + within_js TYPE abap_bool, + indent TYPE i, + indent_str TYPE string, + END OF ty_indent_context, + + BEGIN OF ty_study_result, + style_open TYPE abap_bool, + style_close TYPE abap_bool, + script_open TYPE abap_bool, + script_close TYPE abap_bool, + tag_close TYPE abap_bool, + curly_close TYPE abap_bool, + openings TYPE i, + closings TYPE i, + singles TYPE i, + END OF ty_study_result. + + METHODS indent_line + CHANGING + cs_context TYPE ty_indent_context + cv_line TYPE string. + + METHODS study_line + IMPORTING + iv_line TYPE string + is_context TYPE ty_indent_context + RETURNING VALUE(rs_result) TYPE ty_study_result. ENDCLASS. "lcl_html DEFINITION @@ -62,26 +105,28 @@ CLASS lcl_html IMPLEMENTATION. METHOD add. - DATA lo_type TYPE REF TO cl_abap_typedescr. - DATA lo_html TYPE REF TO lcl_html. + DATA: lv_type TYPE c, + lo_html TYPE REF TO lcl_html. - lo_type = cl_abap_typedescr=>describe_by_data( iv_chunk ). + FIELD-SYMBOLS: TYPE string_table, + LIKE LINE OF . - CASE lo_type->type_kind. - WHEN cl_abap_typedescr=>typekind_char - OR cl_abap_typedescr=>typekind_string. - IF strlen( iv_chunk ) = 0. - RETURN. - ENDIF. - _add_str( iv_chunk ). - WHEN cl_abap_typedescr=>typekind_oref. + DESCRIBE FIELD iv_chunk TYPE lv_type. " Describe is faster than RTTI classes + + CASE lv_type. + WHEN 'C' OR 'g'. " Char or string + APPEND iv_chunk TO mt_buffer. + WHEN 'h'. " Table + ASSIGN iv_chunk TO . " Assuming table of strings ! Will dump otherwise + APPEND LINES OF TO mt_buffer. + WHEN 'r'. " Object ref ASSERT iv_chunk IS BOUND. " Dev mistake TRY. lo_html ?= iv_chunk. CATCH cx_sy_move_cast_error. ASSERT 1 = 0. " Dev mistake ENDTRY. - _add_htm( lo_html ). + APPEND LINES OF lo_html->mt_buffer TO mt_buffer. WHEN OTHERS. ASSERT 1 = 0. " Dev mistake ENDCASE. @@ -89,94 +134,153 @@ CLASS lcl_html IMPLEMENTATION. ENDMETHOD. " add METHOD reset. - CLEAR: me->mv_html, me->mv_indent. + CLEAR me->mt_buffer. ENDMETHOD. "reset - METHOD _add_str. + METHOD is_empty. + rv_yes = boolc( lines( mt_buffer ) = 0 ). + ENDMETHOD. "is_empty - CONSTANTS lc_single_tags_re TYPE string " HTML5 singleton tags - VALUE '<(area|base|br|col|command|embed|hr|img|input|link|meta|param|source|!)'. + METHOD class_constructor. + CREATE OBJECT go_single_tags_re + EXPORTING + pattern = '<(AREA|BASE|BR|COL|COMMAND|EMBED|HR|IMG|INPUT|LINK|META|PARAM|SOURCE|!)' + ignore_case = abap_false. + ENDMETHOD. "class_constructor - DATA lv_tags TYPE i. - DATA lv_tags_open TYPE i. - DATA lv_tags_close TYPE i. - DATA lv_tags_single TYPE i. - DATA lv_close_offs TYPE i. - DATA lv_shift_back TYPE i. - DATA lv_style_tag_open TYPE i. - DATA lv_style_tag_close TYPE i. - DATA lv_js_tag_open TYPE i. - DATA lv_js_tag_close TYPE i. - DATA lv_curly TYPE i. + METHOD study_line. + + DATA: lv_line TYPE string, + lv_len TYPE i. + + lv_line = to_upper( shift_left( val = iv_line sub = ` ` ) ). + lv_len = strlen( lv_line ). + + " Some assumptions for simplification and speed + " - style & scripts tag should be opened/closed in a separate line + " - style & scripts opening and closing in one line is possible but only once + + " TODO & Issues + " - What if the string IS a well formed html already not just single line ? + + IF is_context-within_js = abap_true OR is_context-within_style = abap_true. + + IF is_context-within_js = abap_true AND lv_len >= 8 AND lv_line(8) = '= 7 AND lv_line(7) = '= 1 AND lv_line(1) = '}'. + rs_result-curly_close = abap_true. + ENDIF. + + FIND ALL OCCURRENCES OF '{' IN lv_line MATCH COUNT rs_result-openings. + FIND ALL OCCURRENCES OF '}' IN lv_line MATCH COUNT rs_result-closings. + ENDIF. + + ELSE. + IF lv_len >= 7 AND lv_line(7) = ' 0. " Not found + rs_result-script_open = abap_true. + ENDIF. + ENDIF. + IF lv_len >= 6 AND lv_line(6) = ' 0. " Not found + rs_result-style_open = abap_true. + ENDIF. + ENDIF. + IF lv_len >= 2 AND lv_line(2) = ' 0. " Found close tag @beginning - lv_shift_back = 1. ENDIF. - 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. - lv_shift_back = 1. + ENDMETHOD. "study_line + + METHOD indent_line. + + DATA: ls_study TYPE ty_study_result, + lv_x_str TYPE string. + + ls_study = study_line( + is_context = cs_context + iv_line = cv_line ). + + " First closing tag - shift back exceptionally + IF ( ls_study-script_close = abap_true + OR ls_study-style_close = abap_true + OR ls_study-curly_close = abap_true + OR ls_study-tag_close = abap_true ) + AND cs_context-indent > 0. + lv_x_str = repeat( val = ` ` occ = ( cs_context-indent - 1 ) * c_indent_size ). + cv_line = lv_x_str && cv_line. + ELSE. + cv_line = cs_context-indent_str && cv_line. ENDIF. - mv_html = mv_html - && repeat( val = ` ` occ = ( mv_indent - lv_shift_back ) * c_indent_size ) - && iv_str - && gc_newline. - - FIND ALL OCCURRENCES OF '<' IN iv_str MATCH COUNT lv_tags. - FIND ALL OCCURRENCES OF '' IN iv_str MATCH COUNT lv_style_tag_close IGNORING CASE. - mv_within_style = mv_within_style + lv_style_tag_open - lv_style_tag_close. - - FIND ALL OCCURRENCES OF '' IN iv_str MATCH COUNT lv_js_tag_close IGNORING CASE. - mv_within_js = mv_within_js + lv_js_tag_open - lv_js_tag_close. - - IF mv_within_style > 0 OR mv_within_js > 0. - FIND ALL OCCURRENCES OF '{' IN iv_str MATCH COUNT lv_curly. - lv_tags_open = lv_tags_open + lv_curly. - FIND ALL OCCURRENCES OF '}' IN iv_str MATCH COUNT lv_curly. - lv_tags_close = lv_tags_close + lv_curly. - ENDIF. + " Context status update + CASE abap_true. + WHEN ls_study-script_open. + cs_context-within_js = abap_true. + cs_context-within_style = abap_false. + WHEN ls_study-style_open. + cs_context-within_js = abap_false. + cs_context-within_style = abap_true. + WHEN ls_study-script_close OR ls_study-style_close. + cs_context-within_js = abap_false. + cs_context-within_style = abap_false. + ls_study-closings = ls_study-closings + 1. + ENDCASE. " More-less logic chosen due to possible double tags in a line '' - IF lv_tags_open > lv_tags_close. - mv_indent = mv_indent + 1. - ELSEIF lv_tags_open < lv_tags_close AND mv_indent > 0. - mv_indent = mv_indent - 1. + IF ls_study-openings <> ls_study-closings. + IF ls_study-openings > ls_study-closings. + cs_context-indent = cs_context-indent + 1. + ELSEIF cs_context-indent > 0. " AND ls_study-openings < ls_study-closings + cs_context-indent = cs_context-indent - 1. + ENDIF. + cs_context-indent_str = repeat( val = ` ` occ = cs_context-indent * c_indent_size ). ENDIF. - ENDMETHOD. "_add_str + ENDMETHOD. "indent_line - METHOD _add_htm. + METHOD render. - DATA lt_strtab TYPE TABLE OF string. - DATA lv_str TYPE string. + DATA: ls_context TYPE ty_indent_context, + lt_temp TYPE string_table. - SPLIT io_html->mv_html AT gc_newline INTO TABLE lt_strtab. - LOOP AT lt_strtab INTO lv_str. - SHIFT lv_str LEFT DELETING LEADING space. - _add_str( lv_str ). + FIELD-SYMBOLS: LIKE LINE OF lt_temp, + LIKE LINE OF lt_temp. + + ls_context-no_indent_jscss = iv_no_indent_jscss. + + LOOP AT mt_buffer ASSIGNING . + APPEND TO lt_temp ASSIGNING . + indent_line( CHANGING cs_context = ls_context cv_line = ). ENDLOOP. - ENDMETHOD. "_add_htm + CONCATENATE LINES OF lt_temp INTO rv_html SEPARATED BY gc_newline. + + ENDMETHOD. "render 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 ) ). + add( 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 @@ -228,10 +332,10 @@ CLASS lcl_html IMPLEMENTATION. METHOD add_icon. - _add_str( icon( iv_name = iv_name - iv_class = iv_class - iv_alt = iv_alt - iv_hint = iv_hint ) ). + add( icon( iv_name = iv_name + iv_class = iv_class + iv_alt = iv_alt + iv_hint = iv_hint ) ). ENDMETHOD. "add_icon diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index 078a1ea27..77bb285a3 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -173,7 +173,7 @@ CLASS lcl_gui_page IMPLEMENTATION. lo_script = scripts( ). - IF lo_script IS BOUND AND lo_script->mv_html IS NOT INITIAL. + IF lo_script IS BOUND AND lo_script->is_empty( ) = abap_false. ro_html->add( '