mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
receive pack fixed
This commit is contained in:
parent
9ee8c322b5
commit
47e9c9d091
78
zagit.abap
78
zagit.abap
|
@ -444,6 +444,7 @@ ENDCLASS. "lcl_hash IMPLEMENTATION
|
||||||
CLASS lcl_pack DEFINITION FINAL.
|
CLASS lcl_pack DEFINITION FINAL.
|
||||||
|
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
|
||||||
CLASS-METHODS decode IMPORTING iv_data TYPE xstring
|
CLASS-METHODS decode IMPORTING iv_data TYPE xstring
|
||||||
RETURNING value(rt_objects) TYPE tt_objects
|
RETURNING value(rt_objects) TYPE tt_objects
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
@ -467,10 +468,6 @@ CLASS lcl_pack DEFINITION FINAL.
|
||||||
RETURNING value(rt_latest) TYPE tt_latest
|
RETURNING value(rt_latest) TYPE tt_latest
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
* CLASS-METHODS latest_commit IMPORTING it_objects TYPE tt_objects
|
|
||||||
* RETURNING value(rs_object) TYPE st_object
|
|
||||||
* RAISING lcx_exception.
|
|
||||||
|
|
||||||
CLASS-METHODS latest_objects IMPORTING iv_branch TYPE t_sha1
|
CLASS-METHODS latest_objects IMPORTING iv_branch TYPE t_sha1
|
||||||
it_objects TYPE tt_objects
|
it_objects TYPE tt_objects
|
||||||
RETURNING value(rt_latest) TYPE tt_latest
|
RETURNING value(rt_latest) TYPE tt_latest
|
||||||
|
@ -485,8 +482,8 @@ CLASS lcl_pack DEFINITION FINAL.
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
CONSTANTS: c_debug_pack TYPE abap_bool VALUE abap_false,
|
CONSTANTS: c_pack_start TYPE x LENGTH 4 VALUE '5041434B', " PACK
|
||||||
c_pack_start TYPE x LENGTH 4 VALUE '5041434B', " PACK
|
c_debug_pack TYPE abap_bool VALUE abap_false,
|
||||||
c_zlib TYPE x LENGTH 2 VALUE '789C',
|
c_zlib TYPE x LENGTH 2 VALUE '789C',
|
||||||
c_zlib_hmm TYPE x LENGTH 2 VALUE '7801',
|
c_zlib_hmm TYPE x LENGTH 2 VALUE '7801',
|
||||||
c_version TYPE x LENGTH 4 VALUE '00000002'.
|
c_version TYPE x LENGTH 4 VALUE '00000002'.
|
||||||
|
@ -1331,7 +1328,7 @@ CLASS lcl_transport DEFINITION FINAL.
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
CONSTANTS: c_debug_http TYPE abap_bool VALUE abap_true,
|
CONSTANTS: c_debug_http TYPE abap_bool VALUE abap_false,
|
||||||
c_cap_list TYPE string VALUE 'side-band-64k no-progress',
|
c_cap_list TYPE string VALUE 'side-band-64k no-progress',
|
||||||
c_dot_git TYPE c LENGTH 4 VALUE '.git'.
|
c_dot_git TYPE c LENGTH 4 VALUE '.git'.
|
||||||
|
|
||||||
|
@ -1340,11 +1337,6 @@ CLASS lcl_transport DEFINITION FINAL.
|
||||||
RETURNING value(rv_pkt) TYPE string
|
RETURNING value(rv_pkt) TYPE string
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
CLASS-METHODS pkt_xstring
|
|
||||||
IMPORTING iv_xstring TYPE xstring
|
|
||||||
RETURNING value(rv_pkt) TYPE xstring
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
CLASS-METHODS parse
|
CLASS-METHODS parse
|
||||||
EXPORTING ev_pack TYPE xstring
|
EXPORTING ev_pack TYPE xstring
|
||||||
CHANGING cv_data TYPE xstring.
|
CHANGING cv_data TYPE xstring.
|
||||||
|
@ -1361,9 +1353,11 @@ CLASS lcl_transport DEFINITION FINAL.
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
CLASS-METHODS check_http_200
|
CLASS-METHODS check_http_200
|
||||||
IMPORTING if_client TYPE REF TO if_http_client
|
IMPORTING ii_client TYPE REF TO if_http_client
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS get_null RETURNING value(rv_c) TYPE char1.
|
||||||
|
|
||||||
ENDCLASS. "lcl_transport DEFINITION
|
ENDCLASS. "lcl_transport DEFINITION
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
|
@ -1373,27 +1367,26 @@ ENDCLASS. "lcl_transport DEFINITION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
CLASS lcl_transport IMPLEMENTATION.
|
CLASS lcl_transport IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD pkt_xstring.
|
METHOD get_null.
|
||||||
|
|
||||||
DATA: lv_x2 TYPE x LENGTH 2,
|
DATA lv_x(4) TYPE x VALUE '00000000'.
|
||||||
lv_xstring TYPE xstring,
|
DATA lv_z(2) TYPE c.
|
||||||
lv_string TYPE string.
|
|
||||||
|
FIELD-SYMBOLS <lv_y> TYPE c.
|
||||||
|
|
||||||
|
|
||||||
lv_x2 = xstrlen( iv_xstring ).
|
ASSIGN lv_x TO <lv_y> CASTING.
|
||||||
lv_string = lv_x2.
|
lv_z = <lv_y>.
|
||||||
lv_xstring = lcl_convert=>string_to_xstring_utf8( lv_string ).
|
rv_c = lv_z(1).
|
||||||
|
|
||||||
CONCATENATE lv_xstring iv_xstring INTO rv_pkt IN BYTE MODE.
|
ENDMETHOD. "get_null
|
||||||
|
|
||||||
ENDMETHOD. "pkt_xstring
|
|
||||||
|
|
||||||
METHOD check_http_200.
|
METHOD check_http_200.
|
||||||
|
|
||||||
DATA: lv_code TYPE i.
|
DATA: lv_code TYPE i.
|
||||||
|
|
||||||
|
|
||||||
if_client->response->get_status(
|
ii_client->response->get_status(
|
||||||
IMPORTING
|
IMPORTING
|
||||||
code = lv_code ).
|
code = lv_code ).
|
||||||
IF lv_code <> 200.
|
IF lv_code <> 200.
|
||||||
|
@ -1434,8 +1427,12 @@ CLASS lcl_transport IMPLEMENTATION.
|
||||||
SPLIT lv_data AT cl_abap_char_utilities=>newline INTO TABLE lt_result.
|
SPLIT lv_data AT cl_abap_char_utilities=>newline INTO TABLE lt_result.
|
||||||
LOOP AT lt_result INTO lv_data.
|
LOOP AT lt_result INTO lv_data.
|
||||||
IF lv_data CP '*refs/heads/master*'.
|
IF lv_data CP '*refs/heads/master*'.
|
||||||
|
IF sy-tabix = 2.
|
||||||
|
lv_hash = lv_data+8.
|
||||||
|
ELSE.
|
||||||
lv_hash = lv_data+4.
|
lv_hash = lv_data+4.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
TRANSLATE lv_hash TO UPPER CASE.
|
TRANSLATE lv_hash TO UPPER CASE.
|
||||||
|
@ -1454,11 +1451,9 @@ CLASS lcl_transport IMPLEMENTATION.
|
||||||
DATA: li_client TYPE REF TO if_http_client,
|
DATA: li_client TYPE REF TO if_http_client,
|
||||||
lv_cmd_pkt TYPE string,
|
lv_cmd_pkt TYPE string,
|
||||||
lv_line TYPE string,
|
lv_line TYPE string,
|
||||||
lv_x TYPE x,
|
|
||||||
lv_pack TYPE xstring,
|
|
||||||
lv_tmp TYPE xstring,
|
lv_tmp TYPE xstring,
|
||||||
lv_xstring TYPE xstring,
|
lv_xstring TYPE xstring,
|
||||||
lv_code TYPE i,
|
lv_string TYPE string,
|
||||||
lv_buffer TYPE string,
|
lv_buffer TYPE string,
|
||||||
lv_branch TYPE t_sha1,
|
lv_branch TYPE t_sha1,
|
||||||
lv_repo TYPE string.
|
lv_repo TYPE string.
|
||||||
|
@ -1491,43 +1486,36 @@ CLASS lcl_transport IMPLEMENTATION.
|
||||||
name = 'Content-Type'
|
name = 'Content-Type'
|
||||||
value = 'Content-Type: application/x-git-receive-pack-request' ). "#EC NOTEXT
|
value = 'Content-Type: application/x-git-receive-pack-request' ). "#EC NOTEXT
|
||||||
|
|
||||||
* todo, test report-status capability
|
|
||||||
|
|
||||||
lv_line = lv_branch &&
|
lv_line = lv_branch &&
|
||||||
` ` &&
|
` ` &&
|
||||||
iv_commit &&
|
iv_commit &&
|
||||||
` ` &&
|
` ` &&
|
||||||
'refs/heads/master' &&
|
'refs/heads/master' &&
|
||||||
* ` ` &&
|
get_null( ) &&
|
||||||
* c_cap_list &&
|
` ` &&
|
||||||
|
'report-status' &&
|
||||||
cl_abap_char_utilities=>newline. "#EC NOTEXT
|
cl_abap_char_utilities=>newline. "#EC NOTEXT
|
||||||
lv_cmd_pkt = pkt_string( lv_line ).
|
lv_cmd_pkt = pkt_string( lv_line ).
|
||||||
|
|
||||||
lv_buffer = lv_cmd_pkt
|
lv_buffer = lv_cmd_pkt && '0000'.
|
||||||
&& '0000'
|
|
||||||
&& cl_abap_char_utilities=>newline.
|
|
||||||
lv_tmp = lcl_convert=>string_to_xstring_utf8( lv_buffer ).
|
lv_tmp = lcl_convert=>string_to_xstring_utf8( lv_buffer ).
|
||||||
|
|
||||||
* lv_x = '01'.
|
|
||||||
* CONCATENATE lv_x iv_pack INTO lv_pack IN BYTE MODE. " band
|
|
||||||
* lv_xstring = pkt_xstring( lv_pack ).
|
|
||||||
break-point.
|
|
||||||
CONCATENATE lv_tmp iv_pack INTO lv_xstring IN BYTE MODE.
|
CONCATENATE lv_tmp iv_pack INTO lv_xstring IN BYTE MODE.
|
||||||
|
|
||||||
li_client->request->set_data( lv_xstring ).
|
li_client->request->set_data( lv_xstring ).
|
||||||
|
|
||||||
li_client->send( ).
|
li_client->send( ).
|
||||||
li_client->receive( ).
|
li_client->receive( ).
|
||||||
li_client->response->get_status(
|
check_http_200( li_client ).
|
||||||
IMPORTING
|
|
||||||
code = lv_code ).
|
|
||||||
|
|
||||||
lv_xstring = li_client->response->get_data( ).
|
lv_xstring = li_client->response->get_data( ).
|
||||||
li_client->close( ).
|
li_client->close( ).
|
||||||
|
|
||||||
* todo, try calling parse to check xstring
|
lv_string = lcl_convert=>xstring_to_string_utf8( lv_xstring ).
|
||||||
|
WRITE: / lv_string.
|
||||||
|
IF NOT lv_string CP '*unpack ok*'.
|
||||||
BREAK-POINT.
|
BREAK-POINT.
|
||||||
|
ENDIF.
|
||||||
* expect "000Aunpack ok"
|
|
||||||
|
|
||||||
ENDMETHOD. "receive_pack
|
ENDMETHOD. "receive_pack
|
||||||
|
|
||||||
|
@ -1789,7 +1777,7 @@ FORM receive USING ps_parent TYPE st_object
|
||||||
lv_time = lcl_time=>get( ).
|
lv_time = lcl_time=>get( ).
|
||||||
|
|
||||||
* blob
|
* blob
|
||||||
lv_blob = lcl_convert=>string_to_xstring_utf8( 'this is the readme' ). "#EC NOTEXT
|
lv_blob = lcl_convert=>string_to_xstring_utf8( 'it works, yes new' ). "#EC NOTEXT
|
||||||
|
|
||||||
* tree
|
* tree
|
||||||
CLEAR ls_node.
|
CLEAR ls_node.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user