diff --git a/src/git/zcl_abapgit_git_transport.clas.abap b/src/git/zcl_abapgit_git_transport.clas.abap new file mode 100644 index 000000000..107ee4016 --- /dev/null +++ b/src/git/zcl_abapgit_git_transport.clas.abap @@ -0,0 +1,283 @@ +CLASS zcl_abapgit_git_transport DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. +* remote to local + CLASS-METHODS upload_pack + IMPORTING iv_url TYPE string + iv_branch_name TYPE string + iv_deepen TYPE abap_bool DEFAULT abap_true + it_branches TYPE zcl_abapgit_git_branch_list=>ty_git_branch_list_tt OPTIONAL + EXPORTING et_objects TYPE zif_abapgit_definitions=>ty_objects_tt + ev_branch TYPE zif_abapgit_definitions=>ty_sha1 + RAISING zcx_abapgit_exception. + +* local to remote + CLASS-METHODS receive_pack + IMPORTING iv_url TYPE string + iv_old TYPE zif_abapgit_definitions=>ty_sha1 + iv_new TYPE zif_abapgit_definitions=>ty_sha1 + iv_branch_name TYPE string + iv_pack TYPE xstring + RAISING zcx_abapgit_exception. + + CLASS-METHODS branches + IMPORTING iv_url TYPE string + RETURNING VALUE(ro_branch_list) TYPE REF TO zcl_abapgit_git_branch_list + RAISING zcx_abapgit_exception. + + PRIVATE SECTION. + CONSTANTS: BEGIN OF c_service, + receive TYPE string VALUE 'receive', "#EC NOTEXT + upload TYPE string VALUE 'upload', "#EC NOTEXT + END OF c_service. + + CLASS-METHODS branch_list + IMPORTING iv_url TYPE string + iv_service TYPE string + EXPORTING eo_client TYPE REF TO zcl_abapgit_http_client + eo_branch_list TYPE REF TO zcl_abapgit_git_branch_list + RAISING zcx_abapgit_exception. + + CLASS-METHODS find_branch + IMPORTING iv_url TYPE string + iv_service TYPE string + iv_branch_name TYPE string + EXPORTING eo_client TYPE REF TO zcl_abapgit_http_client + ev_branch TYPE zif_abapgit_definitions=>ty_sha1 + RAISING zcx_abapgit_exception. + + CLASS-METHODS parse + EXPORTING ev_pack TYPE xstring + CHANGING cv_data TYPE xstring + RAISING zcx_abapgit_exception. + +ENDCLASS. + + + +CLASS ZCL_ABAPGIT_GIT_TRANSPORT IMPLEMENTATION. + + + METHOD branches. + + DATA: lo_client TYPE REF TO zcl_abapgit_http_client. + + + branch_list( + EXPORTING + iv_url = iv_url + iv_service = c_service-upload + IMPORTING + eo_client = lo_client + eo_branch_list = ro_branch_list ). + + lo_client->close( ). + + ENDMETHOD. "branches + + + METHOD branch_list. + + DATA: lv_data TYPE string. + + + eo_client = zcl_abapgit_http=>create_by_url( + iv_url = iv_url + iv_service = iv_service ). + + lv_data = eo_client->get_cdata( ). + + CREATE OBJECT eo_branch_list + EXPORTING + iv_data = lv_data. + + ENDMETHOD. "branch_list + + + METHOD find_branch. + + DATA: lo_branch_list TYPE REF TO zcl_abapgit_git_branch_list. + + branch_list( + EXPORTING + iv_url = iv_url + iv_service = iv_service + IMPORTING + eo_client = eo_client + eo_branch_list = lo_branch_list ). + + IF ev_branch IS SUPPLIED. + ev_branch = lo_branch_list->find_by_name( iv_branch_name )-sha1. + ENDIF. + + ENDMETHOD. "find_branch + + + METHOD parse. + + CONSTANTS: lc_band1 TYPE x VALUE '01'. + + DATA: lv_len TYPE i, + lv_contents TYPE xstring, + lv_pack TYPE xstring. + + + WHILE xstrlen( cv_data ) >= 4. + lv_len = zcl_abapgit_git_utils=>length_utf8_hex( cv_data ). + + IF lv_len > xstrlen( cv_data ). + zcx_abapgit_exception=>raise( 'parse, string length too large' ). + ENDIF. + + lv_contents = cv_data(lv_len). + IF lv_len = 0. + cv_data = cv_data+4. + CONTINUE. + ELSE. + cv_data = cv_data+lv_len. + ENDIF. + + lv_contents = lv_contents+4. + + IF xstrlen( lv_contents ) > 1 AND lv_contents(1) = lc_band1. + CONCATENATE lv_pack lv_contents+1 INTO lv_pack IN BYTE MODE. + ENDIF. + + ENDWHILE. + + ev_pack = lv_pack. + + ENDMETHOD. "parse + + + METHOD receive_pack. + + DATA: lo_client TYPE REF TO zcl_abapgit_http_client, + lv_cmd_pkt TYPE string, + lv_line TYPE string, + lv_tmp TYPE xstring, + lv_xstring TYPE xstring, + lv_string TYPE string, + lv_cap_list TYPE string, + lv_buffer TYPE string. + + + find_branch( + EXPORTING + iv_url = iv_url + iv_service = c_service-receive + iv_branch_name = iv_branch_name + IMPORTING + eo_client = lo_client ). + + lo_client->set_headers( + iv_url = iv_url + iv_service = c_service-receive ). + + lv_cap_list = 'report-status agent=' && zcl_abapgit_http=>get_agent( ) ##NO_TEXT. + + lv_line = iv_old && + ` ` && + iv_new && + ` ` && + iv_branch_name && + zcl_abapgit_git_utils=>get_null( ) && + ` ` && + lv_cap_list && + zif_abapgit_definitions=>gc_newline. "#EC NOTEXT + lv_cmd_pkt = zcl_abapgit_git_utils=>pkt_string( lv_line ). + + lv_buffer = lv_cmd_pkt && '0000'. + lv_tmp = zcl_abapgit_convert=>string_to_xstring_utf8( lv_buffer ). + + CONCATENATE lv_tmp iv_pack INTO lv_xstring IN BYTE MODE. + + lv_xstring = lo_client->send_receive_close( lv_xstring ). + + lv_string = zcl_abapgit_convert=>xstring_to_string_utf8( lv_xstring ). + IF NOT lv_string CP '*unpack ok*'. + zcx_abapgit_exception=>raise( 'unpack not ok' ). + ELSEIF lv_string CP '*pre-receive hook declined*'. + zcx_abapgit_exception=>raise( 'pre-receive hook declined' ). + ELSEIF lv_string CP '*funny refname*'. + zcx_abapgit_exception=>raise( 'funny refname' ). + ELSEIF lv_string CP '*failed to update ref*'. + zcx_abapgit_exception=>raise( 'failed to update ref' ). + ENDIF. + + ENDMETHOD. "receive_pack + + + METHOD upload_pack. + + DATA: lo_client TYPE REF TO zcl_abapgit_http_client, + lv_buffer TYPE string, + lv_xstring TYPE xstring, + lv_line TYPE string, + lv_pack TYPE xstring, + lt_branches TYPE zcl_abapgit_git_branch_list=>ty_git_branch_list_tt, + lv_capa TYPE string. + + FIELD-SYMBOLS: LIKE LINE OF lt_branches. + + + CLEAR et_objects. + + find_branch( + EXPORTING + iv_url = iv_url + iv_service = c_service-upload + iv_branch_name = iv_branch_name + IMPORTING + eo_client = lo_client + ev_branch = ev_branch ). + + IF it_branches IS INITIAL. + APPEND INITIAL LINE TO lt_branches ASSIGNING . + -sha1 = ev_branch. + ELSE. + lt_branches = it_branches. + ENDIF. + + lo_client->set_headers( iv_url = iv_url + iv_service = c_service-upload ). + + LOOP AT lt_branches FROM 1 ASSIGNING . + IF sy-tabix = 1. + lv_capa = 'side-band-64k no-progress multi_ack agent=' + && zcl_abapgit_http=>get_agent( ) ##NO_TEXT. + lv_line = 'want' && ` ` && -sha1 + && ` ` && lv_capa && zif_abapgit_definitions=>gc_newline. "#EC NOTEXT + ELSE. + lv_line = 'want' && ` ` && -sha1 + && zif_abapgit_definitions=>gc_newline. "#EC NOTEXT + ENDIF. + lv_buffer = lv_buffer && zcl_abapgit_git_utils=>pkt_string( lv_line ). + ENDLOOP. + + IF iv_deepen = abap_true. + lv_buffer = lv_buffer && zcl_abapgit_git_utils=>pkt_string( 'deepen 1' + && zif_abapgit_definitions=>gc_newline ). "#EC NOTEXT + ENDIF. + + lv_buffer = lv_buffer + && '0000' + && '0009done' && zif_abapgit_definitions=>gc_newline. + + lv_xstring = lo_client->send_receive_close( + zcl_abapgit_convert=>string_to_xstring_utf8( lv_buffer ) ). + + parse( IMPORTING ev_pack = lv_pack + CHANGING cv_data = lv_xstring ). + + IF lv_pack IS INITIAL. + zcx_abapgit_exception=>raise( 'empty pack' ). + ENDIF. + + et_objects = zcl_abapgit_git_pack=>decode( lv_pack ). + + ENDMETHOD. "upload_pack +ENDCLASS. diff --git a/src/git/zcl_abapgit_git_transport.clas.xml b/src/git/zcl_abapgit_git_transport.clas.xml new file mode 100644 index 000000000..3a4546d06 --- /dev/null +++ b/src/git/zcl_abapgit_git_transport.clas.xml @@ -0,0 +1,19 @@ + + + + + + ZCL_ABAPGIT_GIT_TRANSPORT + 1 + E + Git transport + 2 + 1 + X + X + X + X + + + + diff --git a/src/zabapgit_http.prog.abap b/src/http/zcl_abapgit_http.clas.abap similarity index 96% rename from src/zabapgit_http.prog.abap rename to src/http/zcl_abapgit_http.clas.abap index efc948d95..99a88d70d 100644 --- a/src/zabapgit_http.prog.abap +++ b/src/http/zcl_abapgit_http.clas.abap @@ -1,8 +1,7 @@ -*&---------------------------------------------------------------------* -*& Include ZABAPGIT_HTTP -*&---------------------------------------------------------------------* - -CLASS lcl_http DEFINITION FINAL. +CLASS zcl_abapgit_http DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . PUBLIC SECTION. CONSTANTS: BEGIN OF gc_scheme, @@ -36,14 +35,84 @@ CLASS lcl_http DEFINITION FINAL. ENDCLASS. -CLASS lcl_http IMPLEMENTATION. - METHOD get_agent. -* bitbucket require agent prefix = "git/" - rv_agent = 'git/abapGit-' && zif_abapgit_definitions=>gc_abap_version. +CLASS ZCL_ABAPGIT_HTTP IMPLEMENTATION. + + + METHOD acquire_login_details. + + DATA: lv_default_user TYPE string, + lv_user TYPE string, + lv_pass TYPE string, + lo_digest TYPE REF TO zcl_abapgit_http_digest. + + + lv_default_user = zcl_abapgit_persistence_user=>get_instance( )->get_repo_login( iv_url ). + lv_user = lv_default_user. + + zcl_abapgit_password_dialog=>popup( + EXPORTING + iv_repo_url = iv_url + CHANGING + cv_user = lv_user + cv_pass = lv_pass ). + + IF lv_user IS INITIAL. + zcx_abapgit_exception=>raise( 'HTTP 401, unauthorized' ). + ENDIF. + + IF lv_user <> lv_default_user. + zcl_abapgit_persistence_user=>get_instance( )->set_repo_login( + iv_url = iv_url + iv_login = lv_user ). + ENDIF. + + " Offer two factor authentication if it is available and required + zcl_abapgit_2fa_auth_registry=>use_2fa_if_required( + EXPORTING + iv_url = iv_url + CHANGING + cv_username = lv_user + cv_password = lv_pass ). + + rv_scheme = ii_client->response->get_header_field( 'www-authenticate' ). + FIND REGEX '^(\w+)' IN rv_scheme SUBMATCHES rv_scheme. + + CASE rv_scheme. + WHEN gc_scheme-digest. +* https://en.wikipedia.org/wiki/Digest_access_authentication +* e.g. used by https://www.gerritcodereview.com/ + CREATE OBJECT lo_digest + EXPORTING + ii_client = ii_client + iv_username = lv_user + iv_password = lv_pass. + lo_digest->run( ii_client ). + io_client->set_digest( lo_digest ). + WHEN OTHERS. +* https://en.wikipedia.org/wiki/Basic_access_authentication + ii_client->authenticate( + username = lv_user + password = lv_pass ). + ENDCASE. + + ENDMETHOD. "acquire_login_details + + + METHOD check_auth_requested. + + DATA: lv_code TYPE i. + + ii_client->response->get_status( + IMPORTING + code = lv_code ). + IF lv_code = 401. + rv_auth_requested = abap_true. + ENDIF. + + ENDMETHOD. "check_auth_requested - ENDMETHOD. METHOD create_by_url. @@ -131,6 +200,15 @@ CLASS lcl_http IMPLEMENTATION. ENDMETHOD. + + METHOD get_agent. + +* bitbucket require agent prefix = "git/" + rv_agent = 'git/abapGit-' && zif_abapgit_definitions=>gc_abap_version. + + ENDMETHOD. + + METHOD is_local_system. DATA: lv_host TYPE string, @@ -164,77 +242,4 @@ CLASS lcl_http IMPLEMENTATION. rv_bool = boolc( sy-subrc = 0 ). ENDMETHOD. - - METHOD check_auth_requested. - - DATA: lv_code TYPE i. - - ii_client->response->get_status( - IMPORTING - code = lv_code ). - IF lv_code = 401. - rv_auth_requested = abap_true. - ENDIF. - - ENDMETHOD. "check_auth_requested - - METHOD acquire_login_details. - - DATA: lv_default_user TYPE string, - lv_user TYPE string, - lv_pass TYPE string, - lo_digest TYPE REF TO zcl_abapgit_http_digest. - - - lv_default_user = zcl_abapgit_persistence_user=>get_instance( )->get_repo_login( iv_url ). - lv_user = lv_default_user. - - zcl_abapgit_password_dialog=>popup( - EXPORTING - iv_repo_url = iv_url - CHANGING - cv_user = lv_user - cv_pass = lv_pass ). - - IF lv_user IS INITIAL. - zcx_abapgit_exception=>raise( 'HTTP 401, unauthorized' ). - ENDIF. - - IF lv_user <> lv_default_user. - zcl_abapgit_persistence_user=>get_instance( )->set_repo_login( - iv_url = iv_url - iv_login = lv_user ). - ENDIF. - - " Offer two factor authentication if it is available and required - zcl_abapgit_2fa_auth_registry=>use_2fa_if_required( - EXPORTING - iv_url = iv_url - CHANGING - cv_username = lv_user - cv_password = lv_pass ). - - rv_scheme = ii_client->response->get_header_field( 'www-authenticate' ). - FIND REGEX '^(\w+)' IN rv_scheme SUBMATCHES rv_scheme. - - CASE rv_scheme. - WHEN gc_scheme-digest. -* https://en.wikipedia.org/wiki/Digest_access_authentication -* e.g. used by https://www.gerritcodereview.com/ - CREATE OBJECT lo_digest - EXPORTING - ii_client = ii_client - iv_username = lv_user - iv_password = lv_pass. - lo_digest->run( ii_client ). - io_client->set_digest( lo_digest ). - WHEN OTHERS. -* https://en.wikipedia.org/wiki/Basic_access_authentication - ii_client->authenticate( - username = lv_user - password = lv_pass ). - ENDCASE. - - ENDMETHOD. "acquire_login_details - ENDCLASS. diff --git a/src/http/zcl_abapgit_http.clas.xml b/src/http/zcl_abapgit_http.clas.xml new file mode 100644 index 000000000..c61cc67f9 --- /dev/null +++ b/src/http/zcl_abapgit_http.clas.xml @@ -0,0 +1,19 @@ + + + + + + ZCL_ABAPGIT_HTTP + 1 + E + HTTP + 2 + 1 + X + X + X + X + + + + diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index ae7d57c08..d626af539 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -35,13 +35,10 @@ INCLUDE zabapgit_password_dialog. " !!! Contains SELECTION SCREEN INCLUDE zabapgit_app. " Some deferred definitions here INCLUDE zabapgit_authorizations. INCLUDE zabapgit_exit. -INCLUDE zabapgit_proxy. INCLUDE zabapgit_repo. INCLUDE zabapgit_news. INCLUDE zabapgit_stage_logic. -INCLUDE zabapgit_2fa. -INCLUDE zabapgit_http. INCLUDE zabapgit_git. INCLUDE zabapgit_objects. INCLUDE zabapgit_tadir. @@ -50,14 +47,11 @@ INCLUDE zabapgit_popups. INCLUDE zabapgit_zip. INCLUDE zabapgit_objects_impl. -INCLUDE zabapgit_skip_objects. - INCLUDE zabapgit_repo_impl. INCLUDE zabapgit_background. INCLUDE zabapgit_transport. INCLUDE zabapgit_services. " All services here -INCLUDE zabapgit_gui_asset_manager. INCLUDE zabapgit_gui_pages. " All GUI pages here INCLUDE zabapgit_gui_pages_userexit IF FOUND. INCLUDE zabapgit_gui_router. diff --git a/src/zabapgit_2fa.prog.abap b/src/zabapgit_2fa.prog.abap deleted file mode 100644 index b732027c9..000000000 --- a/src/zabapgit_2fa.prog.abap +++ /dev/null @@ -1,5 +0,0 @@ -*&---------------------------------------------------------------------* -*& Include ZABAPGIT_2FA -*&---------------------------------------------------------------------* - -* todo, include to be deleted diff --git a/src/zabapgit_2fa.prog.xml b/src/zabapgit_2fa.prog.xml deleted file mode 100644 index 048b86095..000000000 --- a/src/zabapgit_2fa.prog.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - ZABAPGIT_2FA - A - X - S - D$ - I - X - D$S - X - - - - R - ZABAPGIT_2FA - 12 - - - - - diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap index 8c8fcd622..a5108004b 100644 --- a/src/zabapgit_git.prog.abap +++ b/src/zabapgit_git.prog.abap @@ -2,288 +2,6 @@ *& Include ZABAPGIT_GIT *&---------------------------------------------------------------------* -*----------------------------------------------------------------------* -* CLASS lcl_transport DEFINITION -*----------------------------------------------------------------------* - -CLASS lcl_git_transport DEFINITION FINAL. - PUBLIC SECTION. - -* 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 zcl_abapgit_git_branch_list=>ty_git_branch_list_tt OPTIONAL - EXPORTING et_objects TYPE zif_abapgit_definitions=>ty_objects_tt - ev_branch TYPE zif_abapgit_definitions=>ty_sha1 - RAISING zcx_abapgit_exception. - -* local to remote - CLASS-METHODS receive_pack - IMPORTING iv_url TYPE string - iv_old TYPE zif_abapgit_definitions=>ty_sha1 - iv_new TYPE zif_abapgit_definitions=>ty_sha1 - iv_branch_name TYPE string - iv_pack TYPE xstring - RAISING zcx_abapgit_exception. - - CLASS-METHODS branches - IMPORTING iv_url TYPE string - RETURNING VALUE(ro_branch_list) TYPE REF TO zcl_abapgit_git_branch_list - RAISING zcx_abapgit_exception. - - PRIVATE SECTION. - CONSTANTS: BEGIN OF c_service, - receive TYPE string VALUE 'receive', "#EC NOTEXT - upload TYPE string VALUE 'upload', "#EC NOTEXT - END OF c_service. - - CLASS-METHODS branch_list - IMPORTING iv_url TYPE string - iv_service TYPE string - EXPORTING eo_client TYPE REF TO zcl_abapgit_http_client - eo_branch_list TYPE REF TO zcl_abapgit_git_branch_list - RAISING zcx_abapgit_exception. - - CLASS-METHODS find_branch - IMPORTING iv_url TYPE string - iv_service TYPE string - iv_branch_name TYPE string - EXPORTING eo_client TYPE REF TO zcl_abapgit_http_client - ev_branch TYPE zif_abapgit_definitions=>ty_sha1 - RAISING zcx_abapgit_exception. - - CLASS-METHODS parse - EXPORTING ev_pack TYPE xstring - CHANGING cv_data TYPE xstring - RAISING zcx_abapgit_exception. - -ENDCLASS. "lcl_transport DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_transport IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_git_transport IMPLEMENTATION. - - METHOD find_branch. - - DATA: lo_branch_list TYPE REF TO zcl_abapgit_git_branch_list. - - branch_list( - EXPORTING - iv_url = iv_url - iv_service = iv_service - IMPORTING - eo_client = eo_client - eo_branch_list = lo_branch_list ). - - IF ev_branch IS SUPPLIED. - ev_branch = lo_branch_list->find_by_name( iv_branch_name )-sha1. - ENDIF. - - ENDMETHOD. "find_branch - - METHOD branches. - - DATA: lo_client TYPE REF TO zcl_abapgit_http_client. - - - lcl_git_transport=>branch_list( - EXPORTING - iv_url = iv_url - iv_service = c_service-upload - IMPORTING - eo_client = lo_client - eo_branch_list = ro_branch_list ). - - lo_client->close( ). - - ENDMETHOD. "branches - - METHOD branch_list. - - DATA: lv_data TYPE string. - - - eo_client = lcl_http=>create_by_url( - iv_url = iv_url - iv_service = iv_service ). - - lv_data = eo_client->get_cdata( ). - - CREATE OBJECT eo_branch_list - EXPORTING - iv_data = lv_data. - - ENDMETHOD. "branch_list - - METHOD receive_pack. - - DATA: lo_client TYPE REF TO zcl_abapgit_http_client, - lv_cmd_pkt TYPE string, - lv_line TYPE string, - lv_tmp TYPE xstring, - lv_xstring TYPE xstring, - lv_string TYPE string, - lv_cap_list TYPE string, - lv_buffer TYPE string. - - - find_branch( - EXPORTING - iv_url = iv_url - iv_service = c_service-receive - iv_branch_name = iv_branch_name - IMPORTING - eo_client = lo_client ). - - lo_client->set_headers( - iv_url = iv_url - iv_service = c_service-receive ). - - lv_cap_list = 'report-status agent=' && lcl_http=>get_agent( ) ##NO_TEXT. - - lv_line = iv_old && - ` ` && - iv_new && - ` ` && - iv_branch_name && - zcl_abapgit_git_utils=>get_null( ) && - ` ` && - lv_cap_list && - zif_abapgit_definitions=>gc_newline. "#EC NOTEXT - lv_cmd_pkt = zcl_abapgit_git_utils=>pkt_string( lv_line ). - - lv_buffer = lv_cmd_pkt && '0000'. - lv_tmp = zcl_abapgit_convert=>string_to_xstring_utf8( lv_buffer ). - - CONCATENATE lv_tmp iv_pack INTO lv_xstring IN BYTE MODE. - - lv_xstring = lo_client->send_receive_close( lv_xstring ). - - lv_string = zcl_abapgit_convert=>xstring_to_string_utf8( lv_xstring ). - IF NOT lv_string CP '*unpack ok*'. - zcx_abapgit_exception=>raise( 'unpack not ok' ). - ELSEIF lv_string CP '*pre-receive hook declined*'. - zcx_abapgit_exception=>raise( 'pre-receive hook declined' ). - ELSEIF lv_string CP '*funny refname*'. - zcx_abapgit_exception=>raise( 'funny refname' ). - ELSEIF lv_string CP '*failed to update ref*'. - zcx_abapgit_exception=>raise( 'failed to update ref' ). - ENDIF. - - ENDMETHOD. "receive_pack - - METHOD parse. - - CONSTANTS: lc_band1 TYPE x VALUE '01'. - - DATA: lv_len TYPE i, - lv_contents TYPE xstring, - lv_pack TYPE xstring. - - - WHILE xstrlen( cv_data ) >= 4. - lv_len = zcl_abapgit_git_utils=>length_utf8_hex( cv_data ). - - IF lv_len > xstrlen( cv_data ). - zcx_abapgit_exception=>raise( 'parse, string length too large' ). - ENDIF. - - lv_contents = cv_data(lv_len). - IF lv_len = 0. - cv_data = cv_data+4. - CONTINUE. - ELSE. - cv_data = cv_data+lv_len. - ENDIF. - - lv_contents = lv_contents+4. - - IF xstrlen( lv_contents ) > 1 AND lv_contents(1) = lc_band1. - CONCATENATE lv_pack lv_contents+1 INTO lv_pack IN BYTE MODE. - ENDIF. - - ENDWHILE. - - ev_pack = lv_pack. - - ENDMETHOD. "parse - - METHOD upload_pack. - - DATA: lo_client TYPE REF TO zcl_abapgit_http_client, - lv_buffer TYPE string, - lv_xstring TYPE xstring, - lv_line TYPE string, - lv_pack TYPE xstring, - lt_branches TYPE zcl_abapgit_git_branch_list=>ty_git_branch_list_tt, - lv_capa TYPE string. - - FIELD-SYMBOLS: LIKE LINE OF lt_branches. - - - CLEAR et_objects. - - find_branch( - EXPORTING - iv_url = io_repo->get_url( ) - iv_service = c_service-upload - iv_branch_name = io_repo->get_branch_name( ) - IMPORTING - eo_client = lo_client - ev_branch = ev_branch ). - - IF it_branches IS INITIAL. - APPEND INITIAL LINE TO lt_branches ASSIGNING . - -sha1 = ev_branch. - ELSE. - lt_branches = it_branches. - ENDIF. - - lo_client->set_headers( iv_url = io_repo->get_url( ) - iv_service = c_service-upload ). - - LOOP AT lt_branches FROM 1 ASSIGNING . - IF sy-tabix = 1. - lv_capa = 'side-band-64k no-progress multi_ack agent=' - && lcl_http=>get_agent( ) ##NO_TEXT. - lv_line = 'want' && ` ` && -sha1 - && ` ` && lv_capa && zif_abapgit_definitions=>gc_newline. "#EC NOTEXT - ELSE. - lv_line = 'want' && ` ` && -sha1 - && zif_abapgit_definitions=>gc_newline. "#EC NOTEXT - ENDIF. - lv_buffer = lv_buffer && zcl_abapgit_git_utils=>pkt_string( lv_line ). - ENDLOOP. - - IF iv_deepen = abap_true. - lv_buffer = lv_buffer && zcl_abapgit_git_utils=>pkt_string( 'deepen 1' - && zif_abapgit_definitions=>gc_newline ). "#EC NOTEXT - ENDIF. - - lv_buffer = lv_buffer - && '0000' - && '0009done' && zif_abapgit_definitions=>gc_newline. - - lv_xstring = lo_client->send_receive_close( - zcl_abapgit_convert=>string_to_xstring_utf8( lv_buffer ) ). - - parse( IMPORTING ev_pack = lv_pack - CHANGING cv_data = lv_xstring ). - - IF lv_pack IS INITIAL. - zcx_abapgit_exception=>raise( 'empty pack' ). - ENDIF. - - et_objects = zcl_abapgit_git_pack=>decode( lv_pack ). - - ENDMETHOD. "upload_pack - -ENDCLASS. "lcl_transport IMPLEMENTATION - CLASS ltcl_git_porcelain DEFINITION DEFERRED. *----------------------------------------------------------------------* @@ -490,7 +208,7 @@ CLASS lcl_git_porcelain IMPLEMENTATION. iv_type = zif_abapgit_definitions=>gc_type-commit iv_data = lv_commit ). - lcl_git_transport=>receive_pack( + zcl_abapgit_git_transport=>receive_pack( iv_url = io_repo->get_url( ) iv_old = io_stage->get_branch_sha1( ) iv_new = rv_branch @@ -518,7 +236,7 @@ CLASS lcl_git_porcelain IMPLEMENTATION. * https://github.com/git/git/blob/master/Documentation/technical/pack-protocol.txt#L514 lv_pack = zcl_abapgit_git_pack=>encode( lt_objects ). - lcl_git_transport=>receive_pack( + zcl_abapgit_git_transport=>receive_pack( iv_url = io_repo->get_url( ) iv_old = is_branch-sha1 iv_new = c_zero @@ -537,7 +255,7 @@ CLASS lcl_git_porcelain IMPLEMENTATION. * https://github.com/git/git/blob/master/Documentation/technical/pack-protocol.txt#L514 lv_pack = zcl_abapgit_git_pack=>encode( lt_objects ). - lcl_git_transport=>receive_pack( + zcl_abapgit_git_transport=>receive_pack( iv_url = io_repo->get_url( ) iv_old = is_tag-sha1 iv_new = c_zero @@ -559,7 +277,7 @@ CLASS lcl_git_porcelain IMPLEMENTATION. * https://github.com/git/git/blob/master/Documentation/technical/pack-protocol.txt#L514 lv_pack = zcl_abapgit_git_pack=>encode( lt_objects ). - lcl_git_transport=>receive_pack( + zcl_abapgit_git_transport=>receive_pack( iv_url = io_repo->get_url( ) iv_old = c_zero iv_new = iv_from @@ -581,7 +299,7 @@ CLASS lcl_git_porcelain IMPLEMENTATION. * https://github.com/git/git/blob/master/Documentation/technical/pack-protocol.txt#L514 lv_pack = zcl_abapgit_git_pack=>encode( lt_objects ). - lcl_git_transport=>receive_pack( + zcl_abapgit_git_transport=>receive_pack( iv_url = io_repo->get_url( ) iv_old = c_zero iv_new = iv_from @@ -616,9 +334,13 @@ CLASS lcl_git_porcelain IMPLEMENTATION. -name = io_stage->get_branch_name( ). -sha1 = io_stage->get_branch_sha1( ). - lcl_git_transport=>upload_pack( EXPORTING io_repo = io_repo - it_branches = lt_branches - IMPORTING et_objects = lt_objects ). + zcl_abapgit_git_transport=>upload_pack( + EXPORTING + iv_url = io_repo->get_url( ) + iv_branch_name = io_repo->get_branch_name( ) + it_branches = lt_branches + IMPORTING + et_objects = lt_objects ). ENDIF. lt_expanded = full_tree( it_objects = lt_objects @@ -745,9 +467,13 @@ CLASS lcl_git_porcelain IMPLEMENTATION. CLEAR et_objects. CLEAR ev_branch. - lcl_git_transport=>upload_pack( EXPORTING io_repo = io_repo - IMPORTING et_objects = et_objects - ev_branch = ev_branch ). + zcl_abapgit_git_transport=>upload_pack( + EXPORTING + iv_url = io_repo->get_url( ) + iv_branch_name = io_repo->get_branch_name( ) + IMPORTING + et_objects = et_objects + ev_branch = ev_branch ). READ TABLE et_objects INTO ls_object WITH KEY sha1 = ev_branch type = zif_abapgit_definitions=>gc_type-commit. IF sy-subrc <> 0. diff --git a/src/zabapgit_gui_asset_manager.prog.abap b/src/zabapgit_gui_asset_manager.prog.abap deleted file mode 100644 index 7fa0e6d76..000000000 --- a/src/zabapgit_gui_asset_manager.prog.abap +++ /dev/null @@ -1,5 +0,0 @@ -*&---------------------------------------------------------------------* -*& Include ZABAPGIT_GUI_ASSET_MANAGER -*&---------------------------------------------------------------------* - -* todo, include to be deleted diff --git a/src/zabapgit_gui_asset_manager.prog.xml b/src/zabapgit_gui_asset_manager.prog.xml deleted file mode 100644 index f80a3d729..000000000 --- a/src/zabapgit_gui_asset_manager.prog.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - ZABAPGIT_GUI_ASSET_MANAGER - A - X - I - E - X - - - - R - Include ZABAPGIT_GUI_ASSET_MANAGER - 34 - - - - - diff --git a/src/zabapgit_gui_pages.prog.abap b/src/zabapgit_gui_pages.prog.abap index 294f5f1cd..3ccf113bb 100644 --- a/src/zabapgit_gui_pages.prog.abap +++ b/src/zabapgit_gui_pages.prog.abap @@ -6,7 +6,6 @@ * Super class & common html chunks INCLUDE zabapgit_html_chunks. -INCLUDE zabapgit_page. * Utils and helpers INCLUDE zabapgit_repo_browser_util. diff --git a/src/zabapgit_http.prog.xml b/src/zabapgit_http.prog.xml deleted file mode 100644 index 916ca0370..000000000 --- a/src/zabapgit_http.prog.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - ZABAPGIT_HTTP - A - X - I - E - X - - - - R - Include ZABAPGIT_HTTP - 21 - - - - - diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap deleted file mode 100644 index 633719858..000000000 --- a/src/zabapgit_page.prog.abap +++ /dev/null @@ -1,5 +0,0 @@ -*&---------------------------------------------------------------------* -*& Include ZABAPGIT_PAGE -*&---------------------------------------------------------------------* - -* todo, include to be deleted diff --git a/src/zabapgit_page.prog.xml b/src/zabapgit_page.prog.xml deleted file mode 100644 index be0c12979..000000000 --- a/src/zabapgit_page.prog.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - ZABAPGIT_PAGE - A - X - I - E - X - - - - R - Include ZABAPGIT_PAGE - 21 - - - - - diff --git a/src/zabapgit_page_branch_overview.prog.abap b/src/zabapgit_page_branch_overview.prog.abap index e8f366d96..b3aad54a8 100644 --- a/src/zabapgit_page_branch_overview.prog.abap +++ b/src/zabapgit_page_branch_overview.prog.abap @@ -175,15 +175,19 @@ CLASS lcl_branch_overview IMPLEMENTATION. "TODO refactor - lo_branch_list = lcl_git_transport=>branches( io_repo->get_url( ) ). + lo_branch_list = zcl_abapgit_git_transport=>branches( io_repo->get_url( ) ). gt_branches = lo_branch_list->get_branches_only( ). gt_tags = lo_branch_list->get_tags_only( ). - lcl_git_transport=>upload_pack( EXPORTING io_repo = io_repo - iv_deepen = abap_false - it_branches = gt_branches - IMPORTING et_objects = rt_objects ). + zcl_abapgit_git_transport=>upload_pack( + EXPORTING + iv_url = io_repo->get_url( ) + iv_branch_name = io_repo->get_branch_name( ) + iv_deepen = abap_false + it_branches = gt_branches + IMPORTING + et_objects = rt_objects ). DELETE rt_objects WHERE type = zif_abapgit_definitions=>gc_type-blob. diff --git a/src/zabapgit_page_merge.prog.abap b/src/zabapgit_page_merge.prog.abap index 4892641ce..f517dd551 100644 --- a/src/zabapgit_page_merge.prog.abap +++ b/src/zabapgit_page_merge.prog.abap @@ -297,7 +297,7 @@ CLASS lcl_merge IMPLEMENTATION. DATA: lo_branch_list TYPE REF TO zcl_abapgit_git_branch_list, lt_upload TYPE zcl_abapgit_git_branch_list=>ty_git_branch_list_tt. - lo_branch_list = lcl_git_transport=>branches( gs_merge-repo->get_url( ) ). + lo_branch_list = zcl_abapgit_git_transport=>branches( gs_merge-repo->get_url( ) ). gs_merge-source = lo_branch_list->find_by_name( zcl_abapgit_git_branch_list=>complete_heads_branch_name( iv_source ) ). gs_merge-target = lo_branch_list->find_by_name( @@ -306,10 +306,14 @@ CLASS lcl_merge IMPLEMENTATION. APPEND gs_merge-source TO lt_upload. APPEND gs_merge-target TO lt_upload. - lcl_git_transport=>upload_pack( EXPORTING io_repo = gs_merge-repo - iv_deepen = abap_false - it_branches = lt_upload - IMPORTING et_objects = gt_objects ). + zcl_abapgit_git_transport=>upload_pack( + EXPORTING + iv_url = gs_merge-repo->get_url( ) + iv_branch_name = gs_merge-repo->get_branch_name( ) + iv_deepen = abap_false + it_branches = lt_upload + IMPORTING + et_objects = gt_objects ). ENDMETHOD. diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index 3dff516a1..086d32942 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -510,7 +510,7 @@ CLASS lcl_popups IMPLEMENTATION. LIKE LINE OF lt_branches. - lo_branches = lcl_git_transport=>branches( iv_url ). + lo_branches = zcl_abapgit_git_transport=>branches( iv_url ). lt_branches = lo_branches->get_branches_only( ). lv_head_suffix = | ({ zcl_abapgit_git_branch_list=>c_head_name })|. lv_head_symref = lo_branches->get_head_symref( ). @@ -616,7 +616,7 @@ CLASS lcl_popups IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF lt_selection, LIKE LINE OF lt_tags. - lo_branches = lcl_git_transport=>branches( iv_url ). + lo_branches = zcl_abapgit_git_transport=>branches( iv_url ). lt_tags = lo_branches->get_tags_only( ). IF lines( lt_tags ) = 0. diff --git a/src/zabapgit_proxy.prog.abap b/src/zabapgit_proxy.prog.abap deleted file mode 100644 index 1d6f3c0b3..000000000 --- a/src/zabapgit_proxy.prog.abap +++ /dev/null @@ -1,5 +0,0 @@ -*&---------------------------------------------------------------------* -*& Include zabapgit_proxy -*&---------------------------------------------------------------------* - -* todo, include to be deleted diff --git a/src/zabapgit_proxy.prog.xml b/src/zabapgit_proxy.prog.xml deleted file mode 100644 index e930aac14..000000000 --- a/src/zabapgit_proxy.prog.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - ZABAPGIT_PROXY - A - X - S - D$ - I - X - D$S - X - - - - R - ZABAPGIT_PROXY - 14 - - - - - diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 03393e811..56593c65b 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -98,7 +98,7 @@ CLASS lcl_repo_online IMPLEMENTATION. ENDTRY. - mo_branches = lcl_git_transport=>branches( get_url( ) ). + mo_branches = zcl_abapgit_git_transport=>branches( get_url( ) ). actualize_head_branch( ). mv_initialized = abap_true. @@ -147,7 +147,7 @@ CLASS lcl_repo_online IMPLEMENTATION. METHOD get_branches. IF mo_branches IS NOT BOUND. - mo_branches = lcl_git_transport=>branches( get_url( ) ). + mo_branches = zcl_abapgit_git_transport=>branches( get_url( ) ). ENDIF. ro_branches = mo_branches. ENDMETHOD. "get_branches diff --git a/src/zabapgit_skip_objects.prog.abap b/src/zabapgit_skip_objects.prog.abap deleted file mode 100644 index fdb6f427e..000000000 --- a/src/zabapgit_skip_objects.prog.abap +++ /dev/null @@ -1,5 +0,0 @@ -*&---------------------------------------------------------------------* -*& Include zabapgit_skip_objects -*&---------------------------------------------------------------------* - -* todo, include to be deleted diff --git a/src/zabapgit_skip_objects.prog.xml b/src/zabapgit_skip_objects.prog.xml deleted file mode 100644 index 3ab107430..000000000 --- a/src/zabapgit_skip_objects.prog.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - ZABAPGIT_SKIP_OBJECTS - A - X - S - D$ - I - X - D$S - X - - - - R - Include ZABAPGIT_SKIP_OBJECTS - 29 - - - - - diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index 2105c008f..c01362670 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -1164,4 +1164,3 @@ ENDCLASS. *ENDCLASS. INCLUDE zabapgit_unit_test_clas_intf. -INCLUDE zabapgit_unit_test_transport. diff --git a/src/zabapgit_unit_test_transport.prog.abap b/src/zabapgit_unit_test_transport.prog.abap deleted file mode 100644 index b961ee7eb..000000000 --- a/src/zabapgit_unit_test_transport.prog.abap +++ /dev/null @@ -1,5 +0,0 @@ -*&---------------------------------------------------------------------* -*& Include ZABAPGIT_UNIT_TEST_TRANSPORT -*&---------------------------------------------------------------------* - -* todo, include to be deleted diff --git a/src/zabapgit_unit_test_transport.prog.xml b/src/zabapgit_unit_test_transport.prog.xml deleted file mode 100644 index ccd038ff4..000000000 --- a/src/zabapgit_unit_test_transport.prog.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - ZABAPGIT_UNIT_TEST_TRANSPORT - A - X - I - E - X - - - - R - Include ZABAPGIT_UNIT_TEST_TRANSPORT - 36 - - - - -