create new branch, close #266

This commit is contained in:
larshp 2016-06-24 08:13:17 +00:00
parent 2e45f57145
commit ccb0313fde

View File

@ -3,7 +3,7 @@ REPORT zabapgit.
* See http://www.abapgit.org
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
gc_abap_version TYPE string VALUE 'v1.12.2'. "#EC NOTEXT
gc_abap_version TYPE string VALUE 'v1.12.3'. "#EC NOTEXT
********************************************************************************
* The MIT License (MIT)
@ -16621,6 +16621,12 @@ CLASS lcl_git_porcelain DEFINITION FINAL FRIENDS ltcl_git_porcelain.
RETURNING VALUE(rv_branch) TYPE ty_sha1
RAISING lcx_exception.
CLASS-METHODS create_branch
IMPORTING io_repo TYPE REF TO lcl_repo_online
iv_name TYPE string
iv_from TYPE ty_sha1
RAISING lcx_exception.
PRIVATE SECTION.
TYPES: BEGIN OF ty_expanded,
path TYPE string,
@ -16874,6 +16880,11 @@ CLASS lcl_gui_router DEFINITION FINAL.
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
RAISING lcx_exception.
METHODS create_branch_popup
EXPORTING ev_name TYPE string
ev_cancel TYPE abap_bool
RAISING lcx_exception.
METHODS create_branch
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
RAISING lcx_exception.
@ -19094,6 +19105,28 @@ CLASS lcl_git_porcelain IMPLEMENTATION.
ENDMETHOD. "receive_pack
METHOD create_branch.
DATA: lv_zero TYPE ty_sha1,
lt_objects TYPE lcl_git_pack=>ty_objects_tt,
lv_pack TYPE xstring.
lv_zero = '0000000000000000000000000000000000000000'.
* "client MUST send an empty packfile"
* https://github.com/git/git/blob/master/Documentation/technical/pack-protocol.txt#L514
lv_pack = lcl_git_pack=>encode( lt_objects ).
lcl_git_transport=>receive_pack(
io_repo = io_repo
iv_old = lv_zero
iv_new = iv_from
iv_branch_name = iv_name
iv_pack = lv_pack ).
ENDMETHOD.
METHOD push.
DATA: lt_expanded TYPE ty_expanded_tt,
@ -24881,17 +24914,72 @@ CLASS lcl_gui_router IMPLEMENTATION.
ENDMETHOD.
METHOD create_branch_popup.
DATA: lv_answer TYPE c LENGTH 1,
lt_fields TYPE TABLE OF sval.
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
CLEAR ev_name.
CLEAR ev_cancel.
* TAB FLD LABEL DEF ATTR
_add_dialog_fld 'TEXTL' 'LINE' 'Name' 'refs/heads/branch_name' ''.
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
popup_title = 'Create branch'
IMPORTING
returncode = lv_answer
TABLES
fields = lt_fields
EXCEPTIONS
error_in_fields = 1
OTHERS = 2 ##NO_TEXT.
IF sy-subrc <> 0.
_raise 'error from POPUP_GET_VALUES'.
ENDIF.
IF lv_answer = 'A'.
ev_cancel = abap_true.
ELSE.
READ TABLE lt_fields INDEX 1 ASSIGNING <ls_field>.
ASSERT sy-subrc = 0.
ev_name = <ls_field>-value.
ENDIF.
ENDMETHOD.
METHOD create_branch.
* DATA: lo_repo TYPE REF TO lcl_repo_online.
*
* lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
DATA: lv_name TYPE string,
lv_cancel TYPE abap_bool,
lo_repo TYPE REF TO lcl_repo_online.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = 'todo'
txt1 = 'see https://github.com/larshp/abapGit/issues/266'
txt2 = '' ##NO_TEXT.
lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
create_branch_popup(
IMPORTING
ev_name = lv_name
ev_cancel = lv_cancel ).
IF lv_cancel = abap_true.
RETURN.
ENDIF.
ASSERT lv_name CP 'refs/heads/+*'.
lcl_git_porcelain=>create_branch(
io_repo = lo_repo
iv_name = lv_name
iv_from = lo_repo->get_sha1_local( ) ).
* automatically switch to new branch
lo_repo->set_branch_name( lv_name ).
MESSAGE 'Switched to new branch' TYPE 'S'.
ENDMETHOD.