From 41ffa356990f369d24a8da2711054a8e7f24a127 Mon Sep 17 00:00:00 2001 From: atsy Date: Sat, 3 Sep 2016 12:25:19 +0300 Subject: [PATCH] #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.