Merge pull request #316 from sbcgua/master

Branch logic refactoring
This commit is contained in:
Lars Hvam 2016-09-05 13:20:41 +02:00 committed by GitHub
commit f04d774e09
13 changed files with 506 additions and 213 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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,

View 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

View 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>

View File

@ -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

View File

@ -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;'.

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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.