From ca467b7458c2a5cb877004c077430afb43db08e9 Mon Sep 17 00:00:00 2001 From: larshp Date: Wed, 15 Jun 2016 09:24:50 +0000 Subject: [PATCH 01/14] fix possible dump, and pretty printer --- zabapgit.prog.abap | 133 +++++++++++++++++++++++---------------------- 1 file changed, 69 insertions(+), 64 deletions(-) diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index a1e67f883..b116878d3 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -3,7 +3,7 @@ REPORT zabapgit. * See http://www.abapgit.org CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.11.9'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.11.10'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) @@ -143,7 +143,7 @@ SELECTION-SCREEN END OF SCREEN 1001. START-OF-SELECTION. PERFORM run. -CLASS lcl_app DEFINITION DEFERRED. + CLASS lcl_app DEFINITION DEFERRED. *----------------------------------------------------------------------* * CLASS LCX_EXCEPTION DEFINITION @@ -414,8 +414,8 @@ CLASS lcl_html_helper IMPLEMENTATION. ENDMETHOD. "_add_htm METHOD add_anchor. - DATA: lv_class TYPE string, - lv_href TYPE string. + DATA: lv_class TYPE string, + lv_href TYPE string. lv_class = iv_class. @@ -13058,7 +13058,7 @@ CLASS lcl_object_shi3 DEFINITION INHERITING FROM lcl_objects_super FINAL. mt_map TYPE ts_id_map. " SORTED ! METHODS jump_se43 - RAISING lcx_exception. + RAISING lcx_exception. METHODS strip_stamps CHANGING cs_head TYPE ttree @@ -13073,7 +13073,7 @@ CLASS lcl_object_shi3 DEFINITION INHERITING FROM lcl_objects_super FINAL. METHODS replace_id IMPORTING iv_id TYPE clike RETURNING VALUE(rv_new_id) TYPE ttree-id - RAISING lcx_exception. + RAISING lcx_exception. ENDCLASS. "lcl_object_shi3 DEFINITION @@ -13326,27 +13326,27 @@ CLASS lcl_object_shi3 IMPLEMENTATION. lif_object~delete( ). ENDIF. - call function 'STREE_HIERARCHY_SAVE' - exporting + CALL FUNCTION 'STREE_HIERARCHY_SAVE' + EXPORTING structure_id = mv_tree_id structure_type = 'BMENU' structure_description = space structure_masterlanguage = mv_language structure_responsible = sy-uname development_class = iv_package - importing + IMPORTING message = ls_msg - tables + TABLES list_of_nodes = lt_nodes list_of_references = lt_refs list_of_texts = lt_texts structure_descriptions = lt_titles - exceptions + EXCEPTIONS no_nodes_given = 1 - others = 2. - if sy-subrc <> 0. + OTHERS = 2. + IF sy-subrc <> 0. _raise 'Error from STREE_HIERARCHY_SAVE, SHI3'. - endif. + ENDIF. ENDMETHOD. "deserialize @@ -13520,20 +13520,20 @@ CLASS lcl_html_action_utils DEFINITION FINAL. RETURNING VALUE(rv_string) TYPE string. CLASS-METHODS jump_decode - IMPORTING iv_string TYPE clike - EXPORTING ev_obj_type TYPE tadir-object - ev_obj_name TYPE tadir-obj_name + IMPORTING iv_string TYPE clike + EXPORTING ev_obj_type TYPE tadir-object + ev_obj_name TYPE tadir-obj_name RAISING lcx_exception. CLASS-METHODS file_encode IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key - is_file TYPE ANY "ty_repo_file + is_file TYPE any "ty_repo_file RETURNING VALUE(rv_string) TYPE string. CLASS-METHODS file_decode - IMPORTING iv_string TYPE clike - EXPORTING ev_key TYPE lcl_persistence_repo=>ty_repo-key - es_file TYPE ANY "ty_repo_file + IMPORTING iv_string TYPE clike + EXPORTING ev_key TYPE lcl_persistence_repo=>ty_repo-key + es_file TYPE any "ty_repo_file RAISING lcx_exception. CLASS-METHODS dbkey_encode @@ -13541,20 +13541,20 @@ CLASS lcl_html_action_utils DEFINITION FINAL. RETURNING VALUE(rv_string) TYPE string. CLASS-METHODS dbkey_decode - IMPORTING iv_string TYPE clike - RETURNING VALUE(rs_key) TYPE lcl_persistence_db=>ty_content. + IMPORTING iv_string TYPE clike + RETURNING VALUE(rs_key) TYPE lcl_persistence_db=>ty_content. CLASS-METHODS parse_commit_request - IMPORTING it_postdata TYPE cnht_post_data_tab - RETURNING VALUE(rs_fields) TYPE ty_commit_fields. + IMPORTING it_postdata TYPE cnht_post_data_tab + RETURNING VALUE(rs_fields) TYPE ty_commit_fields. CLASS-METHODS repo_key_encode IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key RETURNING VALUE(rv_string) TYPE string. CLASS-METHODS repo_key_decode - IMPORTING iv_string TYPE clike - RETURNING VALUE(rv_key) TYPE lcl_persistence_repo=>ty_repo-key. + IMPORTING iv_string TYPE clike + RETURNING VALUE(rv_key) TYPE lcl_persistence_repo=>ty_repo-key. ENDCLASS. "lcl_html_action_utils DEFINITION @@ -16354,8 +16354,8 @@ CLASS lcl_stage DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_repo_srv. WITH UNIQUE KEY file-path file-filename. TYPES: BEGIN OF ty_work_file, - type TYPE char1, - file TYPE ty_file, + type TYPE char1, + file TYPE ty_file, END OF ty_work_file. DATA mv_repo_key TYPE lcl_persistence_db=>ty_value READ-ONLY. @@ -16372,48 +16372,48 @@ CLASS lcl_stage DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_repo_srv. RAISING lcx_exception. METHODS update_and_add_dot_abapgit - IMPORTING iv_data TYPE ty_file-data + IMPORTING iv_data TYPE ty_file-data RAISING lcx_exception. METHODS: add - IMPORTING iv_path TYPE ty_file-path - iv_filename TYPE ty_file-filename + IMPORTING iv_path TYPE ty_file-path + iv_filename TYPE ty_file-filename RAISING lcx_exception, reset - IMPORTING iv_path TYPE ty_file-path - iv_filename TYPE ty_file-filename + IMPORTING iv_path TYPE ty_file-path + iv_filename TYPE ty_file-filename RAISING lcx_exception, rm - IMPORTING iv_path TYPE ty_file-path - iv_filename TYPE ty_file-filename + IMPORTING iv_path TYPE ty_file-path + iv_filename TYPE ty_file-filename RAISING lcx_exception, ignore - IMPORTING iv_path TYPE ty_file-path - iv_filename TYPE ty_file-filename + IMPORTING iv_path TYPE ty_file-path + iv_filename TYPE ty_file-filename RAISING lcx_exception, lookup IMPORTING iv_path TYPE ty_file-path iv_filename TYPE ty_file-filename RETURNING VALUE(rv_method) TYPE ty_method, count - RETURNING VALUE(rv_count) TYPE i, + RETURNING VALUE(rv_count) TYPE i, get_all - RETURNING VALUE(rt_stage) TYPE ty_stage_tt. + RETURNING VALUE(rt_stage) TYPE ty_stage_tt. PRIVATE SECTION. DATA: mt_stage TYPE ty_stage_tt. METHODS append - IMPORTING iv_path TYPE ty_file-path - iv_filename TYPE ty_file-filename - iv_method TYPE ty_method + IMPORTING iv_path TYPE ty_file-path + iv_filename TYPE ty_file-filename + iv_method TYPE ty_method RAISING lcx_exception. METHODS find_work_file - IMPORTING iv_path TYPE ty_file-path - iv_filename TYPE ty_file-filename - RETURNING VALUE(rs_file) TYPE ty_file + IMPORTING iv_path TYPE ty_file-path + iv_filename TYPE ty_file-filename + RETURNING VALUE(rs_file) TYPE ty_file RAISING lcx_exception. ENDCLASS. "lcl_stage DEFINITION @@ -16846,8 +16846,8 @@ CLASS lcl_gui_router DEFINITION FINAL. RAISING lcx_exception. METHODS stage_handle_action - IMPORTING iv_getdata TYPE clike - iv_action TYPE clike + IMPORTING iv_getdata TYPE clike + iv_action TYPE clike RAISING lcx_exception. ENDCLASS. @@ -16974,7 +16974,7 @@ CLASS lcl_repo_srv DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. RAISING lcx_exception. METHODS free_stage - IMPORTING iv_repo_key TYPE lcl_persistence_db=>ty_value. + IMPORTING iv_repo_key TYPE lcl_persistence_db=>ty_value. PRIVATE SECTION. @@ -17007,7 +17007,7 @@ CLASS lcl_app DEFINITION FINAL. PUBLIC SECTION. CLASS-METHODS run - RAISING lcx_exception. + RAISING lcx_exception. CLASS-METHODS gui RETURNING VALUE(ro_gui) TYPE REF TO lcl_gui @@ -17939,7 +17939,8 @@ CLASS lcl_git_transport DEFINITION FINAL. CLASS-METHODS parse EXPORTING ev_pack TYPE xstring - CHANGING cv_data TYPE xstring. + CHANGING cv_data TYPE xstring + RAISING lcx_exception. CLASS-METHODS length_utf8_hex IMPORTING iv_data TYPE xstring @@ -18304,6 +18305,10 @@ CLASS lcl_git_transport IMPLEMENTATION. WHILE xstrlen( cv_data ) >= 4. lv_len = length_utf8_hex( cv_data ). + IF lv_len > xstrlen( cv_data ). + _raise 'parse, string length too large'. + ENDIF. + lv_contents = cv_data(lv_len). IF lv_len = 0. cv_data = cv_data+4. @@ -19337,8 +19342,8 @@ CLASS lcl_gui IMPLEMENTATION. METHOD call_page. - DATA: lt_assets TYPE tt_web_assets, - ls_stack TYPE ty_page_stack. + DATA: lt_assets TYPE tt_web_assets, + ls_stack TYPE ty_page_stack. FIELD-SYMBOLS LIKE LINE OF lt_assets. IF NOT mi_cur_page IS INITIAL. @@ -20017,7 +20022,7 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. METHOD render_head. DATA: lo_html TYPE REF TO lcl_html_helper, - ls_stats TYPE lcl_diff=>ty_count. + ls_stats TYPE lcl_diff=>ty_count. CREATE OBJECT lo_html. @@ -20471,12 +20476,12 @@ CLASS lcl_gui_page_commit DEFINITION FINAL INHERITING FROM lcl_gui_page_super. RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. METHODS render_stage - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper - RAISING lcx_exception. + RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper + RAISING lcx_exception. METHODS render_form - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper - RAISING lcx_exception. + RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper + RAISING lcx_exception. METHODS styles RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. @@ -20725,8 +20730,8 @@ CLASS lcl_gui_page_stage DEFINITION FINAL INHERITING FROM lcl_gui_page_super. METHODS lif_gui_page~render REDEFINITION. PRIVATE SECTION. - DATA: mo_repo TYPE REF TO lcl_repo_online, - mo_stage TYPE REF TO lcl_stage. + DATA: mo_repo TYPE REF TO lcl_repo_online, + mo_stage TYPE REF TO lcl_stage. METHODS render_lines RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. @@ -20771,7 +20776,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION. ENDIF. IF -type = lcl_stage=>c_wftype-local. ro_html->add( 'LOCAL' ) ##NO_TEXT. - ElSE. "c_remote + ELSE. "c_remote ro_html->add( 'REMOTE' ) ##NO_TEXT. ENDIF. ro_html->add(''). @@ -24725,9 +24730,9 @@ CLASS lcl_gui_router IMPLEMENTATION. METHOD stage_handle_action. - DATA: ls_file TYPE ty_file, - lo_stage TYPE REF TO lcl_stage, - lv_key TYPE lcl_persistence_repo=>ty_repo-key. + DATA: ls_file TYPE ty_file, + lo_stage TYPE REF TO lcl_stage, + lv_key TYPE lcl_persistence_repo=>ty_repo-key. FIELD-SYMBOLS: LIKE LINE OF lo_stage->mt_workarea. From f2a344e71bee55cf989818d3ffd26dccb433ea92 Mon Sep 17 00:00:00 2001 From: larshp Date: Wed, 15 Jun 2016 12:14:09 +0000 Subject: [PATCH 02/14] SICF: do not serialize ICF_USER the user is configured per system/per landscape --- zabapgit.prog.abap | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index b116878d3..f64199e6c 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -3,7 +3,7 @@ REPORT zabapgit. * See http://www.abapgit.org CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.11.10'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.11.11'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) @@ -6754,6 +6754,7 @@ CLASS lcl_object_sicf IMPLEMENTATION. CLEAR ls_icfservice-icfnodguid. CLEAR ls_icfservice-icfparguid. + CLEAR ls_icfservice-icf_user. io_xml->add( iv_name = 'URL' ig_data = lv_url ). From 5661b9478d843d5e3e0782ecbab0f822308450f3 Mon Sep 17 00:00:00 2001 From: larshp Date: Wed, 15 Jun 2016 12:16:26 +0000 Subject: [PATCH 03/14] move definition --- zabapgit.prog.abap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index f64199e6c..eb239e933 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -143,8 +143,6 @@ SELECTION-SCREEN END OF SCREEN 1001. START-OF-SELECTION. PERFORM run. - CLASS lcl_app DEFINITION DEFERRED. - *----------------------------------------------------------------------* * CLASS LCX_EXCEPTION DEFINITION *----------------------------------------------------------------------* @@ -179,6 +177,8 @@ CLASS lcx_exception IMPLEMENTATION. ENDCLASS. "lcx_exception IMPLEMENTATION +CLASS lcl_app DEFINITION DEFERRED. + *----------------------------------------------------------------------* * CLASS LCX_NOT_FOUND DEFINITION *----------------------------------------------------------------------* From 296a3ff094d6d7205b40b9d2b3365faff2498036 Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 16 Jun 2016 11:29:58 +0000 Subject: [PATCH 04/14] fix dump --- zabapgit.prog.abap | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index eb239e933..14f36cf30 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -3,7 +3,7 @@ REPORT zabapgit. * See http://www.abapgit.org CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.11.11'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.11.12'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) @@ -17945,7 +17945,8 @@ CLASS lcl_git_transport DEFINITION FINAL. CLASS-METHODS length_utf8_hex IMPORTING iv_data TYPE xstring - RETURNING VALUE(rv_len) TYPE i. + RETURNING VALUE(rv_len) TYPE i + RAISING lcx_exception. CLASS-METHODS parse_branch_list IMPORTING iv_data TYPE string @@ -18284,8 +18285,12 @@ CLASS lcl_git_transport IMPLEMENTATION. encoding = 'UTF-8' ). lv_len = xstrlen( lv_xstring ). - lo_obj->read( EXPORTING n = lv_len - IMPORTING data = lv_string ). + TRY. + lo_obj->read( EXPORTING n = lv_len + IMPORTING data = lv_string ). + CATCH cx_sy_conversion_codepage. + _raise 'error converting to hex, LENGTH_UTF8_HEX'. + ENDTRY. lv_char4 = lv_string. TRANSLATE lv_char4 TO UPPER CASE. From 39e95a36f690d45058cddba008638a436706f250 Mon Sep 17 00:00:00 2001 From: larshp Date: Fri, 17 Jun 2016 08:59:03 +0000 Subject: [PATCH 05/14] fix login issue, close #251 --- zabapgit.prog.abap | 87 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 69 insertions(+), 18 deletions(-) diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index 14f36cf30..337b36b02 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -3,7 +3,7 @@ REPORT zabapgit. * See http://www.abapgit.org CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.11.12'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.11.13'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) @@ -17752,18 +17752,21 @@ CLASS lcl_login_manager DEFINITION FINAL. PUBLIC SECTION. CLASS-METHODS: load - IMPORTING iv_uri TYPE string - ii_client TYPE REF TO if_http_client + IMPORTING iv_uri TYPE string + ii_client TYPE REF TO if_http_client OPTIONAL + RETURNING VALUE(rv_authorization) TYPE string RAISING lcx_exception, save IMPORTING iv_uri TYPE string ii_client TYPE REF TO if_http_client RAISING lcx_exception, + clear, set IMPORTING iv_uri TYPE string iv_username TYPE string iv_password TYPE string - RETURNING VALUE(rv_auth) TYPE string. + RETURNING VALUE(rv_auth) TYPE string + RAISING lcx_exception. PRIVATE SECTION. TYPES: BEGIN OF ty_auth, @@ -17776,32 +17779,72 @@ CLASS lcl_login_manager DEFINITION FINAL. CLASS-METHODS: append IMPORTING iv_uri TYPE string - iv_auth TYPE string. + iv_auth TYPE string + RAISING lcx_exception. ENDCLASS. CLASS ltcl_login_manager DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. PRIVATE SECTION. + CONSTANTS: c_username TYPE string VALUE 'Aladdin', + c_password TYPE string VALUE 'OpenSesame'. + METHODS: - test1 FOR TESTING. + setup, + teardown, + encoding FOR TESTING + RAISING lcx_exception, + same_server FOR TESTING + RAISING lcx_exception. ENDCLASS. CLASS ltcl_login_manager IMPLEMENTATION. - METHOD test1. + METHOD setup. + lcl_login_manager=>clear( ). + ENDMETHOD. + + METHOD teardown. + lcl_login_manager=>clear( ). + ENDMETHOD. + + METHOD encoding. DATA: lv_auth TYPE string. lv_auth = lcl_login_manager=>set( - iv_uri = 'foobar' - iv_username = 'Aladdin' - iv_password = 'OpenSesame' ). + iv_uri = 'https://github.com/larshp/abapGit.git' + iv_username = c_username + iv_password = c_password ). cl_abap_unit_assert=>assert_equals( - act = lv_auth - exp = 'Basic QWxhZGRpbjpPcGVuU2VzYW1l' ). + act = lv_auth + exp = 'Basic QWxhZGRpbjpPcGVuU2VzYW1l' ). + + ENDMETHOD. + + METHOD same_server. + + CONSTANTS: lc_github1 TYPE string VALUE 'https://github.com/larshp/abapGit.git', + lc_github2 TYPE string VALUE 'https://github.com/larshp/Foobar.git'. + + DATA: lv_auth1 TYPE string, + lv_auth2 TYPE string. + + + lcl_login_manager=>set( + iv_uri = lc_github1 + iv_username = c_username + iv_password = c_password ). + + lv_auth1 = lcl_login_manager=>load( lc_github1 ). + lv_auth2 = lcl_login_manager=>load( lc_github2 ). + + cl_abap_unit_assert=>assert_equals( + act = lv_auth1 + exp = lv_auth2 ). ENDMETHOD. @@ -17809,6 +17852,10 @@ ENDCLASS. CLASS lcl_login_manager IMPLEMENTATION. + METHOD clear. + CLEAR gt_auth. + ENDMETHOD. + METHOD set. DATA: lv_concat TYPE string. @@ -17836,12 +17883,16 @@ CLASS lcl_login_manager IMPLEMENTATION. DATA: ls_auth LIKE LINE OF gt_auth. - READ TABLE gt_auth INTO ls_auth WITH KEY uri = iv_uri. + READ TABLE gt_auth INTO ls_auth WITH KEY uri = lcl_url=>host( iv_uri ). IF sy-subrc = 0. - ii_client->request->set_header_field( + rv_authorization = ls_auth-authorization. + + IF NOT ii_client IS INITIAL. + ii_client->request->set_header_field( name = 'authorization' value = ls_auth-authorization ). "#EC NOTEXT - ii_client->propertytype_logon_popup = ii_client->co_disabled. + ii_client->propertytype_logon_popup = ii_client->co_disabled. + ENDIF. ENDIF. ENDMETHOD. @@ -17851,10 +17902,10 @@ CLASS lcl_login_manager IMPLEMENTATION. DATA: lv_auth TYPE string. - lv_auth = ii_client->request->get_header_field( 'authorization' ). "#EC NOTEXT + lv_auth = ii_client->request->get_header_field( 'authorization' ). "#EC NOTEXT IF NOT lv_auth IS INITIAL. - append( iv_uri = iv_uri + append( iv_uri = iv_uri iv_auth = lv_auth ). ENDIF. @@ -17868,7 +17919,7 @@ CLASS lcl_login_manager IMPLEMENTATION. READ TABLE gt_auth WITH KEY uri = iv_uri TRANSPORTING NO FIELDS. IF sy-subrc <> 0. APPEND INITIAL LINE TO gt_auth ASSIGNING . - -uri = iv_uri. + -uri = lcl_url=>host( iv_uri ). -authorization = iv_auth. ENDIF. From 0761564040ab5ec398f26bb4d695f41934dc00c1 Mon Sep 17 00:00:00 2001 From: larshp Date: Fri, 17 Jun 2016 09:33:40 +0000 Subject: [PATCH 06/14] small fix, #251 --- zabapgit.prog.abap | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index 337b36b02..5b08e3359 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -17916,7 +17916,8 @@ CLASS lcl_login_manager IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF gt_auth. - READ TABLE gt_auth WITH KEY uri = iv_uri TRANSPORTING NO FIELDS. + READ TABLE gt_auth WITH KEY uri = lcl_url=>host( iv_uri ) + TRANSPORTING NO FIELDS. IF sy-subrc <> 0. APPEND INITIAL LINE TO gt_auth ASSIGNING . -uri = lcl_url=>host( iv_uri ). From 2a08209e919da66118db7f8b3e2535489ef399e5 Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 23 Jun 2016 14:14:29 +0000 Subject: [PATCH 07/14] scaffolding, #264 #265 #266 add new advanced menu option for online repositories to contain remove uninstall plus new features from #264 #265 #266 code inspector fixes --- zabapgit.prog.abap | 311 +++++++++++++++++++++++++++++---------------- 1 file changed, 200 insertions(+), 111 deletions(-) diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index 5b08e3359..f2a0fd137 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -3,7 +3,7 @@ REPORT zabapgit. * See http://www.abapgit.org CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.11.13'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.11.14'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) @@ -106,16 +106,16 @@ CONSTANTS: BEGIN OF gc_event_state, go_back_to_bookmark VALUE 6, END OF gc_event_state. -CONSTANTS: BEGIN OF html_opt, +CONSTANTS: BEGIN OF gc_html_opt, emphas TYPE c VALUE 'E', cancel TYPE c VALUE 'C', - END OF html_opt. + END OF gc_html_opt. -CONSTANTS: BEGIN OF action_type, +CONSTANTS: BEGIN OF gc_action_type, sapevent TYPE c VALUE 'E', url TYPE c VALUE 'U', onclick TYPE c VALUE 'C', - END OF action_type. + END OF gc_action_type. CONSTANTS: gc_newline TYPE abap_char1 VALUE cl_abap_char_utilities=>newline. @@ -123,8 +123,8 @@ CONSTANTS: gc_english TYPE spras VALUE 'E'. CONSTANTS: gc_abapgit_homepage TYPE string VALUE 'http://www.abapgit.org'. -CONSTANTS: c_root_dir TYPE string VALUE '/', - c_dot_abapgit TYPE string VALUE '.abapgit.xml'. +CONSTANTS: gc_root_dir TYPE string VALUE '/', + gc_dot_abapgit TYPE string VALUE '.abapgit.xml'. DEFINE _raise. RAISE EXCEPTION TYPE lcx_exception @@ -320,7 +320,7 @@ CLASS lcl_html_helper DEFINITION FINAL. METHODS add_anchor IMPORTING iv_txt TYPE string iv_act TYPE string iv_opt TYPE char1 OPTIONAL - iv_typ TYPE char1 DEFAULT action_type-sapevent + iv_typ TYPE char1 DEFAULT gc_action_type-sapevent iv_class TYPE string OPTIONAL. PRIVATE SECTION. @@ -419,10 +419,10 @@ CLASS lcl_html_helper IMPLEMENTATION. lv_class = iv_class. - IF iv_opt = html_opt-emphas. + IF iv_opt = gc_html_opt-emphas. lv_class = lv_class && ' emphasis' ##NO_TEXT. ENDIF. - IF iv_opt = html_opt-cancel. + IF iv_opt = gc_html_opt-cancel. lv_class = lv_class && ' attention' ##NO_TEXT. ENDIF. IF lv_class IS NOT INITIAL. @@ -432,11 +432,11 @@ CLASS lcl_html_helper IMPLEMENTATION. IF iv_act IS NOT INITIAL. CASE iv_typ. - WHEN action_type-url. + WHEN gc_action_type-url. lv_href = | href="{ iv_act }"|. - WHEN action_type-sapevent. + WHEN gc_action_type-sapevent. lv_href = | href="sapevent:{ iv_act }"|. - WHEN action_type-onclick. + WHEN gc_action_type-onclick. lv_href = | onclick="{ iv_act }"|. WHEN OTHERS. ENDCASE. @@ -457,7 +457,7 @@ CLASS lcl_html_toolbar DEFINITION FINAL. io_sub TYPE REF TO lcl_html_toolbar OPTIONAL iv_act TYPE string OPTIONAL iv_opt TYPE c OPTIONAL - iv_typ TYPE c DEFAULT action_type-sapevent. + iv_typ TYPE c DEFAULT gc_action_type-sapevent. METHODS render IMPORTING iv_as_droplist_with_label TYPE string OPTIONAL iv_no_separator TYPE abap_bool OPTIONAL @@ -539,17 +539,19 @@ CLASS lcl_html_toolbar IMPLEMENTATION. 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. + OR lv_last = abap_true + AND iv_as_droplist_with_label IS INITIAL. lv_class = 'menu_end'. ENDIF. - ro_html->add_anchor( iv_txt = -txt - iv_act = -act - iv_opt = -opt - iv_typ = -typ - iv_class = lv_class ). + ro_html->add_anchor( iv_txt = -txt + iv_act = -act + iv_opt = -opt + iv_typ = -typ + iv_class = lv_class ). 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 + iv_no_separator = lv_last ) ). ENDIF. ENDLOOP. @@ -2741,7 +2743,7 @@ CLASS lcl_diff IMPLEMENTATION. DEFINE _add_regex. CREATE OBJECT lo_regex EXPORTING pattern = &1 - ignore_case = abap_true. + ignore_case = abap_true ##NO_TEXT. APPEND lo_regex TO lt_regex_set. END-OF-DEFINITION. @@ -13225,59 +13227,59 @@ CLASS lcl_object_shi3 IMPLEMENTATION. METHOD strip_stamps. - FIELD-SYMBOLS LIKE LINE OF ct_nodes. + FIELD-SYMBOLS LIKE LINE OF ct_nodes. CLEAR: cs_head-luser, cs_head-ldate, cs_head-ltime. CLEAR: cs_head-fuser, cs_head-fdate, cs_head-ftime. CLEAR: cs_head-responsibl. - LOOP AT ct_nodes ASSIGNING . - CLEAR: -luser, -ldate, -ltime. - CLEAR: -fuser, -fdate, -ftime. + LOOP AT ct_nodes ASSIGNING . + CLEAR: -luser, -ldate, -ltime. + CLEAR: -fuser, -fdate, -ftime. ENDLOOP. ENDMETHOD. "strip_stamps METHOD regenerate_ids. - DATA: l_uid TYPE sys_uid, + DATA: ls_uid TYPE sys_uid, lt_map TYPE tt_id_map. - FIELD-SYMBOLS: LIKE LINE OF ct_nodes, - LIKE LINE OF ct_refs, - LIKE LINE OF ct_texts, - LIKE LINE OF mt_map. + FIELD-SYMBOLS: LIKE LINE OF ct_nodes, + LIKE LINE OF ct_refs, + LIKE LINE OF ct_texts, + LIKE LINE OF mt_map. "Build map - LOOP AT ct_nodes ASSIGNING . - APPEND INITIAL LINE TO lt_map ASSIGNING . - IF -parent_id IS INITIAL. - -old = -node_id. - -new = -node_id. "Root node + LOOP AT ct_nodes ASSIGNING . + APPEND INITIAL LINE TO lt_map ASSIGNING . + IF -parent_id IS INITIAL. + -old = -node_id. + -new = -node_id. "Root node ELSE. CALL FUNCTION 'STREE_GET_UNIQUE_ID' IMPORTING - unique_id = l_uid. + unique_id = ls_uid. - -old = -node_id. - -new = l_uid-id. + -old = -node_id. + -new = ls_uid-id. ENDIF. - -node_id = -new. "Replace id + -node_id = -new. "Replace id ENDLOOP. mt_map = lt_map. "Sort - LOOP AT ct_nodes ASSIGNING . - -parent_id = replace_id( -parent_id ). - -brother_id = replace_id( -brother_id ). + LOOP AT ct_nodes ASSIGNING . + -parent_id = replace_id( -parent_id ). + -brother_id = replace_id( -brother_id ). ENDLOOP. - LOOP AT ct_refs ASSIGNING . - -node_id = replace_id( -node_id ). + LOOP AT ct_refs ASSIGNING . + -node_id = replace_id( -node_id ). ENDLOOP. - LOOP AT ct_texts ASSIGNING . - -node_id = replace_id( -node_id ). + LOOP AT ct_texts ASSIGNING . + -node_id = replace_id( -node_id ). ENDLOOP. ENDMETHOD. "regenerate_ids @@ -13528,13 +13530,13 @@ CLASS lcl_html_action_utils DEFINITION FINAL. CLASS-METHODS file_encode IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key - is_file TYPE any "ty_repo_file + ig_file TYPE any "ty_repo_file RETURNING VALUE(rv_string) TYPE string. CLASS-METHODS file_decode IMPORTING iv_string TYPE clike EXPORTING ev_key TYPE lcl_persistence_repo=>ty_repo-key - es_file TYPE any "ty_repo_file + eg_file TYPE any "ty_repo_file RAISING lcx_exception. CLASS-METHODS dbkey_encode @@ -13614,22 +13616,22 @@ CLASS lcl_html_action_utils IMPLEMENTATION. DATA: lt_fields TYPE tihttpnvp, ls_field LIKE LINE OF lt_fields. - FIELD-SYMBOLS TYPE string. + FIELD-SYMBOLS TYPE string. ls_field-name = 'KEY'. ls_field-value = iv_key. APPEND ls_field TO lt_fields. ls_field-name = 'PATH'. - ASSIGN COMPONENT ls_field-name OF STRUCTURE is_file TO . - ASSERT IS ASSIGNED. - ls_field-value = . + ASSIGN COMPONENT ls_field-name OF STRUCTURE ig_file TO . + ASSERT IS ASSIGNED. + ls_field-value = . APPEND ls_field TO lt_fields. ls_field-name = 'FILENAME'. - ASSIGN COMPONENT ls_field-name OF STRUCTURE is_file TO . - ASSERT IS ASSIGNED. - ls_field-value = . + ASSIGN COMPONENT ls_field-name OF STRUCTURE ig_file TO . + ASSERT IS ASSIGNED. + ls_field-value = . APPEND ls_field TO lt_fields. rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ). @@ -13642,9 +13644,9 @@ CLASS lcl_html_action_utils IMPLEMENTATION. lv_string TYPE string. FIELD-SYMBOLS: LIKE LINE OF lt_fields, - TYPE string. + TYPE string. - CLEAR: ev_key, es_file. + CLEAR: ev_key, eg_file. lv_string = iv_string. " type conversion lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ). @@ -13655,16 +13657,16 @@ CLASS lcl_html_action_utils IMPLEMENTATION. READ TABLE lt_fields ASSIGNING WITH KEY name = 'PATH'. IF sy-subrc = 0. - ASSIGN COMPONENT 'PATH' OF STRUCTURE es_file TO . - ASSERT IS ASSIGNED. - = -value. + ASSIGN COMPONENT 'PATH' OF STRUCTURE eg_file TO . + ASSERT IS ASSIGNED. + = -value. ENDIF. READ TABLE lt_fields ASSIGNING WITH KEY name = 'FILENAME'. IF sy-subrc = 0. - ASSIGN COMPONENT 'FILENAME' OF STRUCTURE es_file TO . - ASSERT IS ASSIGNED. - = -value. + ASSIGN COMPONENT 'FILENAME' OF STRUCTURE eg_file TO . + ASSERT IS ASSIGNED. + = -value. ENDIF. ENDMETHOD. "file_decode @@ -14535,7 +14537,7 @@ CLASS lcl_sap_package IMPLEMENTATION. SELECT devclass INTO TABLE rt_list - FROM tdevc WHERE parentcl = iv_package. + FROM tdevc WHERE parentcl = iv_package. "#EC CI_GENBUFF * note the recursion, since packages are added to the list LOOP AT rt_list INTO lv_devclass. @@ -16834,6 +16836,18 @@ CLASS lcl_gui_router DEFINITION FINAL. IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key RAISING lcx_exception. + METHODS change_branch + IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key + RAISING lcx_exception. + + METHODS reset + IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key + RAISING lcx_exception. + + METHODS create_branch + IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key + RAISING lcx_exception. + METHODS db_delete IMPORTING iv_getdata TYPE clike RAISING lcx_exception. @@ -17308,8 +17322,8 @@ CLASS lcl_repo IMPLEMENTATION. READ TABLE mt_remote ASSIGNING - WITH KEY path = c_root_dir - filename = c_dot_abapgit. + WITH KEY path = gc_root_dir + filename = gc_dot_abapgit. IF sy-subrc = 0. mo_dot_abapgit = lcl_dot_abapgit=>deserialize( -data ). ENDIF. @@ -17413,8 +17427,8 @@ CLASS lcl_repo IMPLEMENTATION. mo_dot_abapgit = lcl_dot_abapgit=>build_default( ms_data-master_language ). ENDIF. APPEND INITIAL LINE TO rt_files ASSIGNING . - -file-path = c_root_dir. - -file-filename = c_dot_abapgit. + -file-path = gc_root_dir. + -file-filename = gc_dot_abapgit. -file-data = mo_dot_abapgit->serialize( ). lt_tadir = lcl_tadir=>read( get_package( ) ). @@ -17787,8 +17801,8 @@ ENDCLASS. CLASS ltcl_login_manager DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. PRIVATE SECTION. - CONSTANTS: c_username TYPE string VALUE 'Aladdin', - c_password TYPE string VALUE 'OpenSesame'. + CONSTANTS: c_username TYPE string VALUE 'Aladdin' ##NO_TEXT, + c_password TYPE string VALUE 'OpenSesame' ##NO_TEXT. METHODS: setup, @@ -17871,7 +17885,8 @@ CLASS lcl_login_manager IMPLEMENTATION. rv_auth = cl_http_utility=>if_http_utility~encode_base64( lv_concat ). - CONCATENATE 'Basic' rv_auth INTO rv_auth SEPARATED BY space. + CONCATENATE 'Basic' rv_auth INTO rv_auth + SEPARATED BY space ##NO_TEXT. append( iv_uri = iv_uri iv_auth = rv_auth ). @@ -19370,7 +19385,7 @@ CLASS lcl_gui IMPLEMENTATION. METHOD back. DATA: lv_index TYPE i, - ls_stack TYPE ty_page_stack. + ls_stack LIKE LINE OF mt_stack. lv_index = lines( mt_stack ). @@ -20325,21 +20340,22 @@ CLASS lcl_stage IMPLEMENTATION. METHOD update_and_add_dot_abapgit. - FIELD-SYMBOLS LIKE LINE OF mt_workarea. + FIELD-SYMBOLS LIKE LINE OF mt_workarea. - READ TABLE mt_workarea ASSIGNING - WITH KEY file-path = c_root_dir - file-filename = c_dot_abapgit. + READ TABLE mt_workarea ASSIGNING + WITH KEY file-path = gc_root_dir + file-filename = gc_dot_abapgit. IF sy-subrc <> 0. - APPEND INITIAL LINE TO mt_workarea ASSIGNING . - -type = c_wftype-local. - -file-path = c_root_dir. - -file-filename = c_dot_abapgit. + APPEND INITIAL LINE TO mt_workarea ASSIGNING . + -type = c_wftype-local. + -file-path = gc_root_dir. + -file-filename = gc_dot_abapgit. ENDIF. - -file-data = iv_data. + -file-data = iv_data. - add( iv_path = c_root_dir iv_filename = c_dot_abapgit ). + add( iv_path = gc_root_dir + iv_filename = gc_dot_abapgit ). ENDMETHOD. "update_and_add_dot_abapgit @@ -20481,14 +20497,17 @@ CLASS lcl_gui_page_background IMPLEMENTATION. ro_html->add( 'Automatic pull
' ). ro_html->add( '
' ). - ro_html->add( 'Authentication, optional(password will be saved in clear text)
' ). + ro_html->add( 'Authentication, optional
' ). + ro_html->add( '(password will be saved in clear text)
' ). ro_html->add( '' ). ro_html->add( '' ). - ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). - ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '
Username:
Password:
' ). @@ -20658,12 +20677,12 @@ CLASS lcl_gui_page_commit IMPLEMENTATION. lo_toolbar->add( iv_act = 'submitCommit();' iv_txt = 'Commit' - iv_typ = action_type-onclick - iv_opt = html_opt-emphas ). + iv_typ = gc_action_type-onclick + iv_opt = gc_html_opt-emphas ). lo_toolbar->add( iv_act = 'commit_cancel' iv_txt = 'Cancel' - iv_opt = html_opt-cancel ). + iv_opt = gc_html_opt-cancel ). ro_html->add( '
' ). ro_html->add( lo_toolbar->render( ) ). @@ -20843,7 +20862,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION. lv_method = mo_stage->lookup( iv_path = -file-path iv_filename = -file-filename ). lv_param = lcl_html_action_utils=>file_encode( iv_key = mo_repo->get_key( ) - is_file = -file ). + ig_file = -file ). lo_toolbar->reset( ). " Build line actions IF -type = lcl_stage=>c_wftype-local. @@ -20912,7 +20931,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION. IF mo_stage->count( ) > 0. lo_toolbar->add( iv_act = |stage_commit?{ lv_action }| iv_txt = 'Commit' - iv_opt = html_opt-emphas ). + iv_opt = gc_html_opt-emphas ). ELSEIF mo_stage->mv_local_cnt > 0. lo_toolbar->add( iv_act = |stage_all?{ lv_action }| iv_txt = 'Add all and commit'). @@ -21119,6 +21138,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. DATA: lo_toolbar TYPE REF TO lcl_html_toolbar, lv_key TYPE lcl_persistence_db=>ty_value, + lo_sub TYPE REF TO lcl_html_toolbar, lo_repo_online TYPE REF TO lcl_repo_online. @@ -21134,33 +21154,45 @@ CLASS lcl_gui_page_main IMPLEMENTATION. IF io_repo->is_offline( ) = abap_true. lo_toolbar->add( iv_txt = 'Import ZIP' iv_act = |zipimport?{ lv_key }| - iv_opt = html_opt-emphas ). + iv_opt = gc_html_opt-emphas ). lo_toolbar->add( iv_txt = 'Export ZIP' iv_act = |zipexport?{ lv_key }| - iv_opt = html_opt-emphas ). + iv_opt = gc_html_opt-emphas ). lo_toolbar->add( iv_txt = 'Export&Commit' iv_act = |files_commit?{ lv_key }| - iv_opt = html_opt-emphas ). + iv_opt = gc_html_opt-emphas ). ELSE. lo_repo_online ?= io_repo. TRY. IF lo_repo_online->get_sha1_remote( ) <> lo_repo_online->get_sha1_local( ). lo_toolbar->add( iv_txt = 'Pull' iv_act = |pull?{ lv_key }| - iv_opt = html_opt-emphas ). + iv_opt = gc_html_opt-emphas ). ELSEIF lcl_stage_logic=>count( lo_repo_online ) > 0. lo_toolbar->add( iv_txt = 'Stage' iv_act = |stage?{ lv_key }| - iv_opt = html_opt-emphas ). + iv_opt = gc_html_opt-emphas ). ENDIF. - CATCH lcx_exception. - " authorization error or repository does not exist + CATCH lcx_exception ##NO_HANDLER. +* authorization error or repository does not exist +* ignore error ENDTRY. ENDIF. - lo_toolbar->add( iv_txt = 'Remove' - iv_act = |remove?{ lv_key }| ). - lo_toolbar->add( iv_txt = 'Uninstall' - iv_act = |uninstall?{ lv_key }| ). + + CREATE OBJECT lo_sub. + lo_sub->add( iv_txt = 'Remove' + iv_act = |remove?{ lv_key }| ). + lo_sub->add( iv_txt = 'Uninstall' + iv_act = |uninstall?{ lv_key }| ). + lo_sub->add( iv_txt = 'Change branch' + iv_act = |change_branch?{ lv_key }| ). + lo_sub->add( iv_txt = 'Reset' + iv_act = |reset?{ lv_key }| ). + lo_sub->add( iv_txt = 'Create branch' + iv_act = |create_branch?{ lv_key }| ). + lo_toolbar->add( iv_txt = 'Advanced' + io_sub = lo_sub ). + lo_toolbar->add( iv_txt = 'Refresh' iv_act = |refresh?{ lv_key }| ). lo_toolbar->add( iv_txt = 'Hide' @@ -21372,9 +21404,12 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ELSE. LOOP AT is_item-files INTO ls_file. IF ls_file-is_changed = abap_true. - lv_difflink = lcl_html_action_utils=>file_encode( iv_key = io_repo->get_key( ) - is_file = ls_file ). - ro_html->add_anchor( iv_txt = 'diff' iv_act = |diff?{ lv_difflink }| ). + lv_difflink = lcl_html_action_utils=>file_encode( + iv_key = io_repo->get_key( ) + ig_file = ls_file ). + ro_html->add_anchor( + iv_txt = 'diff' + iv_act = |diff?{ lv_difflink }| ). ELSE. ro_html->add( | | ). ENDIF. @@ -23928,8 +23963,8 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION. " Menu lo_toolbar->add( iv_act = 'submitDBForm();' iv_txt = 'Save' - iv_typ = action_type-onclick - iv_opt = html_opt-emphas ). + iv_typ = gc_action_type-onclick + iv_opt = gc_html_opt-emphas ). ro_html->add( '
' ). ro_html->add( lo_toolbar->render( ) ). @@ -24191,6 +24226,18 @@ CLASS lcl_gui_router IMPLEMENTATION. lv_key = iv_getdata. ei_page = get_page_stage( lv_key ). ev_state = gc_event_state-new_page_w_bookmark. + WHEN 'change_branch'. + lv_key = iv_getdata. + change_branch( lv_key ). + ev_state = gc_event_state-re_render. + WHEN 'reset'. + lv_key = iv_getdata. + reset( lv_key ). + ev_state = gc_event_state-re_render. + WHEN 'create_branch'. + lv_key = iv_getdata. + create_branch( lv_key ). + ev_state = gc_event_state-re_render. " Stage WHEN 'stage_commit'. @@ -24267,7 +24314,7 @@ CLASS lcl_gui_router IMPLEMENTATION. lcl_html_action_utils=>file_decode( EXPORTING iv_string = iv_getdata IMPORTING ev_key = lv_key - es_file = ls_file ). + eg_file = ls_file ). lo_repo ?= lcl_app=>repo_srv( )->get( lv_key ). lt_remote = lo_repo->get_files_remote( ). @@ -24625,6 +24672,48 @@ CLASS lcl_gui_router IMPLEMENTATION. ENDMETHOD. "repo_package_zip + METHOD change_branch. + + DATA: lo_repo TYPE REF TO lcl_repo_online. + + lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). + + CALL FUNCTION 'POPUP_TO_INFORM' + EXPORTING + titel = 'todo' + txt1 = 'see https://github.com/larshp/abapGit/issues/265' + txt2 = '' ##NO_TEXT. + + ENDMETHOD. + + METHOD reset. + + DATA: lo_repo TYPE REF TO lcl_repo_online. + + lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). + + CALL FUNCTION 'POPUP_TO_INFORM' + EXPORTING + titel = 'todo' + txt1 = 'see https://github.com/larshp/abapGit/issues/264' + txt2 = '' ##NO_TEXT. + + ENDMETHOD. + + METHOD create_branch. + + DATA: lo_repo TYPE REF TO lcl_repo_online. + + lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). + + CALL FUNCTION 'POPUP_TO_INFORM' + EXPORTING + titel = 'todo' + txt1 = 'see https://github.com/larshp/abapGit/issues/266' + txt2 = '' ##NO_TEXT. + + ENDMETHOD. + METHOD repo_pull. DATA: lo_repo TYPE REF TO lcl_repo_online. @@ -24799,7 +24888,7 @@ CLASS lcl_gui_router IMPLEMENTATION. ELSE. lcl_html_action_utils=>file_decode( EXPORTING iv_string = iv_getdata IMPORTING ev_key = lv_key - es_file = ls_file ). + eg_file = ls_file ). ENDIF. lo_stage = lcl_app=>repo_srv( )->get_stage( lv_key ). @@ -24809,7 +24898,7 @@ CLASS lcl_gui_router IMPLEMENTATION. lo_stage->add( iv_path = ls_file-path iv_filename = ls_file-filename ). WHEN 'stage_all'. LOOP AT lo_stage->mt_workarea ASSIGNING - WHERE type = lcl_stage=>c_wftype-local. + WHERE type = lcl_stage=>c_wftype-local. lo_stage->add( iv_path = -file-path iv_filename = -file-filename ). ENDLOOP. From 5725ca4b81cffbee73032a290c3f708b2054ed8f Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 23 Jun 2016 14:30:57 +0000 Subject: [PATCH 08/14] fix more errors from code inspector --- zabapgit.prog.abap | 321 +++++++++++++++++++++++---------------------- 1 file changed, 161 insertions(+), 160 deletions(-) diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index f2a0fd137..9666a8532 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -3,7 +3,7 @@ REPORT zabapgit. * See http://www.abapgit.org CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.11.14'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.11.15'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) @@ -16774,13 +16774,11 @@ CLASS lcl_gui_router DEFINITION FINAL. PUBLIC SECTION. METHODS on_event - IMPORTING iv_action TYPE clike - iv_frame TYPE clike OPTIONAL - iv_getdata TYPE clike OPTIONAL - it_postdata TYPE cnht_post_data_tab OPTIONAL - it_query_table TYPE cnht_query_table OPTIONAL - EXPORTING ei_page TYPE REF TO lif_gui_page - ev_state TYPE i + IMPORTING iv_action TYPE clike + iv_getdata TYPE clike OPTIONAL + it_postdata TYPE cnht_post_data_tab OPTIONAL + EXPORTING ei_page TYPE REF TO lif_gui_page + ev_state TYPE i RAISING lcx_exception. PRIVATE SECTION. @@ -16896,7 +16894,6 @@ CLASS lcl_gui DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. mt_stack TYPE TABLE OF ty_page_stack, mt_assets TYPE tt_w3urls, mo_router TYPE REF TO lcl_gui_router, - mo_user TYPE REF TO lcl_persistence_user, mo_html_viewer TYPE REF TO cl_gui_html_viewer. METHODS constructor @@ -19348,14 +19345,12 @@ CLASS lcl_gui IMPLEMENTATION. IF lv_state IS INITIAL. mo_router->on_event( EXPORTING - iv_action = action - iv_frame = frame - iv_getdata = getdata - it_postdata = postdata - it_query_table = query_table + iv_action = action + iv_getdata = getdata + it_postdata = postdata IMPORTING - ei_page = li_page - ev_state = lv_state ). + ei_page = li_page + ev_state = lv_state ). ENDIF. CASE lv_state. @@ -19645,148 +19640,152 @@ CLASS lcl_gui_page_super IMPLEMENTATION. METHOD styles. + DEFINE _add. + ro_html->add( &1 ) ##NO_TEXT. + END-OF-DEFINITION. + CREATE OBJECT ro_html. - ro_html->add(''). + _add ''. ENDMETHOD. "common styles @@ -20458,7 +20457,7 @@ CLASS lcl_gui_page_background IMPLEMENTATION. CREATE OBJECT ro_html. ro_html->add( '
' ). - ro_html->add( 'Listing online repositories' ). + ro_html->add( 'Listing online repositories' ) ##NO_TEXT. ro_html->add( '

' ). CREATE OBJECT lo_per. @@ -20491,14 +20490,14 @@ CLASS lcl_gui_page_background IMPLEMENTATION. ro_html->add( '' ). ro_html->add( 'Do nothing
' ). + lv_nothing && '>Do nothing
' ) ##NO_TEXT. ro_html->add( 'Automatic push
' ). + lv_push && '>Automatic push
' ) ##NO_TEXT. ro_html->add( 'Automatic pull
' ). + lv_pull && '>Automatic pull
' ) ##NO_TEXT. ro_html->add( '
' ). - ro_html->add( 'Authentication, optional
' ). - ro_html->add( '(password will be saved in clear text)
' ). + ro_html->add( 'Authentication, optional
' ) ##NO_TEXT. + ro_html->add( '(password will be saved in clear text)
' ) ##NO_TEXT. ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). @@ -20678,11 +20677,11 @@ CLASS lcl_gui_page_commit IMPLEMENTATION. lo_toolbar->add( iv_act = 'submitCommit();' iv_txt = 'Commit' iv_typ = gc_action_type-onclick - iv_opt = gc_html_opt-emphas ). + iv_opt = gc_html_opt-emphas ) ##NO_TEXT. lo_toolbar->add( iv_act = 'commit_cancel' iv_txt = 'Cancel' - iv_opt = gc_html_opt-cancel ). + iv_opt = gc_html_opt-cancel ) ##NO_TEXT. ro_html->add( '
' ). ro_html->add( lo_toolbar->render( ) ). @@ -21744,13 +21743,15 @@ CLASS lcl_app IMPLEMENTATION. METHOD user. - IF iv_user = sy-uname. + 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. + CREATE OBJECT ro_user + EXPORTING + iv_user = iv_user. ENDIF. ENDMETHOD. "user @@ -24674,9 +24675,9 @@ CLASS lcl_gui_router IMPLEMENTATION. METHOD change_branch. - DATA: lo_repo TYPE REF TO lcl_repo_online. - - lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). +* DATA: lo_repo TYPE REF TO lcl_repo_online. +* +* lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING @@ -24688,9 +24689,9 @@ CLASS lcl_gui_router IMPLEMENTATION. METHOD reset. - DATA: lo_repo TYPE REF TO lcl_repo_online. - - lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). +* DATA: lo_repo TYPE REF TO lcl_repo_online. +* +* lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING @@ -24702,9 +24703,9 @@ CLASS lcl_gui_router IMPLEMENTATION. METHOD create_branch. - DATA: lo_repo TYPE REF TO lcl_repo_online. - - lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). +* DATA: lo_repo TYPE REF TO lcl_repo_online. +* +* lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING From 69e8410dbb5682548022e496b1bbe157fd54ba09 Mon Sep 17 00:00:00 2001 From: larshp Date: Fri, 24 Jun 2016 05:09:25 +0000 Subject: [PATCH 09/14] refactor popup, before #265 --- zabapgit.prog.abap | 120 +++++++++++++++++++++++++++++++-------------- 1 file changed, 84 insertions(+), 36 deletions(-) diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index 9666a8532..a8f365d97 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -3,7 +3,7 @@ REPORT zabapgit. * See http://www.abapgit.org CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.11.15'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.11.16'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) @@ -16783,11 +16783,25 @@ CLASS lcl_gui_router DEFINITION FINAL. PRIVATE SECTION. + TYPES: BEGIN OF ty_popup, + url TYPE string, + package TYPE devclass, + branch_name TYPE string, + cancel TYPE abap_bool, + END OF ty_popup. + METHODS get_page_by_name IMPORTING iv_name TYPE clike RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page RAISING lcx_exception. + METHODS repo_popup + IMPORTING iv_url TYPE string + iv_package TYPE devclass OPTIONAL + iv_branch TYPE string DEFAULT 'refs/heads/master' + RETURNING VALUE(rs_popup) TYPE ty_popup + RAISING lcx_exception. + METHODS get_page_diff IMPORTING iv_getdata TYPE clike RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page @@ -16834,7 +16848,7 @@ CLASS lcl_gui_router DEFINITION FINAL. IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key RAISING lcx_exception. - METHODS change_branch + METHODS switch_branch IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key RAISING lcx_exception. @@ -21183,8 +21197,8 @@ CLASS lcl_gui_page_main IMPLEMENTATION. iv_act = |remove?{ lv_key }| ). lo_sub->add( iv_txt = 'Uninstall' iv_act = |uninstall?{ lv_key }| ). - lo_sub->add( iv_txt = 'Change branch' - iv_act = |change_branch?{ lv_key }| ). + lo_sub->add( iv_txt = 'Switch branch' + iv_act = |switch_branch?{ lv_key }| ). lo_sub->add( iv_txt = 'Reset' iv_act = |reset?{ lv_key }| ). lo_sub->add( iv_txt = 'Create branch' @@ -24227,9 +24241,9 @@ CLASS lcl_gui_router IMPLEMENTATION. lv_key = iv_getdata. ei_page = get_page_stage( lv_key ). ev_state = gc_event_state-new_page_w_bookmark. - WHEN 'change_branch'. + WHEN 'switch_branch'. lv_key = iv_getdata. - change_branch( lv_key ). + switch_branch( lv_key ). ev_state = gc_event_state-re_render. WHEN 'reset'. lv_key = iv_getdata. @@ -24402,40 +24416,45 @@ CLASS lcl_gui_router IMPLEMENTATION. ENDMETHOD. "abapgit_installation - METHOD repo_clone. + METHOD repo_popup. - DATA: lv_returncode TYPE c, - lv_url TYPE string, - lv_package TYPE devclass, - lv_branch_name TYPE string, - lv_icon_ok TYPE icon-name, - lv_icon_br TYPE icon-name, - lv_icon_msg TYPE icon-name, - lo_repo TYPE REF TO lcl_repo_online, - lt_fields TYPE TABLE OF sval. + DATA: lv_returncode TYPE c, + lv_icon_ok TYPE icon-name, + lv_icon_br TYPE icon-name, + lt_fields TYPE TABLE OF sval, + lv_pattr TYPE spo_fattr, + lv_button2 TYPE svalbutton-buttontext, + lv_icon2 TYPE icon-name. FIELD-SYMBOLS: LIKE LINE OF lt_fields. - " TAB FLD LABEL DEF ATTR - _add_dialog_fld 'ABAPTXT255' 'LINE' 'Git Clone Url' iv_url ''. - _add_dialog_fld 'TDEVC' 'DEVCLASS' 'Target Package' '' ''. - _add_dialog_fld 'TEXTL' 'LINE' 'Branch' 'refs/heads/master' '05'. + + IF NOT iv_package IS INITIAL. + lv_pattr = '05'. + ELSE. + lv_button2 = 'Create package'. + lv_icon2 = icon_msg. + ENDIF. + +* TAB FLD LABEL DEF ATTR + _add_dialog_fld 'ABAPTXT255' 'LINE' 'Git Clone Url' iv_url ''. + _add_dialog_fld 'TDEVC' 'DEVCLASS' 'Target Package' iv_package lv_pattr. + _add_dialog_fld 'TEXTL' 'LINE' 'Branch' iv_branch '05'. lv_icon_ok = icon_okay. lv_icon_br = icon_workflow_fork. - lv_icon_msg = icon_msg. CALL FUNCTION 'POPUP_GET_VALUES_USER_BUTTONS' EXPORTING - popup_title = 'Clone' + popup_title = 'Repository' programname = sy-repid formname = 'BRANCH_POPUP' ok_pushbuttontext = 'OK' icon_ok_push = lv_icon_ok first_pushbutton = 'Select branch' icon_button_1 = lv_icon_br - second_pushbutton = 'Create package' - icon_button_2 = lv_icon_msg + second_pushbutton = lv_button2 + icon_button_2 = lv_icon2 IMPORTING returncode = lv_returncode TABLES @@ -24447,27 +24466,41 @@ CLASS lcl_gui_router IMPLEMENTATION. _raise 'Error from POPUP_GET_VALUES'. ENDIF. IF lv_returncode = 'A'. + rs_popup-cancel = abap_true. RETURN. ENDIF. READ TABLE lt_fields INDEX 1 ASSIGNING . ASSERT sy-subrc = 0. - lv_url = -value. - lcl_url=>name( lv_url ). " validate + rs_popup-url = -value. + lcl_url=>name( rs_popup-url ). " validate READ TABLE lt_fields INDEX 2 ASSIGNING . ASSERT sy-subrc = 0. - lv_package = -value. - TRANSLATE lv_package TO UPPER CASE. + rs_popup-package = -value. + TRANSLATE rs_popup-package TO UPPER CASE. READ TABLE lt_fields INDEX 3 ASSIGNING . ASSERT sy-subrc = 0. - lv_branch_name = -value. + rs_popup-branch_name = -value. + + ENDMETHOD. + + METHOD repo_clone. + + DATA: ls_popup TYPE ty_popup, + lo_repo TYPE REF TO lcl_repo_online. + + + ls_popup = repo_popup( iv_url ). + IF ls_popup-cancel = abap_true. + RETURN. + ENDIF. lo_repo = lcl_app=>repo_srv( )->new_online( - iv_url = lv_url - iv_branch_name = lv_branch_name - iv_package = lv_package ). + iv_url = ls_popup-url + iv_branch_name = ls_popup-branch_name + iv_package = ls_popup-package ). lo_repo->status( ). " check for errors lo_repo->deserialize( ). @@ -24673,11 +24706,22 @@ CLASS lcl_gui_router IMPLEMENTATION. ENDMETHOD. "repo_package_zip - METHOD change_branch. + METHOD switch_branch. + + DATA: lo_repo TYPE REF TO lcl_repo_online, + ls_popup TYPE ty_popup. + + + lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). + + ls_popup = repo_popup( + iv_url = lo_repo->get_url( ) + iv_package = lo_repo->get_package( ) + iv_branch = lo_repo->get_branch_name( ) ). + IF ls_popup-cancel = abap_true. + RETURN. + ENDIF. -* DATA: lo_repo TYPE REF TO lcl_repo_online. -* -* lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING @@ -24685,6 +24729,10 @@ CLASS lcl_gui_router IMPLEMENTATION. txt1 = 'see https://github.com/larshp/abapGit/issues/265' txt2 = '' ##NO_TEXT. +*1. updating the mv_branch field to the sha1 of the new branch. +*2. Update the persisted branch name +*3. call lcl_repo_online->deserialize. + ENDMETHOD. METHOD reset. From c9b823b0ea473f93ace816bb47568876018791a4 Mon Sep 17 00:00:00 2001 From: larshp Date: Fri, 24 Jun 2016 05:47:23 +0000 Subject: [PATCH 10/14] switch branch implemented, close #265 --- zabapgit.prog.abap | 134 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 118 insertions(+), 16 deletions(-) diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index a8f365d97..5f592afba 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -3,7 +3,7 @@ REPORT zabapgit. * See http://www.abapgit.org CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.11.16'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.12.0'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) @@ -13450,12 +13450,22 @@ CLASS lcl_persistence_repo DEFINITION FINAL. METHODS update_sha1 IMPORTING iv_key TYPE ty_repo-key - iv_branch_sha1 TYPE ty_sha1 + iv_branch_sha1 TYPE ty_repo_xml-sha1 RAISING lcx_exception. METHODS update_local_checksums IMPORTING iv_key TYPE ty_repo-key - it_checksums TYPE ty_local_checksum_tt + it_checksums TYPE ty_repo_xml-local_checksums + RAISING lcx_exception. + + METHODS update_url + IMPORTING iv_key TYPE ty_repo-key + iv_url TYPE ty_repo_xml-url + RAISING lcx_exception. + + METHODS update_branch_name + IMPORTING iv_key TYPE ty_repo-key + iv_branch_name TYPE ty_repo_xml-branch_name RAISING lcx_exception. METHODS add @@ -13836,8 +13846,10 @@ CLASS lcl_repo DEFINITION ABSTRACT. find_dot_abapgit RAISING lcx_exception, set - IMPORTING iv_sha1 TYPE ty_sha1 OPTIONAL - it_checksums TYPE lcl_persistence_repo=>ty_local_checksum_tt OPTIONAL + IMPORTING iv_sha1 TYPE ty_sha1 OPTIONAL + it_checksums TYPE lcl_persistence_repo=>ty_local_checksum_tt OPTIONAL + iv_url TYPE lcl_persistence_repo=>ty_repo-url OPTIONAL + iv_branch_name TYPE lcl_persistence_repo=>ty_repo-branch_name OPTIONAL RAISING lcx_exception. ENDCLASS. "lcl_repo DEFINITION @@ -16436,6 +16448,12 @@ CLASS lcl_repo_online DEFINITION INHERITING FROM lcl_repo FINAL. RETURNING VALUE(rv_url) TYPE lcl_persistence_repo=>ty_repo-url, get_branch_name RETURNING VALUE(rv_name) TYPE lcl_persistence_repo=>ty_repo-branch_name, + set_url + IMPORTING iv_url TYPE lcl_persistence_repo=>ty_repo-url + RAISING lcx_exception, + set_branch_name + IMPORTING iv_branch_name TYPE lcl_persistence_repo=>ty_repo-branch_name + RAISING lcx_exception, get_sha1_local RETURNING VALUE(rv_sha1) TYPE lcl_persistence_repo=>ty_repo-sha1, get_sha1_remote @@ -17261,6 +17279,20 @@ CLASS lcl_repo_online IMPLEMENTATION. rv_name = ms_data-branch_name. ENDMETHOD. "get_branch_name + METHOD set_url. + + mv_initialized = abap_false. + set( iv_url = iv_url ). + + ENDMETHOD. + + METHOD set_branch_name. + + mv_initialized = abap_false. + set( iv_branch_name = iv_branch_name ). + + ENDMETHOD. + METHOD get_sha1_local. rv_sha1 = ms_data-sha1. ENDMETHOD. "get_sha1_local @@ -17350,13 +17382,17 @@ CLASS lcl_repo IMPLEMENTATION. DATA: lo_persistence TYPE REF TO lcl_persistence_repo. - ASSERT iv_sha1 IS SUPPLIED OR it_checksums IS SUPPLIED. + ASSERT iv_sha1 IS SUPPLIED + OR it_checksums IS SUPPLIED + OR iv_url IS SUPPLIED + OR iv_branch_name 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 ). + lo_persistence->update_sha1( + iv_key = ms_data-key + iv_branch_sha1 = iv_sha1 ). ms_data-sha1 = iv_sha1. ENDIF. @@ -17367,6 +17403,20 @@ CLASS lcl_repo IMPLEMENTATION. 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. + ENDMETHOD. "set_sha1 METHOD build_local_checksums. @@ -23383,6 +23433,62 @@ CLASS lcl_persistence_repo IMPLEMENTATION. ENDMETHOD. + METHOD update_url. + + DATA: lt_content TYPE lcl_persistence_db=>tt_content, + ls_content LIKE LINE OF lt_content, + ls_repo TYPE ty_repo. + + + IF iv_url IS INITIAL. + _raise 'update, url empty'. + ENDIF. + + ASSERT NOT iv_key IS INITIAL. + + TRY. + ls_repo = read( iv_key ). + CATCH lcx_not_found. + _raise 'key not found'. + ENDTRY. + + ls_repo-url = iv_url. + ls_content-data_str = to_xml( ls_repo ). + + mo_db->update( iv_type = c_type_repo + iv_value = iv_key + iv_data = ls_content-data_str ). + + ENDMETHOD. + + METHOD update_branch_name. + + DATA: lt_content TYPE lcl_persistence_db=>tt_content, + ls_content LIKE LINE OF lt_content, + ls_repo TYPE ty_repo. + + + IF iv_branch_name IS INITIAL. + _raise 'update, branch name empty'. + ENDIF. + + ASSERT NOT iv_key IS INITIAL. + + TRY. + ls_repo = read( iv_key ). + CATCH lcx_not_found. + _raise 'key not found'. + ENDTRY. + + ls_repo-branch_name = iv_branch_name. + ls_content-data_str = to_xml( ls_repo ). + + mo_db->update( iv_type = c_type_repo + iv_value = iv_key + iv_data = ls_content-data_str ). + + ENDMETHOD. + METHOD update_sha1. DATA: lt_content TYPE lcl_persistence_db=>tt_content, @@ -24722,16 +24828,12 @@ CLASS lcl_gui_router IMPLEMENTATION. RETURN. ENDIF. + lo_repo->set_url( ls_popup-url ). + lo_repo->set_branch_name( ls_popup-branch_name ). - CALL FUNCTION 'POPUP_TO_INFORM' - EXPORTING - titel = 'todo' - txt1 = 'see https://github.com/larshp/abapGit/issues/265' - txt2 = '' ##NO_TEXT. + COMMIT WORK. -*1. updating the mv_branch field to the sha1 of the new branch. -*2. Update the persisted branch name -*3. call lcl_repo_online->deserialize. + lo_repo->deserialize( ). ENDMETHOD. From c6f4615aa420c54e6cfe652ed677df07bc0b5aac Mon Sep 17 00:00:00 2001 From: larshp Date: Fri, 24 Jun 2016 05:55:55 +0000 Subject: [PATCH 11/14] reset implemented, close #264 --- zabapgit.prog.abap | 45 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index 5f592afba..2f0910f62 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -3,7 +3,7 @@ REPORT zabapgit. * See http://www.abapgit.org CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.12.0'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.12.1'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) @@ -24839,15 +24839,36 @@ CLASS lcl_gui_router IMPLEMENTATION. METHOD reset. -* DATA: lo_repo TYPE REF TO lcl_repo_online. -* -* lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). + DATA: lo_repo TYPE REF TO lcl_repo_online, + lv_answer TYPE c LENGTH 1. - CALL FUNCTION 'POPUP_TO_INFORM' + + lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). + + CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING - titel = 'todo' - txt1 = 'see https://github.com/larshp/abapGit/issues/264' - txt2 = '' ##NO_TEXT. + titlebar = 'Warning' + text_question = 'Reset local objects?' + text_button_1 = 'Ok' + icon_button_1 = 'ICON_OKAY' + text_button_2 = 'Cancel' + icon_button_2 = 'ICON_CANCEL' + default_button = '2' + display_cancel_button = abap_false + IMPORTING + answer = lv_answer + EXCEPTIONS + text_not_found = 1 + OTHERS = 2. "#EC NOTEXT + IF sy-subrc <> 0. + _raise 'error from POPUP_TO_CONFIRM'. + ENDIF. + + IF lv_answer = '2'. + RETURN. + ENDIF. + + lo_repo->deserialize( ). ENDMETHOD. @@ -24901,7 +24922,8 @@ CLASS lcl_gui_router IMPLEMENTATION. DATA: lv_answer TYPE c LENGTH 1, ls_key TYPE lcl_persistence_db=>ty_content. - ls_key = lcl_html_action_utils=>dbkey_decode( iv_getdata ). + + ls_key = lcl_html_action_utils=>dbkey_decode( iv_getdata ). CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING @@ -24926,8 +24948,9 @@ CLASS lcl_gui_router IMPLEMENTATION. RETURN. ENDIF. - lcl_app=>db( )->delete( iv_type = ls_key-type - iv_value = ls_key-value ). + lcl_app=>db( )->delete( + iv_type = ls_key-type + iv_value = ls_key-value ). COMMIT WORK. From 2e45f5714539457eab51196621dc092988e1096f Mon Sep 17 00:00:00 2001 From: larshp Date: Fri, 24 Jun 2016 07:31:16 +0000 Subject: [PATCH 12/14] refactoring, #266 --- zabapgit.prog.abap | 59 ++++++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index 2f0910f62..39a2ac0d2 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -3,7 +3,7 @@ REPORT zabapgit. * See http://www.abapgit.org CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.12.1'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.12.2'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) @@ -18027,9 +18027,11 @@ CLASS lcl_git_transport DEFINITION FINAL. * local to remote CLASS-METHODS receive_pack - IMPORTING io_repo TYPE REF TO lcl_repo_online - iv_commit TYPE ty_sha1 - iv_pack TYPE xstring + IMPORTING io_repo TYPE REF TO lcl_repo_online + iv_old TYPE ty_sha1 + iv_new TYPE ty_sha1 + iv_branch_name TYPE string + iv_pack TYPE xstring RAISING lcx_exception. CLASS-METHODS branches @@ -18338,14 +18340,14 @@ CLASS lcl_git_transport IMPLEMENTATION. METHOD receive_pack. - DATA: li_client TYPE REF TO if_http_client, - lv_cmd_pkt TYPE string, - lv_line TYPE string, - lv_tmp TYPE xstring, - lv_xstring TYPE xstring, - lv_string TYPE string, - lv_buffer TYPE string, - lv_branch TYPE ty_sha1. + DATA: li_client TYPE REF TO if_http_client, + lv_cmd_pkt TYPE string, + lv_line TYPE string, + lv_tmp TYPE xstring, + lv_xstring TYPE xstring, + lv_string TYPE string, + lv_cap_list TYPE string, + lv_buffer TYPE string. find_branch( @@ -18353,22 +18355,23 @@ CLASS lcl_git_transport IMPLEMENTATION. io_repo = io_repo iv_service = c_service-receive IMPORTING - ei_client = li_client - ev_branch = lv_branch ). + ei_client = li_client ). set_headers( - io_repo = io_repo - iv_service = c_service-receive - ii_client = li_client ). + io_repo = io_repo + iv_service = c_service-receive + ii_client = li_client ). - lv_line = lv_branch && + lv_cap_list = 'report-status agent=' && gv_agent. + + lv_line = iv_old && ` ` && - iv_commit && + iv_new && ` ` && - io_repo->get_branch_name( ) && + iv_branch_name && get_null( ) && ` ` && - 'report-status agent=' && gv_agent && + lv_cap_list && gc_newline. "#EC NOTEXT lv_cmd_pkt = pkt_string( lv_line ). @@ -19078,10 +19081,16 @@ CLASS lcl_git_porcelain IMPLEMENTATION. lv_pack = lcl_git_pack=>encode( lt_objects ). - rv_branch = lcl_hash=>sha1( iv_type = gc_type-commit iv_data = lv_commit ). - lcl_git_transport=>receive_pack( io_repo = io_repo - iv_commit = rv_branch - iv_pack = lv_pack ). + rv_branch = lcl_hash=>sha1( + iv_type = gc_type-commit + iv_data = lv_commit ). + + lcl_git_transport=>receive_pack( + io_repo = io_repo + iv_old = io_repo->get_sha1_local( ) + iv_new = rv_branch + iv_branch_name = io_repo->get_branch_name( ) + iv_pack = lv_pack ). ENDMETHOD. "receive_pack From ccb0313fde0290b7963aaeb9ec751a64f39c026a Mon Sep 17 00:00:00 2001 From: larshp Date: Fri, 24 Jun 2016 08:13:17 +0000 Subject: [PATCH 13/14] create new branch, close #266 --- zabapgit.prog.abap | 106 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 97 insertions(+), 9 deletions(-) diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index 39a2ac0d2..a2258b8f9 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -3,7 +3,7 @@ REPORT zabapgit. * See http://www.abapgit.org CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.12.2'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.12.3'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) @@ -16621,6 +16621,12 @@ CLASS lcl_git_porcelain DEFINITION FINAL FRIENDS ltcl_git_porcelain. RETURNING VALUE(rv_branch) TYPE ty_sha1 RAISING lcx_exception. + CLASS-METHODS create_branch + IMPORTING io_repo TYPE REF TO lcl_repo_online + iv_name TYPE string + iv_from TYPE ty_sha1 + RAISING lcx_exception. + PRIVATE SECTION. TYPES: BEGIN OF ty_expanded, path TYPE string, @@ -16874,6 +16880,11 @@ CLASS lcl_gui_router DEFINITION FINAL. IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key RAISING lcx_exception. + METHODS create_branch_popup + EXPORTING ev_name TYPE string + ev_cancel TYPE abap_bool + RAISING lcx_exception. + METHODS create_branch IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key RAISING lcx_exception. @@ -19094,6 +19105,28 @@ CLASS lcl_git_porcelain IMPLEMENTATION. ENDMETHOD. "receive_pack + METHOD create_branch. + + DATA: lv_zero TYPE ty_sha1, + lt_objects TYPE lcl_git_pack=>ty_objects_tt, + lv_pack TYPE xstring. + + + lv_zero = '0000000000000000000000000000000000000000'. + +* "client MUST send an empty packfile" +* https://github.com/git/git/blob/master/Documentation/technical/pack-protocol.txt#L514 + lv_pack = lcl_git_pack=>encode( lt_objects ). + + lcl_git_transport=>receive_pack( + io_repo = io_repo + iv_old = lv_zero + iv_new = iv_from + iv_branch_name = iv_name + iv_pack = lv_pack ). + + ENDMETHOD. + METHOD push. DATA: lt_expanded TYPE ty_expanded_tt, @@ -24881,17 +24914,72 @@ CLASS lcl_gui_router IMPLEMENTATION. ENDMETHOD. + METHOD create_branch_popup. + + DATA: lv_answer TYPE c LENGTH 1, + lt_fields TYPE TABLE OF sval. + + FIELD-SYMBOLS: LIKE LINE OF lt_fields. + + + CLEAR ev_name. + CLEAR ev_cancel. + +* TAB FLD LABEL DEF ATTR + _add_dialog_fld 'TEXTL' 'LINE' 'Name' 'refs/heads/branch_name' ''. + + CALL FUNCTION 'POPUP_GET_VALUES' + EXPORTING + popup_title = 'Create branch' + IMPORTING + returncode = lv_answer + TABLES + fields = lt_fields + EXCEPTIONS + error_in_fields = 1 + OTHERS = 2 ##NO_TEXT. + IF sy-subrc <> 0. + _raise 'error from POPUP_GET_VALUES'. + ENDIF. + + IF lv_answer = 'A'. + ev_cancel = abap_true. + ELSE. + READ TABLE lt_fields INDEX 1 ASSIGNING . + ASSERT sy-subrc = 0. + ev_name = -value. + ENDIF. + + ENDMETHOD. + METHOD create_branch. -* DATA: lo_repo TYPE REF TO lcl_repo_online. -* -* lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). + DATA: lv_name TYPE string, + lv_cancel TYPE abap_bool, + lo_repo TYPE REF TO lcl_repo_online. - CALL FUNCTION 'POPUP_TO_INFORM' - EXPORTING - titel = 'todo' - txt1 = 'see https://github.com/larshp/abapGit/issues/266' - txt2 = '' ##NO_TEXT. + + lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). + + create_branch_popup( + IMPORTING + ev_name = lv_name + ev_cancel = lv_cancel ). + IF lv_cancel = abap_true. + RETURN. + ENDIF. + + ASSERT lv_name CP 'refs/heads/+*'. + + lcl_git_porcelain=>create_branch( + io_repo = lo_repo + iv_name = lv_name + iv_from = lo_repo->get_sha1_local( ) ). + +* automatically switch to new branch + lo_repo->set_branch_name( lv_name ). + + MESSAGE 'Switched to new branch' TYPE 'S'. ENDMETHOD. From 6607069d5377a25562d9fe693e72cddd863db9e2 Mon Sep 17 00:00:00 2001 From: larshp Date: Fri, 24 Jun 2016 09:06:19 +0000 Subject: [PATCH 14/14] run background in foreground, close #268 --- zabapgit.prog.abap | 151 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 114 insertions(+), 37 deletions(-) diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index a2258b8f9..faaeb2604 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -1,9 +1,9 @@ -REPORT zabapgit. +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.12.3'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.12.4'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) @@ -19648,7 +19648,7 @@ CLASS lcl_gui_page_super DEFINITION ABSTRACT. RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. METHODS title - IMPORTING iv_page_title TYPE string + IMPORTING iv_title TYPE string io_menu TYPE REF TO lcl_html_toolbar OPTIONAL RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. @@ -19699,7 +19699,7 @@ CLASS lcl_gui_page_super IMPLEMENTATION. ro_html->add( '' ). "#EC NOTEXT ro_html->add( '
' ). "#EC NOTEXT IF io_menu IS BOUND. @@ -20308,7 +20308,7 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. CREATE OBJECT ro_html. ro_html->add( header( io_include_style = styles( ) ) ). - ro_html->add( title( iv_page_title = 'DIFF' ) ). + ro_html->add( title( 'DIFF' ) ). ro_html->add( render_diff( ) ). ro_html->add( footer( ) ). @@ -20466,7 +20466,88 @@ CLASS lcl_stage IMPLEMENTATION. ENDCLASS. -CLASS lcl_gui_page_background DEFINITION FINAL INHERITING FROM lcl_gui_page_super. +CLASS lcl_background DEFINITION FINAL. + + PUBLIC SECTION. + CLASS-METHODS: run + RAISING lcx_exception. + + PRIVATE SECTION. + CLASS-METHODS: push + IMPORTING io_repo TYPE REF TO lcl_repo_online + RAISING lcx_exception. + +ENDCLASS. + +CLASS lcl_gui_page_background_run DEFINITION FINAL + INHERITING FROM lcl_gui_page_super. + + PUBLIC SECTION. + METHODS: + lif_gui_page~on_event REDEFINITION, + lif_gui_page~render REDEFINITION. + + PRIVATE SECTION. + DATA: mt_text TYPE TABLE OF string. + + METHODS: run. + +ENDCLASS. + +CLASS lcl_gui_page_background_run IMPLEMENTATION. + + METHOD lif_gui_page~on_event. + RETURN. + ENDMETHOD. + + METHOD run. + + DATA: lx_error TYPE REF TO lcx_exception, + lv_text TYPE string, + lv_line TYPE i VALUE 1. + + + TRY. + lcl_background=>run( ). + + DO. + READ LINE lv_line LINE VALUE INTO lv_text. + IF sy-subrc <> 0. + EXIT. + ENDIF. + APPEND lv_text TO mt_text. + lv_line = lv_line + 1. + ENDDO. + CATCH lcx_exception INTO lx_error. + APPEND lx_error->mv_text TO mt_text. + ENDTRY. + + ENDMETHOD. + + METHOD lif_gui_page~render. + + 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. + +ENDCLASS. + +CLASS lcl_gui_page_background DEFINITION FINAL + INHERITING FROM lcl_gui_page_super. PUBLIC SECTION. METHODS: @@ -20630,10 +20711,16 @@ CLASS lcl_gui_page_background IMPLEMENTATION. METHOD lif_gui_page~render. + 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 = 'background_run' ). + ro_html->add( header( ) ). - ro_html->add( title( iv_page_title = 'BACKGROUND' ) ). + ro_html->add( title( iv_title = 'BACKGROUND' io_menu = lo_toolbar ) ). ro_html->add( render_data( ) ). ro_html->add( footer( ) ). @@ -20800,7 +20887,7 @@ CLASS lcl_gui_page_commit IMPLEMENTATION. CREATE OBJECT ro_html. ro_html->add( header( io_include_style = styles( ) ) ). - ro_html->add( title( iv_page_title = 'COMMIT' ) ). + ro_html->add( title( 'COMMIT' ) ). ro_html->add( '
' ). ro_html->add( lcl_gui_page_main=>render_repo_top( mo_repo ) ). @@ -21008,7 +21095,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION. CREATE OBJECT ro_html. ro_html->add( header( io_include_style = styles( ) ) ). - ro_html->add( title( iv_page_title = 'STAGE' ) ). + ro_html->add( title( 'STAGE' ) ). ro_html->add( '
' ). ro_html->add( lcl_gui_page_main=>render_repo_top( mo_repo ) ). @@ -21141,25 +21228,24 @@ CLASS lcl_gui_page_main IMPLEMENTATION. METHOD build_main_menu. - DATA lo_toolbar TYPE REF TO lcl_html_toolbar. DATA lo_betasub TYPE REF TO lcl_html_toolbar. - CREATE OBJECT lo_toolbar. + + + CREATE OBJECT ro_menu. CREATE OBJECT lo_betasub. lo_betasub->add( iv_txt = 'Database util' iv_act = 'db' ). lo_betasub->add( iv_txt = 'Package to zip' iv_act = 'packagezip' ). lo_betasub->add( iv_txt = 'Background mode' iv_act = 'background' ). - lo_toolbar->add( iv_txt = 'Refresh all' iv_act = 'refresh' ). - lo_toolbar->add( iv_txt = 'Clone' iv_act = 'install' ). - lo_toolbar->add( iv_txt = 'Explore' iv_act = 'explore' ). - lo_toolbar->add( iv_txt = 'New offline repo' iv_act = 'newoffline' ). + ro_menu->add( iv_txt = 'Refresh all' iv_act = 'refresh' ). + ro_menu->add( iv_txt = 'Clone' iv_act = 'install' ). + ro_menu->add( iv_txt = 'Explore' iv_act = 'explore' ). + ro_menu->add( iv_txt = 'New offline repo' iv_act = 'newoffline' ). IF needs_installation( ) = abap_true. - lo_toolbar->add( iv_txt = 'Get abapGit' iv_act = 'abapgit_installation' ). + ro_menu->add( iv_txt = 'Get abapGit' iv_act = 'abapgit_installation' ). ENDIF. - lo_toolbar->add( iv_txt = 'β' io_sub = lo_betasub ). - - ro_menu = lo_toolbar. + ro_menu->add( iv_txt = 'β' io_sub = lo_betasub ). ENDMETHOD. "build main_menu @@ -21605,7 +21691,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. CREATE OBJECT ro_html. ro_html->add( header( io_include_style = styles( ) ) ). - ro_html->add( title( iv_page_title = 'HOME' io_menu = build_main_menu( ) ) ). + ro_html->add( title( iv_title = 'HOME' io_menu = build_main_menu( ) ) ). TRY. lt_repos = lcl_app=>repo_srv( )->list( ). @@ -21732,19 +21818,6 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ENDCLASS. -CLASS lcl_background DEFINITION FINAL. - - PUBLIC SECTION. - CLASS-METHODS: run - RAISING lcx_exception. - - PRIVATE SECTION. - CLASS-METHODS: push - IMPORTING io_repo TYPE REF TO lcl_repo_online - RAISING lcx_exception. - -ENDCLASS. - CLASS lcl_background IMPLEMENTATION. METHOD push. @@ -24008,7 +24081,7 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION. CREATE OBJECT ro_html. ro_html->add( header( io_include_style = styles( ) ) ). - ro_html->add( title( iv_page_title = 'CONFIG DISPLAY' ) ). + ro_html->add( title( 'CONFIG DISPLAY' ) ). ro_html->add( '
' ). ro_html->add( |
Username:' ). "#EC NOTEXT - ro_html->add( |► { iv_page_title }| ). "#EC NOTEXT + ro_html->add( |► { iv_title }| ). "#EC NOTEXT ro_html->add( '
| && @@ -24105,7 +24178,7 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION. CREATE OBJECT lo_toolbar. ro_html->add( header( io_include_style = styles( ) ) ). - ro_html->add( title( iv_page_title = 'CONFIG EDIT' ) ). + ro_html->add( title( 'CONFIG EDIT' ) ). ro_html->add( '
' ). @@ -24189,7 +24262,7 @@ CLASS lcl_gui_page_db IMPLEMENTATION. CREATE OBJECT ro_html. ro_html->add( header( io_include_style = styles( ) ) ). - ro_html->add( title( iv_page_title = 'DATABASE PERSISTENCY' ) ). + ro_html->add( title( 'DATABASE PERSISTENCY' ) ). ro_html->add( '
' ). ro_html->add( '
Type:
' ). @@ -24297,7 +24370,11 @@ CLASS lcl_gui_router IMPLEMENTATION. CASE iv_action. " General routing - WHEN 'main' OR 'explore' OR 'db' OR 'background'. + WHEN 'main' + OR 'explore' + OR 'db' + OR 'background' + OR 'background_run'. ei_page = get_page_by_name( iv_action ). ev_state = gc_event_state-new_page. WHEN 'abapgithome'.