diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index 8805f16d5..4de8aca31 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -140,6 +140,13 @@ TYPES: BEGIN OF ty_sotr, TYPES: ty_sotr_tt TYPE STANDARD TABLE OF ty_sotr WITH DEFAULT KEY. +TYPES: + BEGIN OF ty_branch_pull_request, + branch_name TYPE string, + commit_text TYPE string, + pull_request_title TYPE string, + END OF ty_branch_pull_request. + CONSTANTS: BEGIN OF gc_state, " https://git-scm.com/docs/git-status unchanged TYPE char1 VALUE '', added TYPE char1 VALUE 'A', diff --git a/src/zabapgit_forms.prog.abap b/src/zabapgit_forms.prog.abap index e3d9d95d1..30f2c4f4c 100644 --- a/src/zabapgit_forms.prog.abap +++ b/src/zabapgit_forms.prog.abap @@ -137,6 +137,14 @@ FORM package_popup TABLES tt_fields TYPE ty_sval_tt ENDIF. ENDFORM. "package_popup +FORM pull_request_popup TABLES tt_fields TYPE ty_sval_tt + USING pv_code TYPE clike + CHANGING cs_error TYPE svale + cv_show_popup TYPE c + RAISING lcx_exception ##called ##needed. +* called dynamically from function module POPUP_GET_VALUES_USER_BUTTONS +ENDFORM. + FORM output. DATA: lt_ucomm TYPE TABLE OF sy-ucomm. PERFORM set_pf_status IN PROGRAM rsdbrunt IF FOUND. diff --git a/src/zabapgit_gui_router.prog.abap b/src/zabapgit_gui_router.prog.abap index 1847a9edd..a142febcd 100644 --- a/src/zabapgit_gui_router.prog.abap +++ b/src/zabapgit_gui_router.prog.abap @@ -64,12 +64,13 @@ CLASS lcl_gui_router IMPLEMENTATION. METHOD on_event. - DATA: lv_url TYPE string, - lv_key TYPE lcl_persistence_repo=>ty_repo-key, - ls_db TYPE lcl_persistence_db=>ty_content, - ls_item TYPE ty_item, - lt_transport_headers TYPE trwbo_request_headers, - lt_tadir TYPE scts_tadir. + DATA: lv_url TYPE string, + lv_key TYPE lcl_persistence_repo=>ty_repo-key, + ls_db TYPE lcl_persistence_db=>ty_content, + ls_item TYPE ty_item, + lt_transport_headers TYPE trwbo_request_headers, + lt_tadir TYPE scts_tadir, + ls_branch_pull_request TYPE ty_branch_pull_request. lv_key = iv_getdata. " TODO refactor lv_url = iv_getdata. " TODO refactor @@ -176,7 +177,15 @@ CLASS lcl_gui_router IMPLEMENTATION. WHEN gc_action-repo_transport_to_pull_reqst. lt_transport_headers = lcl_transport_popup=>show( ). lt_tadir = lcl_transport=>to_tadir( lt_transport_headers ). - "lcl_services_repo=>transport_to_pull_request( lv_key ). + ls_branch_pull_request = lcl_popups=>popup_to_create_pull_request( + it_transport_headers = lt_transport_headers + it_transport_objects = lt_tadir + ). + lcl_services_repo=>transport_to_pull_request( + iv_repository_key = lv_key + is_branch_pull_request = ls_branch_pull_request + it_transport_objects = lt_tadir + ). ev_state = gc_event_state-re_render. " ZIP services actions diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index 01df95df0..ed806ff8f 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -62,13 +62,19 @@ CLASS lcl_popups DEFINITION FINAL. RAISING lcx_exception, popup_to_inform IMPORTING - titlebar TYPE clike - text_message TYPE clike + titlebar TYPE clike + text_message TYPE clike RAISING lcx_exception, popup_to_create_package - EXPORTING es_package_data TYPE scompkdtln - ev_create TYPE boolean - RAISING lcx_exception. + EXPORTING es_package_data TYPE scompkdtln + ev_create TYPE boolean + RAISING lcx_exception, + popup_to_create_pull_request + IMPORTING it_transport_headers TYPE trwbo_request_headers + it_transport_objects TYPE scts_tadir + RETURNING VALUE(rs_branch_pull_request) TYPE ty_branch_pull_request + RAISING lcx_exception + lcx_cancel. ENDCLASS. CLASS lcl_popups IMPLEMENTATION. @@ -544,4 +550,72 @@ CLASS lcl_popups IMPLEMENTATION. ENDIF. ENDMETHOD. " popup_to_create_package + METHOD popup_to_create_pull_request. + DATA: lv_returncode TYPE c, + lt_fields TYPE TABLE OF sval, + lv_icon_ok TYPE icon-name, + lv_button_pull_request TYPE svalbutton-buttontext, + lv_icon_pull_request TYPE icon-name, + lv_transports_as_text TYPE string, + ls_transport_header LIKE LINE OF it_transport_headers. + + FIELD-SYMBOLS: LIKE LINE OF lt_fields. + + lv_transports_as_text = 'Transport(s)'. + LOOP AT it_transport_headers INTO ls_transport_header. + CONCATENATE lv_transports_as_text '_' ls_transport_header-trkorr INTO lv_transports_as_text. + ENDLOOP. + + " TAB FLD LABEL DEF ATTR + _add_dialog_fld 'TEXTL' 'LINE' 'Branch name' lv_transports_as_text ''. + _add_dialog_fld 'ABAPTXT255' 'LINE' 'Commit text' lv_transports_as_text ''. + _add_dialog_fld 'SAPPARAM' 'SNAME' 'Pull request' lv_transports_as_text ''. + "_add_dialog_fld 'ABAPTXT255' 'LINE' 'TODO: Tadir Items?' '' ''. + + lv_icon_ok = icon_okay. + lv_button_pull_request = 'Create pull request' ##NO_TEXT. + lv_icon_pull_request = icon_import_all_requests. + + CALL FUNCTION 'POPUP_GET_VALUES_USER_BUTTONS' + EXPORTING + popup_title = 'Transport to Pull Request' + programname = sy-repid + formname = 'PULL_REQUEST_POPUP' + ok_pushbuttontext = '' + icon_ok_push = '' + first_pushbutton = lv_button_pull_request + icon_button_1 = lv_icon_pull_request + second_pushbutton = '' + icon_button_2 = '' + IMPORTING + returncode = lv_returncode + TABLES + fields = lt_fields + EXCEPTIONS + error_in_fields = 1 + OTHERS = 2. + IF sy-subrc <> 0. + lcx_exception=>raise( 'Error from POPUP_GET_VALUES' ). + ENDIF. + + IF lv_returncode = 'A'. + RAISE exception type lcx_cancel. + ENDIF. + + + READ TABLE lt_fields INDEX 1 ASSIGNING . + ASSERT sy-subrc = 0. + rs_branch_pull_request-branch_name = -value. + + READ TABLE lt_fields INDEX 2 ASSIGNING . + ASSERT sy-subrc = 0. + rs_branch_pull_request-commit_text = -value. + + READ TABLE lt_fields INDEX 3 ASSIGNING . + ASSERT sy-subrc = 0. + rs_branch_pull_request-pull_request_title = -value. + + + ENDMETHOD. + ENDCLASS. diff --git a/src/zabapgit_services_repo.prog.abap b/src/zabapgit_services_repo.prog.abap index 90f052424..5cd096a01 100644 --- a/src/zabapgit_services_repo.prog.abap +++ b/src/zabapgit_services_repo.prog.abap @@ -47,6 +47,12 @@ CLASS lcl_services_repo DEFINITION FINAL. IMPORTING iv_package TYPE devclass RAISING lcx_exception. + CLASS-METHODS transport_to_pull_request + IMPORTING + iv_repository_key TYPE lcl_persistence_db=>ty_value + is_branch_pull_request TYPE ty_branch_pull_request + it_transport_objects TYPE scts_tadir. + ENDCLASS. "lcl_services_repo CLASS lcl_services_repo IMPLEMENTATION. @@ -314,4 +320,56 @@ CLASS lcl_services_repo IMPLEMENTATION. ENDMETHOD. " open_se80. + + METHOD transport_to_pull_request. + DATA: + lo_repo TYPE REF TO lcl_repo_online, + ls_transport_object LIKE LINE OF it_transport_objects, + lt_zip TYPE ty_files_item_tt, + ls_zip like line of lt_zip, + lv_branch_name type string. + + + +break copat. + lo_repo ?= lcl_app=>repo_srv( )->get( iv_repository_key ). + + lv_branch_name = lcl_git_branch_list=>complete_heads_branch_name( + lcl_git_branch_list=>normalize_branch_name( is_branch_pull_request-branch_name ) ). + + ASSERT lv_branch_name CP 'refs/heads/+*'. + + lcl_git_porcelain=>create_branch( + io_repo = lo_repo + iv_name = lv_branch_name + iv_from = lo_repo->get_sha1_local( ) ). + + " automatically switch to new branch + lo_repo->set_branch_name( lv_branch_name ). + "lo_repo-> + + DATA lo_stage TYPE REF TO lcl_stage. + CREATE OBJECT lo_stage + EXPORTING + iv_branch_name = lv_branch_name + iv_branch_sha1 = lo_repo->get_sha1_local( ). + + lo_repo->refresh( ). + lt_zip = lo_repo->get_files_local( it_filter = it_transport_objects ). + + + LOOP AT lt_zip INTO ls_zip. + lo_stage->add( + iv_path = ls_zip-file-path + iv_filename = ls_zip-file-filename + iv_data = ls_zip-file-data + ). + endloop. +* CATCH lcx_exception. " + + + + "lo_repo->push + endmethod. + ENDCLASS. "lcl_services_repo diff --git a/src/zabapgit_transport.prog.abap b/src/zabapgit_transport.prog.abap index e287426d9..47b9cd6b7 100644 --- a/src/zabapgit_transport.prog.abap +++ b/src/zabapgit_transport.prog.abap @@ -81,13 +81,12 @@ CLASS lcl_transport IMPLEMENTATION. lt_trkorr TYPE trwbo_request_headers. - lt_trkorr = lcl_transport_popup=>show( ). - IF lines( lt_trkorr ) = 0. + IF lines( it_transport_headers ) = 0. RETURN. ENDIF. - lt_requests = read_requests( lt_trkorr ). - lt_tadir = resolve( lt_requests ). + lt_requests = read_requests( it_transport_headers ). + rt_tadir = resolve( lt_requests ). ENDMETHOD. METHOD find_top_package. @@ -214,7 +213,7 @@ CLASS lcl_transport_popup IMPLEMENTATION. iv_username_pattern = sy-uname iv_via_selscreen = 'X' iv_complete_projects = '' -* is_popup = + "is_popup = '' iv_title = 'abapGit: Transport Request Selection' IMPORTING et_requests = rt_trkorr @@ -226,5 +225,9 @@ CLASS lcl_transport_popup IMPLEMENTATION. IF sy-subrc <> 0. RETURN. ENDIF. + + break copat. + "LEAVE TO SCREEN 1001. + ENDMETHOD. ENDCLASS.