From b1e8f4b6d8cb8bf302d29f2589c87d990ce4b789 Mon Sep 17 00:00:00 2001 From: atsy Date: Sat, 3 Sep 2016 11:42:35 +0300 Subject: [PATCH 01/11] #311 lcl_git_branch_helper, move parse_branch --- src/zabapgit_git.prog.abap | 116 +++++++++++++++++++++---------------- 1 file changed, 66 insertions(+), 50 deletions(-) diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap index a903ad17e..5583cb42c 100644 --- a/src/zabapgit_git.prog.abap +++ b/src/zabapgit_git.prog.abap @@ -43,6 +43,9 @@ CLASS lcl_git_transport DEFINITION FINAL. CLASS-METHODS class_constructor. + CLASS-METHODS get_null + RETURNING VALUE(rv_c) TYPE char1. + PRIVATE SECTION. CLASS-DATA: gv_agent TYPE string. @@ -81,11 +84,6 @@ CLASS lcl_git_transport DEFINITION FINAL. RETURNING VALUE(rv_len) TYPE i RAISING lcx_exception. - CLASS-METHODS parse_branch_list - IMPORTING iv_data TYPE string - RETURNING VALUE(rt_list) TYPE ty_branch_list_tt - RAISING lcx_exception. - CLASS-METHODS set_headers IMPORTING iv_url TYPE string iv_service TYPE string @@ -96,9 +94,6 @@ CLASS lcl_git_transport DEFINITION FINAL. IMPORTING ii_client TYPE REF TO if_http_client RAISING lcx_exception. - CLASS-METHODS get_null - RETURNING VALUE(rv_c) TYPE char1. - CLASS-METHODS send_receive IMPORTING ii_client TYPE REF TO if_http_client RAISING lcx_exception. @@ -115,6 +110,20 @@ CLASS lcl_git_transport DEFINITION FINAL. ENDCLASS. "lcl_transport DEFINITION +*----------------------------------------------------------------------* +* CLASS lcl_git_branch_helper DEFINITION +*----------------------------------------------------------------------* +CLASS lcl_git_branch_helper DEFINITION FINAL. + PUBLIC SECTION. + CLASS-METHODS parse_branch_list + IMPORTING iv_data TYPE string + RETURNING VALUE(rt_list) TYPE lcl_git_transport=>ty_branch_list_tt + RAISING lcx_exception. + +ENDCLASS. "lcl_git_branch_helper + + + *----------------------------------------------------------------------* * CLASS lcl_pack DEFINITION *----------------------------------------------------------------------* @@ -327,47 +336,6 @@ CLASS lcl_git_transport IMPLEMENTATION. ENDMETHOD. "acquire_login_details - METHOD parse_branch_list. - - DATA: lt_result TYPE TABLE OF string, - lv_hash TYPE ty_sha1, - lv_name TYPE string, - lv_foo TYPE string ##needed, - lv_char TYPE c, - lv_data LIKE LINE OF lt_result. - - FIELD-SYMBOLS: LIKE LINE OF rt_list. - - - SPLIT iv_data AT gc_newline INTO TABLE lt_result. - LOOP AT lt_result INTO lv_data. - IF sy-tabix = 1. - CONTINUE. " current loop - ELSEIF sy-tabix = 2 AND strlen( lv_data ) > 49. - lv_hash = lv_data+8. - lv_name = lv_data+49. - lv_char = get_null( ). - SPLIT lv_name AT lv_char INTO lv_name lv_foo. - ELSEIF sy-tabix > 2 AND strlen( lv_data ) > 45. - lv_hash = lv_data+4. - lv_name = lv_data+45. - ELSEIF sy-tabix = 2 AND strlen( lv_data ) = 8 AND lv_data(8) = '00000000'. - lcx_exception=>raise( 'No branches, create branch manually by adding file' ). - ELSE. - CONTINUE. - ENDIF. - - IF lv_name CP 'refs/pull/*'. - CONTINUE. - ENDIF. - - APPEND INITIAL LINE TO rt_list ASSIGNING . - -sha1 = lv_hash. - -name = lv_name. - ENDLOOP. - - ENDMETHOD. "parse_branch_list - METHOD find_branch. DATA: lt_branch_list TYPE ty_branch_list_tt, @@ -462,7 +430,7 @@ CLASS lcl_git_transport IMPLEMENTATION. ii_client = ei_client ). lv_data = ei_client->response->get_cdata( ). - et_branch_list = parse_branch_list( lv_data ). + et_branch_list = lcl_git_branch_helper=>parse_branch_list( lv_data ). ENDMETHOD. "ref_discovery @@ -719,6 +687,54 @@ CLASS lcl_git_transport IMPLEMENTATION. ENDCLASS. "lcl_transport IMPLEMENTATION +*----------------------------------------------------------------------* +* CLASS lcl_git_branch_helper IMPLEMENTATION +*----------------------------------------------------------------------* +CLASS lcl_git_branch_helper IMPLEMENTATION. + METHOD parse_branch_list. + + DATA: lt_result TYPE TABLE OF string, + lv_hash TYPE ty_sha1, + lv_name TYPE string, + lv_foo TYPE string ##needed, + lv_char TYPE c, + lv_data LIKE LINE OF lt_result. + + FIELD-SYMBOLS: LIKE LINE OF rt_list. + + + SPLIT iv_data AT gc_newline INTO TABLE lt_result. + LOOP AT lt_result INTO lv_data. + IF sy-tabix = 1. + CONTINUE. " current loop + ELSEIF sy-tabix = 2 AND strlen( lv_data ) > 49. + lv_hash = lv_data+8. + lv_name = lv_data+49. + lv_char = lcl_git_transport=>get_null( ). + SPLIT lv_name AT lv_char INTO lv_name lv_foo. + ELSEIF sy-tabix > 2 AND strlen( lv_data ) > 45. + lv_hash = lv_data+4. + lv_name = lv_data+45. + ELSEIF sy-tabix = 2 AND strlen( lv_data ) = 8 AND lv_data(8) = '00000000'. + lcx_exception=>raise( 'No branches, create branch manually by adding file' ). + ELSE. + CONTINUE. + ENDIF. + + IF lv_name CP 'refs/pull/*'. + CONTINUE. + ENDIF. + + APPEND INITIAL LINE TO rt_list ASSIGNING . + -sha1 = lv_hash. + -name = lv_name. + ENDLOOP. + + ENDMETHOD. "parse_branch_list +ENDCLASS. "lcl_git_branch_helper + + + *----------------------------------------------------------------------* * CLASS lcl_pack IMPLEMENTATION *----------------------------------------------------------------------* From 858f64b01f2d0d482d739d7bff46a3d0fd3c4035 Mon Sep 17 00:00:00 2001 From: atsy Date: Sat, 3 Sep 2016 12:10:55 +0300 Subject: [PATCH 02/11] #311 branch types to global definitions --- src/zabapgit_forms.prog.abap | 2 +- src/zabapgit_git.prog.abap | 42 ++++++++++++--------- src/zabapgit_page_branch_overview.prog.abap | 6 +-- src/zabapgit_page_merge.prog.abap | 8 ++-- src/zabapgit_popups.prog.abap | 6 +-- 5 files changed, 36 insertions(+), 28 deletions(-) diff --git a/src/zabapgit_forms.prog.abap b/src/zabapgit_forms.prog.abap index 14c7788af..b20ebabb8 100644 --- a/src/zabapgit_forms.prog.abap +++ b/src/zabapgit_forms.prog.abap @@ -54,7 +54,7 @@ FORM branch_popup TABLES tt_fields TYPE ty_sval_tt DATA: lv_url TYPE string, lx_error TYPE REF TO lcx_exception, ls_package_data TYPE scompkdtln, - ls_branch TYPE lcl_git_transport=>ty_branch_list. + ls_branch TYPE ty_git_branch. FIELD-SYMBOLS: LIKE LINE OF tt_fields, LIKE LINE OF tt_fields. diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap index 5583cb42c..4e98ff093 100644 --- a/src/zabapgit_git.prog.abap +++ b/src/zabapgit_git.prog.abap @@ -7,22 +7,27 @@ CLASS ltcl_git_pack DEFINITION DEFERRED. *----------------------------------------------------------------------* * CLASS lcl_transport DEFINITION *----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_git_transport DEFINITION FINAL. +" TODO: move types to global definitions when code is stable +TYPES: ty_git_branch_type TYPE char2. +TYPES: BEGIN OF ty_git_branch, + sha1 TYPE ty_sha1, + name TYPE string, + type TYPE ty_git_branch_type, + is_head TYPE abap_bool, + display_name TYPE string, + END OF ty_git_branch. +TYPES: ty_git_branch_list_tt TYPE STANDARD TABLE OF ty_git_branch WITH DEFAULT KEY. + + +CLASS lcl_git_transport DEFINITION FINAL. PUBLIC SECTION. - TYPES: BEGIN OF ty_branch_list, - sha1 TYPE ty_sha1, - name TYPE string, - END OF ty_branch_list. - TYPES: ty_branch_list_tt TYPE STANDARD TABLE OF ty_branch_list WITH DEFAULT KEY. * remote to local CLASS-METHODS upload_pack IMPORTING io_repo TYPE REF TO lcl_repo_online iv_deepen TYPE abap_bool DEFAULT abap_true - it_branches TYPE ty_branch_list_tt OPTIONAL + it_branches TYPE ty_git_branch_list_tt OPTIONAL EXPORTING et_objects TYPE ty_objects_tt ev_branch TYPE ty_sha1 RAISING lcx_exception. @@ -38,7 +43,7 @@ CLASS lcl_git_transport DEFINITION FINAL. CLASS-METHODS branches IMPORTING iv_url TYPE string - RETURNING VALUE(rt_branch_list) TYPE ty_branch_list_tt + RETURNING VALUE(rt_branch_list) TYPE ty_git_branch_list_tt RAISING lcx_exception. CLASS-METHODS class_constructor. @@ -58,7 +63,7 @@ CLASS lcl_git_transport DEFINITION FINAL. IMPORTING iv_url TYPE string iv_service TYPE string EXPORTING ei_client TYPE REF TO if_http_client - et_branch_list TYPE ty_branch_list_tt + et_branch_list TYPE ty_git_branch_list_tt RAISING lcx_exception. CLASS-METHODS pkt_string @@ -115,15 +120,15 @@ ENDCLASS. "lcl_transport DEFINITION *----------------------------------------------------------------------* CLASS lcl_git_branch_helper DEFINITION FINAL. PUBLIC SECTION. + CLASS-METHODS parse_branch_list IMPORTING iv_data TYPE string - RETURNING VALUE(rt_list) TYPE lcl_git_transport=>ty_branch_list_tt + RETURNING VALUE(rt_list) TYPE ty_git_branch_list_tt RAISING lcx_exception. ENDCLASS. "lcl_git_branch_helper - *----------------------------------------------------------------------* * CLASS lcl_pack DEFINITION *----------------------------------------------------------------------* @@ -338,7 +343,7 @@ CLASS lcl_git_transport IMPLEMENTATION. METHOD find_branch. - DATA: lt_branch_list TYPE ty_branch_list_tt, + DATA: lt_branch_list TYPE ty_git_branch_list_tt, ls_branch_list LIKE LINE OF lt_branch_list. @@ -601,7 +606,7 @@ CLASS lcl_git_transport IMPLEMENTATION. lv_xstring TYPE xstring, lv_line TYPE string, lv_pack TYPE xstring, - lt_branches TYPE ty_branch_list_tt, + lt_branches TYPE ty_git_branch_list_tt, lv_capa TYPE string. FIELD-SYMBOLS: LIKE LINE OF lt_branches. @@ -691,6 +696,7 @@ ENDCLASS. "lcl_transport IMPLEMENTATION * CLASS lcl_git_branch_helper IMPLEMENTATION *----------------------------------------------------------------------* CLASS lcl_git_branch_helper IMPLEMENTATION. + METHOD parse_branch_list. DATA: lt_result TYPE TABLE OF string, @@ -731,6 +737,8 @@ CLASS lcl_git_branch_helper IMPLEMENTATION. ENDLOOP. ENDMETHOD. "parse_branch_list + + ENDCLASS. "lcl_git_branch_helper @@ -1446,7 +1454,7 @@ CLASS lcl_git_porcelain DEFINITION FINAL FRIENDS ltcl_git_porcelain. CLASS-METHODS delete_branch IMPORTING io_repo TYPE REF TO lcl_repo_online - is_branch TYPE lcl_git_transport=>ty_branch_list + is_branch TYPE ty_git_branch RAISING lcx_exception. CLASS-METHODS full_tree @@ -1635,7 +1643,7 @@ CLASS lcl_git_porcelain IMPLEMENTATION. lv_sha1 TYPE ty_sha1, lt_trees TYPE ty_trees_tt, lt_objects TYPE ty_objects_tt, - lt_branches TYPE lcl_git_transport=>ty_branch_list_tt, + lt_branches TYPE ty_git_branch_list_tt, lt_stage TYPE lcl_stage=>ty_stage_tt. FIELD-SYMBOLS: LIKE LINE OF lt_stage, diff --git a/src/zabapgit_page_branch_overview.prog.abap b/src/zabapgit_page_branch_overview.prog.abap index a3c879ea7..3e408fb94 100644 --- a/src/zabapgit_page_branch_overview.prog.abap +++ b/src/zabapgit_page_branch_overview.prog.abap @@ -37,7 +37,7 @@ CLASS lcl_branch_overview DEFINITION FINAL. RAISING lcx_exception. CLASS-METHODS: get_branches - RETURNING VALUE(rt_branches) TYPE lcl_git_transport=>ty_branch_list_tt. + RETURNING VALUE(rt_branches) TYPE ty_git_branch_list_tt. PRIVATE SECTION. @@ -57,7 +57,7 @@ CLASS lcl_branch_overview DEFINITION FINAL. RAISING lcx_exception. CLASS-DATA: - gt_branches TYPE lcl_git_transport=>ty_branch_list_tt, + gt_branches TYPE ty_git_branch_list_tt, gt_commits TYPE TABLE OF ty_commit. ENDCLASS. @@ -379,7 +379,7 @@ CLASS lcl_gui_page_branch_overview IMPLEMENTATION. METHOD form_select. DATA: lv_name TYPE string, - lt_branches TYPE lcl_git_transport=>ty_branch_list_tt. + lt_branches TYPE ty_git_branch_list_tt. FIELD-SYMBOLS: LIKE LINE OF lt_branches. diff --git a/src/zabapgit_page_merge.prog.abap b/src/zabapgit_page_merge.prog.abap index 95e129579..937347bdf 100644 --- a/src/zabapgit_page_merge.prog.abap +++ b/src/zabapgit_page_merge.prog.abap @@ -14,8 +14,8 @@ CLASS lcl_merge DEFINITION FINAL. TYPES: BEGIN OF ty_merge, repo TYPE REF TO lcl_repo_online, - source TYPE lcl_git_transport=>ty_branch_list, - target TYPE lcl_git_transport=>ty_branch_list, + source TYPE ty_git_branch, + target TYPE ty_git_branch, common TYPE ty_ancestor, stree TYPE lcl_git_porcelain=>ty_expanded_tt, ttree TYPE lcl_git_porcelain=>ty_expanded_tt, @@ -304,8 +304,8 @@ CLASS lcl_merge IMPLEMENTATION. END-OF-DEFINITION. DATA: lv_name TYPE string, - lt_branches TYPE lcl_git_transport=>ty_branch_list_tt, - lt_upload TYPE lcl_git_transport=>ty_branch_list_tt. + lt_branches TYPE ty_git_branch_list_tt, + lt_upload TYPE ty_git_branch_list_tt. lt_branches = lcl_git_transport=>branches( gs_merge-repo->get_url( ) ). diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index 132f51197..e8b5c84a9 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -31,7 +31,7 @@ CLASS lcl_popups DEFINITION. RAISING lcx_exception, branch_list_popup IMPORTING iv_url TYPE string - RETURNING VALUE(rs_branch) TYPE lcl_git_transport=>ty_branch_list + RETURNING VALUE(rs_branch) TYPE ty_git_branch RAISING lcx_exception, repo_popup IMPORTING iv_url TYPE string @@ -194,7 +194,7 @@ CLASS lcl_popups IMPLEMENTATION. METHOD delete_branch. DATA: lo_repo TYPE REF TO lcl_repo_online, - ls_branch TYPE lcl_git_transport=>ty_branch_list. + ls_branch TYPE ty_git_branch. lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). @@ -220,7 +220,7 @@ CLASS lcl_popups IMPLEMENTATION. METHOD branch_list_popup. - DATA: lt_branches TYPE lcl_git_transport=>ty_branch_list_tt, + DATA: lt_branches TYPE ty_git_branch_list_tt, lv_answer TYPE c LENGTH 1, lt_selection TYPE TABLE OF spopli. From 41ffa356990f369d24a8da2711054a8e7f24a127 Mon Sep 17 00:00:00 2001 From: atsy Date: Sat, 3 Sep 2016 12:25:19 +0300 Subject: [PATCH 03/11] #311 separate some methods to lcl_git_utils Maybe would better look as a part of lcl_git_pack --- src/zabapgit_git.prog.abap | 184 ++++++++++++++++++++----------------- 1 file changed, 99 insertions(+), 85 deletions(-) diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap index 4e98ff093..9057fda39 100644 --- a/src/zabapgit_git.prog.abap +++ b/src/zabapgit_git.prog.abap @@ -4,9 +4,6 @@ CLASS ltcl_git_pack DEFINITION DEFERRED. -*----------------------------------------------------------------------* -* CLASS lcl_transport DEFINITION -*----------------------------------------------------------------------* " TODO: move types to global definitions when code is stable TYPES: ty_git_branch_type TYPE char2. @@ -19,6 +16,99 @@ TYPES: BEGIN OF ty_git_branch, END OF ty_git_branch. TYPES: ty_git_branch_list_tt TYPE STANDARD TABLE OF ty_git_branch WITH DEFAULT KEY. +*----------------------------------------------------------------------* +* CLASS lcl_git_utils +*----------------------------------------------------------------------* +CLASS lcl_git_utils DEFINITION FINAL. " > Maybe better move to lcl_git_pack ?? + PUBLIC SECTION. + + CLASS-METHODS get_null + RETURNING VALUE(rv_c) TYPE char1. + + CLASS-METHODS pkt_string + IMPORTING iv_string TYPE string + RETURNING VALUE(rv_pkt) TYPE string + RAISING lcx_exception. + + CLASS-METHODS length_utf8_hex + IMPORTING iv_data TYPE xstring + RETURNING VALUE(rv_len) TYPE i + RAISING lcx_exception. + +ENDCLASS. "lcl_git_utils + +CLASS lcl_git_utils IMPLEMENTATION. + + METHOD get_null. + + DATA: lv_x(4) TYPE x VALUE '00000000', + lv_z(2) TYPE c. + + FIELD-SYMBOLS TYPE c. + + + ASSIGN lv_x TO CASTING. + lv_z = . + rv_c = lv_z(1). + + ENDMETHOD. "get_null + + METHOD length_utf8_hex. + + DATA: lv_xstring TYPE xstring, + lv_string TYPE string, + lv_char4 TYPE c LENGTH 4, + lv_x TYPE x LENGTH 2, + lo_obj TYPE REF TO cl_abap_conv_in_ce, + lv_len TYPE int4. + +* hmm, can this be done easier? + + lv_xstring = iv_data(4). + + lo_obj = cl_abap_conv_in_ce=>create( + input = lv_xstring + encoding = 'UTF-8' ). + lv_len = xstrlen( lv_xstring ). + + TRY. + lo_obj->read( EXPORTING n = lv_len + IMPORTING data = lv_string ). + CATCH cx_sy_conversion_codepage. + lcx_exception=>raise( 'error converting to hex, LENGTH_UTF8_HEX' ). + ENDTRY. + + lv_char4 = lv_string. + TRANSLATE lv_char4 TO UPPER CASE. + lv_x = lv_char4. + rv_len = lv_x. + + ENDMETHOD. "length_utf8_hex + + METHOD pkt_string. + + DATA: lv_x TYPE x, + lv_len TYPE i. + + + lv_len = strlen( iv_string ). + + IF lv_len >= 255. + lcx_exception=>raise( 'PKT, todo' ). + ENDIF. + + lv_x = lv_len + 4. + + rv_pkt = rv_pkt && '00' && lv_x && iv_string. + + ENDMETHOD. "pkt_string + +ENDCLASS. "lcl_git_utils + + +*----------------------------------------------------------------------* +* CLASS lcl_transport DEFINITION +*----------------------------------------------------------------------* CLASS lcl_git_transport DEFINITION FINAL. PUBLIC SECTION. @@ -48,8 +138,6 @@ CLASS lcl_git_transport DEFINITION FINAL. CLASS-METHODS class_constructor. - CLASS-METHODS get_null - RETURNING VALUE(rv_c) TYPE char1. PRIVATE SECTION. CLASS-DATA: gv_agent TYPE string. @@ -66,11 +154,6 @@ CLASS lcl_git_transport DEFINITION FINAL. et_branch_list TYPE ty_git_branch_list_tt RAISING lcx_exception. - CLASS-METHODS pkt_string - IMPORTING iv_string TYPE string - RETURNING VALUE(rv_pkt) TYPE string - RAISING lcx_exception. - CLASS-METHODS find_branch IMPORTING iv_url TYPE string iv_service TYPE string @@ -84,11 +167,6 @@ CLASS lcl_git_transport DEFINITION FINAL. CHANGING cv_data TYPE xstring RAISING lcx_exception. - CLASS-METHODS length_utf8_hex - IMPORTING iv_data TYPE xstring - RETURNING VALUE(rv_len) TYPE i - RAISING lcx_exception. - CLASS-METHODS set_headers IMPORTING iv_url TYPE string iv_service TYPE string @@ -265,20 +343,6 @@ CLASS lcl_git_transport IMPLEMENTATION. ENDMETHOD. "set_headers - METHOD get_null. - - DATA: lv_x(4) TYPE x VALUE '00000000', - lv_z(2) TYPE c. - - FIELD-SYMBOLS TYPE c. - - - ASSIGN lv_x TO CASTING. - lv_z = . - rv_c = lv_z(1). - - ENDMETHOD. "get_null - METHOD check_http_200. DATA: lv_code TYPE i. @@ -503,11 +567,11 @@ CLASS lcl_git_transport IMPLEMENTATION. iv_new && ` ` && iv_branch_name && - get_null( ) && + lcl_git_utils=>get_null( ) && ` ` && lv_cap_list && gc_newline. "#EC NOTEXT - lv_cmd_pkt = pkt_string( lv_line ). + lv_cmd_pkt = lcl_git_utils=>pkt_string( lv_line ). lv_buffer = lv_cmd_pkt && '0000'. lv_tmp = lcl_convert=>string_to_xstring_utf8( lv_buffer ). @@ -531,38 +595,6 @@ CLASS lcl_git_transport IMPLEMENTATION. ENDMETHOD. "receive_pack - METHOD length_utf8_hex. - - DATA: lv_xstring TYPE xstring, - lv_string TYPE string, - lv_char4 TYPE c LENGTH 4, - lv_x TYPE x LENGTH 2, - lo_obj TYPE REF TO cl_abap_conv_in_ce, - lv_len TYPE int4. - -* hmm, can this be done easier? - - lv_xstring = iv_data(4). - - lo_obj = cl_abap_conv_in_ce=>create( - input = lv_xstring - encoding = 'UTF-8' ). - lv_len = xstrlen( lv_xstring ). - - TRY. - lo_obj->read( EXPORTING n = lv_len - IMPORTING data = lv_string ). - CATCH cx_sy_conversion_codepage. - lcx_exception=>raise( 'error converting to hex, LENGTH_UTF8_HEX' ). - ENDTRY. - - lv_char4 = lv_string. - TRANSLATE lv_char4 TO UPPER CASE. - lv_x = lv_char4. - rv_len = lv_x. - - ENDMETHOD. "length_utf8_hex - METHOD parse. CONSTANTS: lc_band1 TYPE x VALUE '01'. @@ -573,7 +605,7 @@ CLASS lcl_git_transport IMPLEMENTATION. WHILE xstrlen( cv_data ) >= 4. - lv_len = length_utf8_hex( cv_data ). + lv_len = lcl_git_utils=>length_utf8_hex( cv_data ). IF lv_len > xstrlen( cv_data ). lcx_exception=>raise( 'parse, string length too large' ). @@ -643,11 +675,11 @@ CLASS lcl_git_transport IMPLEMENTATION. lv_line = 'want' && ` ` && -sha1 && gc_newline. "#EC NOTEXT ENDIF. - lv_buffer = lv_buffer && pkt_string( lv_line ). + lv_buffer = lv_buffer && lcl_git_utils=>pkt_string( lv_line ). ENDLOOP. IF iv_deepen = abap_true. - lv_buffer = lv_buffer && 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 @@ -672,24 +704,6 @@ CLASS lcl_git_transport IMPLEMENTATION. ENDMETHOD. "upload_pack - METHOD pkt_string. - - DATA: lv_x TYPE x, - lv_len TYPE i. - - - lv_len = strlen( iv_string ). - - IF lv_len >= 255. - lcx_exception=>raise( 'PKT, todo' ). - ENDIF. - - lv_x = lv_len + 4. - - rv_pkt = rv_pkt && '00' && lv_x && iv_string. - - ENDMETHOD. "pkt - ENDCLASS. "lcl_transport IMPLEMENTATION *----------------------------------------------------------------------* @@ -716,7 +730,7 @@ CLASS lcl_git_branch_helper IMPLEMENTATION. ELSEIF sy-tabix = 2 AND strlen( lv_data ) > 49. lv_hash = lv_data+8. lv_name = lv_data+49. - lv_char = lcl_git_transport=>get_null( ). + lv_char = lcl_git_utils=>get_null( ). SPLIT lv_name AT lv_char INTO lv_name lv_foo. ELSEIF sy-tabix > 2 AND strlen( lv_data ) > 45. lv_hash = lv_data+4. From 6bb3ed474f29c2d66dcc474863401fbd42c9cd29 Mon Sep 17 00:00:00 2001 From: atsy Date: Sat, 3 Sep 2016 13:04:03 +0300 Subject: [PATCH 04/11] #311 branches part1, interface changes --- src/zabapgit_git.prog.abap | 93 +++++++++++++-------- src/zabapgit_page_branch_overview.prog.abap | 3 +- src/zabapgit_page_merge.prog.abap | 3 +- src/zabapgit_popups.prog.abap | 11 ++- 4 files changed, 65 insertions(+), 45 deletions(-) diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap index 9057fda39..20300da1d 100644 --- a/src/zabapgit_git.prog.abap +++ b/src/zabapgit_git.prog.abap @@ -105,6 +105,31 @@ CLASS lcl_git_utils IMPLEMENTATION. ENDCLASS. "lcl_git_utils +*----------------------------------------------------------------------* +* CLASS lcl_git_branch_list DEFINITION +*----------------------------------------------------------------------* +CLASS lcl_git_branch_list DEFINITION FINAL CREATE PRIVATE. + PUBLIC SECTION. + DATA mt_branches TYPE ty_git_branch_list_tt READ-ONLY. + + CLASS-METHODS create + IMPORTING iv_data TYPE string + RETURNING VALUE(ro_list) TYPE REF TO lcl_git_branch_list + RAISING lcx_exception. + + METHODS find_by_name + IMPORTING iv_branch_name TYPE clike + RETURNING VALUE(rs_branch) TYPE ty_git_branch + RAISING lcx_exception. + + PRIVATE SECTION. + CLASS-METHODS parse_branch_list + IMPORTING iv_data TYPE string + RETURNING VALUE(rt_list) TYPE ty_git_branch_list_tt + RAISING lcx_exception. + +ENDCLASS. "lcl_git_branch_list + *----------------------------------------------------------------------* * CLASS lcl_transport DEFINITION @@ -133,7 +158,7 @@ CLASS lcl_git_transport DEFINITION FINAL. CLASS-METHODS branches IMPORTING iv_url TYPE string - RETURNING VALUE(rt_branch_list) TYPE ty_git_branch_list_tt + RETURNING VALUE(ro_branch_list) TYPE REF TO lcl_git_branch_list RAISING lcx_exception. CLASS-METHODS class_constructor. @@ -151,7 +176,7 @@ CLASS lcl_git_transport DEFINITION FINAL. IMPORTING iv_url TYPE string iv_service TYPE string EXPORTING ei_client TYPE REF TO if_http_client - et_branch_list TYPE ty_git_branch_list_tt + eo_branch_list TYPE REF TO lcl_git_branch_list RAISING lcx_exception. CLASS-METHODS find_branch @@ -193,20 +218,6 @@ CLASS lcl_git_transport DEFINITION FINAL. ENDCLASS. "lcl_transport DEFINITION -*----------------------------------------------------------------------* -* CLASS lcl_git_branch_helper DEFINITION -*----------------------------------------------------------------------* -CLASS lcl_git_branch_helper DEFINITION FINAL. - PUBLIC SECTION. - - CLASS-METHODS parse_branch_list - IMPORTING iv_data TYPE string - RETURNING VALUE(rt_list) TYPE ty_git_branch_list_tt - RAISING lcx_exception. - -ENDCLASS. "lcl_git_branch_helper - - *----------------------------------------------------------------------* * CLASS lcl_pack DEFINITION *----------------------------------------------------------------------* @@ -407,9 +418,7 @@ CLASS lcl_git_transport IMPLEMENTATION. METHOD find_branch. - DATA: lt_branch_list TYPE ty_git_branch_list_tt, - ls_branch_list LIKE LINE OF lt_branch_list. - + DATA: lo_branch_list TYPE REF TO lcl_git_branch_list. branch_list( EXPORTING @@ -417,20 +426,10 @@ CLASS lcl_git_transport IMPLEMENTATION. iv_service = iv_service IMPORTING ei_client = ei_client - et_branch_list = lt_branch_list ). + eo_branch_list = lo_branch_list ). IF ev_branch IS SUPPLIED. - IF iv_branch_name IS INITIAL. - lcx_exception=>raise( 'branch empty' ). - ENDIF. - - READ TABLE lt_branch_list INTO ls_branch_list - WITH KEY name = iv_branch_name. - IF sy-subrc <> 0. - lcx_exception=>raise( 'Branch not found' ). - ENDIF. - - ev_branch = ls_branch_list-sha1. + ev_branch = lo_branch_list->find_by_name( iv_branch_name )-sha1. ENDIF. ENDMETHOD. "find_branch @@ -446,7 +445,7 @@ CLASS lcl_git_transport IMPLEMENTATION. iv_service = c_service-upload IMPORTING ei_client = li_client - et_branch_list = rt_branch_list ). + eo_branch_list = ro_branch_list ). li_client->close( ). ENDMETHOD. "branches @@ -499,9 +498,9 @@ CLASS lcl_git_transport IMPLEMENTATION. ii_client = ei_client ). lv_data = ei_client->response->get_cdata( ). - et_branch_list = lcl_git_branch_helper=>parse_branch_list( lv_data ). + eo_branch_list = lcl_git_branch_list=>create( lv_data ). - ENDMETHOD. "ref_discovery + ENDMETHOD. "branch_list METHOD send_receive. @@ -707,9 +706,29 @@ CLASS lcl_git_transport IMPLEMENTATION. ENDCLASS. "lcl_transport IMPLEMENTATION *----------------------------------------------------------------------* -* CLASS lcl_git_branch_helper IMPLEMENTATION +* CLASS lcl_git_branch_list IMPLEMENTATION *----------------------------------------------------------------------* -CLASS lcl_git_branch_helper IMPLEMENTATION. +CLASS lcl_git_branch_list IMPLEMENTATION. + + METHOD create. + CREATE OBJECT ro_list. + ro_list->mt_branches = parse_branch_list( iv_data = iv_data ). + ENDMETHOD. "create + + METHOD find_by_name. + + IF iv_branch_name IS INITIAL. + lcx_exception=>raise( 'Branch name empty' ). + ENDIF. + + READ TABLE mt_branches INTO rs_branch + WITH KEY name = iv_branch_name. + IF sy-subrc <> 0. + lcx_exception=>raise( 'Branch not found' ). + ENDIF. + + ENDMETHOD. "find_by_name + METHOD parse_branch_list. @@ -753,7 +772,7 @@ CLASS lcl_git_branch_helper IMPLEMENTATION. ENDMETHOD. "parse_branch_list -ENDCLASS. "lcl_git_branch_helper +ENDCLASS. "lcl_git_branch_list diff --git a/src/zabapgit_page_branch_overview.prog.abap b/src/zabapgit_page_branch_overview.prog.abap index 3e408fb94..5bcc04d1b 100644 --- a/src/zabapgit_page_branch_overview.prog.abap +++ b/src/zabapgit_page_branch_overview.prog.abap @@ -161,7 +161,8 @@ CLASS lcl_branch_overview IMPLEMENTATION. * get objects directly from git, mo_repo only contains a shallow clone of only * the selected branch - gt_branches = lcl_git_transport=>branches( io_repo->get_url( ) ). + "TODO refactor + gt_branches = lcl_git_transport=>branches( io_repo->get_url( ) )->mt_branches. DELETE gt_branches WHERE name = 'refs/heads/gh-pages' ##NO_TEXT. DELETE gt_branches WHERE name CP 'refs/tags/*' ##NO_TEXT. diff --git a/src/zabapgit_page_merge.prog.abap b/src/zabapgit_page_merge.prog.abap index 937347bdf..9d3cb1598 100644 --- a/src/zabapgit_page_merge.prog.abap +++ b/src/zabapgit_page_merge.prog.abap @@ -308,7 +308,8 @@ CLASS lcl_merge IMPLEMENTATION. lt_upload TYPE ty_git_branch_list_tt. - lt_branches = lcl_git_transport=>branches( gs_merge-repo->get_url( ) ). + "TODO refactor + lt_branches = lcl_git_transport=>branches( gs_merge-repo->get_url( ) )->mt_branches. _find iv_source gs_merge-source. _find iv_target gs_merge-target. diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index e8b5c84a9..5c56c5fa3 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -220,17 +220,17 @@ CLASS lcl_popups IMPLEMENTATION. METHOD branch_list_popup. - DATA: lt_branches TYPE ty_git_branch_list_tt, + DATA: lo_branches TYPE REF TO lcl_git_branch_list, lv_answer TYPE c LENGTH 1, lt_selection TYPE TABLE OF spopli. FIELD-SYMBOLS: LIKE LINE OF lt_selection, - LIKE LINE OF lt_branches. + LIKE LINE OF lcl_git_branch_list=>mt_branches. - lt_branches = lcl_git_transport=>branches( iv_url ). + lo_branches = lcl_git_transport=>branches( iv_url ). - LOOP AT lt_branches ASSIGNING . + LOOP AT lo_branches->mt_branches ASSIGNING . APPEND INITIAL LINE TO lt_selection ASSIGNING . -varoption = -name. ENDLOOP. @@ -261,8 +261,7 @@ CLASS lcl_popups IMPLEMENTATION. READ TABLE lt_selection ASSIGNING WITH KEY selflag = abap_true. ASSERT sy-subrc = 0. - READ TABLE lt_branches INTO rs_branch WITH KEY name = -varoption. - ASSERT sy-subrc = 0. + rs_branch = lo_branches->find_by_name( -varoption ). ENDMETHOD. From d329ab63389692a48511d67e38ad1736488b12fb Mon Sep 17 00:00:00 2001 From: atsy Date: Sat, 3 Sep 2016 15:01:09 +0300 Subject: [PATCH 05/11] #311 part2 lcl_git_branch_list features --- src/zabapgit_git.prog.abap | 179 +++++++++++++++++--- src/zabapgit_gui.prog.abap | 2 +- src/zabapgit_page_branch_overview.prog.abap | 6 +- src/zabapgit_page_merge.prog.abap | 28 +-- src/zabapgit_popups.prog.abap | 4 +- 5 files changed, 172 insertions(+), 47 deletions(-) diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap index 20300da1d..65f9dae0c 100644 --- a/src/zabapgit_git.prog.abap +++ b/src/zabapgit_git.prog.abap @@ -110,7 +110,12 @@ ENDCLASS. "lcl_git_utils *----------------------------------------------------------------------* CLASS lcl_git_branch_list DEFINITION FINAL CREATE PRIVATE. PUBLIC SECTION. - DATA mt_branches TYPE ty_git_branch_list_tt READ-ONLY. + CONSTANTS TYPE_BRANCH TYPE ty_git_branch_type VALUE 'HD'. + CONSTANTS TYPE_TAG TYPE ty_git_branch_type VALUE 'TG'. + CONSTANTS TYPE_OTHER TYPE ty_git_branch_type VALUE 'ZZ'. + + DATA mt_branches TYPE ty_git_branch_list_tt READ-ONLY. + DATA mv_head_symref TYPE string READ-ONLY. CLASS-METHODS create IMPORTING iv_data TYPE string @@ -122,12 +127,45 @@ CLASS lcl_git_branch_list DEFINITION FINAL CREATE PRIVATE. RETURNING VALUE(rs_branch) TYPE ty_git_branch RAISING lcx_exception. + METHODS get_head " For potential future use + RETURNING VALUE(rs_branch) TYPE ty_git_branch + RAISING lcx_exception. + + METHODS get_branches_only + RETURNING VALUE(rt_branches) TYPE ty_git_branch_list_tt + RAISING lcx_exception. + + METHODS get_tags_only " For potential future use + RETURNING VALUE(rt_branches) TYPE ty_git_branch_list_tt + RAISING lcx_exception. + + CLASS-METHODS is_ignored + IMPORTING iv_branch_name TYPE clike + RETURNING VALUE(rv_ignore) TYPE abap_bool. + + CLASS-METHODS get_display_name + IMPORTING iv_branch_name TYPE clike + RETURNING VALUE(rv_display_name) TYPE string. + + CLASS-METHODS get_type + IMPORTING iv_branch_name TYPE clike + RETURNING VALUE(rv_type) TYPE ty_git_branch_type. + + CLASS-METHODS complete_heads_branch_name + IMPORTING iv_branch_name TYPE clike + RETURNING VALUE(rv_name) TYPE string. + PRIVATE SECTION. CLASS-METHODS parse_branch_list IMPORTING iv_data TYPE string - RETURNING VALUE(rt_list) TYPE ty_git_branch_list_tt + EXPORTING et_list TYPE ty_git_branch_list_tt + ev_head_symref TYPE string RAISING lcx_exception. + CLASS-METHODS parse_head_params + IMPORTING iv_data TYPE string + EXPORTING ev_head_symref TYPE string. + ENDCLASS. "lcl_git_branch_list @@ -533,7 +571,6 @@ CLASS lcl_git_transport IMPLEMENTATION. ENDMETHOD. "send_receive - METHOD receive_pack. DATA: li_client TYPE REF TO if_http_client, @@ -712,7 +749,10 @@ CLASS lcl_git_branch_list IMPLEMENTATION. METHOD create. CREATE OBJECT ro_list. - ro_list->mt_branches = parse_branch_list( iv_data = iv_data ). + parse_branch_list( + EXPORTING iv_data = iv_data + IMPORTING et_list = ro_list->mt_branches + ev_head_symref = ro_list->mv_head_symref ). ENDMETHOD. "create METHOD find_by_name. @@ -729,20 +769,27 @@ CLASS lcl_git_branch_list IMPLEMENTATION. ENDMETHOD. "find_by_name + METHOD get_head. + + rs_branch = find_by_name( 'HEAD' ). + + ENDMETHOD. "get_head METHOD parse_branch_list. - DATA: lt_result TYPE TABLE OF string, - lv_hash TYPE ty_sha1, - lv_name TYPE string, - lv_foo TYPE string ##needed, - lv_char TYPE c, - lv_data LIKE LINE OF lt_result. + DATA: lt_result TYPE TABLE OF string, + lv_hash TYPE ty_sha1, + lv_name TYPE string, + lv_head_params TYPE string, + lv_char TYPE c, + lv_data LIKE LINE OF lt_result. - FIELD-SYMBOLS: LIKE LINE OF rt_list. + FIELD-SYMBOLS: LIKE LINE OF et_list. + CLEAR: et_list, ev_head_symref. SPLIT iv_data AT gc_newline INTO TABLE lt_result. + LOOP AT lt_result INTO lv_data. IF sy-tabix = 1. CONTINUE. " current loop @@ -750,7 +797,11 @@ CLASS lcl_git_branch_list IMPLEMENTATION. lv_hash = lv_data+8. lv_name = lv_data+49. lv_char = lcl_git_utils=>get_null( ). - SPLIT lv_name AT lv_char INTO lv_name lv_foo. + + SPLIT lv_name AT lv_char INTO lv_name lv_head_params. + parse_head_params( + EXPORTING iv_data = lv_head_params + IMPORTING ev_head_symref = ev_head_symref ). ELSEIF sy-tabix > 2 AND strlen( lv_data ) > 45. lv_hash = lv_data+4. lv_name = lv_data+45. @@ -760,24 +811,112 @@ CLASS lcl_git_branch_list IMPLEMENTATION. CONTINUE. ENDIF. - IF lv_name CP 'refs/pull/*'. - CONTINUE. - ENDIF. + CHECK is_ignored( lv_name ) = abap_false. + ASSERT lv_name IS NOT INITIAL. - APPEND INITIAL LINE TO rt_list ASSIGNING . - -sha1 = lv_hash. - -name = lv_name. + APPEND INITIAL LINE TO et_list ASSIGNING . + -sha1 = lv_hash. + -name = lv_name. + -display_name = get_display_name( lv_name ). + -type = get_type( lv_name ). + IF -name = 'HEAD' OR -name = ev_head_symref. + -is_head = abap_true. + ENDIF. ENDLOOP. ENDMETHOD. "parse_branch_list + METHOD parse_head_params. + + DATA: ls_match TYPE match_result, + ls_submatch TYPE submatch_result. + + FIND FIRST OCCURRENCE OF REGEX '\ssymref=HEAD:([^\s]+)' IN iv_data RESULTS ls_match. + READ TABLE ls_match-submatches INTO ls_submatch INDEX 1. + IF sy-subrc IS INITIAL. + ev_head_symref = iv_data+ls_submatch-offset(ls_submatch-length). + ENDIF. + + ENDMETHOD. "parse_head_params + + METHOD is_ignored. + + IF iv_branch_name EQ 'refs/heads/gh-pages'. " Github pages + rv_ignore = abap_true. + 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/*'. + rv_ignore = abap_true. + ENDIF. + + ENDMETHOD. "is_ignored + + METHOD get_display_name. + rv_display_name = iv_branch_name. + + IF rv_display_name CP 'refs/heads/*'. + REPLACE FIRST OCCURRENCE OF 'refs/heads/' IN rv_display_name WITH ''. + RETURN. + ENDIF. + + IF rv_display_name CP 'refs/tags/*'. + REPLACE FIRST OCCURRENCE OF 'refs/' IN rv_display_name WITH ''. + RETURN. + ENDIF. + + ENDMETHOD. "get_display_name + + METHOD get_type. + rv_type = TYPE_OTHER. + + IF iv_branch_name CP 'refs/heads/*' OR iv_branch_name = 'HEAD'. + rv_type = TYPE_BRANCH. + RETURN. + ENDIF. + + IF iv_branch_name CP 'refs/tags/*'. + rv_type = TYPE_TAG. + RETURN. + ENDIF. + + ENDMETHOD. "get_type + + METHOD complete_heads_branch_name. + IF iv_branch_name CP 'refs/heads/*'. + rv_name = iv_branch_name. + ELSE. + rv_name = 'refs/heads/' && iv_branch_name. + ENDIF. + ENDMETHOD. "complete_heads_branch_name + + METHOD get_branches_only. + FIELD-SYMBOLS LIKE LINE OF mt_branches. + + LOOP AT mt_branches ASSIGNING . + IF -type = TYPE_BRANCH. + APPEND TO rt_branches. + ENDIF. + ENDLOOP. + ENDMETHOD. "get_branches_only + + METHOD get_tags_only. + FIELD-SYMBOLS LIKE LINE OF mt_branches. + + LOOP AT mt_branches ASSIGNING . + IF -type = TYPE_TAG. + APPEND TO rt_branches. + ENDIF. + ENDLOOP. + ENDMETHOD. "get_tags_only ENDCLASS. "lcl_git_branch_list - *----------------------------------------------------------------------* -* CLASS lcl_pack IMPLEMENTATION +* CLASS lcl_git_pack IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* diff --git a/src/zabapgit_gui.prog.abap b/src/zabapgit_gui.prog.abap index e10bf51b8..cf23604e8 100644 --- a/src/zabapgit_gui.prog.abap +++ b/src/zabapgit_gui.prog.abap @@ -869,7 +869,7 @@ CLASS lcl_gui_router IMPLEMENTATION. lo_repo = lcl_app=>repo_srv( )->new_online( iv_url = lv_url - iv_branch_name = 'refs/heads/master' + iv_branch_name = 'refs/heads/master' "TODO replace with HEAD ? iv_package = lv_target_package ) ##NO_TEXT. lo_repo->status( ). " check for errors diff --git a/src/zabapgit_page_branch_overview.prog.abap b/src/zabapgit_page_branch_overview.prog.abap index 5bcc04d1b..2bb00cef5 100644 --- a/src/zabapgit_page_branch_overview.prog.abap +++ b/src/zabapgit_page_branch_overview.prog.abap @@ -162,11 +162,7 @@ CLASS lcl_branch_overview IMPLEMENTATION. * the selected branch "TODO refactor - gt_branches = lcl_git_transport=>branches( io_repo->get_url( ) )->mt_branches. - - DELETE gt_branches WHERE name = 'refs/heads/gh-pages' ##NO_TEXT. - DELETE gt_branches WHERE name CP 'refs/tags/*' ##NO_TEXT. - DELETE gt_branches WHERE name CP 'refs/pull/*' ##NO_TEXT. + gt_branches = lcl_git_transport=>branches( io_repo->get_url( ) )->get_branches_only( ). lcl_git_transport=>upload_pack( EXPORTING io_repo = io_repo iv_deepen = abap_false diff --git a/src/zabapgit_page_merge.prog.abap b/src/zabapgit_page_merge.prog.abap index 9d3cb1598..8d447a6bb 100644 --- a/src/zabapgit_page_merge.prog.abap +++ b/src/zabapgit_page_merge.prog.abap @@ -294,30 +294,20 @@ CLASS lcl_merge IMPLEMENTATION. METHOD fetch_git. - DEFINE _find. - lv_name = 'refs/heads/' && &1 ##NO_TEXT. - READ TABLE lt_branches INTO &2 WITH KEY name = lv_name. - IF sy-subrc <> 0. - lcx_exception=>raise( 'branch not found' ). - ENDIF. - APPEND &2 TO lt_upload. - END-OF-DEFINITION. - - DATA: lv_name TYPE string, - lt_branches TYPE ty_git_branch_list_tt, + DATA: lo_branch_list TYPE REF TO lcl_git_branch_list, lt_upload TYPE ty_git_branch_list_tt. + lo_branch_list = lcl_git_transport=>branches( gs_merge-repo->get_url( ) ). + gs_merge-source = lo_branch_list->find_by_name( lcl_git_branch_list=>complete_heads_branch_name( iv_source ) ). + gs_merge-target = lo_branch_list->find_by_name( lcl_git_branch_list=>complete_heads_branch_name( iv_target ) ). - "TODO refactor - lt_branches = lcl_git_transport=>branches( gs_merge-repo->get_url( ) )->mt_branches. + APPEND gs_merge-source TO lt_upload. + APPEND gs_merge-target TO lt_upload. - _find iv_source gs_merge-source. - _find iv_target gs_merge-target. - - lcl_git_transport=>upload_pack( EXPORTING io_repo = gs_merge-repo - iv_deepen = abap_false + lcl_git_transport=>upload_pack( EXPORTING io_repo = gs_merge-repo + iv_deepen = abap_false it_branches = lt_upload - IMPORTING et_objects = gt_objects ). + IMPORTING et_objects = gt_objects ). ENDMETHOD. diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index 5c56c5fa3..929602f06 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -116,7 +116,7 @@ CLASS lcl_popups IMPLEMENTATION. CLEAR ev_cancel. * TAB FLD LABEL DEF ATTR - _add_dialog_fld 'TEXTL' 'LINE' 'Name' 'refs/heads/branch_name' ''. + _add_dialog_fld 'TEXTL' 'LINE' 'Name' 'new_branch_name' ''. CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING @@ -137,7 +137,7 @@ CLASS lcl_popups IMPLEMENTATION. ELSE. READ TABLE lt_fields INDEX 1 ASSIGNING . ASSERT sy-subrc = 0. - ev_name = -value. + ev_name = lcl_git_branch_list=>complete_heads_branch_name( -value ). ENDIF. ENDMETHOD. From 36144f7f236de1685575682e1c6eebe9588af549 Mon Sep 17 00:00:00 2001 From: atsy Date: Sat, 3 Sep 2016 16:59:22 +0300 Subject: [PATCH 06/11] #311 part3 UI interactive popup fixes --- src/zabapgit_git.prog.abap | 7 +++-- src/zabapgit_page.prog.abap | 51 +++++++++++++++++++++++++++----- src/zabapgit_page_main.prog.abap | 2 +- src/zabapgit_popups.prog.abap | 7 +++-- 4 files changed, 54 insertions(+), 13 deletions(-) diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap index 65f9dae0c..030b10d8c 100644 --- a/src/zabapgit_git.prog.abap +++ b/src/zabapgit_git.prog.abap @@ -113,6 +113,7 @@ CLASS lcl_git_branch_list DEFINITION FINAL CREATE PRIVATE. CONSTANTS TYPE_BRANCH TYPE ty_git_branch_type VALUE 'HD'. CONSTANTS TYPE_TAG TYPE ty_git_branch_type VALUE 'TG'. CONSTANTS TYPE_OTHER TYPE ty_git_branch_type VALUE 'ZZ'. + CONSTANTS HEAD_NAME TYPE string VALUE 'HEAD'. DATA mt_branches TYPE ty_git_branch_list_tt READ-ONLY. DATA mv_head_symref TYPE string READ-ONLY. @@ -771,7 +772,7 @@ CLASS lcl_git_branch_list IMPLEMENTATION. METHOD get_head. - rs_branch = find_by_name( 'HEAD' ). + rs_branch = find_by_name( HEAD_NAME ). ENDMETHOD. "get_head @@ -819,7 +820,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' OR -name = ev_head_symref. + IF -name = HEAD_NAME OR -name = ev_head_symref. -is_head = abap_true. ENDIF. ENDLOOP. @@ -872,7 +873,7 @@ CLASS lcl_git_branch_list IMPLEMENTATION. METHOD get_type. rv_type = TYPE_OTHER. - IF iv_branch_name CP 'refs/heads/*' OR iv_branch_name = 'HEAD'. + IF iv_branch_name CP 'refs/heads/*' OR iv_branch_name = HEAD_NAME. rv_type = TYPE_BRANCH. RETURN. ENDIF. diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index a668e1920..6681bc001 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -30,11 +30,19 @@ CLASS lcl_gui_page_super DEFINITION ABSTRACT. 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_branch TYPE string OPTIONAL - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper + 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_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. METHODS header @@ -94,9 +102,13 @@ CLASS lcl_gui_page_super IMPLEMENTATION. IF iv_show_branch = abap_true. ro_html->add( '' ). IF iv_branch IS INITIAL. - ro_html->add( |{ lo_repo_online->get_branch_name( ) }| ). + 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( |{ iv_branch }| ). + ro_html->add( render_branch_span( iv_branch = iv_branch + io_repo = lo_repo_online + iv_interactive = iv_interactive_branch ) ). ENDIF. ENDIF. ro_html->add( '' ). @@ -108,6 +120,30 @@ CLASS lcl_gui_page_super IMPLEMENTATION. ENDMETHOD. + METHOD render_branch_span. + DATA: lv_text TYPE string, + lv_class TYPE string. + + lv_text = lcl_git_branch_list=>get_display_name( iv_branch ). + + CASE lcl_git_branch_list=>get_type( iv_branch ). "TODO + WHEN lcl_git_branch_list=>TYPE_BRANCH. + WHEN lcl_git_branch_list=>TYPE_TAG. + WHEN OTHERS. + ENDCASE. + + CREATE OBJECT ro_html. + IF iv_interactive = abap_true. + ro_html->add( || ). + ro_html->add_anchor( iv_act = |switch_branch?{ io_repo->get_key( ) }| + iv_txt = lv_text ). "TODO refactor + ro_html->add( '' ). + ELSE. + ro_html->add( |{ lv_text }| ). + ENDIF. + + ENDMETHOD. "render_branch_span + METHOD header. CREATE OBJECT ro_html. @@ -318,6 +354,7 @@ CLASS lcl_gui_page_super IMPLEMENTATION. _add '.dropdown:hover .dropdown_content { display: block; }'. _add '.dropdown:hover .dropbtn { color: #79a0d2; }'. + " REPOSITORY _add '/* REPOSITORY */'. _add 'div.repo {'. _add ' margin-top: 3px;'. diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap index a551e5a1d..1e61a07ad 100644 --- a/src/zabapgit_page_main.prog.abap +++ b/src/zabapgit_page_main.prog.abap @@ -293,7 +293,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. CREATE OBJECT ro_html. ro_html->add( |
| ). - ro_html->add( render_repo_top( io_repo ) ). + ro_html->add( render_repo_top( io_repo = io_repo iv_interactive_branch = abap_true ) ). TRY. extract_repo_content( EXPORTING io_repo = io_repo diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index 929602f06..b8d84d42b 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -297,6 +297,7 @@ CLASS lcl_popups IMPLEMENTATION. lv_icon_br TYPE icon-name, lt_fields TYPE TABLE OF sval, lv_pattr TYPE spo_fattr, + lv_battr TYPE spo_fattr, lv_button2 TYPE svalbutton-buttontext, lv_icon2 TYPE icon-name. @@ -305,15 +306,17 @@ CLASS lcl_popups IMPLEMENTATION. IF NOT iv_package IS INITIAL. lv_pattr = '05'. + lv_battr = '03'. ELSE. + lv_battr = '05'. lv_button2 = 'Create package' ##NO_TEXT. lv_icon2 = icon_msg. ENDIF. * TAB FLD LABEL DEF ATTR - _add_dialog_fld 'ABAPTXT255' 'LINE' 'Git Clone Url' iv_url ''. + _add_dialog_fld 'ABAPTXT255' 'LINE' 'Git Clone Url' iv_url lv_pattr. _add_dialog_fld 'TDEVC' 'DEVCLASS' 'Target Package' iv_package lv_pattr. - _add_dialog_fld 'TEXTL' 'LINE' 'Branch' iv_branch '05'. + _add_dialog_fld 'TEXTL' 'LINE' 'Branch' iv_branch lv_battr. lv_icon_ok = icon_okay. lv_icon_br = icon_workflow_fork. From e933fed543fb06c076382ca7db797f4596321d4d Mon Sep 17 00:00:00 2001 From: atsy Date: Sun, 4 Sep 2016 20:11:22 +0300 Subject: [PATCH 07/11] #311 fix constants and types --- src/zabapgit_forms.prog.abap | 2 +- src/zabapgit_git.prog.abap | 48 ++++++++++----------- src/zabapgit_page.prog.abap | 4 +- src/zabapgit_page_branch_overview.prog.abap | 6 +-- src/zabapgit_page_merge.prog.abap | 6 +-- src/zabapgit_popups.prog.abap | 4 +- 6 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/zabapgit_forms.prog.abap b/src/zabapgit_forms.prog.abap index b20ebabb8..cd8359a13 100644 --- a/src/zabapgit_forms.prog.abap +++ b/src/zabapgit_forms.prog.abap @@ -54,7 +54,7 @@ FORM branch_popup TABLES tt_fields TYPE ty_sval_tt DATA: lv_url TYPE string, lx_error TYPE REF TO lcx_exception, ls_package_data TYPE scompkdtln, - ls_branch TYPE ty_git_branch. + ls_branch TYPE lcl_git_branch_list=>ty_git_branch. FIELD-SYMBOLS: LIKE LINE OF tt_fields, LIKE LINE OF tt_fields. diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap index 030b10d8c..4162bc0ff 100644 --- a/src/zabapgit_git.prog.abap +++ b/src/zabapgit_git.prog.abap @@ -4,18 +4,6 @@ CLASS ltcl_git_pack DEFINITION DEFERRED. - -" TODO: move types to global definitions when code is stable -TYPES: ty_git_branch_type TYPE char2. -TYPES: BEGIN OF ty_git_branch, - sha1 TYPE ty_sha1, - name TYPE string, - type TYPE ty_git_branch_type, - is_head TYPE abap_bool, - display_name TYPE string, - END OF ty_git_branch. -TYPES: ty_git_branch_list_tt TYPE STANDARD TABLE OF ty_git_branch WITH DEFAULT KEY. - *----------------------------------------------------------------------* * CLASS lcl_git_utils *----------------------------------------------------------------------* @@ -110,9 +98,21 @@ ENDCLASS. "lcl_git_utils *----------------------------------------------------------------------* CLASS lcl_git_branch_list DEFINITION FINAL CREATE PRIVATE. PUBLIC SECTION. - CONSTANTS TYPE_BRANCH TYPE ty_git_branch_type VALUE 'HD'. - CONSTANTS TYPE_TAG TYPE ty_git_branch_type VALUE 'TG'. - CONSTANTS TYPE_OTHER TYPE ty_git_branch_type VALUE 'ZZ'. + TYPES: ty_git_branch_type TYPE char2. + TYPES: BEGIN OF ty_git_branch, + sha1 TYPE ty_sha1, + name TYPE string, + type TYPE ty_git_branch_type, + is_head TYPE abap_bool, + display_name TYPE string, + END OF ty_git_branch. + TYPES: ty_git_branch_list_tt TYPE STANDARD TABLE OF ty_git_branch WITH DEFAULT KEY. + + CONSTANTS: BEGIN OF c_type, + branch TYPE ty_git_branch_type VALUE 'HD', + 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'. DATA mt_branches TYPE ty_git_branch_list_tt READ-ONLY. @@ -181,7 +181,7 @@ CLASS lcl_git_transport DEFINITION FINAL. CLASS-METHODS upload_pack IMPORTING io_repo TYPE REF TO lcl_repo_online iv_deepen TYPE abap_bool DEFAULT abap_true - it_branches TYPE ty_git_branch_list_tt OPTIONAL + it_branches TYPE lcl_git_branch_list=>ty_git_branch_list_tt OPTIONAL EXPORTING et_objects TYPE ty_objects_tt ev_branch TYPE ty_sha1 RAISING lcx_exception. @@ -675,7 +675,7 @@ CLASS lcl_git_transport IMPLEMENTATION. lv_xstring TYPE xstring, lv_line TYPE string, lv_pack TYPE xstring, - lt_branches TYPE ty_git_branch_list_tt, + lt_branches TYPE lcl_git_branch_list=>ty_git_branch_list_tt, lv_capa TYPE string. FIELD-SYMBOLS: LIKE LINE OF lt_branches. @@ -871,15 +871,15 @@ CLASS lcl_git_branch_list IMPLEMENTATION. ENDMETHOD. "get_display_name METHOD get_type. - rv_type = TYPE_OTHER. + rv_type = c_type-other. IF iv_branch_name CP 'refs/heads/*' OR iv_branch_name = HEAD_NAME. - rv_type = TYPE_BRANCH. + rv_type = c_type-branch. RETURN. ENDIF. IF iv_branch_name CP 'refs/tags/*'. - rv_type = TYPE_TAG. + rv_type = c_type-tag. RETURN. ENDIF. @@ -897,7 +897,7 @@ CLASS lcl_git_branch_list IMPLEMENTATION. FIELD-SYMBOLS LIKE LINE OF mt_branches. LOOP AT mt_branches ASSIGNING . - IF -type = TYPE_BRANCH. + IF -type = c_type-branch. APPEND TO rt_branches. ENDIF. ENDLOOP. @@ -907,7 +907,7 @@ CLASS lcl_git_branch_list IMPLEMENTATION. FIELD-SYMBOLS LIKE LINE OF mt_branches. LOOP AT mt_branches ASSIGNING . - IF -type = TYPE_TAG. + IF -type = c_type-tag. APPEND TO rt_branches. ENDIF. ENDLOOP. @@ -1627,7 +1627,7 @@ CLASS lcl_git_porcelain DEFINITION FINAL FRIENDS ltcl_git_porcelain. CLASS-METHODS delete_branch IMPORTING io_repo TYPE REF TO lcl_repo_online - is_branch TYPE ty_git_branch + is_branch TYPE lcl_git_branch_list=>ty_git_branch RAISING lcx_exception. CLASS-METHODS full_tree @@ -1816,7 +1816,7 @@ CLASS lcl_git_porcelain IMPLEMENTATION. lv_sha1 TYPE ty_sha1, lt_trees TYPE ty_trees_tt, lt_objects TYPE ty_objects_tt, - lt_branches TYPE ty_git_branch_list_tt, + lt_branches TYPE lcl_git_branch_list=>ty_git_branch_list_tt, lt_stage TYPE lcl_stage=>ty_stage_tt. FIELD-SYMBOLS: LIKE LINE OF lt_stage, diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index 6681bc001..cc6616f6b 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -127,8 +127,8 @@ CLASS lcl_gui_page_super IMPLEMENTATION. lv_text = lcl_git_branch_list=>get_display_name( iv_branch ). CASE lcl_git_branch_list=>get_type( iv_branch ). "TODO - WHEN lcl_git_branch_list=>TYPE_BRANCH. - WHEN lcl_git_branch_list=>TYPE_TAG. + WHEN lcl_git_branch_list=>c_type-branch. + WHEN lcl_git_branch_list=>c_type-tag. WHEN OTHERS. ENDCASE. diff --git a/src/zabapgit_page_branch_overview.prog.abap b/src/zabapgit_page_branch_overview.prog.abap index 2bb00cef5..bd6bfd4a9 100644 --- a/src/zabapgit_page_branch_overview.prog.abap +++ b/src/zabapgit_page_branch_overview.prog.abap @@ -37,7 +37,7 @@ CLASS lcl_branch_overview DEFINITION FINAL. RAISING lcx_exception. CLASS-METHODS: get_branches - RETURNING VALUE(rt_branches) TYPE ty_git_branch_list_tt. + RETURNING VALUE(rt_branches) TYPE lcl_git_branch_list=>ty_git_branch_list_tt. PRIVATE SECTION. @@ -57,7 +57,7 @@ CLASS lcl_branch_overview DEFINITION FINAL. RAISING lcx_exception. CLASS-DATA: - gt_branches TYPE ty_git_branch_list_tt, + gt_branches TYPE lcl_git_branch_list=>ty_git_branch_list_tt, gt_commits TYPE TABLE OF ty_commit. ENDCLASS. @@ -376,7 +376,7 @@ CLASS lcl_gui_page_branch_overview IMPLEMENTATION. METHOD form_select. DATA: lv_name TYPE string, - lt_branches TYPE ty_git_branch_list_tt. + lt_branches TYPE lcl_git_branch_list=>ty_git_branch_list_tt. FIELD-SYMBOLS: LIKE LINE OF lt_branches. diff --git a/src/zabapgit_page_merge.prog.abap b/src/zabapgit_page_merge.prog.abap index 8d447a6bb..df5f4c004 100644 --- a/src/zabapgit_page_merge.prog.abap +++ b/src/zabapgit_page_merge.prog.abap @@ -14,8 +14,8 @@ CLASS lcl_merge DEFINITION FINAL. TYPES: BEGIN OF ty_merge, repo TYPE REF TO lcl_repo_online, - source TYPE ty_git_branch, - target TYPE ty_git_branch, + source TYPE lcl_git_branch_list=>ty_git_branch, + target TYPE lcl_git_branch_list=>ty_git_branch, common TYPE ty_ancestor, stree TYPE lcl_git_porcelain=>ty_expanded_tt, ttree TYPE lcl_git_porcelain=>ty_expanded_tt, @@ -295,7 +295,7 @@ CLASS lcl_merge IMPLEMENTATION. METHOD fetch_git. DATA: lo_branch_list TYPE REF TO lcl_git_branch_list, - lt_upload TYPE ty_git_branch_list_tt. + lt_upload TYPE lcl_git_branch_list=>ty_git_branch_list_tt. lo_branch_list = lcl_git_transport=>branches( gs_merge-repo->get_url( ) ). gs_merge-source = lo_branch_list->find_by_name( lcl_git_branch_list=>complete_heads_branch_name( iv_source ) ). diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index b8d84d42b..3743dc85a 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -31,7 +31,7 @@ CLASS lcl_popups DEFINITION. RAISING lcx_exception, branch_list_popup IMPORTING iv_url TYPE string - RETURNING VALUE(rs_branch) TYPE ty_git_branch + RETURNING VALUE(rs_branch) TYPE lcl_git_branch_list=>ty_git_branch RAISING lcx_exception, repo_popup IMPORTING iv_url TYPE string @@ -194,7 +194,7 @@ CLASS lcl_popups IMPLEMENTATION. METHOD delete_branch. DATA: lo_repo TYPE REF TO lcl_repo_online, - ls_branch TYPE ty_git_branch. + ls_branch TYPE lcl_git_branch_list=>ty_git_branch. lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). From d0c4d416810f8e82f6c1db41e65a70cbf25170b6 Mon Sep 17 00:00:00 2001 From: atsy Date: Sun, 4 Sep 2016 20:27:28 +0300 Subject: [PATCH 08/11] #311 private variables, constructor --- src/zabapgit_git.prog.abap | 26 ++++++++++++++------------ src/zabapgit_popups.prog.abap | 12 ++++++++++-- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap index 4162bc0ff..da7e2ebda 100644 --- a/src/zabapgit_git.prog.abap +++ b/src/zabapgit_git.prog.abap @@ -96,7 +96,7 @@ ENDCLASS. "lcl_git_utils *----------------------------------------------------------------------* * CLASS lcl_git_branch_list DEFINITION *----------------------------------------------------------------------* -CLASS lcl_git_branch_list DEFINITION FINAL CREATE PRIVATE. +CLASS lcl_git_branch_list DEFINITION FINAL. PUBLIC SECTION. TYPES: ty_git_branch_type TYPE char2. TYPES: BEGIN OF ty_git_branch, @@ -115,12 +115,8 @@ CLASS lcl_git_branch_list DEFINITION FINAL CREATE PRIVATE. END OF c_type. CONSTANTS HEAD_NAME TYPE string VALUE 'HEAD'. - DATA mt_branches TYPE ty_git_branch_list_tt READ-ONLY. - DATA mv_head_symref TYPE string READ-ONLY. - - CLASS-METHODS create + METHODS constructor IMPORTING iv_data TYPE string - RETURNING VALUE(ro_list) TYPE REF TO lcl_git_branch_list RAISING lcx_exception. METHODS find_by_name @@ -157,6 +153,9 @@ CLASS lcl_git_branch_list DEFINITION FINAL CREATE PRIVATE. RETURNING VALUE(rv_name) TYPE string. PRIVATE SECTION. + DATA mt_branches TYPE ty_git_branch_list_tt. + DATA mv_head_symref TYPE string. + CLASS-METHODS parse_branch_list IMPORTING iv_data TYPE string EXPORTING et_list TYPE ty_git_branch_list_tt @@ -537,7 +536,7 @@ CLASS lcl_git_transport IMPLEMENTATION. ii_client = ei_client ). lv_data = ei_client->response->get_cdata( ). - eo_branch_list = lcl_git_branch_list=>create( lv_data ). + create object eo_branch_list exporting iv_data = lv_data. ENDMETHOD. "branch_list @@ -748,12 +747,11 @@ ENDCLASS. "lcl_transport IMPLEMENTATION *----------------------------------------------------------------------* CLASS lcl_git_branch_list IMPLEMENTATION. - METHOD create. - CREATE OBJECT ro_list. + METHOD constructor. parse_branch_list( EXPORTING iv_data = iv_data - IMPORTING et_list = ro_list->mt_branches - ev_head_symref = ro_list->mv_head_symref ). + IMPORTING et_list = me->mt_branches + ev_head_symref = me->mv_head_symref ). ENDMETHOD. "create METHOD find_by_name. @@ -772,7 +770,11 @@ CLASS lcl_git_branch_list IMPLEMENTATION. METHOD get_head. - rs_branch = find_by_name( HEAD_NAME ). + IF mv_head_symref IS NOT INITIAL. + rs_branch = find_by_name( mv_head_symref ). + ELSE. + rs_branch = find_by_name( HEAD_NAME ). + ENDIF. ENDMETHOD. "get_head diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index 3743dc85a..2a76a08f1 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -221,20 +221,28 @@ 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, lt_selection TYPE TABLE OF spopli. FIELD-SYMBOLS: LIKE LINE OF lt_selection, - LIKE LINE OF lcl_git_branch_list=>mt_branches. + LIKE LINE OF lt_branches. lo_branches = lcl_git_transport=>branches( iv_url ). - LOOP AT lo_branches->mt_branches ASSIGNING . + lt_branches = lo_branches->get_branches_only( ). + LOOP AT lt_branches ASSIGNING . APPEND INITIAL LINE TO lt_selection ASSIGNING . -varoption = -name. ENDLOOP. +* lt_branches = lo_branches->get_tags_only( ). +* LOOP AT lt_branches ASSIGNING . +* APPEND INITIAL LINE TO lt_selection ASSIGNING . +* -varoption = -name. +* ENDLOOP. + CALL FUNCTION 'POPUP_TO_DECIDE_LIST' EXPORTING textline1 = 'Select branch' From 3aa36598ca698d6eb3e80be28f027d806651e208 Mon Sep 17 00:00:00 2001 From: atsy Date: Sun, 4 Sep 2016 21:00:54 +0300 Subject: [PATCH 09/11] #311 pre branches in repo --- src/zabapgit.prog.abap | 2 +- src/zabapgit_repo.prog.abap | 3 +++ src/zabapgit_repo_impl.prog.abap | 6 ++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 077873785..6398d283f 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -56,6 +56,7 @@ CLASS lcl_repo_online DEFINITION DEFERRED. INCLUDE zabapgit_stage. INCLUDE zabapgit_repo. +INCLUDE zabapgit_git. INCLUDE zabapgit_stage_logic. INCLUDE zabapgit_objects. INCLUDE zabapgit_tadir. @@ -103,7 +104,6 @@ INCLUDE zabapgit_object_wdyn. INCLUDE zabapgit_object_webi. INCLUDE zabapgit_object_xslt. -INCLUDE zabapgit_git. INCLUDE zabapgit_repo_impl. INCLUDE zabapgit_background. INCLUDE zabapgit_zip. diff --git a/src/zabapgit_repo.prog.abap b/src/zabapgit_repo.prog.abap index ad7ba6612..b2736e78b 100644 --- a/src/zabapgit_repo.prog.abap +++ b/src/zabapgit_repo.prog.abap @@ -80,6 +80,8 @@ 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, +* get_branches +* RETURNING VALUE(ro_branches) TYPE REF TO lcl_git_branch_list, set_url IMPORTING iv_url TYPE lcl_persistence_repo=>ty_repo-url RAISING lcx_exception, @@ -110,6 +112,7 @@ CLASS lcl_repo_online DEFINITION INHERITING FROM lcl_repo FINAL. mt_objects TYPE ty_objects_tt, mv_branch TYPE ty_sha1, mv_initialized TYPE abap_bool. +* mo_branches TYPE lcl_git_branch_list. METHODS: handle_stage_ignore diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 6ac4788ff..7864e6c01 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -73,6 +73,8 @@ CLASS lcl_repo_online IMPLEMENTATION. et_objects = mt_objects ev_branch = mv_branch ). +* mo_branches = lcl_git_transport=>branches( get_url( ) ). + find_dot_abapgit( ). mv_initialized = abap_true. @@ -105,6 +107,10 @@ CLASS lcl_repo_online IMPLEMENTATION. rv_name = ms_data-branch_name. ENDMETHOD. "get_branch_name +* METHOD get_branches. +* ro_bracnhes = mo_branches. +* ENDMETHOD. "get_branches + METHOD set_url. mv_initialized = abap_false. From adea9cbb69e48cbeee75735271341616d6271d34 Mon Sep 17 00:00:00 2001 From: atsy Date: Sun, 4 Sep 2016 21:03:31 +0300 Subject: [PATCH 10/11] #311 split git includes --- src/zabapgit.prog.abap | 1 + src/zabapgit_git.prog.abap | 341 ---------------------------- src/zabapgit_git_helpers.prog.abap | 342 +++++++++++++++++++++++++++++ src/zabapgit_git_helpers.prog.xml | 48 ++++ 4 files changed, 391 insertions(+), 341 deletions(-) create mode 100644 src/zabapgit_git_helpers.prog.abap create mode 100644 src/zabapgit_git_helpers.prog.xml diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 6398d283f..12ea0bb1c 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -55,6 +55,7 @@ INCLUDE zabapgit_sap_package. CLASS lcl_repo_online DEFINITION DEFERRED. INCLUDE zabapgit_stage. +INCLUDE zabapgit_git_helpers. INCLUDE zabapgit_repo. INCLUDE zabapgit_git. INCLUDE zabapgit_stage_logic. diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap index da7e2ebda..0c35bf7a4 100644 --- a/src/zabapgit_git.prog.abap +++ b/src/zabapgit_git.prog.abap @@ -4,171 +4,6 @@ CLASS ltcl_git_pack DEFINITION DEFERRED. -*----------------------------------------------------------------------* -* CLASS lcl_git_utils -*----------------------------------------------------------------------* -CLASS lcl_git_utils DEFINITION FINAL. " > Maybe better move to lcl_git_pack ?? - PUBLIC SECTION. - - CLASS-METHODS get_null - RETURNING VALUE(rv_c) TYPE char1. - - CLASS-METHODS pkt_string - IMPORTING iv_string TYPE string - RETURNING VALUE(rv_pkt) TYPE string - RAISING lcx_exception. - - CLASS-METHODS length_utf8_hex - IMPORTING iv_data TYPE xstring - RETURNING VALUE(rv_len) TYPE i - RAISING lcx_exception. - -ENDCLASS. "lcl_git_utils - -CLASS lcl_git_utils IMPLEMENTATION. - - METHOD get_null. - - DATA: lv_x(4) TYPE x VALUE '00000000', - lv_z(2) TYPE c. - - FIELD-SYMBOLS TYPE c. - - - ASSIGN lv_x TO CASTING. - lv_z = . - rv_c = lv_z(1). - - ENDMETHOD. "get_null - - METHOD length_utf8_hex. - - DATA: lv_xstring TYPE xstring, - lv_string TYPE string, - lv_char4 TYPE c LENGTH 4, - lv_x TYPE x LENGTH 2, - lo_obj TYPE REF TO cl_abap_conv_in_ce, - lv_len TYPE int4. - -* hmm, can this be done easier? - - lv_xstring = iv_data(4). - - lo_obj = cl_abap_conv_in_ce=>create( - input = lv_xstring - encoding = 'UTF-8' ). - lv_len = xstrlen( lv_xstring ). - - TRY. - lo_obj->read( EXPORTING n = lv_len - IMPORTING data = lv_string ). - CATCH cx_sy_conversion_codepage. - lcx_exception=>raise( 'error converting to hex, LENGTH_UTF8_HEX' ). - ENDTRY. - - lv_char4 = lv_string. - TRANSLATE lv_char4 TO UPPER CASE. - lv_x = lv_char4. - rv_len = lv_x. - - ENDMETHOD. "length_utf8_hex - - METHOD pkt_string. - - DATA: lv_x TYPE x, - lv_len TYPE i. - - - lv_len = strlen( iv_string ). - - IF lv_len >= 255. - lcx_exception=>raise( 'PKT, todo' ). - ENDIF. - - lv_x = lv_len + 4. - - rv_pkt = rv_pkt && '00' && lv_x && iv_string. - - ENDMETHOD. "pkt_string - -ENDCLASS. "lcl_git_utils - -*----------------------------------------------------------------------* -* CLASS lcl_git_branch_list DEFINITION -*----------------------------------------------------------------------* -CLASS lcl_git_branch_list DEFINITION FINAL. - PUBLIC SECTION. - TYPES: ty_git_branch_type TYPE char2. - TYPES: BEGIN OF ty_git_branch, - sha1 TYPE ty_sha1, - name TYPE string, - type TYPE ty_git_branch_type, - is_head TYPE abap_bool, - display_name TYPE string, - END OF ty_git_branch. - TYPES: ty_git_branch_list_tt TYPE STANDARD TABLE OF ty_git_branch WITH DEFAULT KEY. - - CONSTANTS: BEGIN OF c_type, - branch TYPE ty_git_branch_type VALUE 'HD', - 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'. - - METHODS constructor - IMPORTING iv_data TYPE string - RAISING lcx_exception. - - METHODS find_by_name - IMPORTING iv_branch_name TYPE clike - RETURNING VALUE(rs_branch) TYPE ty_git_branch - RAISING lcx_exception. - - METHODS get_head " For potential future use - RETURNING VALUE(rs_branch) TYPE ty_git_branch - RAISING lcx_exception. - - METHODS get_branches_only - RETURNING VALUE(rt_branches) TYPE ty_git_branch_list_tt - RAISING lcx_exception. - - METHODS get_tags_only " For potential future use - RETURNING VALUE(rt_branches) TYPE ty_git_branch_list_tt - RAISING lcx_exception. - - CLASS-METHODS is_ignored - IMPORTING iv_branch_name TYPE clike - RETURNING VALUE(rv_ignore) TYPE abap_bool. - - CLASS-METHODS get_display_name - IMPORTING iv_branch_name TYPE clike - RETURNING VALUE(rv_display_name) TYPE string. - - CLASS-METHODS get_type - IMPORTING iv_branch_name TYPE clike - RETURNING VALUE(rv_type) TYPE ty_git_branch_type. - - CLASS-METHODS complete_heads_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. - - CLASS-METHODS parse_branch_list - IMPORTING iv_data TYPE string - EXPORTING et_list TYPE ty_git_branch_list_tt - ev_head_symref TYPE string - RAISING lcx_exception. - - CLASS-METHODS parse_head_params - IMPORTING iv_data TYPE string - EXPORTING ev_head_symref TYPE string. - -ENDCLASS. "lcl_git_branch_list - - *----------------------------------------------------------------------* * CLASS lcl_transport DEFINITION *----------------------------------------------------------------------* @@ -742,182 +577,6 @@ CLASS lcl_git_transport IMPLEMENTATION. ENDCLASS. "lcl_transport IMPLEMENTATION -*----------------------------------------------------------------------* -* CLASS lcl_git_branch_list IMPLEMENTATION -*----------------------------------------------------------------------* -CLASS lcl_git_branch_list IMPLEMENTATION. - - METHOD constructor. - parse_branch_list( - EXPORTING iv_data = iv_data - IMPORTING et_list = me->mt_branches - ev_head_symref = me->mv_head_symref ). - ENDMETHOD. "create - - METHOD find_by_name. - - IF iv_branch_name IS INITIAL. - lcx_exception=>raise( 'Branch name empty' ). - ENDIF. - - READ TABLE mt_branches INTO rs_branch - WITH KEY name = iv_branch_name. - IF sy-subrc <> 0. - lcx_exception=>raise( 'Branch not found' ). - ENDIF. - - ENDMETHOD. "find_by_name - - METHOD get_head. - - IF mv_head_symref IS NOT INITIAL. - rs_branch = find_by_name( mv_head_symref ). - ELSE. - rs_branch = find_by_name( HEAD_NAME ). - ENDIF. - - ENDMETHOD. "get_head - - METHOD parse_branch_list. - - DATA: lt_result TYPE TABLE OF string, - lv_hash TYPE ty_sha1, - lv_name TYPE string, - lv_head_params TYPE string, - lv_char TYPE c, - lv_data LIKE LINE OF lt_result. - - FIELD-SYMBOLS: LIKE LINE OF et_list. - - CLEAR: et_list, ev_head_symref. - - SPLIT iv_data AT gc_newline INTO TABLE lt_result. - - LOOP AT lt_result INTO lv_data. - IF sy-tabix = 1. - CONTINUE. " current loop - ELSEIF sy-tabix = 2 AND strlen( lv_data ) > 49. - lv_hash = lv_data+8. - lv_name = lv_data+49. - lv_char = lcl_git_utils=>get_null( ). - - SPLIT lv_name AT lv_char INTO lv_name lv_head_params. - parse_head_params( - EXPORTING iv_data = lv_head_params - IMPORTING ev_head_symref = ev_head_symref ). - ELSEIF sy-tabix > 2 AND strlen( lv_data ) > 45. - lv_hash = lv_data+4. - lv_name = lv_data+45. - ELSEIF sy-tabix = 2 AND strlen( lv_data ) = 8 AND lv_data(8) = '00000000'. - lcx_exception=>raise( 'No branches, create branch manually by adding file' ). - ELSE. - CONTINUE. - ENDIF. - - CHECK is_ignored( lv_name ) = abap_false. - ASSERT lv_name IS NOT INITIAL. - - APPEND INITIAL LINE TO et_list ASSIGNING . - -sha1 = lv_hash. - -name = lv_name. - -display_name = get_display_name( lv_name ). - -type = get_type( lv_name ). - IF -name = HEAD_NAME OR -name = ev_head_symref. - -is_head = abap_true. - ENDIF. - ENDLOOP. - - ENDMETHOD. "parse_branch_list - - METHOD parse_head_params. - - DATA: ls_match TYPE match_result, - ls_submatch TYPE submatch_result. - - FIND FIRST OCCURRENCE OF REGEX '\ssymref=HEAD:([^\s]+)' IN iv_data RESULTS ls_match. - READ TABLE ls_match-submatches INTO ls_submatch INDEX 1. - IF sy-subrc IS INITIAL. - ev_head_symref = iv_data+ls_submatch-offset(ls_submatch-length). - ENDIF. - - ENDMETHOD. "parse_head_params - - METHOD is_ignored. - - IF iv_branch_name EQ 'refs/heads/gh-pages'. " Github pages - rv_ignore = abap_true. - 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/*'. - rv_ignore = abap_true. - ENDIF. - - ENDMETHOD. "is_ignored - - METHOD get_display_name. - rv_display_name = iv_branch_name. - - IF rv_display_name CP 'refs/heads/*'. - REPLACE FIRST OCCURRENCE OF 'refs/heads/' IN rv_display_name WITH ''. - RETURN. - ENDIF. - - IF rv_display_name CP 'refs/tags/*'. - REPLACE FIRST OCCURRENCE OF 'refs/' IN rv_display_name WITH ''. - RETURN. - ENDIF. - - ENDMETHOD. "get_display_name - - METHOD get_type. - rv_type = c_type-other. - - IF iv_branch_name CP 'refs/heads/*' OR iv_branch_name = HEAD_NAME. - rv_type = c_type-branch. - RETURN. - ENDIF. - - IF iv_branch_name CP 'refs/tags/*'. - rv_type = c_type-tag. - RETURN. - ENDIF. - - ENDMETHOD. "get_type - - METHOD complete_heads_branch_name. - IF iv_branch_name CP 'refs/heads/*'. - rv_name = iv_branch_name. - ELSE. - rv_name = 'refs/heads/' && iv_branch_name. - ENDIF. - ENDMETHOD. "complete_heads_branch_name - - METHOD get_branches_only. - FIELD-SYMBOLS LIKE LINE OF mt_branches. - - LOOP AT mt_branches ASSIGNING . - IF -type = c_type-branch. - APPEND TO rt_branches. - ENDIF. - ENDLOOP. - ENDMETHOD. "get_branches_only - - METHOD get_tags_only. - FIELD-SYMBOLS LIKE LINE OF mt_branches. - - LOOP AT mt_branches ASSIGNING . - IF -type = c_type-tag. - APPEND TO rt_branches. - ENDIF. - ENDLOOP. - ENDMETHOD. "get_tags_only - -ENDCLASS. "lcl_git_branch_list - - *----------------------------------------------------------------------* * CLASS lcl_git_pack IMPLEMENTATION *----------------------------------------------------------------------* diff --git a/src/zabapgit_git_helpers.prog.abap b/src/zabapgit_git_helpers.prog.abap new file mode 100644 index 000000000..15e26ff14 --- /dev/null +++ b/src/zabapgit_git_helpers.prog.abap @@ -0,0 +1,342 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_GIT_HELPERS +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_git_utils +*----------------------------------------------------------------------* +CLASS lcl_git_utils DEFINITION FINAL. " > Maybe better move to lcl_git_pack ?? + PUBLIC SECTION. + + CLASS-METHODS get_null + RETURNING VALUE(rv_c) TYPE char1. + + CLASS-METHODS pkt_string + IMPORTING iv_string TYPE string + RETURNING VALUE(rv_pkt) TYPE string + RAISING lcx_exception. + + CLASS-METHODS length_utf8_hex + IMPORTING iv_data TYPE xstring + RETURNING VALUE(rv_len) TYPE i + RAISING lcx_exception. + +ENDCLASS. "lcl_git_utils + +CLASS lcl_git_utils IMPLEMENTATION. + + METHOD get_null. + + DATA: lv_x(4) TYPE x VALUE '00000000', + lv_z(2) TYPE c. + + FIELD-SYMBOLS TYPE c. + + + ASSIGN lv_x TO CASTING. + lv_z = . + rv_c = lv_z(1). + + ENDMETHOD. "get_null + + METHOD length_utf8_hex. + + DATA: lv_xstring TYPE xstring, + lv_string TYPE string, + lv_char4 TYPE c LENGTH 4, + lv_x TYPE x LENGTH 2, + lo_obj TYPE REF TO cl_abap_conv_in_ce, + lv_len TYPE int4. + +* hmm, can this be done easier? + + lv_xstring = iv_data(4). + + lo_obj = cl_abap_conv_in_ce=>create( + input = lv_xstring + encoding = 'UTF-8' ). + lv_len = xstrlen( lv_xstring ). + + TRY. + lo_obj->read( EXPORTING n = lv_len + IMPORTING data = lv_string ). + CATCH cx_sy_conversion_codepage. + lcx_exception=>raise( 'error converting to hex, LENGTH_UTF8_HEX' ). + ENDTRY. + + lv_char4 = lv_string. + TRANSLATE lv_char4 TO UPPER CASE. + lv_x = lv_char4. + rv_len = lv_x. + + ENDMETHOD. "length_utf8_hex + + METHOD pkt_string. + + DATA: lv_x TYPE x, + lv_len TYPE i. + + + lv_len = strlen( iv_string ). + + IF lv_len >= 255. + lcx_exception=>raise( 'PKT, todo' ). + ENDIF. + + lv_x = lv_len + 4. + + rv_pkt = rv_pkt && '00' && lv_x && iv_string. + + ENDMETHOD. "pkt_string + +ENDCLASS. "lcl_git_utils + +*----------------------------------------------------------------------* +* CLASS lcl_git_branch_list DEFINITION +*----------------------------------------------------------------------* +CLASS lcl_git_branch_list DEFINITION FINAL. + PUBLIC SECTION. + TYPES: ty_git_branch_type TYPE char2. + TYPES: BEGIN OF ty_git_branch, + sha1 TYPE ty_sha1, + name TYPE string, + type TYPE ty_git_branch_type, + is_head TYPE abap_bool, + display_name TYPE string, + END OF ty_git_branch. + TYPES: ty_git_branch_list_tt TYPE STANDARD TABLE OF ty_git_branch WITH DEFAULT KEY. + + CONSTANTS: BEGIN OF c_type, + branch TYPE ty_git_branch_type VALUE 'HD', + 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'. + + METHODS constructor + IMPORTING iv_data TYPE string + RAISING lcx_exception. + + METHODS find_by_name + IMPORTING iv_branch_name TYPE clike + RETURNING VALUE(rs_branch) TYPE ty_git_branch + RAISING lcx_exception. + + METHODS get_head " For potential future use + RETURNING VALUE(rs_branch) TYPE ty_git_branch + RAISING lcx_exception. + + METHODS get_branches_only + RETURNING VALUE(rt_branches) TYPE ty_git_branch_list_tt + RAISING lcx_exception. + + METHODS get_tags_only " For potential future use + RETURNING VALUE(rt_branches) TYPE ty_git_branch_list_tt + RAISING lcx_exception. + + CLASS-METHODS is_ignored + IMPORTING iv_branch_name TYPE clike + RETURNING VALUE(rv_ignore) TYPE abap_bool. + + CLASS-METHODS get_display_name + IMPORTING iv_branch_name TYPE clike + RETURNING VALUE(rv_display_name) TYPE string. + + CLASS-METHODS get_type + IMPORTING iv_branch_name TYPE clike + RETURNING VALUE(rv_type) TYPE ty_git_branch_type. + + CLASS-METHODS complete_heads_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. + + CLASS-METHODS parse_branch_list + IMPORTING iv_data TYPE string + EXPORTING et_list TYPE ty_git_branch_list_tt + ev_head_symref TYPE string + RAISING lcx_exception. + + CLASS-METHODS parse_head_params + IMPORTING iv_data TYPE string + EXPORTING ev_head_symref TYPE string. + +ENDCLASS. "lcl_git_branch_list + +*----------------------------------------------------------------------* +* CLASS lcl_git_branch_list IMPLEMENTATION +*----------------------------------------------------------------------* +CLASS lcl_git_branch_list IMPLEMENTATION. + + METHOD constructor. + parse_branch_list( + EXPORTING iv_data = iv_data + IMPORTING et_list = me->mt_branches + ev_head_symref = me->mv_head_symref ). + ENDMETHOD. "create + + METHOD find_by_name. + + IF iv_branch_name IS INITIAL. + lcx_exception=>raise( 'Branch name empty' ). + ENDIF. + + READ TABLE mt_branches INTO rs_branch + WITH KEY name = iv_branch_name. + IF sy-subrc <> 0. + lcx_exception=>raise( 'Branch not found' ). + ENDIF. + + ENDMETHOD. "find_by_name + + METHOD get_head. + + IF mv_head_symref IS NOT INITIAL. + rs_branch = find_by_name( mv_head_symref ). + ELSE. + rs_branch = find_by_name( HEAD_NAME ). + ENDIF. + + ENDMETHOD. "get_head + + METHOD parse_branch_list. + + DATA: lt_result TYPE TABLE OF string, + lv_hash TYPE ty_sha1, + lv_name TYPE string, + lv_head_params TYPE string, + lv_char TYPE c, + lv_data LIKE LINE OF lt_result. + + FIELD-SYMBOLS: LIKE LINE OF et_list. + + CLEAR: et_list, ev_head_symref. + + SPLIT iv_data AT gc_newline INTO TABLE lt_result. + + LOOP AT lt_result INTO lv_data. + IF sy-tabix = 1. + CONTINUE. " current loop + ELSEIF sy-tabix = 2 AND strlen( lv_data ) > 49. + lv_hash = lv_data+8. + lv_name = lv_data+49. + lv_char = lcl_git_utils=>get_null( ). + + SPLIT lv_name AT lv_char INTO lv_name lv_head_params. + parse_head_params( + EXPORTING iv_data = lv_head_params + IMPORTING ev_head_symref = ev_head_symref ). + ELSEIF sy-tabix > 2 AND strlen( lv_data ) > 45. + lv_hash = lv_data+4. + lv_name = lv_data+45. + ELSEIF sy-tabix = 2 AND strlen( lv_data ) = 8 AND lv_data(8) = '00000000'. + lcx_exception=>raise( 'No branches, create branch manually by adding file' ). + ELSE. + CONTINUE. + ENDIF. + + CHECK is_ignored( lv_name ) = abap_false. + ASSERT lv_name IS NOT INITIAL. + + APPEND INITIAL LINE TO et_list ASSIGNING . + -sha1 = lv_hash. + -name = lv_name. + -display_name = get_display_name( lv_name ). + -type = get_type( lv_name ). + IF -name = HEAD_NAME OR -name = ev_head_symref. + -is_head = abap_true. + ENDIF. + ENDLOOP. + + ENDMETHOD. "parse_branch_list + + METHOD parse_head_params. + + DATA: ls_match TYPE match_result, + ls_submatch TYPE submatch_result. + + FIND FIRST OCCURRENCE OF REGEX '\ssymref=HEAD:([^\s]+)' IN iv_data RESULTS ls_match. + READ TABLE ls_match-submatches INTO ls_submatch INDEX 1. + IF sy-subrc IS INITIAL. + ev_head_symref = iv_data+ls_submatch-offset(ls_submatch-length). + ENDIF. + + ENDMETHOD. "parse_head_params + + METHOD is_ignored. + + IF iv_branch_name EQ 'refs/heads/gh-pages'. " Github pages + rv_ignore = abap_true. + 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/*'. + rv_ignore = abap_true. + ENDIF. + + ENDMETHOD. "is_ignored + + METHOD get_display_name. + rv_display_name = iv_branch_name. + + IF rv_display_name CP 'refs/heads/*'. + REPLACE FIRST OCCURRENCE OF 'refs/heads/' IN rv_display_name WITH ''. + RETURN. + ENDIF. + + IF rv_display_name CP 'refs/tags/*'. + REPLACE FIRST OCCURRENCE OF 'refs/' IN rv_display_name WITH ''. + RETURN. + ENDIF. + + ENDMETHOD. "get_display_name + + METHOD get_type. + rv_type = c_type-other. + + IF iv_branch_name CP 'refs/heads/*' OR iv_branch_name = HEAD_NAME. + rv_type = c_type-branch. + RETURN. + ENDIF. + + IF iv_branch_name CP 'refs/tags/*'. + rv_type = c_type-tag. + RETURN. + ENDIF. + + ENDMETHOD. "get_type + + METHOD complete_heads_branch_name. + IF iv_branch_name CP 'refs/heads/*'. + rv_name = iv_branch_name. + ELSE. + rv_name = 'refs/heads/' && iv_branch_name. + ENDIF. + ENDMETHOD. "complete_heads_branch_name + + METHOD get_branches_only. + FIELD-SYMBOLS LIKE LINE OF mt_branches. + + LOOP AT mt_branches ASSIGNING . + IF -type = c_type-branch. + APPEND TO rt_branches. + ENDIF. + ENDLOOP. + ENDMETHOD. "get_branches_only + + METHOD get_tags_only. + FIELD-SYMBOLS LIKE LINE OF mt_branches. + + LOOP AT mt_branches ASSIGNING . + IF -type = c_type-tag. + APPEND TO rt_branches. + ENDIF. + ENDLOOP. + ENDMETHOD. "get_tags_only + +ENDCLASS. "lcl_git_branch_list \ No newline at end of file diff --git a/src/zabapgit_git_helpers.prog.xml b/src/zabapgit_git_helpers.prog.xml new file mode 100644 index 000000000..486b646d6 --- /dev/null +++ b/src/zabapgit_git_helpers.prog.xml @@ -0,0 +1,48 @@ + + + + + + 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 + + + + + + From 4424433f6e130118a1edcda624e7c9d101f3dff2 Mon Sep 17 00:00:00 2001 From: atsy Date: Sun, 4 Sep 2016 21:05:55 +0300 Subject: [PATCH 11/11] #311 repo now has branches --- src/zabapgit_repo.prog.abap | 8 ++++---- src/zabapgit_repo_impl.prog.abap | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/zabapgit_repo.prog.abap b/src/zabapgit_repo.prog.abap index b2736e78b..94d0700e5 100644 --- a/src/zabapgit_repo.prog.abap +++ b/src/zabapgit_repo.prog.abap @@ -80,8 +80,8 @@ 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, -* get_branches -* RETURNING VALUE(ro_branches) TYPE REF TO lcl_git_branch_list, + get_branches + RETURNING VALUE(ro_branches) TYPE REF TO lcl_git_branch_list, set_url IMPORTING iv_url TYPE lcl_persistence_repo=>ty_repo-url RAISING lcx_exception, @@ -111,8 +111,8 @@ CLASS lcl_repo_online DEFINITION INHERITING FROM lcl_repo FINAL. DATA: mt_objects TYPE ty_objects_tt, mv_branch TYPE ty_sha1, - mv_initialized TYPE abap_bool. -* mo_branches TYPE lcl_git_branch_list. + mv_initialized TYPE abap_bool, + mo_branches TYPE REF TO lcl_git_branch_list. METHODS: handle_stage_ignore diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 7864e6c01..92e723fc4 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -73,7 +73,7 @@ CLASS lcl_repo_online IMPLEMENTATION. et_objects = mt_objects ev_branch = mv_branch ). -* mo_branches = lcl_git_transport=>branches( get_url( ) ). + mo_branches = lcl_git_transport=>branches( get_url( ) ). find_dot_abapgit( ). @@ -107,9 +107,9 @@ CLASS lcl_repo_online IMPLEMENTATION. rv_name = ms_data-branch_name. ENDMETHOD. "get_branch_name -* METHOD get_branches. -* ro_bracnhes = mo_branches. -* ENDMETHOD. "get_branches + METHOD get_branches. + ro_branches = mo_branches. + ENDMETHOD. "get_branches METHOD set_url.