mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +08:00
new feature: delete branch
branch operations: overview create switch delete moved to new dropdown, instead of the "Advanced" dropdown
This commit is contained in:
parent
a6b14f627a
commit
05477af7c5
|
@ -3,7 +3,7 @@ REPORT zabapgit LINE-SIZE 100.
|
|||
* See http://www.abapgit.org
|
||||
|
||||
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
|
||||
gc_abap_version TYPE string VALUE 'v1.15.13'. "#EC NOTEXT
|
||||
gc_abap_version TYPE string VALUE 'v1.16.0'. "#EC NOTEXT
|
||||
|
||||
********************************************************************************
|
||||
* The MIT License (MIT)
|
||||
|
|
|
@ -52,16 +52,12 @@ FORM branch_popup TABLES tt_fields TYPE ty_sval_tt
|
|||
* called dynamically from function module POPUP_GET_VALUES_USER_BUTTONS
|
||||
|
||||
DATA: lv_url TYPE string,
|
||||
lv_answer TYPE c,
|
||||
lx_error TYPE REF TO lcx_exception,
|
||||
lt_selection TYPE TABLE OF spopli,
|
||||
ls_package_data TYPE scompkdtln,
|
||||
lt_branches TYPE lcl_git_transport=>ty_branch_list_tt.
|
||||
ls_branch TYPE lcl_git_transport=>ty_branch_list.
|
||||
|
||||
FIELD-SYMBOLS: <ls_fbranch> LIKE LINE OF tt_fields,
|
||||
<ls_branch> LIKE LINE OF lt_branches,
|
||||
<ls_sel> LIKE LINE OF lt_selection,
|
||||
<ls_furl> LIKE LINE OF tt_fields.
|
||||
FIELD-SYMBOLS: <ls_furl> LIKE LINE OF tt_fields,
|
||||
<ls_fbranch> LIKE LINE OF tt_fields.
|
||||
|
||||
|
||||
CLEAR cs_error.
|
||||
|
@ -77,44 +73,18 @@ FORM branch_popup TABLES tt_fields TYPE ty_sval_tt
|
|||
lv_url = <ls_furl>-value.
|
||||
|
||||
TRY.
|
||||
lt_branches = lcl_git_transport=>branches( lv_url ).
|
||||
ls_branch = lcl_popups=>branch_list_popup( lv_url ).
|
||||
CATCH lcx_exception INTO lx_error.
|
||||
MESSAGE lx_error TYPE 'S' DISPLAY LIKE 'E'.
|
||||
RETURN.
|
||||
ENDTRY.
|
||||
|
||||
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'
|
||||
EXPORTING
|
||||
textline1 = 'Select branch'
|
||||
titel = 'Select branch'
|
||||
IMPORTING
|
||||
answer = lv_answer
|
||||
TABLES
|
||||
t_spopli = lt_selection
|
||||
EXCEPTIONS
|
||||
not_enough_answers = 1
|
||||
too_much_answers = 2
|
||||
too_much_marks = 3
|
||||
OTHERS = 4. "#EC NOTEXT
|
||||
IF sy-subrc <> 0.
|
||||
_raise 'Error from POPUP_TO_DECIDE_LIST'.
|
||||
ENDIF.
|
||||
|
||||
IF lv_answer = 'A'. " cancel
|
||||
IF ls_branch IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_selection ASSIGNING <ls_sel> WITH KEY selflag = abap_true.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
READ TABLE tt_fields ASSIGNING <ls_fbranch> WITH KEY tabname = 'TEXTL'.
|
||||
ASSERT sy-subrc = 0.
|
||||
<ls_fbranch>-value = <ls_sel>-varoption.
|
||||
<ls_fbranch>-value = ls_branch-name.
|
||||
|
||||
ELSEIF pv_code = 'COD2'.
|
||||
cv_show_popup = abap_true.
|
||||
|
|
|
@ -1366,6 +1366,11 @@ CLASS lcl_git_porcelain DEFINITION FINAL FRIENDS ltcl_git_porcelain.
|
|||
iv_from TYPE ty_sha1
|
||||
RAISING lcx_exception.
|
||||
|
||||
CLASS-METHODS delete_branch
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo_online
|
||||
is_branch TYPE lcl_git_transport=>ty_branch_list
|
||||
RAISING lcx_exception.
|
||||
|
||||
CLASS-METHODS full_tree
|
||||
IMPORTING it_objects TYPE ty_objects_tt
|
||||
iv_branch TYPE ty_sha1
|
||||
|
@ -1390,6 +1395,8 @@ CLASS lcl_git_porcelain DEFINITION FINAL FRIENDS ltcl_git_porcelain.
|
|||
|
||||
TYPES: ty_folders_tt TYPE STANDARD TABLE OF ty_folder WITH DEFAULT KEY.
|
||||
|
||||
CONSTANTS: c_zero TYPE ty_sha1 VALUE '0000000000000000000000000000000000000000'.
|
||||
|
||||
CLASS-METHODS build_trees
|
||||
IMPORTING it_expanded TYPE ty_expanded_tt
|
||||
RETURNING VALUE(rt_trees) TYPE ty_trees_tt
|
||||
|
@ -1505,22 +1512,38 @@ CLASS lcl_git_porcelain IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "receive_pack
|
||||
|
||||
METHOD create_branch.
|
||||
METHOD delete_branch.
|
||||
|
||||
DATA: lv_zero TYPE ty_sha1,
|
||||
lt_objects TYPE ty_objects_tt,
|
||||
DATA: lt_objects TYPE 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(
|
||||
iv_url = io_repo->get_url( )
|
||||
iv_old = lv_zero
|
||||
iv_old = is_branch-sha1
|
||||
iv_new = c_zero
|
||||
iv_branch_name = is_branch-name
|
||||
iv_pack = lv_pack ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD create_branch.
|
||||
|
||||
DATA: lt_objects TYPE ty_objects_tt,
|
||||
lv_pack TYPE xstring.
|
||||
|
||||
|
||||
* "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(
|
||||
iv_url = io_repo->get_url( )
|
||||
iv_old = c_zero
|
||||
iv_new = iv_from
|
||||
iv_branch_name = iv_name
|
||||
iv_pack = lv_pack ).
|
||||
|
|
|
@ -771,11 +771,11 @@ CLASS lcl_object_clas IMPLEMENTATION.
|
|||
* todo, not sure this is correct, to be tested
|
||||
SELECT SINGLE changedby FROM seoclassdf INTO rv_user
|
||||
WHERE clsname = ms_item-obj_name
|
||||
AND version = '1'.
|
||||
AND version = '1'. "#EC CI_GENBUFF
|
||||
IF sy-subrc = 0 AND rv_user IS INITIAL.
|
||||
SELECT SINGLE author FROM seoclassdf INTO rv_user
|
||||
WHERE clsname = ms_item-obj_name
|
||||
AND version = '1'.
|
||||
AND version = '1'. "#EC CI_GENBUFF
|
||||
ENDIF.
|
||||
IF sy-subrc <> 0.
|
||||
rv_user = c_user_unknown.
|
||||
|
|
|
@ -25,7 +25,7 @@ CLASS lcl_object_msag IMPLEMENTATION.
|
|||
METHOD lif_object~changed_by.
|
||||
|
||||
SELECT SINGLE lastuser FROM t100a INTO rv_user
|
||||
WHERE arbgb = ms_item-obj_name.
|
||||
WHERE arbgb = ms_item-obj_name. "#EC CI_GENBUFF
|
||||
IF sy-subrc <> 0.
|
||||
rv_user = c_user_unknown.
|
||||
ENDIF.
|
||||
|
|
|
@ -26,7 +26,7 @@ CLASS lcl_object_shlp IMPLEMENTATION.
|
|||
|
||||
SELECT SINGLE as4user FROM dd30l INTO rv_user
|
||||
WHERE shlpname = ms_item-obj_name
|
||||
AND as4local = 'A'.
|
||||
AND as4local = 'A'. "#EC CI_GENBUFF
|
||||
IF sy-subrc <> 0.
|
||||
rv_user = c_user_unknown.
|
||||
ENDIF.
|
||||
|
|
|
@ -16,6 +16,7 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
|||
CONSTANTS: BEGIN OF c_actions,
|
||||
newoffline TYPE string VALUE 'newoffline' ##NO_TEXT,
|
||||
switch_branch TYPE string VALUE 'switch_branch' ##NO_TEXT,
|
||||
delete_branch TYPE string VALUE 'delete_branch' ##NO_TEXT,
|
||||
install TYPE string VALUE 'install' ##NO_TEXT,
|
||||
show TYPE string VALUE 'show' ##NO_TEXT,
|
||||
END OF c_actions.
|
||||
|
@ -205,6 +206,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
|||
DATA: lo_toolbar TYPE REF TO lcl_html_toolbar,
|
||||
lv_key TYPE lcl_persistence_db=>ty_value,
|
||||
lo_sub TYPE REF TO lcl_html_toolbar,
|
||||
lo_branch TYPE REF TO lcl_html_toolbar,
|
||||
lo_repo_online TYPE REF TO lcl_repo_online.
|
||||
|
||||
|
||||
|
@ -239,14 +241,19 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
|||
ENDIF.
|
||||
|
||||
CREATE OBJECT lo_sub.
|
||||
|
||||
IF io_repo->is_offline( ) = abap_false.
|
||||
lo_sub->add( iv_txt = 'Branch overview'
|
||||
iv_act = |branch_overview?{ lv_key }| ).
|
||||
lo_sub->add( iv_txt = 'Switch branch'
|
||||
iv_act = |{ c_actions-switch_branch }?{ lv_key }| ).
|
||||
lo_sub->add( iv_txt = 'Create branch'
|
||||
iv_act = |create_branch?{ lv_key }| ).
|
||||
CREATE OBJECT lo_branch.
|
||||
lo_branch->add( iv_txt = 'Overview'
|
||||
iv_act = |branch_overview?{ lv_key }| ).
|
||||
lo_branch->add( iv_txt = 'Switch'
|
||||
iv_act = |{ c_actions-switch_branch }?{ lv_key }| ).
|
||||
lo_branch->add( iv_txt = 'Create'
|
||||
iv_act = |create_branch?{ lv_key }| ).
|
||||
lo_branch->add( iv_txt = 'Delete'
|
||||
iv_act = |{ c_actions-delete_branch }?{ lv_key }| ).
|
||||
lo_toolbar->add( iv_txt = 'Branch'
|
||||
io_sub = lo_branch ) ##NO_TEXT.
|
||||
|
||||
lo_sub->add( iv_txt = 'Reset local'
|
||||
iv_act = |reset?{ lv_key }| ).
|
||||
lo_sub->add( iv_txt = 'Background mode'
|
||||
|
@ -255,7 +262,6 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
|||
lo_sub->add( iv_txt = 'Export & Commit'
|
||||
iv_act = |files_commit?{ lv_key }| ).
|
||||
ENDIF.
|
||||
|
||||
lo_sub->add( iv_txt = 'Remove'
|
||||
iv_act = |remove?{ lv_key }| ).
|
||||
lo_sub->add( iv_txt = 'Uninstall'
|
||||
|
@ -602,6 +608,10 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
|||
lcl_app=>user( )->set_repo_show( mv_show ).
|
||||
ev_state = gc_event_state-re_render.
|
||||
ENDIF.
|
||||
WHEN c_actions-delete_branch.
|
||||
lv_key = iv_getdata.
|
||||
lcl_popups=>delete_branch( lv_key ).
|
||||
ev_state = gc_event_state-re_render.
|
||||
WHEN c_actions-switch_branch.
|
||||
lv_key = iv_getdata.
|
||||
lcl_popups=>switch_branch( lv_key ).
|
||||
|
|
|
@ -26,6 +26,13 @@ CLASS lcl_popups DEFINITION.
|
|||
switch_branch
|
||||
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||
RAISING lcx_exception,
|
||||
delete_branch
|
||||
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||
RAISING lcx_exception,
|
||||
branch_list_popup
|
||||
IMPORTING iv_url TYPE string
|
||||
RETURNING VALUE(rs_branch) TYPE lcl_git_transport=>ty_branch_list
|
||||
RAISING lcx_exception,
|
||||
repo_popup
|
||||
IMPORTING iv_url TYPE string
|
||||
iv_package TYPE devclass OPTIONAL
|
||||
|
@ -184,6 +191,81 @@ CLASS lcl_popups IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "repo_new_offline
|
||||
|
||||
METHOD delete_branch.
|
||||
|
||||
DATA: lo_repo TYPE REF TO lcl_repo_online,
|
||||
ls_branch TYPE lcl_git_transport=>ty_branch_list.
|
||||
|
||||
|
||||
lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
|
||||
|
||||
ls_branch = branch_list_popup( lo_repo->get_url( ) ).
|
||||
IF ls_branch IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
IF ls_branch-name = 'HEAD'.
|
||||
_raise 'cannot delete HEAD'.
|
||||
ELSEIF ls_branch-name = lo_repo->get_branch_name( ).
|
||||
_raise 'switch branch before deleting current'.
|
||||
ENDIF.
|
||||
|
||||
lcl_git_porcelain=>delete_branch(
|
||||
io_repo = lo_repo
|
||||
is_branch = ls_branch ).
|
||||
|
||||
MESSAGE 'Branch deleted' TYPE 'S'.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD branch_list_popup.
|
||||
|
||||
DATA: lt_branches TYPE lcl_git_transport=>ty_branch_list_tt,
|
||||
lv_answer TYPE c LENGTH 1,
|
||||
lt_selection TYPE TABLE OF spopli.
|
||||
|
||||
FIELD-SYMBOLS: <ls_sel> LIKE LINE OF lt_selection,
|
||||
<ls_branch> LIKE LINE OF lt_branches.
|
||||
|
||||
|
||||
lt_branches = lcl_git_transport=>branches( iv_url ).
|
||||
|
||||
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'
|
||||
EXPORTING
|
||||
textline1 = 'Select branch'
|
||||
titel = 'Select branch'
|
||||
start_col = 5
|
||||
start_row = 10
|
||||
IMPORTING
|
||||
answer = lv_answer
|
||||
TABLES
|
||||
t_spopli = lt_selection
|
||||
EXCEPTIONS
|
||||
not_enough_answers = 1
|
||||
too_much_answers = 2
|
||||
too_much_marks = 3
|
||||
OTHERS = 4. "#EC NOTEXT
|
||||
IF sy-subrc <> 0.
|
||||
_raise 'Error from POPUP_TO_DECIDE_LIST'.
|
||||
ENDIF.
|
||||
|
||||
IF lv_answer = 'A'. " cancel
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_selection ASSIGNING <ls_sel> WITH KEY selflag = abap_true.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
READ TABLE lt_branches INTO rs_branch WITH KEY name = <ls_sel>-varoption.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD switch_branch.
|
||||
|
||||
DATA: lo_repo TYPE REF TO lcl_repo_online,
|
||||
|
|
Loading…
Reference in New Issue
Block a user