mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 04:36:49 +08:00
commit
f04d774e09
|
@ -55,7 +55,9 @@ INCLUDE zabapgit_sap_package.
|
||||||
CLASS lcl_repo_online DEFINITION DEFERRED.
|
CLASS lcl_repo_online DEFINITION DEFERRED.
|
||||||
|
|
||||||
INCLUDE zabapgit_stage.
|
INCLUDE zabapgit_stage.
|
||||||
|
INCLUDE zabapgit_git_helpers.
|
||||||
INCLUDE zabapgit_repo.
|
INCLUDE zabapgit_repo.
|
||||||
|
INCLUDE zabapgit_git.
|
||||||
INCLUDE zabapgit_stage_logic.
|
INCLUDE zabapgit_stage_logic.
|
||||||
INCLUDE zabapgit_objects.
|
INCLUDE zabapgit_objects.
|
||||||
INCLUDE zabapgit_tadir.
|
INCLUDE zabapgit_tadir.
|
||||||
|
@ -103,7 +105,6 @@ INCLUDE zabapgit_object_wdyn.
|
||||||
INCLUDE zabapgit_object_webi.
|
INCLUDE zabapgit_object_webi.
|
||||||
INCLUDE zabapgit_object_xslt.
|
INCLUDE zabapgit_object_xslt.
|
||||||
|
|
||||||
INCLUDE zabapgit_git.
|
|
||||||
INCLUDE zabapgit_repo_impl.
|
INCLUDE zabapgit_repo_impl.
|
||||||
INCLUDE zabapgit_background.
|
INCLUDE zabapgit_background.
|
||||||
INCLUDE zabapgit_zip.
|
INCLUDE zabapgit_zip.
|
||||||
|
|
|
@ -54,7 +54,7 @@ FORM branch_popup TABLES tt_fields TYPE ty_sval_tt
|
||||||
DATA: lv_url TYPE string,
|
DATA: lv_url TYPE string,
|
||||||
lx_error TYPE REF TO lcx_exception,
|
lx_error TYPE REF TO lcx_exception,
|
||||||
ls_package_data TYPE scompkdtln,
|
ls_package_data TYPE scompkdtln,
|
||||||
ls_branch TYPE lcl_git_transport=>ty_branch_list.
|
ls_branch TYPE lcl_git_branch_list=>ty_git_branch.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_furl> LIKE LINE OF tt_fields,
|
FIELD-SYMBOLS: <ls_furl> LIKE LINE OF tt_fields,
|
||||||
<ls_fbranch> LIKE LINE OF tt_fields.
|
<ls_fbranch> LIKE LINE OF tt_fields.
|
||||||
|
|
|
@ -7,22 +7,15 @@ CLASS ltcl_git_pack DEFINITION DEFERRED.
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
* CLASS lcl_transport DEFINITION
|
* CLASS lcl_transport DEFINITION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
*
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
CLASS lcl_git_transport DEFINITION FINAL.
|
|
||||||
|
|
||||||
|
CLASS lcl_git_transport DEFINITION FINAL.
|
||||||
PUBLIC SECTION.
|
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
|
* remote to local
|
||||||
CLASS-METHODS upload_pack
|
CLASS-METHODS upload_pack
|
||||||
IMPORTING io_repo TYPE REF TO lcl_repo_online
|
IMPORTING io_repo TYPE REF TO lcl_repo_online
|
||||||
iv_deepen TYPE abap_bool DEFAULT abap_true
|
iv_deepen TYPE abap_bool DEFAULT abap_true
|
||||||
it_branches TYPE ty_branch_list_tt OPTIONAL
|
it_branches TYPE lcl_git_branch_list=>ty_git_branch_list_tt OPTIONAL
|
||||||
EXPORTING et_objects TYPE ty_objects_tt
|
EXPORTING et_objects TYPE ty_objects_tt
|
||||||
ev_branch TYPE ty_sha1
|
ev_branch TYPE ty_sha1
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
@ -38,11 +31,12 @@ CLASS lcl_git_transport DEFINITION FINAL.
|
||||||
|
|
||||||
CLASS-METHODS branches
|
CLASS-METHODS branches
|
||||||
IMPORTING iv_url TYPE string
|
IMPORTING iv_url TYPE string
|
||||||
RETURNING VALUE(rt_branch_list) TYPE ty_branch_list_tt
|
RETURNING VALUE(ro_branch_list) TYPE REF TO lcl_git_branch_list
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
CLASS-METHODS class_constructor.
|
CLASS-METHODS class_constructor.
|
||||||
|
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
CLASS-DATA: gv_agent TYPE string.
|
CLASS-DATA: gv_agent TYPE string.
|
||||||
|
|
||||||
|
@ -55,12 +49,7 @@ CLASS lcl_git_transport DEFINITION FINAL.
|
||||||
IMPORTING iv_url TYPE string
|
IMPORTING iv_url TYPE string
|
||||||
iv_service TYPE string
|
iv_service TYPE string
|
||||||
EXPORTING ei_client TYPE REF TO if_http_client
|
EXPORTING ei_client TYPE REF TO if_http_client
|
||||||
et_branch_list TYPE ty_branch_list_tt
|
eo_branch_list TYPE REF TO lcl_git_branch_list
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
CLASS-METHODS pkt_string
|
|
||||||
IMPORTING iv_string TYPE string
|
|
||||||
RETURNING VALUE(rv_pkt) TYPE string
|
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
CLASS-METHODS find_branch
|
CLASS-METHODS find_branch
|
||||||
|
@ -76,16 +65,6 @@ CLASS lcl_git_transport DEFINITION FINAL.
|
||||||
CHANGING cv_data TYPE xstring
|
CHANGING cv_data TYPE xstring
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
CLASS-METHODS length_utf8_hex
|
|
||||||
IMPORTING iv_data TYPE xstring
|
|
||||||
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
|
CLASS-METHODS set_headers
|
||||||
IMPORTING iv_url TYPE string
|
IMPORTING iv_url TYPE string
|
||||||
iv_service TYPE string
|
iv_service TYPE string
|
||||||
|
@ -96,9 +75,6 @@ CLASS lcl_git_transport DEFINITION FINAL.
|
||||||
IMPORTING ii_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.
|
|
||||||
|
|
||||||
CLASS-METHODS send_receive
|
CLASS-METHODS send_receive
|
||||||
IMPORTING ii_client TYPE REF TO if_http_client
|
IMPORTING ii_client TYPE REF TO if_http_client
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
@ -251,20 +227,6 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD. "set_headers
|
ENDMETHOD. "set_headers
|
||||||
|
|
||||||
METHOD get_null.
|
|
||||||
|
|
||||||
DATA: lv_x(4) TYPE x VALUE '00000000',
|
|
||||||
lv_z(2) TYPE c.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <lv_y> TYPE c.
|
|
||||||
|
|
||||||
|
|
||||||
ASSIGN lv_x TO <lv_y> CASTING.
|
|
||||||
lv_z = <lv_y>.
|
|
||||||
rv_c = lv_z(1).
|
|
||||||
|
|
||||||
ENDMETHOD. "get_null
|
|
||||||
|
|
||||||
METHOD check_http_200.
|
METHOD check_http_200.
|
||||||
|
|
||||||
DATA: lv_code TYPE i.
|
DATA: lv_code TYPE i.
|
||||||
|
@ -335,52 +297,9 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD. "acquire_login_details
|
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: <ls_branch> 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 <ls_branch>.
|
|
||||||
<ls_branch>-sha1 = lv_hash.
|
|
||||||
<ls_branch>-name = lv_name.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDMETHOD. "parse_branch_list
|
|
||||||
|
|
||||||
METHOD find_branch.
|
METHOD find_branch.
|
||||||
|
|
||||||
DATA: lt_branch_list TYPE ty_branch_list_tt,
|
DATA: lo_branch_list TYPE REF TO lcl_git_branch_list.
|
||||||
ls_branch_list LIKE LINE OF lt_branch_list.
|
|
||||||
|
|
||||||
|
|
||||||
branch_list(
|
branch_list(
|
||||||
EXPORTING
|
EXPORTING
|
||||||
|
@ -388,20 +307,10 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
iv_service = iv_service
|
iv_service = iv_service
|
||||||
IMPORTING
|
IMPORTING
|
||||||
ei_client = ei_client
|
ei_client = ei_client
|
||||||
et_branch_list = lt_branch_list ).
|
eo_branch_list = lo_branch_list ).
|
||||||
|
|
||||||
IF ev_branch IS SUPPLIED.
|
IF ev_branch IS SUPPLIED.
|
||||||
IF iv_branch_name IS INITIAL.
|
ev_branch = lo_branch_list->find_by_name( iv_branch_name )-sha1.
|
||||||
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.
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD. "find_branch
|
ENDMETHOD. "find_branch
|
||||||
|
@ -417,7 +326,7 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
iv_service = c_service-upload
|
iv_service = c_service-upload
|
||||||
IMPORTING
|
IMPORTING
|
||||||
ei_client = li_client
|
ei_client = li_client
|
||||||
et_branch_list = rt_branch_list ).
|
eo_branch_list = ro_branch_list ).
|
||||||
li_client->close( ).
|
li_client->close( ).
|
||||||
|
|
||||||
ENDMETHOD. "branches
|
ENDMETHOD. "branches
|
||||||
|
@ -470,9 +379,9 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
ii_client = ei_client ).
|
ii_client = ei_client ).
|
||||||
|
|
||||||
lv_data = ei_client->response->get_cdata( ).
|
lv_data = ei_client->response->get_cdata( ).
|
||||||
et_branch_list = parse_branch_list( lv_data ).
|
create object eo_branch_list exporting iv_data = lv_data.
|
||||||
|
|
||||||
ENDMETHOD. "ref_discovery
|
ENDMETHOD. "branch_list
|
||||||
|
|
||||||
METHOD send_receive.
|
METHOD send_receive.
|
||||||
|
|
||||||
|
@ -505,7 +414,6 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD. "send_receive
|
ENDMETHOD. "send_receive
|
||||||
|
|
||||||
|
|
||||||
METHOD receive_pack.
|
METHOD receive_pack.
|
||||||
|
|
||||||
DATA: li_client TYPE REF TO if_http_client,
|
DATA: li_client TYPE REF TO if_http_client,
|
||||||
|
@ -538,11 +446,11 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
iv_new &&
|
iv_new &&
|
||||||
` ` &&
|
` ` &&
|
||||||
iv_branch_name &&
|
iv_branch_name &&
|
||||||
get_null( ) &&
|
lcl_git_utils=>get_null( ) &&
|
||||||
` ` &&
|
` ` &&
|
||||||
lv_cap_list &&
|
lv_cap_list &&
|
||||||
gc_newline. "#EC NOTEXT
|
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_buffer = lv_cmd_pkt && '0000'.
|
||||||
lv_tmp = lcl_convert=>string_to_xstring_utf8( lv_buffer ).
|
lv_tmp = lcl_convert=>string_to_xstring_utf8( lv_buffer ).
|
||||||
|
@ -566,38 +474,6 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD. "receive_pack
|
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.
|
METHOD parse.
|
||||||
|
|
||||||
CONSTANTS: lc_band1 TYPE x VALUE '01'.
|
CONSTANTS: lc_band1 TYPE x VALUE '01'.
|
||||||
|
@ -608,7 +484,7 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
WHILE xstrlen( cv_data ) >= 4.
|
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 ).
|
IF lv_len > xstrlen( cv_data ).
|
||||||
lcx_exception=>raise( 'parse, string length too large' ).
|
lcx_exception=>raise( 'parse, string length too large' ).
|
||||||
|
@ -641,7 +517,7 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
lv_xstring TYPE xstring,
|
lv_xstring TYPE xstring,
|
||||||
lv_line TYPE string,
|
lv_line TYPE string,
|
||||||
lv_pack TYPE xstring,
|
lv_pack TYPE xstring,
|
||||||
lt_branches TYPE ty_branch_list_tt,
|
lt_branches TYPE lcl_git_branch_list=>ty_git_branch_list_tt,
|
||||||
lv_capa TYPE string.
|
lv_capa TYPE string.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_branch> LIKE LINE OF lt_branches.
|
FIELD-SYMBOLS: <ls_branch> LIKE LINE OF lt_branches.
|
||||||
|
@ -678,11 +554,11 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
lv_line = 'want' && ` ` && <ls_branch>-sha1
|
lv_line = 'want' && ` ` && <ls_branch>-sha1
|
||||||
&& gc_newline. "#EC NOTEXT
|
&& gc_newline. "#EC NOTEXT
|
||||||
ENDIF.
|
ENDIF.
|
||||||
lv_buffer = lv_buffer && pkt_string( lv_line ).
|
lv_buffer = lv_buffer && lcl_git_utils=>pkt_string( lv_line ).
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
IF iv_deepen = abap_true.
|
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.
|
ENDIF.
|
||||||
|
|
||||||
lv_buffer = lv_buffer
|
lv_buffer = lv_buffer
|
||||||
|
@ -707,28 +583,10 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD. "upload_pack
|
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
|
ENDCLASS. "lcl_transport IMPLEMENTATION
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
* CLASS lcl_pack IMPLEMENTATION
|
* CLASS lcl_git_pack IMPLEMENTATION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
*
|
*
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
|
@ -1438,7 +1296,7 @@ CLASS lcl_git_porcelain DEFINITION FINAL FRIENDS ltcl_git_porcelain.
|
||||||
|
|
||||||
CLASS-METHODS delete_branch
|
CLASS-METHODS delete_branch
|
||||||
IMPORTING io_repo TYPE REF TO lcl_repo_online
|
IMPORTING io_repo TYPE REF TO lcl_repo_online
|
||||||
is_branch TYPE lcl_git_transport=>ty_branch_list
|
is_branch TYPE lcl_git_branch_list=>ty_git_branch
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
CLASS-METHODS full_tree
|
CLASS-METHODS full_tree
|
||||||
|
@ -1627,7 +1485,7 @@ CLASS lcl_git_porcelain IMPLEMENTATION.
|
||||||
lv_sha1 TYPE ty_sha1,
|
lv_sha1 TYPE ty_sha1,
|
||||||
lt_trees TYPE ty_trees_tt,
|
lt_trees TYPE ty_trees_tt,
|
||||||
lt_objects TYPE ty_objects_tt,
|
lt_objects TYPE ty_objects_tt,
|
||||||
lt_branches TYPE lcl_git_transport=>ty_branch_list_tt,
|
lt_branches TYPE lcl_git_branch_list=>ty_git_branch_list_tt,
|
||||||
lt_stage TYPE lcl_stage=>ty_stage_tt.
|
lt_stage TYPE lcl_stage=>ty_stage_tt.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_stage> LIKE LINE OF lt_stage,
|
FIELD-SYMBOLS: <ls_stage> LIKE LINE OF lt_stage,
|
||||||
|
|
342
src/zabapgit_git_helpers.prog.abap
Normal file
342
src/zabapgit_git_helpers.prog.abap
Normal file
|
@ -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 <lv_y> TYPE c.
|
||||||
|
|
||||||
|
|
||||||
|
ASSIGN lv_x TO <lv_y> CASTING.
|
||||||
|
lv_z = <lv_y>.
|
||||||
|
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: <ls_branch> 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 <ls_branch>.
|
||||||
|
<ls_branch>-sha1 = lv_hash.
|
||||||
|
<ls_branch>-name = lv_name.
|
||||||
|
<ls_branch>-display_name = get_display_name( lv_name ).
|
||||||
|
<ls_branch>-type = get_type( lv_name ).
|
||||||
|
IF <ls_branch>-name = HEAD_NAME OR <ls_branch>-name = ev_head_symref.
|
||||||
|
<ls_branch>-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 <branch> LIKE LINE OF mt_branches.
|
||||||
|
|
||||||
|
LOOP AT mt_branches ASSIGNING <branch>.
|
||||||
|
IF <branch>-type = c_type-branch.
|
||||||
|
APPEND <branch> TO rt_branches.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
ENDMETHOD. "get_branches_only
|
||||||
|
|
||||||
|
METHOD get_tags_only.
|
||||||
|
FIELD-SYMBOLS <branch> LIKE LINE OF mt_branches.
|
||||||
|
|
||||||
|
LOOP AT mt_branches ASSIGNING <branch>.
|
||||||
|
IF <branch>-type = c_type-tag.
|
||||||
|
APPEND <branch> TO rt_branches.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
ENDMETHOD. "get_tags_only
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_git_branch_list
|
48
src/zabapgit_git_helpers.prog.xml
Normal file
48
src/zabapgit_git_helpers.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_GIT_HELPERS</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<SQLX/>
|
||||||
|
<EDTX/>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL/>
|
||||||
|
<DBNA/>
|
||||||
|
<CLAS/>
|
||||||
|
<TYPE/>
|
||||||
|
<OCCURS/>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<APPL/>
|
||||||
|
<SECU/>
|
||||||
|
<CNAM/>
|
||||||
|
<CDAT>0000-00-00</CDAT>
|
||||||
|
<UNAM/>
|
||||||
|
<UDAT>0000-00-00</UDAT>
|
||||||
|
<VERN/>
|
||||||
|
<LEVL/>
|
||||||
|
<RSTAT/>
|
||||||
|
<RMAND/>
|
||||||
|
<RLOAD>E</RLOAD>
|
||||||
|
<FIXPT/>
|
||||||
|
<SSET/>
|
||||||
|
<SDATE>0000-00-00</SDATE>
|
||||||
|
<STIME/>
|
||||||
|
<IDATE>0000-00-00</IDATE>
|
||||||
|
<ITIME/>
|
||||||
|
<LDBNAME/>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<KEY/>
|
||||||
|
<ENTRY>Include ZABAPGIT_GIT_HELPERS</ENTRY>
|
||||||
|
<LENGTH>28</LENGTH>
|
||||||
|
<SPLIT/>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -869,7 +869,7 @@ CLASS lcl_gui_router IMPLEMENTATION.
|
||||||
|
|
||||||
lo_repo = lcl_app=>repo_srv( )->new_online(
|
lo_repo = lcl_app=>repo_srv( )->new_online(
|
||||||
iv_url = lv_url
|
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.
|
iv_package = lv_target_package ) ##NO_TEXT.
|
||||||
|
|
||||||
lo_repo->status( ). " check for errors
|
lo_repo->status( ). " check for errors
|
||||||
|
|
|
@ -30,11 +30,19 @@ CLASS lcl_gui_page_super DEFINITION ABSTRACT.
|
||||||
|
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
METHODS render_repo_top
|
METHODS render_repo_top
|
||||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||||
iv_show_package TYPE abap_bool DEFAULT abap_true
|
iv_show_package TYPE abap_bool DEFAULT abap_true
|
||||||
iv_show_branch TYPE abap_bool DEFAULT abap_true
|
iv_show_branch TYPE abap_bool DEFAULT abap_true
|
||||||
iv_branch TYPE string OPTIONAL
|
iv_interactive_branch TYPE abap_bool DEFAULT abap_false
|
||||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
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.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
METHODS header
|
METHODS header
|
||||||
|
@ -94,9 +102,13 @@ CLASS lcl_gui_page_super IMPLEMENTATION.
|
||||||
IF iv_show_branch = abap_true.
|
IF iv_show_branch = abap_true.
|
||||||
ro_html->add( '<img src="img/branch">' ).
|
ro_html->add( '<img src="img/branch">' ).
|
||||||
IF iv_branch IS INITIAL.
|
IF iv_branch IS INITIAL.
|
||||||
ro_html->add( |<span>{ lo_repo_online->get_branch_name( ) }</span>| ).
|
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.
|
ELSE.
|
||||||
ro_html->add( |<span>{ iv_branch }</span>| ).
|
ro_html->add( render_branch_span( iv_branch = iv_branch
|
||||||
|
io_repo = lo_repo_online
|
||||||
|
iv_interactive = iv_interactive_branch ) ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
@ -111,6 +123,30 @@ CLASS lcl_gui_page_super IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD.
|
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=>c_type-branch.
|
||||||
|
WHEN lcl_git_branch_list=>c_type-tag.
|
||||||
|
WHEN OTHERS.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
CREATE OBJECT ro_html.
|
||||||
|
IF iv_interactive = abap_true.
|
||||||
|
ro_html->add( |<span class="{ lv_class }">| ).
|
||||||
|
ro_html->add_anchor( iv_act = |switch_branch?{ io_repo->get_key( ) }|
|
||||||
|
iv_txt = lv_text ). "TODO refactor
|
||||||
|
ro_html->add( '</span>' ).
|
||||||
|
ELSE.
|
||||||
|
ro_html->add( |<span class="{ lv_class }">{ lv_text }</span>| ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "render_branch_span
|
||||||
|
|
||||||
METHOD header.
|
METHOD header.
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
CREATE OBJECT ro_html.
|
||||||
|
@ -321,6 +357,7 @@ CLASS lcl_gui_page_super IMPLEMENTATION.
|
||||||
_add '.dropdown:hover .dropdown_content { display: block; }'.
|
_add '.dropdown:hover .dropdown_content { display: block; }'.
|
||||||
_add '.dropdown:hover .dropbtn { color: #79a0d2; }'.
|
_add '.dropdown:hover .dropbtn { color: #79a0d2; }'.
|
||||||
|
|
||||||
|
" REPOSITORY
|
||||||
_add '/* REPOSITORY */'.
|
_add '/* REPOSITORY */'.
|
||||||
_add 'div.repo {'.
|
_add 'div.repo {'.
|
||||||
_add ' margin-top: 3px;'.
|
_add ' margin-top: 3px;'.
|
||||||
|
|
|
@ -37,7 +37,7 @@ CLASS lcl_branch_overview DEFINITION FINAL.
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
CLASS-METHODS: get_branches
|
CLASS-METHODS: get_branches
|
||||||
RETURNING VALUE(rt_branches) TYPE lcl_git_transport=>ty_branch_list_tt.
|
RETURNING VALUE(rt_branches) TYPE lcl_git_branch_list=>ty_git_branch_list_tt.
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ CLASS lcl_branch_overview DEFINITION FINAL.
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
CLASS-DATA:
|
CLASS-DATA:
|
||||||
gt_branches TYPE lcl_git_transport=>ty_branch_list_tt,
|
gt_branches TYPE lcl_git_branch_list=>ty_git_branch_list_tt,
|
||||||
gt_commits TYPE TABLE OF ty_commit.
|
gt_commits TYPE TABLE OF ty_commit.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
@ -161,11 +161,8 @@ CLASS lcl_branch_overview IMPLEMENTATION.
|
||||||
* get objects directly from git, mo_repo only contains a shallow clone of only
|
* get objects directly from git, mo_repo only contains a shallow clone of only
|
||||||
* the selected branch
|
* 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( ) )->get_branches_only( ).
|
||||||
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.
|
|
||||||
|
|
||||||
lcl_git_transport=>upload_pack( EXPORTING io_repo = io_repo
|
lcl_git_transport=>upload_pack( EXPORTING io_repo = io_repo
|
||||||
iv_deepen = abap_false
|
iv_deepen = abap_false
|
||||||
|
@ -379,7 +376,7 @@ CLASS lcl_gui_page_branch_overview IMPLEMENTATION.
|
||||||
METHOD form_select.
|
METHOD form_select.
|
||||||
|
|
||||||
DATA: lv_name TYPE string,
|
DATA: lv_name TYPE string,
|
||||||
lt_branches TYPE lcl_git_transport=>ty_branch_list_tt.
|
lt_branches TYPE lcl_git_branch_list=>ty_git_branch_list_tt.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_branch> LIKE LINE OF lt_branches.
|
FIELD-SYMBOLS: <ls_branch> LIKE LINE OF lt_branches.
|
||||||
|
|
||||||
|
|
|
@ -293,7 +293,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||||
CREATE OBJECT ro_html.
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
ro_html->add( |<div class="repo" id="repo{ io_repo->get_key( ) }">| ).
|
ro_html->add( |<div class="repo" id="repo{ io_repo->get_key( ) }">| ).
|
||||||
ro_html->add( render_repo_top( io_repo ) ).
|
ro_html->add( render_repo_top( io_repo = io_repo iv_interactive_branch = abap_true ) ).
|
||||||
|
|
||||||
TRY.
|
TRY.
|
||||||
extract_repo_content( EXPORTING io_repo = io_repo
|
extract_repo_content( EXPORTING io_repo = io_repo
|
||||||
|
|
|
@ -14,8 +14,8 @@ CLASS lcl_merge DEFINITION FINAL.
|
||||||
|
|
||||||
TYPES: BEGIN OF ty_merge,
|
TYPES: BEGIN OF ty_merge,
|
||||||
repo TYPE REF TO lcl_repo_online,
|
repo TYPE REF TO lcl_repo_online,
|
||||||
source TYPE lcl_git_transport=>ty_branch_list,
|
source TYPE lcl_git_branch_list=>ty_git_branch,
|
||||||
target TYPE lcl_git_transport=>ty_branch_list,
|
target TYPE lcl_git_branch_list=>ty_git_branch,
|
||||||
common TYPE ty_ancestor,
|
common TYPE ty_ancestor,
|
||||||
stree TYPE lcl_git_porcelain=>ty_expanded_tt,
|
stree TYPE lcl_git_porcelain=>ty_expanded_tt,
|
||||||
ttree TYPE lcl_git_porcelain=>ty_expanded_tt,
|
ttree TYPE lcl_git_porcelain=>ty_expanded_tt,
|
||||||
|
@ -294,29 +294,20 @@ CLASS lcl_merge IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD fetch_git.
|
METHOD fetch_git.
|
||||||
|
|
||||||
DEFINE _find.
|
DATA: lo_branch_list TYPE REF TO lcl_git_branch_list,
|
||||||
lv_name = 'refs/heads/' && &1 ##NO_TEXT.
|
lt_upload TYPE lcl_git_branch_list=>ty_git_branch_list_tt.
|
||||||
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,
|
lo_branch_list = lcl_git_transport=>branches( gs_merge-repo->get_url( ) ).
|
||||||
lt_branches TYPE lcl_git_transport=>ty_branch_list_tt,
|
gs_merge-source = lo_branch_list->find_by_name( lcl_git_branch_list=>complete_heads_branch_name( iv_source ) ).
|
||||||
lt_upload TYPE lcl_git_transport=>ty_branch_list_tt.
|
gs_merge-target = lo_branch_list->find_by_name( lcl_git_branch_list=>complete_heads_branch_name( iv_target ) ).
|
||||||
|
|
||||||
|
APPEND gs_merge-source TO lt_upload.
|
||||||
|
APPEND gs_merge-target TO lt_upload.
|
||||||
|
|
||||||
lt_branches = lcl_git_transport=>branches( gs_merge-repo->get_url( ) ).
|
lcl_git_transport=>upload_pack( EXPORTING io_repo = gs_merge-repo
|
||||||
|
iv_deepen = abap_false
|
||||||
_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
|
|
||||||
it_branches = lt_upload
|
it_branches = lt_upload
|
||||||
IMPORTING et_objects = gt_objects ).
|
IMPORTING et_objects = gt_objects ).
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ CLASS lcl_popups DEFINITION.
|
||||||
RAISING lcx_exception,
|
RAISING lcx_exception,
|
||||||
branch_list_popup
|
branch_list_popup
|
||||||
IMPORTING iv_url TYPE string
|
IMPORTING iv_url TYPE string
|
||||||
RETURNING VALUE(rs_branch) TYPE lcl_git_transport=>ty_branch_list
|
RETURNING VALUE(rs_branch) TYPE lcl_git_branch_list=>ty_git_branch
|
||||||
RAISING lcx_exception,
|
RAISING lcx_exception,
|
||||||
repo_popup
|
repo_popup
|
||||||
IMPORTING iv_url TYPE string
|
IMPORTING iv_url TYPE string
|
||||||
|
@ -116,7 +116,7 @@ CLASS lcl_popups IMPLEMENTATION.
|
||||||
CLEAR ev_cancel.
|
CLEAR ev_cancel.
|
||||||
|
|
||||||
* TAB FLD LABEL DEF ATTR
|
* 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'
|
CALL FUNCTION 'POPUP_GET_VALUES'
|
||||||
EXPORTING
|
EXPORTING
|
||||||
|
@ -137,7 +137,7 @@ CLASS lcl_popups IMPLEMENTATION.
|
||||||
ELSE.
|
ELSE.
|
||||||
READ TABLE lt_fields INDEX 1 ASSIGNING <ls_field>.
|
READ TABLE lt_fields INDEX 1 ASSIGNING <ls_field>.
|
||||||
ASSERT sy-subrc = 0.
|
ASSERT sy-subrc = 0.
|
||||||
ev_name = <ls_field>-value.
|
ev_name = lcl_git_branch_list=>complete_heads_branch_name( <ls_field>-value ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
@ -194,7 +194,7 @@ CLASS lcl_popups IMPLEMENTATION.
|
||||||
METHOD delete_branch.
|
METHOD delete_branch.
|
||||||
|
|
||||||
DATA: lo_repo TYPE REF TO lcl_repo_online,
|
DATA: lo_repo TYPE REF TO lcl_repo_online,
|
||||||
ls_branch TYPE lcl_git_transport=>ty_branch_list.
|
ls_branch TYPE lcl_git_branch_list=>ty_git_branch.
|
||||||
|
|
||||||
|
|
||||||
lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
|
lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
|
||||||
|
@ -220,7 +220,8 @@ CLASS lcl_popups IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD branch_list_popup.
|
METHOD branch_list_popup.
|
||||||
|
|
||||||
DATA: lt_branches TYPE lcl_git_transport=>ty_branch_list_tt,
|
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,
|
lv_answer TYPE c LENGTH 1,
|
||||||
lt_selection TYPE TABLE OF spopli.
|
lt_selection TYPE TABLE OF spopli.
|
||||||
|
|
||||||
|
@ -228,13 +229,20 @@ CLASS lcl_popups IMPLEMENTATION.
|
||||||
<ls_branch> LIKE LINE OF lt_branches.
|
<ls_branch> LIKE LINE OF lt_branches.
|
||||||
|
|
||||||
|
|
||||||
lt_branches = lcl_git_transport=>branches( iv_url ).
|
lo_branches = lcl_git_transport=>branches( iv_url ).
|
||||||
|
|
||||||
|
lt_branches = lo_branches->get_branches_only( ).
|
||||||
LOOP AT lt_branches ASSIGNING <ls_branch>.
|
LOOP AT lt_branches ASSIGNING <ls_branch>.
|
||||||
APPEND INITIAL LINE TO lt_selection ASSIGNING <ls_sel>.
|
APPEND INITIAL LINE TO lt_selection ASSIGNING <ls_sel>.
|
||||||
<ls_sel>-varoption = <ls_branch>-name.
|
<ls_sel>-varoption = <ls_branch>-name.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
|
* lt_branches = lo_branches->get_tags_only( ).
|
||||||
|
* LOOP AT lt_branches ASSIGNING <ls_branch>.
|
||||||
|
* APPEND INITIAL LINE TO lt_selection ASSIGNING <ls_sel>.
|
||||||
|
* <ls_sel>-varoption = <ls_branch>-name.
|
||||||
|
* ENDLOOP.
|
||||||
|
|
||||||
CALL FUNCTION 'POPUP_TO_DECIDE_LIST'
|
CALL FUNCTION 'POPUP_TO_DECIDE_LIST'
|
||||||
EXPORTING
|
EXPORTING
|
||||||
textline1 = 'Select branch'
|
textline1 = 'Select branch'
|
||||||
|
@ -261,8 +269,7 @@ CLASS lcl_popups IMPLEMENTATION.
|
||||||
READ TABLE lt_selection ASSIGNING <ls_sel> WITH KEY selflag = abap_true.
|
READ TABLE lt_selection ASSIGNING <ls_sel> WITH KEY selflag = abap_true.
|
||||||
ASSERT sy-subrc = 0.
|
ASSERT sy-subrc = 0.
|
||||||
|
|
||||||
READ TABLE lt_branches INTO rs_branch WITH KEY name = <ls_sel>-varoption.
|
rs_branch = lo_branches->find_by_name( <ls_sel>-varoption ).
|
||||||
ASSERT sy-subrc = 0.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
@ -298,6 +305,7 @@ CLASS lcl_popups IMPLEMENTATION.
|
||||||
lv_icon_br TYPE icon-name,
|
lv_icon_br TYPE icon-name,
|
||||||
lt_fields TYPE TABLE OF sval,
|
lt_fields TYPE TABLE OF sval,
|
||||||
lv_pattr TYPE spo_fattr,
|
lv_pattr TYPE spo_fattr,
|
||||||
|
lv_battr TYPE spo_fattr,
|
||||||
lv_button2 TYPE svalbutton-buttontext,
|
lv_button2 TYPE svalbutton-buttontext,
|
||||||
lv_icon2 TYPE icon-name.
|
lv_icon2 TYPE icon-name.
|
||||||
|
|
||||||
|
@ -306,15 +314,17 @@ CLASS lcl_popups IMPLEMENTATION.
|
||||||
|
|
||||||
IF NOT iv_package IS INITIAL.
|
IF NOT iv_package IS INITIAL.
|
||||||
lv_pattr = '05'.
|
lv_pattr = '05'.
|
||||||
|
lv_battr = '03'.
|
||||||
ELSE.
|
ELSE.
|
||||||
|
lv_battr = '05'.
|
||||||
lv_button2 = 'Create package' ##NO_TEXT.
|
lv_button2 = 'Create package' ##NO_TEXT.
|
||||||
lv_icon2 = icon_msg.
|
lv_icon2 = icon_msg.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
* TAB FLD LABEL DEF ATTR
|
* 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 '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_ok = icon_okay.
|
||||||
lv_icon_br = icon_workflow_fork.
|
lv_icon_br = icon_workflow_fork.
|
||||||
|
|
|
@ -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,
|
RETURNING VALUE(rv_url) TYPE lcl_persistence_repo=>ty_repo-url,
|
||||||
get_branch_name
|
get_branch_name
|
||||||
RETURNING VALUE(rv_name) TYPE lcl_persistence_repo=>ty_repo-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
|
set_url
|
||||||
IMPORTING iv_url TYPE lcl_persistence_repo=>ty_repo-url
|
IMPORTING iv_url TYPE lcl_persistence_repo=>ty_repo-url
|
||||||
RAISING lcx_exception,
|
RAISING lcx_exception,
|
||||||
|
@ -109,7 +111,8 @@ CLASS lcl_repo_online DEFINITION INHERITING FROM lcl_repo FINAL.
|
||||||
DATA:
|
DATA:
|
||||||
mt_objects TYPE ty_objects_tt,
|
mt_objects TYPE ty_objects_tt,
|
||||||
mv_branch TYPE ty_sha1,
|
mv_branch TYPE ty_sha1,
|
||||||
mv_initialized TYPE abap_bool.
|
mv_initialized TYPE abap_bool,
|
||||||
|
mo_branches TYPE REF TO lcl_git_branch_list.
|
||||||
|
|
||||||
METHODS:
|
METHODS:
|
||||||
handle_stage_ignore
|
handle_stage_ignore
|
||||||
|
|
|
@ -73,6 +73,8 @@ CLASS lcl_repo_online IMPLEMENTATION.
|
||||||
et_objects = mt_objects
|
et_objects = mt_objects
|
||||||
ev_branch = mv_branch ).
|
ev_branch = mv_branch ).
|
||||||
|
|
||||||
|
mo_branches = lcl_git_transport=>branches( get_url( ) ).
|
||||||
|
|
||||||
find_dot_abapgit( ).
|
find_dot_abapgit( ).
|
||||||
|
|
||||||
mv_initialized = abap_true.
|
mv_initialized = abap_true.
|
||||||
|
@ -105,6 +107,10 @@ CLASS lcl_repo_online IMPLEMENTATION.
|
||||||
rv_name = ms_data-branch_name.
|
rv_name = ms_data-branch_name.
|
||||||
ENDMETHOD. "get_branch_name
|
ENDMETHOD. "get_branch_name
|
||||||
|
|
||||||
|
METHOD get_branches.
|
||||||
|
ro_branches = mo_branches.
|
||||||
|
ENDMETHOD. "get_branches
|
||||||
|
|
||||||
METHOD set_url.
|
METHOD set_url.
|
||||||
|
|
||||||
mv_initialized = abap_false.
|
mv_initialized = abap_false.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user