From 7b018144a6abbb911298213c8dd2d3d5054fc943 Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Mon, 13 Mar 2017 17:53:14 +0100 Subject: [PATCH 01/12] New Advanced Link Transport refactor --- src/zabapgit_definitions.prog.abap | 99 ++++++++++++++-------------- src/zabapgit_gui_router.prog.abap | 15 +++-- src/zabapgit_transport.prog.abap | 101 ++++++++++++++++++----------- src/zabapgit_view_repo.prog.abap | 2 + 4 files changed, 125 insertions(+), 92 deletions(-) diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index 9861d3d46..8805f16d5 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -30,7 +30,7 @@ TYPES: ty_string_tt TYPE STANDARD TABLE OF string WITH DEFAULT KEY. TYPES: BEGIN OF ty_git_user, - name TYPE string, + name TYPE string, email TYPE string, END OF ty_git_user. @@ -183,60 +183,61 @@ CONSTANTS: gc_newline TYPE abap_char1 VALUE cl_abap_char_utilities=>newline. CONSTANTS: gc_english TYPE spras VALUE 'E'. -CONSTANTS: gc_root_dir TYPE string VALUE '/', - gc_dot_abapgit TYPE string VALUE '.abapgit.xml' ##NO_TEXT, - gc_author_regex TYPE string VALUE '^([\w\s\.@\-_1-9]+) <(.*)> (\d{10}) .\d{4}$' ##NO_TEXT. +CONSTANTS: gc_root_dir TYPE string VALUE '/', + gc_dot_abapgit TYPE string VALUE '.abapgit.xml' ##NO_TEXT, + gc_author_regex TYPE string VALUE '^([\w\s\.@\-_1-9]+) <(.*)> (\d{10}).\d{4}$' ##NO_TEXT. CONSTANTS: BEGIN OF gc_action, - repo_clone TYPE string VALUE 'repo_clone', - repo_refresh TYPE string VALUE 'repo_refresh', - repo_remove TYPE string VALUE 'repo_remove', - repo_purge TYPE string VALUE 'repo_purge', - repo_newoffline TYPE string VALUE 'repo_newoffline', - repo_remote_attach TYPE string VALUE 'repo_remote_attach', - repo_remote_detach TYPE string VALUE 'repo_remote_detach', - repo_remote_change TYPE string VALUE 'repo_remote_change', - repo_refresh_checksums TYPE string VALUE 'repo_refresh_checksums', - repo_toggle_fav TYPE string VALUE 'repo_toggle_fav', + repo_clone TYPE string VALUE 'repo_clone', + repo_refresh TYPE string VALUE 'repo_refresh', + repo_remove TYPE string VALUE 'repo_remove', + repo_purge TYPE string VALUE 'repo_purge', + repo_newoffline TYPE string VALUE 'repo_newoffline', + repo_remote_attach TYPE string VALUE 'repo_remote_attach', + repo_remote_detach TYPE string VALUE 'repo_remote_detach', + repo_remote_change TYPE string VALUE 'repo_remote_change', + repo_refresh_checksums TYPE string VALUE 'repo_refresh_checksums', + repo_toggle_fav TYPE string VALUE 'repo_toggle_fav', + repo_transport_to_pull_reqst TYPE string VALUE 'go_transport_to_pull_request', - abapgit_home TYPE string VALUE 'abapgit_home', - abapgit_wiki TYPE string VALUE 'abapgit_wiki', - abapgit_install TYPE string VALUE 'abapgit_install', - abapgit_install_pi TYPE string VALUE 'abapgit_install_pi', + abapgit_home TYPE string VALUE 'abapgit_home', + abapgit_wiki TYPE string VALUE 'abapgit_wiki', + abapgit_install TYPE string VALUE 'abapgit_install', + abapgit_install_pi TYPE string VALUE 'abapgit_install_pi', - zip_import TYPE string VALUE 'zip_import', - zip_export TYPE string VALUE 'zip_export', - zip_package TYPE string VALUE 'zip_package', - zip_transport TYPE string VALUE 'zip_transport', - zip_object TYPE string VALUE 'zip_object', + zip_import TYPE string VALUE 'zip_import', + zip_export TYPE string VALUE 'zip_export', + zip_package TYPE string VALUE 'zip_package', + zip_transport TYPE string VALUE 'zip_transport', + zip_object TYPE string VALUE 'zip_object', - git_pull TYPE string VALUE 'git_pull', - git_reset TYPE string VALUE 'git_reset', - git_branch_create TYPE string VALUE 'git_branch_create', - git_branch_switch TYPE string VALUE 'git_branch_switch', - git_branch_delete TYPE string VALUE 'git_branch_delete', - git_commit TYPE string VALUE 'git_commit', + git_pull TYPE string VALUE 'git_pull', + git_reset TYPE string VALUE 'git_reset', + git_branch_create TYPE string VALUE 'git_branch_create', + git_branch_switch TYPE string VALUE 'git_branch_switch', + git_branch_delete TYPE string VALUE 'git_branch_delete', + git_commit TYPE string VALUE 'git_commit', - db_delete TYPE string VALUE 'db_delete', - db_update TYPE string VALUE 'db_update', - db_display TYPE string VALUE 'db_display', - db_edit TYPE string VALUE 'db_edit', - bg_update TYPE string VALUE 'bg_update', + db_delete TYPE string VALUE 'db_delete', + db_update TYPE string VALUE 'db_update', + db_display TYPE string VALUE 'db_display', + db_edit TYPE string VALUE 'db_edit', + bg_update TYPE string VALUE 'bg_update', - go_main TYPE string VALUE 'go_main', - go_explore TYPE string VALUE 'go_explore', - go_db TYPE string VALUE 'go_db', - go_background TYPE string VALUE 'go_background', - go_background_run TYPE string VALUE 'go_background_run', - go_diff TYPE string VALUE 'go_diff', - go_stage TYPE string VALUE 'go_stage', - go_commit TYPE string VALUE 'go_commit', - go_branch_overview TYPE string VALUE 'go_branch_overview', - go_playground TYPE string VALUE 'go_playground', - go_debuginfo TYPE string VALUE 'go_debuginfo', - go_settings TYPE string VALUE 'go_settings', - go_tutorial TYPE string VALUE 'go_tutorial', + go_main TYPE string VALUE 'go_main', + go_explore TYPE string VALUE 'go_explore', + go_db TYPE string VALUE 'go_db', + go_background TYPE string VALUE 'go_background', + go_background_run TYPE string VALUE 'go_background_run', + go_diff TYPE string VALUE 'go_diff', + go_stage TYPE string VALUE 'go_stage', + go_commit TYPE string VALUE 'go_commit', + go_branch_overview TYPE string VALUE 'go_branch_overview', + go_playground TYPE string VALUE 'go_playground', + go_debuginfo TYPE string VALUE 'go_debuginfo', + go_settings TYPE string VALUE 'go_settings', + go_tutorial TYPE string VALUE 'go_tutorial', - jump TYPE string VALUE 'jump', - jump_pkg TYPE string VALUE 'jump_pkg', + jump TYPE string VALUE 'jump', + jump_pkg TYPE string VALUE 'jump_pkg', END OF gc_action. diff --git a/src/zabapgit_gui_router.prog.abap b/src/zabapgit_gui_router.prog.abap index 222cf4b2d..1847a9edd 100644 --- a/src/zabapgit_gui_router.prog.abap +++ b/src/zabapgit_gui_router.prog.abap @@ -64,10 +64,12 @@ 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. + 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. lv_key = iv_getdata. " TODO refactor lv_url = iv_getdata. " TODO refactor @@ -171,6 +173,11 @@ CLASS lcl_gui_router IMPLEMENTATION. WHEN gc_action-repo_toggle_fav. " Toggle repo as favorite lcl_services_repo=>toggle_favorite( lv_key ). ev_state = gc_event_state-re_render. + 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 ). + ev_state = gc_event_state-re_render. " ZIP services actions WHEN gc_action-zip_import. " Import repo from ZIP diff --git a/src/zabapgit_transport.prog.abap b/src/zabapgit_transport.prog.abap index ba5c96d29..e287426d9 100644 --- a/src/zabapgit_transport.prog.abap +++ b/src/zabapgit_transport.prog.abap @@ -1,17 +1,24 @@ *&---------------------------------------------------------------------* *& Include ZABAPGIT_TRANSPORT *&---------------------------------------------------------------------* +CLASS lcl_transport_popup DEFINITION. + PUBLIC SECTION. + CLASS-METHODS: + show + RETURNING VALUE(rt_trkorr) TYPE trwbo_request_headers. +ENDCLASS. CLASS lcl_transport DEFINITION FINAL. PUBLIC SECTION. CLASS-METHODS: - zip RAISING lcx_exception. + zip RAISING lcx_exception, + to_tadir IMPORTING it_transport_headers TYPE trwbo_request_headers + RETURNING VALUE(rt_tadir) TYPE scts_tadir + RAISING lcx_exception. PRIVATE SECTION. CLASS-METHODS: - popup - RETURNING VALUE(rt_trkorr) TYPE trwbo_request_headers, read_requests IMPORTING it_trkorr TYPE trwbo_request_headers RETURNING VALUE(rt_requests) TYPE trwbo_requests @@ -38,7 +45,7 @@ CLASS lcl_transport IMPLEMENTATION. lt_trkorr TYPE trwbo_request_headers. - lt_trkorr = popup( ). + lt_trkorr = lcl_transport_popup=>show( ). IF lines( lt_trkorr ) = 0. RETURN. ENDIF. @@ -67,6 +74,22 @@ CLASS lcl_transport IMPLEMENTATION. ENDMETHOD. + METHOD to_tadir. + DATA: lt_requests TYPE trwbo_requests, + lt_tadir TYPE scts_tadir, + lv_package TYPE devclass, + lt_trkorr TYPE trwbo_request_headers. + + + lt_trkorr = lcl_transport_popup=>show( ). + IF lines( lt_trkorr ) = 0. + RETURN. + ENDIF. + + lt_requests = read_requests( lt_trkorr ). + lt_tadir = resolve( lt_requests ). + ENDMETHOD. + METHOD find_top_package. * assumption: all objects in transport share a common super package @@ -100,41 +123,6 @@ CLASS lcl_transport IMPLEMENTATION. ENDMETHOD. - METHOD popup. - DATA: lrs_trfunction TYPE trsel_trs_function, - lv_types TYPE string, - ls_ranges TYPE trsel_ts_ranges. - - " Fill all request types - lv_types = 'KWTCOEMPDRSXQFG'. - lrs_trfunction-sign = 'I'. - lrs_trfunction-option = 'EQ'. - WHILE lv_types NE space. - lrs_trfunction-low = lv_types(1). - APPEND lrs_trfunction TO ls_ranges-request_funcs. - SHIFT lv_types. - ENDWHILE. - - CALL FUNCTION 'TRINT_SELECT_REQUESTS' - EXPORTING - iv_username_pattern = sy-uname - iv_via_selscreen = 'X' - iv_complete_projects = '' -* is_popup = - iv_title = 'abapGit: Transport Request Selection' - IMPORTING - et_requests = rt_trkorr - CHANGING - cs_ranges = ls_ranges - EXCEPTIONS - action_aborted_by_user = 1 - OTHERS = 2. - IF sy-subrc <> 0. - RETURN. - ENDIF. - - ENDMETHOD. - METHOD read_requests. DATA lt_requests LIKE rt_requests. @@ -205,3 +193,38 @@ CLASS lcl_transport IMPLEMENTATION. ENDMETHOD. ENDCLASS. +CLASS lcl_transport_popup IMPLEMENTATION. + METHOD show. + DATA: lrs_trfunction TYPE trsel_trs_function, + lv_types TYPE string, + ls_ranges TYPE trsel_ts_ranges. + + " Fill all request types + lv_types = 'KWTCOEMPDRSXQFG'. + lrs_trfunction-sign = 'I'. + lrs_trfunction-option = 'EQ'. + WHILE lv_types NE space. + lrs_trfunction-low = lv_types(1). + APPEND lrs_trfunction TO ls_ranges-request_funcs. + SHIFT lv_types. + ENDWHILE. + + CALL FUNCTION 'TRINT_SELECT_REQUESTS' + EXPORTING + iv_username_pattern = sy-uname + iv_via_selscreen = 'X' + iv_complete_projects = '' +* is_popup = + iv_title = 'abapGit: Transport Request Selection' + IMPORTING + et_requests = rt_trkorr + CHANGING + cs_ranges = ls_ranges + EXCEPTIONS + action_aborted_by_user = 1 + OTHERS = 2. + IF sy-subrc <> 0. + RETURN. + ENDIF. + ENDMETHOD. +ENDCLASS. diff --git a/src/zabapgit_view_repo.prog.abap b/src/zabapgit_view_repo.prog.abap index f61e2dea4..20203dedc 100644 --- a/src/zabapgit_view_repo.prog.abap +++ b/src/zabapgit_view_repo.prog.abap @@ -309,6 +309,8 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. iv_act = |{ gc_action-repo_remote_detach }?{ lv_key }| ). lo_tb_advanced->add( iv_txt = 'Force stage' iv_act = |{ gc_action-go_stage }?{ lv_key }| ). + lo_tb_advanced->add( iv_txt = 'Transport to Pull Request' + iv_act = |{ gc_action-repo_transport_to_pull_reqst }?{ lv_key }| ). ELSE. lo_tb_advanced->add( iv_txt = 'Make on-line' iv_act = |{ gc_action-repo_remote_attach }?{ lv_key }| ). From e117d95da3705ea53ce41890f233c9d71498a0e5 Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Tue, 14 Mar 2017 17:03:07 +0100 Subject: [PATCH 02/12] Popups Branch Stage --- src/zabapgit_definitions.prog.abap | 7 +++ src/zabapgit_forms.prog.abap | 8 +++ src/zabapgit_gui_router.prog.abap | 23 +++++--- src/zabapgit_popups.prog.abap | 84 ++++++++++++++++++++++++++-- src/zabapgit_services_repo.prog.abap | 58 +++++++++++++++++++ src/zabapgit_transport.prog.abap | 13 +++-- 6 files changed, 176 insertions(+), 17 deletions(-) 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. From 48aadc67e8acbeef3877e817c2add4835a30f7f7 Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Wed, 15 Mar 2017 12:40:52 +0100 Subject: [PATCH 03/12] Creating branch and pushing --- src/zabapgit_services_repo.prog.abap | 58 +++++++++++++++++++--------- 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/src/zabapgit_services_repo.prog.abap b/src/zabapgit_services_repo.prog.abap index 5cd096a01..97d9958b8 100644 --- a/src/zabapgit_services_repo.prog.abap +++ b/src/zabapgit_services_repo.prog.abap @@ -325,13 +325,13 @@ CLASS lcl_services_repo IMPLEMENTATION. 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. + lt_items TYPE ty_files_item_tt, + ls_file LIKE LINE OF lt_items, + ls_item TYPE string, + lv_branch_name TYPE string, + ls_comment TYPE ty_comment. - - -break copat. + BREAK copat. lo_repo ?= lcl_app=>repo_srv( )->get( iv_repository_key ). lv_branch_name = lcl_git_branch_list=>complete_heads_branch_name( @@ -344,32 +344,54 @@ break copat. 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( ). + iv_branch_sha1 = lo_repo->get_sha1_remote( ). - lo_repo->refresh( ). - lt_zip = lo_repo->get_files_local( it_filter = it_transport_objects ). + DATA: ls_stage_files TYPE ty_stage_files. - LOOP AT lt_zip INTO ls_zip. + ls_stage_files = lcl_stage_logic=>get( lo_repo ). + + LOOP AT ls_stage_files-local INTO ls_file. lo_stage->add( - iv_path = ls_zip-file-path - iv_filename = ls_zip-file-filename - iv_data = ls_zip-file-data + iv_path = ls_file-file-path + iv_filename = ls_file-file-filename + iv_data = ls_file-file-data ). - endloop. + ENDLOOP. + + DATA ls_remote_file LIKE line of ls_stage_files-remote. + + LOOP AT ls_stage_files-remote INTO ls_remote_file. + lo_stage->rm( + iv_path = ls_remote_file-path + iv_filename = ls_remote_file-filename + ). + endloop. * CATCH lcx_exception. " + FIELD-SYMBOLS: LIKE LINE OF ls_stage_files-local. + + READ TABLE ls_stage_files-local INDEX 1 ASSIGNING . + IF sy-subrc <> 0. + EXIT. + ENDIF. + + CLEAR ls_comment. + ls_comment-committer-name = lcl_objects=>changed_by( -item ). + ls_comment-committer-email = |{ ls_comment-committer-name }@localhost|. + ls_comment-comment = is_branch_pull_request-commit_text. + + lo_repo->push( is_comment = ls_comment + io_stage = lo_stage ). - "lo_repo->push - endmethod. + "lo_repo->push + ENDMETHOD. ENDCLASS. "lcl_services_repo From e47110f2aff0d414e2727e6342e5917882e041d3 Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Wed, 15 Mar 2017 16:42:56 +0100 Subject: [PATCH 04/12] Transport to branch --- src/zabapgit_definitions.prog.abap | 101 ++++++++------- src/zabapgit_gui_router.prog.abap | 17 ++- src/zabapgit_popups.prog.abap | 52 ++++---- src/zabapgit_services.prog.abap | 1 + src/zabapgit_services_repo.prog.abap | 88 +++---------- src/zabapgit_services_trans_branch.prog.abap | 124 +++++++++++++++++++ src/zabapgit_services_trans_branch.prog.xml | 25 ++++ src/zabapgit_transport.prog.abap | 4 - src/zabapgit_view_repo.prog.abap | 4 +- 9 files changed, 249 insertions(+), 167 deletions(-) create mode 100644 src/zabapgit_services_trans_branch.prog.abap create mode 100644 src/zabapgit_services_trans_branch.prog.xml diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index 4de8aca31..146089786 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -141,11 +141,10 @@ 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. + BEGIN OF ty_transport_to_branch, + branch_name TYPE string, + commit_text TYPE string, + END OF ty_transport_to_branch. CONSTANTS: BEGIN OF gc_state, " https://git-scm.com/docs/git-status unchanged TYPE char1 VALUE '', @@ -195,56 +194,56 @@ CONSTANTS: gc_root_dir TYPE string VALUE '/', gc_author_regex TYPE string VALUE '^([\w\s\.@\-_1-9]+) <(.*)> (\d{10}).\d{4}$' ##NO_TEXT. CONSTANTS: BEGIN OF gc_action, - repo_clone TYPE string VALUE 'repo_clone', - repo_refresh TYPE string VALUE 'repo_refresh', - repo_remove TYPE string VALUE 'repo_remove', - repo_purge TYPE string VALUE 'repo_purge', - repo_newoffline TYPE string VALUE 'repo_newoffline', - repo_remote_attach TYPE string VALUE 'repo_remote_attach', - repo_remote_detach TYPE string VALUE 'repo_remote_detach', - repo_remote_change TYPE string VALUE 'repo_remote_change', - repo_refresh_checksums TYPE string VALUE 'repo_refresh_checksums', - repo_toggle_fav TYPE string VALUE 'repo_toggle_fav', - repo_transport_to_pull_reqst TYPE string VALUE 'go_transport_to_pull_request', + repo_clone TYPE string VALUE 'repo_clone', + repo_refresh TYPE string VALUE 'repo_refresh', + repo_remove TYPE string VALUE 'repo_remove', + repo_purge TYPE string VALUE 'repo_purge', + repo_newoffline TYPE string VALUE 'repo_newoffline', + repo_remote_attach TYPE string VALUE 'repo_remote_attach', + repo_remote_detach TYPE string VALUE 'repo_remote_detach', + repo_remote_change TYPE string VALUE 'repo_remote_change', + repo_refresh_checksums TYPE string VALUE 'repo_refresh_checksums', + repo_toggle_fav TYPE string VALUE 'repo_toggle_fav', + repo_transport_to_branch TYPE string VALUE 'go_transport_to_branch', - abapgit_home TYPE string VALUE 'abapgit_home', - abapgit_wiki TYPE string VALUE 'abapgit_wiki', - abapgit_install TYPE string VALUE 'abapgit_install', - abapgit_install_pi TYPE string VALUE 'abapgit_install_pi', + abapgit_home TYPE string VALUE 'abapgit_home', + abapgit_wiki TYPE string VALUE 'abapgit_wiki', + abapgit_install TYPE string VALUE 'abapgit_install', + abapgit_install_pi TYPE string VALUE 'abapgit_install_pi', - zip_import TYPE string VALUE 'zip_import', - zip_export TYPE string VALUE 'zip_export', - zip_package TYPE string VALUE 'zip_package', - zip_transport TYPE string VALUE 'zip_transport', - zip_object TYPE string VALUE 'zip_object', + zip_import TYPE string VALUE 'zip_import', + zip_export TYPE string VALUE 'zip_export', + zip_package TYPE string VALUE 'zip_package', + zip_transport TYPE string VALUE 'zip_transport', + zip_object TYPE string VALUE 'zip_object', - git_pull TYPE string VALUE 'git_pull', - git_reset TYPE string VALUE 'git_reset', - git_branch_create TYPE string VALUE 'git_branch_create', - git_branch_switch TYPE string VALUE 'git_branch_switch', - git_branch_delete TYPE string VALUE 'git_branch_delete', - git_commit TYPE string VALUE 'git_commit', + git_pull TYPE string VALUE 'git_pull', + git_reset TYPE string VALUE 'git_reset', + git_branch_create TYPE string VALUE 'git_branch_create', + git_branch_switch TYPE string VALUE 'git_branch_switch', + git_branch_delete TYPE string VALUE 'git_branch_delete', + git_commit TYPE string VALUE 'git_commit', - db_delete TYPE string VALUE 'db_delete', - db_update TYPE string VALUE 'db_update', - db_display TYPE string VALUE 'db_display', - db_edit TYPE string VALUE 'db_edit', - bg_update TYPE string VALUE 'bg_update', + db_delete TYPE string VALUE 'db_delete', + db_update TYPE string VALUE 'db_update', + db_display TYPE string VALUE 'db_display', + db_edit TYPE string VALUE 'db_edit', + bg_update TYPE string VALUE 'bg_update', - go_main TYPE string VALUE 'go_main', - go_explore TYPE string VALUE 'go_explore', - go_db TYPE string VALUE 'go_db', - go_background TYPE string VALUE 'go_background', - go_background_run TYPE string VALUE 'go_background_run', - go_diff TYPE string VALUE 'go_diff', - go_stage TYPE string VALUE 'go_stage', - go_commit TYPE string VALUE 'go_commit', - go_branch_overview TYPE string VALUE 'go_branch_overview', - go_playground TYPE string VALUE 'go_playground', - go_debuginfo TYPE string VALUE 'go_debuginfo', - go_settings TYPE string VALUE 'go_settings', - go_tutorial TYPE string VALUE 'go_tutorial', + go_main TYPE string VALUE 'go_main', + go_explore TYPE string VALUE 'go_explore', + go_db TYPE string VALUE 'go_db', + go_background TYPE string VALUE 'go_background', + go_background_run TYPE string VALUE 'go_background_run', + go_diff TYPE string VALUE 'go_diff', + go_stage TYPE string VALUE 'go_stage', + go_commit TYPE string VALUE 'go_commit', + go_branch_overview TYPE string VALUE 'go_branch_overview', + go_playground TYPE string VALUE 'go_playground', + go_debuginfo TYPE string VALUE 'go_debuginfo', + go_settings TYPE string VALUE 'go_settings', + go_tutorial TYPE string VALUE 'go_tutorial', - jump TYPE string VALUE 'jump', - jump_pkg TYPE string VALUE 'jump_pkg', + jump TYPE string VALUE 'jump', + jump_pkg TYPE string VALUE 'jump_pkg', END OF gc_action. diff --git a/src/zabapgit_gui_router.prog.abap b/src/zabapgit_gui_router.prog.abap index a142febcd..819d9744b 100644 --- a/src/zabapgit_gui_router.prog.abap +++ b/src/zabapgit_gui_router.prog.abap @@ -70,7 +70,7 @@ CLASS lcl_gui_router IMPLEMENTATION. 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. + ls_transport_to_branch TYPE ty_transport_to_branch. lv_key = iv_getdata. " TODO refactor lv_url = iv_getdata. " TODO refactor @@ -174,19 +174,24 @@ CLASS lcl_gui_router IMPLEMENTATION. WHEN gc_action-repo_toggle_fav. " Toggle repo as favorite lcl_services_repo=>toggle_favorite( lv_key ). ev_state = gc_event_state-re_render. - WHEN gc_action-repo_transport_to_pull_reqst. + WHEN gc_action-repo_transport_to_branch. + ev_state = gc_event_state-re_render. + lt_transport_headers = lcl_transport_popup=>show( ). lt_tadir = lcl_transport=>to_tadir( lt_transport_headers ). - ls_branch_pull_request = lcl_popups=>popup_to_create_pull_request( + IF lt_tadir IS INITIAL. + lcx_exception=>raise( 'Canceled or List of objects is empty ' ). + ENDIF. + ls_transport_to_branch = lcl_popups=>popup_to_create_transp_branch( it_transport_headers = lt_transport_headers it_transport_objects = lt_tadir ). - lcl_services_repo=>transport_to_pull_request( + lcl_services_repo=>transport_to_branch( iv_repository_key = lv_key - is_branch_pull_request = ls_branch_pull_request + is_transport_to_branch = ls_transport_to_branch it_transport_objects = lt_tadir ). - ev_state = gc_event_state-re_render. + " ZIP services actions WHEN gc_action-zip_import. " Import repo from ZIP diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index ed806ff8f..30574979a 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -69,10 +69,10 @@ CLASS lcl_popups DEFINITION FINAL. 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 + popup_to_create_transp_branch + IMPORTING it_transport_headers TYPE trwbo_request_headers + it_transport_objects TYPE scts_tadir + RETURNING VALUE(rs_transport_branch) TYPE ty_transport_to_branch RAISING lcx_exception lcx_cancel. ENDCLASS. @@ -550,14 +550,14 @@ 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. + METHOD popup_to_create_transp_branch. + DATA: lv_returncode TYPE c, + lt_fields TYPE TABLE OF sval, + lv_icon_ok TYPE icon-name, + lv_button_transport TYPE svalbutton-buttontext, + lv_icon_transport 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. @@ -569,22 +569,21 @@ CLASS lcl_popups IMPLEMENTATION. " 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. + lv_icon_ok = icon_okay. + lv_button_transport = 'Transport(s)->Branch' ##NO_TEXT. + lv_icon_transport = icon_import_all_requests. - CALL FUNCTION 'POPUP_GET_VALUES_USER_BUTTONS' + call FUNCTION 'POPUP_GET_VALUES_USER_BUTTONS' EXPORTING - popup_title = 'Transport to Pull Request' + popup_title = 'Transport to new Branch' 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 + first_pushbutton = lv_button_transport + icon_button_1 = lv_icon_transport second_pushbutton = '' icon_button_2 = '' IMPORTING @@ -599,23 +598,16 @@ CLASS lcl_popups IMPLEMENTATION. ENDIF. IF lv_returncode = 'A'. - RAISE exception type lcx_cancel. + RAISE EXCEPTION TYPE lcx_cancel. ENDIF. - READ TABLE lt_fields INDEX 1 ASSIGNING . ASSERT sy-subrc = 0. - rs_branch_pull_request-branch_name = -value. + rs_transport_branch-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. - - + rs_transport_branch-commit_text = -value. ENDMETHOD. ENDCLASS. diff --git a/src/zabapgit_services.prog.abap b/src/zabapgit_services.prog.abap index 801ffd6d7..c306c028a 100644 --- a/src/zabapgit_services.prog.abap +++ b/src/zabapgit_services.prog.abap @@ -2,6 +2,7 @@ *& Include ZABAPGIT_SERVICES *&---------------------------------------------------------------------* +INCLUDE zabapgit_services_trans_branch. INCLUDE zabapgit_services_repo. INCLUDE zabapgit_services_abapgit. INCLUDE zabapgit_services_git. diff --git a/src/zabapgit_services_repo.prog.abap b/src/zabapgit_services_repo.prog.abap index 97d9958b8..a1cac2e96 100644 --- a/src/zabapgit_services_repo.prog.abap +++ b/src/zabapgit_services_repo.prog.abap @@ -47,11 +47,11 @@ 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. + CLASS-METHODS transport_to_branch + IMPORTING iv_repository_key TYPE lcl_persistence_db=>ty_value + is_transport_to_branch TYPE ty_transport_to_branch + it_transport_objects TYPE scts_tadir + RAISING lcx_exception. ENDCLASS. "lcl_services_repo @@ -321,77 +321,17 @@ CLASS lcl_services_repo IMPLEMENTATION. ENDMETHOD. " open_se80. - METHOD transport_to_pull_request. + METHOD transport_to_branch. DATA: - lo_repo TYPE REF TO lcl_repo_online, - ls_transport_object LIKE LINE OF it_transport_objects, - lt_items TYPE ty_files_item_tt, - ls_file LIKE LINE OF lt_items, - ls_item TYPE string, - lv_branch_name TYPE string, - ls_comment TYPE ty_comment. + lo_repository TYPE REF TO lcl_repo_online, + lo_transport_to_branch TYPE REF TO lcl_transport_to_branch. - 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( ) ). - - lo_repo->set_branch_name( lv_branch_name ). - - 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_remote( ). - - DATA: ls_stage_files TYPE ty_stage_files. - - - ls_stage_files = lcl_stage_logic=>get( lo_repo ). - - LOOP AT ls_stage_files-local INTO ls_file. - lo_stage->add( - iv_path = ls_file-file-path - iv_filename = ls_file-file-filename - iv_data = ls_file-file-data - ). - ENDLOOP. - - DATA ls_remote_file LIKE line of ls_stage_files-remote. - - LOOP AT ls_stage_files-remote INTO ls_remote_file. - lo_stage->rm( - iv_path = ls_remote_file-path - iv_filename = ls_remote_file-filename - ). - endloop. -* CATCH lcx_exception. " - - FIELD-SYMBOLS: LIKE LINE OF ls_stage_files-local. - - READ TABLE ls_stage_files-local INDEX 1 ASSIGNING . - IF sy-subrc <> 0. - EXIT. - ENDIF. - - CLEAR ls_comment. - ls_comment-committer-name = lcl_objects=>changed_by( -item ). - ls_comment-committer-email = |{ ls_comment-committer-name }@localhost|. - ls_comment-comment = is_branch_pull_request-commit_text. - - lo_repo->push( is_comment = ls_comment - io_stage = lo_stage ). - - - "lo_repo->push + lo_repository ?= lcl_app=>repo_srv( )->get( iv_repository_key ). + CREATE OBJECT lo_transport_to_branch. + lo_transport_to_branch->create( + io_repository = lo_repository + is_transport_to_branch = is_transport_to_branch + it_transport_objects = it_transport_objects ). ENDMETHOD. ENDCLASS. "lcl_services_repo diff --git a/src/zabapgit_services_trans_branch.prog.abap b/src/zabapgit_services_trans_branch.prog.abap new file mode 100644 index 000000000..0bbdf2fa1 --- /dev/null +++ b/src/zabapgit_services_trans_branch.prog.abap @@ -0,0 +1,124 @@ +*&---------------------------------------------------------------------* +*& Include zabapgit_services_trans_branch +*&---------------------------------------------------------------------* +CLASS lcl_transport_to_branch DEFINITION. + PUBLIC SECTION. + METHODS: + create + IMPORTING io_repository TYPE REF TO lcl_repo_online + is_transport_to_branch TYPE ty_transport_to_branch + it_transport_objects TYPE scts_tadir + RAISING lcx_exception. + PRIVATE SECTION. + + METHODS craete_new_branch + IMPORTING + io_repository TYPE REF TO lcl_repo_online + iv_branch_name TYPE string + RAISING + lcx_exception. + METHODS add_new_and_changes_to_stage + IMPORTING + it_transport_objects TYPE scts_tadir + io_stage TYPE REF TO lcl_stage + is_stage_objects TYPE ty_stage_files + RAISING + lcx_exception. + METHODS generate_commit_message + IMPORTING + is_transport_to_branch TYPE ty_transport_to_branch + RETURNING + VALUE(rs_comment) TYPE ty_comment. +ENDCLASS. + +CLASS lcl_transport_to_branch IMPLEMENTATION. + + METHOD create. + DATA: + ls_transport_object TYPE LINE OF scts_tadir, + lt_items TYPE ty_files_item_tt, + ls_local_file TYPE LINE OF ty_files_item_tt, + ls_remote_file TYPE LINE OF ty_files_tt, + ls_item TYPE string, + lv_branch_name TYPE string, + ls_comment TYPE ty_comment, + lo_stage TYPE REF TO lcl_stage, + ls_stage_objects TYPE ty_stage_files. + + lv_branch_name = lcl_git_branch_list=>complete_heads_branch_name( + lcl_git_branch_list=>normalize_branch_name( is_transport_to_branch-branch_name ) ). + + craete_new_branch( + io_repository = io_repository + iv_branch_name = lv_branch_name ). + + CREATE OBJECT lo_stage + EXPORTING + iv_branch_name = lv_branch_name + iv_branch_sha1 = io_repository->get_sha1_remote( ). + + ls_stage_objects = lcl_stage_logic=>get( io_repository ). + + add_new_and_changes_to_stage( + it_transport_objects = it_transport_objects + io_stage = lo_stage + is_stage_objects = ls_stage_objects ). + + "Stage remote files as removal, for they could be deleted + LOOP AT ls_stage_objects-remote INTO ls_remote_file. + lo_stage->rm( + iv_path = ls_remote_file-path + iv_filename = ls_remote_file-filename ). + ENDLOOP. + + ls_comment = generate_commit_message( is_transport_to_branch ). + + io_repository->push( is_comment = ls_comment + io_stage = lo_stage ). + ENDMETHOD. + + + METHOD craete_new_branch. + + ASSERT iv_branch_name CP 'refs/heads/+*'. + TRY. + lcl_git_porcelain=>create_branch( + io_repo = io_repository + iv_name = iv_branch_name + iv_from = io_repository->get_sha1_local( ) ). + + io_repository->set_branch_name( iv_branch_name ). + CATCH lcx_exception. + lcx_exception=>raise( 'Error when creating new branch'). + ENDTRY. + + ENDMETHOD. + + + METHOD add_new_and_changes_to_stage. + DATA ls_transport_object TYPE tadir. + DATA ls_local_file TYPE ty_file_item. + + LOOP AT it_transport_objects INTO ls_transport_object. + IF ls_transport_object-delflag = abap_false. + LOOP AT is_stage_objects-local + INTO ls_local_file + WHERE item-obj_name = ls_transport_object-obj_name. + "Looping is needed to also add XMLs, other includes (e.g. local class implementation) + io_stage->add( + iv_path = ls_local_file-file-path + iv_filename = ls_local_file-file-filename + iv_data = ls_local_file-file-data ). + ENDLOOP. + ENDIF. + ENDLOOP. + ENDMETHOD. + + + METHOD generate_commit_message. + rs_comment-committer-name = sy-uname. + rs_comment-committer-email = |{ rs_comment-committer-name }@localhost|. + rs_comment-comment = is_transport_to_branch-commit_text. + ENDMETHOD. + +ENDCLASS. diff --git a/src/zabapgit_services_trans_branch.prog.xml b/src/zabapgit_services_trans_branch.prog.xml new file mode 100644 index 000000000..e1d07aea9 --- /dev/null +++ b/src/zabapgit_services_trans_branch.prog.xml @@ -0,0 +1,25 @@ + + + + + + ZABAPGIT_SERVICES_TRANS_BRANCH + A + X + S + D$ + I + X + D$S + X + + + + R + Include ZABAPGIT_SERVICSE_TRANS_BRANCH + 38 + + + + + diff --git a/src/zabapgit_transport.prog.abap b/src/zabapgit_transport.prog.abap index 47b9cd6b7..bc23ed2b6 100644 --- a/src/zabapgit_transport.prog.abap +++ b/src/zabapgit_transport.prog.abap @@ -225,9 +225,5 @@ CLASS lcl_transport_popup IMPLEMENTATION. IF sy-subrc <> 0. RETURN. ENDIF. - - break copat. - "LEAVE TO SCREEN 1001. - ENDMETHOD. ENDCLASS. diff --git a/src/zabapgit_view_repo.prog.abap b/src/zabapgit_view_repo.prog.abap index 20203dedc..ba414eb0e 100644 --- a/src/zabapgit_view_repo.prog.abap +++ b/src/zabapgit_view_repo.prog.abap @@ -309,8 +309,8 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. iv_act = |{ gc_action-repo_remote_detach }?{ lv_key }| ). lo_tb_advanced->add( iv_txt = 'Force stage' iv_act = |{ gc_action-go_stage }?{ lv_key }| ). - lo_tb_advanced->add( iv_txt = 'Transport to Pull Request' - iv_act = |{ gc_action-repo_transport_to_pull_reqst }?{ lv_key }| ). + lo_tb_advanced->add( iv_txt = 'Transport to Branch' + iv_act = |{ gc_action-repo_transport_to_branch }?{ lv_key }| ). ELSE. lo_tb_advanced->add( iv_txt = 'Make on-line' iv_act = |{ gc_action-repo_remote_attach }?{ lv_key }| ). From b8522e329034157f74d22002ad617adfcc6a575d Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Wed, 15 Mar 2017 16:47:06 +0100 Subject: [PATCH 05/12] Lint to please nordic gods --- src/zabapgit_gui_router.prog.abap | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/zabapgit_gui_router.prog.abap b/src/zabapgit_gui_router.prog.abap index 819d9744b..f9ee8bb61 100644 --- a/src/zabapgit_gui_router.prog.abap +++ b/src/zabapgit_gui_router.prog.abap @@ -175,7 +175,7 @@ CLASS lcl_gui_router IMPLEMENTATION. lcl_services_repo=>toggle_favorite( lv_key ). ev_state = gc_event_state-re_render. WHEN gc_action-repo_transport_to_branch. - ev_state = gc_event_state-re_render. + ev_state = gc_event_state-re_render. lt_transport_headers = lcl_transport_popup=>show( ). lt_tadir = lcl_transport=>to_tadir( lt_transport_headers ). @@ -184,14 +184,11 @@ CLASS lcl_gui_router IMPLEMENTATION. ENDIF. ls_transport_to_branch = lcl_popups=>popup_to_create_transp_branch( it_transport_headers = lt_transport_headers - it_transport_objects = lt_tadir - ). + it_transport_objects = lt_tadir ). lcl_services_repo=>transport_to_branch( iv_repository_key = lv_key is_transport_to_branch = ls_transport_to_branch - it_transport_objects = lt_tadir - ). - + it_transport_objects = lt_tadir ). " ZIP services actions WHEN gc_action-zip_import. " Import repo from ZIP From 0f7fbf5be6367264cfc127420be23f2b538199d3 Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Wed, 15 Mar 2017 17:07:05 +0100 Subject: [PATCH 06/12] new validations --- src/zabapgit_services.prog.abap | 2 +- src/zabapgit_services_trans_branch.prog.abap | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/zabapgit_services.prog.abap b/src/zabapgit_services.prog.abap index c306c028a..efe38d9f2 100644 --- a/src/zabapgit_services.prog.abap +++ b/src/zabapgit_services.prog.abap @@ -2,9 +2,9 @@ *& Include ZABAPGIT_SERVICES *&---------------------------------------------------------------------* +INCLUDE zabapgit_services_git. INCLUDE zabapgit_services_trans_branch. INCLUDE zabapgit_services_repo. INCLUDE zabapgit_services_abapgit. -INCLUDE zabapgit_services_git. INCLUDE zabapgit_services_db. INCLUDE zabapgit_services_background. diff --git a/src/zabapgit_services_trans_branch.prog.abap b/src/zabapgit_services_trans_branch.prog.abap index 0bbdf2fa1..bc40401d6 100644 --- a/src/zabapgit_services_trans_branch.prog.abap +++ b/src/zabapgit_services_trans_branch.prog.abap @@ -11,7 +11,7 @@ CLASS lcl_transport_to_branch DEFINITION. RAISING lcx_exception. PRIVATE SECTION. - METHODS craete_new_branch + METHODS create_new_branch IMPORTING io_repository TYPE REF TO lcl_repo_online iv_branch_name TYPE string @@ -43,12 +43,13 @@ CLASS lcl_transport_to_branch IMPLEMENTATION. lv_branch_name TYPE string, ls_comment TYPE ty_comment, lo_stage TYPE REF TO lcl_stage, - ls_stage_objects TYPE ty_stage_files. + ls_stage_objects TYPE ty_stage_files, + ls_branch_to_delete TYPE lcl_git_branch_list=>ty_git_branch. lv_branch_name = lcl_git_branch_list=>complete_heads_branch_name( lcl_git_branch_list=>normalize_branch_name( is_transport_to_branch-branch_name ) ). - craete_new_branch( + create_new_branch( io_repository = io_repository iv_branch_name = lv_branch_name ). @@ -77,9 +78,7 @@ CLASS lcl_transport_to_branch IMPLEMENTATION. io_stage = lo_stage ). ENDMETHOD. - - METHOD craete_new_branch. - + METHOD create_new_branch. ASSERT iv_branch_name CP 'refs/heads/+*'. TRY. lcl_git_porcelain=>create_branch( @@ -91,7 +90,6 @@ CLASS lcl_transport_to_branch IMPLEMENTATION. CATCH lcx_exception. lcx_exception=>raise( 'Error when creating new branch'). ENDTRY. - ENDMETHOD. @@ -110,6 +108,9 @@ CLASS lcl_transport_to_branch IMPLEMENTATION. iv_filename = ls_local_file-file-filename iv_data = ls_local_file-file-data ). ENDLOOP. + IF sy-subrc = 4. + lcx_exception=>raise( |Object { ls_transport_object-obj_name } not found in the local repository files | ). + ENDIF. ENDIF. ENDLOOP. ENDMETHOD. From b7e5ee8a8ec5b44fa19ba60f22697b6b54ea34b5 Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Wed, 15 Mar 2017 17:12:34 +0100 Subject: [PATCH 07/12] Removes commented code --- src/zabapgit_popups.prog.abap | 1 - 1 file changed, 1 deletion(-) diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index 30574979a..3f9043c27 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -569,7 +569,6 @@ CLASS lcl_popups IMPLEMENTATION. " 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 'ABAPTXT255' 'LINE' 'TODO: Tadir Items?' '' ''. lv_icon_ok = icon_okay. lv_button_transport = 'Transport(s)->Branch' ##NO_TEXT. From 83ba65d0a23d0ba1da0065301e0f3be892f2e147 Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Wed, 15 Mar 2017 17:15:26 +0100 Subject: [PATCH 08/12] Adjust form names --- src/zabapgit_forms.prog.abap | 2 +- src/zabapgit_popups.prog.abap | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/zabapgit_forms.prog.abap b/src/zabapgit_forms.prog.abap index 30f2c4f4c..2ee6ac503 100644 --- a/src/zabapgit_forms.prog.abap +++ b/src/zabapgit_forms.prog.abap @@ -137,7 +137,7 @@ 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 +FORM branch_to_transport_popup TABLES tt_fields TYPE ty_sval_tt USING pv_code TYPE clike CHANGING cs_error TYPE svale cv_show_popup TYPE c diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index 3f9043c27..65f505252 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -574,11 +574,11 @@ CLASS lcl_popups IMPLEMENTATION. lv_button_transport = 'Transport(s)->Branch' ##NO_TEXT. lv_icon_transport = icon_import_all_requests. - call FUNCTION 'POPUP_GET_VALUES_USER_BUTTONS' + CALL FUNCTION 'POPUP_GET_VALUES_USER_BUTTONS' EXPORTING popup_title = 'Transport to new Branch' programname = sy-repid - formname = 'PULL_REQUEST_POPUP' + formname = 'BRANCH_TO_TRANSPORT_POPUP' ok_pushbuttontext = '' icon_ok_push = '' first_pushbutton = lv_button_transport From 82f68ff5962b02a8e6a6f84eace7fef763981fa3 Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 16 Mar 2017 14:57:13 +0100 Subject: [PATCH 09/12] CLAS: bugfix, changed_by --- src/zabapgit_object_clas.prog.abap | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap index 6aef8f77c..b2908e606 100644 --- a/src/zabapgit_object_clas.prog.abap +++ b/src/zabapgit_object_clas.prog.abap @@ -557,7 +557,10 @@ CLASS lcl_object_oriented_class IMPLEMENTATION. APPEND cl_oo_classname_service=>get_prisec_name( lv_class_name ) TO rt_includes. APPEND cl_oo_classname_service=>get_classpool_name( lv_class_name ) TO rt_includes. APPEND cl_oo_classname_service=>get_ct_name( lv_class_name ) TO rt_includes. - APPEND cl_oo_classname_service=>get_cs_name( lv_class_name ) TO rt_includes. + +* skip the CS include, as it is sometimes generated on the fly instead of +* when the methods are changed +* APPEND cl_oo_classname_service=>get_cs_name( lv_class_name ) TO rt_includes. lt_methods = cl_oo_classname_service=>get_all_method_includes( lv_class_name ). LOOP AT lt_methods ASSIGNING . From c083ba347f1dc6c4a4bdc4592f816ef4df8971a1 Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Fri, 17 Mar 2017 11:03:18 +0100 Subject: [PATCH 10/12] Code reviews --- src/zabapgit_definitions.prog.abap | 2 +- src/zabapgit_forms.prog.abap | 8 - src/zabapgit_gui_router.prog.abap | 19 +-- src/zabapgit_popups.prog.abap | 64 +++++-- src/zabapgit_services.prog.abap | 1 - src/zabapgit_services_repo.prog.abap | 25 ++- src/zabapgit_services_trans_branch.prog.abap | 125 -------------- src/zabapgit_services_trans_branch.prog.xml | 25 --- src/zabapgit_transport.prog.abap | 171 ++++++++++++++----- 9 files changed, 202 insertions(+), 238 deletions(-) delete mode 100644 src/zabapgit_services_trans_branch.prog.abap delete mode 100644 src/zabapgit_services_trans_branch.prog.xml diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index 146089786..f205fa502 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -204,7 +204,7 @@ CONSTANTS: BEGIN OF gc_action, repo_remote_change TYPE string VALUE 'repo_remote_change', repo_refresh_checksums TYPE string VALUE 'repo_refresh_checksums', repo_toggle_fav TYPE string VALUE 'repo_toggle_fav', - repo_transport_to_branch TYPE string VALUE 'go_transport_to_branch', + repo_transport_to_branch TYPE string VALUE 'repo_transport_to_branch', abapgit_home TYPE string VALUE 'abapgit_home', abapgit_wiki TYPE string VALUE 'abapgit_wiki', diff --git a/src/zabapgit_forms.prog.abap b/src/zabapgit_forms.prog.abap index 2ee6ac503..e3d9d95d1 100644 --- a/src/zabapgit_forms.prog.abap +++ b/src/zabapgit_forms.prog.abap @@ -137,14 +137,6 @@ FORM package_popup TABLES tt_fields TYPE ty_sval_tt ENDIF. ENDFORM. "package_popup -FORM branch_to_transport_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 f9ee8bb61..2fe8ed99a 100644 --- a/src/zabapgit_gui_router.prog.abap +++ b/src/zabapgit_gui_router.prog.abap @@ -67,10 +67,7 @@ CLASS lcl_gui_router IMPLEMENTATION. 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_transport_to_branch TYPE ty_transport_to_branch. + ls_item TYPE ty_item. lv_key = iv_getdata. " TODO refactor lv_url = iv_getdata. " TODO refactor @@ -175,21 +172,9 @@ CLASS lcl_gui_router IMPLEMENTATION. lcl_services_repo=>toggle_favorite( lv_key ). ev_state = gc_event_state-re_render. WHEN gc_action-repo_transport_to_branch. + lcl_services_repo=>transport_to_branch( iv_repository_key = lv_key ). ev_state = gc_event_state-re_render. - lt_transport_headers = lcl_transport_popup=>show( ). - lt_tadir = lcl_transport=>to_tadir( lt_transport_headers ). - IF lt_tadir IS INITIAL. - lcx_exception=>raise( 'Canceled or List of objects is empty ' ). - ENDIF. - ls_transport_to_branch = lcl_popups=>popup_to_create_transp_branch( - it_transport_headers = lt_transport_headers - it_transport_objects = lt_tadir ). - lcl_services_repo=>transport_to_branch( - iv_repository_key = lv_key - is_transport_to_branch = ls_transport_to_branch - it_transport_objects = lt_tadir ). - " ZIP services actions WHEN gc_action-zip_import. " Import repo from ZIP lcl_zip=>import( lv_key ). diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index 65f505252..5f19b86ee 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -74,7 +74,12 @@ CLASS lcl_popups DEFINITION FINAL. it_transport_objects TYPE scts_tadir RETURNING VALUE(rs_transport_branch) TYPE ty_transport_to_branch RAISING lcx_exception - lcx_cancel. + lcx_cancel, + popup_to_select_transports + RETURNING VALUE(rt_trkorr) TYPE trwbo_request_headers. + PRIVATE SECTION. + + ENDCLASS. CLASS lcl_popups IMPLEMENTATION. @@ -550,6 +555,40 @@ CLASS lcl_popups IMPLEMENTATION. ENDIF. ENDMETHOD. " popup_to_create_package + METHOD popup_to_select_transports. + DATA: lrs_trfunction TYPE trsel_trs_function, + lv_types TYPE string, + ls_ranges TYPE trsel_ts_ranges. + + " Fill all request types + lv_types = 'KWTCOEMPDRSXQFG'. + lrs_trfunction-sign = 'I'. + lrs_trfunction-option = 'EQ'. + WHILE lv_types NE space. + lrs_trfunction-low = lv_types(1). + APPEND lrs_trfunction TO ls_ranges-request_funcs. + SHIFT lv_types. + ENDWHILE. + + CALL FUNCTION 'TRINT_SELECT_REQUESTS' + EXPORTING + iv_username_pattern = sy-uname + iv_via_selscreen = 'X' + iv_complete_projects = '' + "is_popup = '' + iv_title = 'abapGit: Transport Request Selection' + IMPORTING + et_requests = rt_trkorr + CHANGING + cs_ranges = ls_ranges + EXCEPTIONS + action_aborted_by_user = 1 + OTHERS = 2. + IF sy-subrc <> 0. + RETURN. + ENDIF. + ENDMETHOD. + METHOD popup_to_create_transp_branch. DATA: lv_returncode TYPE c, lt_fields TYPE TABLE OF sval, @@ -574,24 +613,19 @@ CLASS lcl_popups IMPLEMENTATION. lv_button_transport = 'Transport(s)->Branch' ##NO_TEXT. lv_icon_transport = icon_import_all_requests. - CALL FUNCTION 'POPUP_GET_VALUES_USER_BUTTONS' + CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING - popup_title = 'Transport to new Branch' - programname = sy-repid - formname = 'BRANCH_TO_TRANSPORT_POPUP' - ok_pushbuttontext = '' - icon_ok_push = '' - first_pushbutton = lv_button_transport - icon_button_1 = lv_icon_transport - second_pushbutton = '' - icon_button_2 = '' +* no_value_check = SPACE " Deactivates data type check + popup_title = 'Transport to new Branch' +* start_column = '5' " Start column of the dialog box +* start_row = '5' " Start line of the dialog box IMPORTING - returncode = lv_returncode + returncode = lv_returncode TABLES - fields = lt_fields + fields = lt_fields " Table fields, values and attributes EXCEPTIONS - error_in_fields = 1 - OTHERS = 2. + error_in_fields = 1 + OTHERS = 2. IF sy-subrc <> 0. lcx_exception=>raise( 'Error from POPUP_GET_VALUES' ). ENDIF. diff --git a/src/zabapgit_services.prog.abap b/src/zabapgit_services.prog.abap index efe38d9f2..257e84d62 100644 --- a/src/zabapgit_services.prog.abap +++ b/src/zabapgit_services.prog.abap @@ -3,7 +3,6 @@ *&---------------------------------------------------------------------* INCLUDE zabapgit_services_git. -INCLUDE zabapgit_services_trans_branch. INCLUDE zabapgit_services_repo. INCLUDE zabapgit_services_abapgit. INCLUDE zabapgit_services_db. diff --git a/src/zabapgit_services_repo.prog.abap b/src/zabapgit_services_repo.prog.abap index a1cac2e96..0df11ba5e 100644 --- a/src/zabapgit_services_repo.prog.abap +++ b/src/zabapgit_services_repo.prog.abap @@ -48,10 +48,8 @@ CLASS lcl_services_repo DEFINITION FINAL. RAISING lcx_exception. CLASS-METHODS transport_to_branch - IMPORTING iv_repository_key TYPE lcl_persistence_db=>ty_value - is_transport_to_branch TYPE ty_transport_to_branch - it_transport_objects TYPE scts_tadir - RAISING lcx_exception. + IMPORTING iv_repository_key TYPE lcl_persistence_db=>ty_value + RAISING lcx_exception lcx_cancel. ENDCLASS. "lcl_services_repo @@ -324,14 +322,27 @@ CLASS lcl_services_repo IMPLEMENTATION. METHOD transport_to_branch. DATA: lo_repository TYPE REF TO lcl_repo_online, - lo_transport_to_branch TYPE REF TO lcl_transport_to_branch. + lo_transport_to_branch TYPE REF TO lcl_transport_to_branch, + lt_transport_headers TYPE trwbo_request_headers, + lt_transport_objects TYPE scts_tadir, + ls_transport_to_branch TYPE ty_transport_to_branch. lo_repository ?= lcl_app=>repo_srv( )->get( iv_repository_key ). + + lt_transport_headers = lcl_popups=>popup_to_select_transports( ). + lt_transport_objects = lcl_transport=>to_tadir( lt_transport_headers ). + IF lt_transport_objects IS INITIAL. + lcx_exception=>raise( 'Canceled or List of objects is empty ' ). + ENDIF. + ls_transport_to_branch = lcl_popups=>popup_to_create_transp_branch( + it_transport_headers = lt_transport_headers + it_transport_objects = lt_transport_objects ). + CREATE OBJECT lo_transport_to_branch. lo_transport_to_branch->create( io_repository = lo_repository - is_transport_to_branch = is_transport_to_branch - it_transport_objects = it_transport_objects ). + is_transport_to_branch = ls_transport_to_branch + it_transport_objects = lt_transport_objects ). ENDMETHOD. ENDCLASS. "lcl_services_repo diff --git a/src/zabapgit_services_trans_branch.prog.abap b/src/zabapgit_services_trans_branch.prog.abap deleted file mode 100644 index bc40401d6..000000000 --- a/src/zabapgit_services_trans_branch.prog.abap +++ /dev/null @@ -1,125 +0,0 @@ -*&---------------------------------------------------------------------* -*& Include zabapgit_services_trans_branch -*&---------------------------------------------------------------------* -CLASS lcl_transport_to_branch DEFINITION. - PUBLIC SECTION. - METHODS: - create - IMPORTING io_repository TYPE REF TO lcl_repo_online - is_transport_to_branch TYPE ty_transport_to_branch - it_transport_objects TYPE scts_tadir - RAISING lcx_exception. - PRIVATE SECTION. - - METHODS create_new_branch - IMPORTING - io_repository TYPE REF TO lcl_repo_online - iv_branch_name TYPE string - RAISING - lcx_exception. - METHODS add_new_and_changes_to_stage - IMPORTING - it_transport_objects TYPE scts_tadir - io_stage TYPE REF TO lcl_stage - is_stage_objects TYPE ty_stage_files - RAISING - lcx_exception. - METHODS generate_commit_message - IMPORTING - is_transport_to_branch TYPE ty_transport_to_branch - RETURNING - VALUE(rs_comment) TYPE ty_comment. -ENDCLASS. - -CLASS lcl_transport_to_branch IMPLEMENTATION. - - METHOD create. - DATA: - ls_transport_object TYPE LINE OF scts_tadir, - lt_items TYPE ty_files_item_tt, - ls_local_file TYPE LINE OF ty_files_item_tt, - ls_remote_file TYPE LINE OF ty_files_tt, - ls_item TYPE string, - lv_branch_name TYPE string, - ls_comment TYPE ty_comment, - lo_stage TYPE REF TO lcl_stage, - ls_stage_objects TYPE ty_stage_files, - ls_branch_to_delete TYPE lcl_git_branch_list=>ty_git_branch. - - lv_branch_name = lcl_git_branch_list=>complete_heads_branch_name( - lcl_git_branch_list=>normalize_branch_name( is_transport_to_branch-branch_name ) ). - - create_new_branch( - io_repository = io_repository - iv_branch_name = lv_branch_name ). - - CREATE OBJECT lo_stage - EXPORTING - iv_branch_name = lv_branch_name - iv_branch_sha1 = io_repository->get_sha1_remote( ). - - ls_stage_objects = lcl_stage_logic=>get( io_repository ). - - add_new_and_changes_to_stage( - it_transport_objects = it_transport_objects - io_stage = lo_stage - is_stage_objects = ls_stage_objects ). - - "Stage remote files as removal, for they could be deleted - LOOP AT ls_stage_objects-remote INTO ls_remote_file. - lo_stage->rm( - iv_path = ls_remote_file-path - iv_filename = ls_remote_file-filename ). - ENDLOOP. - - ls_comment = generate_commit_message( is_transport_to_branch ). - - io_repository->push( is_comment = ls_comment - io_stage = lo_stage ). - ENDMETHOD. - - METHOD create_new_branch. - ASSERT iv_branch_name CP 'refs/heads/+*'. - TRY. - lcl_git_porcelain=>create_branch( - io_repo = io_repository - iv_name = iv_branch_name - iv_from = io_repository->get_sha1_local( ) ). - - io_repository->set_branch_name( iv_branch_name ). - CATCH lcx_exception. - lcx_exception=>raise( 'Error when creating new branch'). - ENDTRY. - ENDMETHOD. - - - METHOD add_new_and_changes_to_stage. - DATA ls_transport_object TYPE tadir. - DATA ls_local_file TYPE ty_file_item. - - LOOP AT it_transport_objects INTO ls_transport_object. - IF ls_transport_object-delflag = abap_false. - LOOP AT is_stage_objects-local - INTO ls_local_file - WHERE item-obj_name = ls_transport_object-obj_name. - "Looping is needed to also add XMLs, other includes (e.g. local class implementation) - io_stage->add( - iv_path = ls_local_file-file-path - iv_filename = ls_local_file-file-filename - iv_data = ls_local_file-file-data ). - ENDLOOP. - IF sy-subrc = 4. - lcx_exception=>raise( |Object { ls_transport_object-obj_name } not found in the local repository files | ). - ENDIF. - ENDIF. - ENDLOOP. - ENDMETHOD. - - - METHOD generate_commit_message. - rs_comment-committer-name = sy-uname. - rs_comment-committer-email = |{ rs_comment-committer-name }@localhost|. - rs_comment-comment = is_transport_to_branch-commit_text. - ENDMETHOD. - -ENDCLASS. diff --git a/src/zabapgit_services_trans_branch.prog.xml b/src/zabapgit_services_trans_branch.prog.xml deleted file mode 100644 index e1d07aea9..000000000 --- a/src/zabapgit_services_trans_branch.prog.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - ZABAPGIT_SERVICES_TRANS_BRANCH - A - X - S - D$ - I - X - D$S - X - - - - R - Include ZABAPGIT_SERVICSE_TRANS_BRANCH - 38 - - - - - diff --git a/src/zabapgit_transport.prog.abap b/src/zabapgit_transport.prog.abap index bc23ed2b6..de5fa4fe3 100644 --- a/src/zabapgit_transport.prog.abap +++ b/src/zabapgit_transport.prog.abap @@ -1,13 +1,6 @@ *&---------------------------------------------------------------------* *& Include ZABAPGIT_TRANSPORT *&---------------------------------------------------------------------* -CLASS lcl_transport_popup DEFINITION. - PUBLIC SECTION. - CLASS-METHODS: - show - RETURNING VALUE(rt_trkorr) TYPE trwbo_request_headers. -ENDCLASS. - CLASS lcl_transport DEFINITION FINAL. PUBLIC SECTION. @@ -45,7 +38,7 @@ CLASS lcl_transport IMPLEMENTATION. lt_trkorr TYPE trwbo_request_headers. - lt_trkorr = lcl_transport_popup=>show( ). + lt_trkorr = lcl_popups=>popup_to_select_transports( ). IF lines( lt_trkorr ) = 0. RETURN. ENDIF. @@ -190,40 +183,140 @@ CLASS lcl_transport IMPLEMENTATION. DELETE ADJACENT DUPLICATES FROM rt_tadir COMPARING object obj_name. DELETE rt_tadir WHERE table_line IS INITIAL. ENDMETHOD. - ENDCLASS. -CLASS lcl_transport_popup IMPLEMENTATION. - METHOD show. - DATA: lrs_trfunction TYPE trsel_trs_function, - lv_types TYPE string, - ls_ranges TYPE trsel_ts_ranges. - " Fill all request types - lv_types = 'KWTCOEMPDRSXQFG'. - lrs_trfunction-sign = 'I'. - lrs_trfunction-option = 'EQ'. - WHILE lv_types NE space. - lrs_trfunction-low = lv_types(1). - APPEND lrs_trfunction TO ls_ranges-request_funcs. - SHIFT lv_types. - ENDWHILE. +CLASS lcl_transport_to_branch DEFINITION. + PUBLIC SECTION. + METHODS: + create + IMPORTING io_repository TYPE REF TO lcl_repo_online + is_transport_to_branch TYPE ty_transport_to_branch + it_transport_objects TYPE scts_tadir + RAISING lcx_exception. + PRIVATE SECTION. - CALL FUNCTION 'TRINT_SELECT_REQUESTS' - EXPORTING - iv_username_pattern = sy-uname - iv_via_selscreen = 'X' - iv_complete_projects = '' - "is_popup = '' - iv_title = 'abapGit: Transport Request Selection' + METHODS create_new_branch IMPORTING - et_requests = rt_trkorr - CHANGING - cs_ranges = ls_ranges - EXCEPTIONS - action_aborted_by_user = 1 - OTHERS = 2. - IF sy-subrc <> 0. - RETURN. - ENDIF. + io_repository TYPE REF TO lcl_repo_online + iv_branch_name TYPE string + RAISING + lcx_exception. + METHODS generate_commit_message + IMPORTING + is_transport_to_branch TYPE ty_transport_to_branch + RETURNING + VALUE(rs_comment) TYPE ty_comment. + METHODS stage_transport_objects + IMPORTING + it_transport_objects TYPE scts_tadir + io_stage TYPE REF TO lcl_stage + is_stage_objects TYPE ty_stage_files + it_object_statuses TYPE ty_results_tt + RAISING + lcx_exception. +ENDCLASS. + +CLASS lcl_transport_to_branch IMPLEMENTATION. + + METHOD create. + DATA: + ls_transport_object TYPE LINE OF scts_tadir, + lt_items TYPE ty_files_item_tt, + ls_local_file TYPE LINE OF ty_files_item_tt, + ls_remote_file TYPE LINE OF ty_files_tt, + ls_item TYPE string, + lv_branch_name TYPE string, + ls_comment TYPE ty_comment, + lo_stage TYPE REF TO lcl_stage, + ls_stage_objects TYPE ty_stage_files, + lt_object_statuses TYPE ty_results_tt, + ls_object_status TYPE LINE OF ty_results_tt. + + lv_branch_name = lcl_git_branch_list=>complete_heads_branch_name( + lcl_git_branch_list=>normalize_branch_name( is_transport_to_branch-branch_name ) ). + + create_new_branch( + io_repository = io_repository + iv_branch_name = lv_branch_name ). + + CREATE OBJECT lo_stage + EXPORTING + iv_branch_name = lv_branch_name + iv_branch_sha1 = io_repository->get_sha1_remote( ). + + ls_stage_objects = lcl_stage_logic=>get( io_repository ). + + lt_object_statuses = io_repository->status( ). + + stage_transport_objects( + it_transport_objects = it_transport_objects + io_stage = lo_stage + is_stage_objects = ls_stage_objects + it_object_statuses = lt_object_statuses ). + + ls_comment = generate_commit_message( is_transport_to_branch ). + + io_repository->push( is_comment = ls_comment + io_stage = lo_stage ). + ENDMETHOD. + + METHOD create_new_branch. + ASSERT iv_branch_name CP 'refs/heads/+*'. + TRY. + lcl_git_porcelain=>create_branch( + io_repo = io_repository + iv_name = iv_branch_name + iv_from = io_repository->get_sha1_local( ) ). + + io_repository->set_branch_name( iv_branch_name ). + CATCH lcx_exception. + lcx_exception=>raise( 'Error when creating new branch'). + ENDTRY. + ENDMETHOD. + + METHOD generate_commit_message. + rs_comment-committer-name = sy-uname. + rs_comment-committer-email = |{ rs_comment-committer-name }@localhost|. + rs_comment-comment = is_transport_to_branch-commit_text. + ENDMETHOD. + + + METHOD stage_transport_objects. + + DATA ls_transport_object TYPE tadir. + DATA ls_local_file TYPE ty_file_item. + DATA ls_object_status TYPE ty_result. + + LOOP AT it_transport_objects INTO ls_transport_object. + READ TABLE it_object_statuses INTO ls_object_status + WITH KEY obj_name = ls_transport_object-obj_name + obj_type = ls_transport_object-object. + IF sy-subrc <> 0. + lcx_exception=>raise( |Object { ls_transport_object-obj_name } not found in the local repository files | ). + ENDIF. + + CASE ls_object_status-lstate. + WHEN gc_state-added OR gc_state-modified. + ASSERT ls_transport_object-delflag = abap_false. + + READ TABLE is_stage_objects-local + INTO ls_local_file + WITH KEY item-obj_name = ls_transport_object-obj_name + item-obj_type = ls_transport_object-object. + IF sy-subrc <> 0. + lcx_exception=>raise( |Object { ls_transport_object-obj_name } not found in the local repository files | ). + ENDIF. + + io_stage->add( + iv_path = ls_local_file-file-path + iv_filename = ls_local_file-file-filename + iv_data = ls_local_file-file-data ). + WHEN gc_state-deleted. + ASSERT ls_transport_object-delflag = abap_true. + io_stage->rm( + iv_path = ls_object_status-path + iv_filename = ls_object_status-filename ). + ENDCASE. + ENDLOOP. ENDMETHOD. ENDCLASS. From 00c195d7cc5f3e403e7c5868299322d03b5f6ee8 Mon Sep 17 00:00:00 2001 From: Eduardo Ferrari Copat Date: Fri, 17 Mar 2017 11:06:09 +0100 Subject: [PATCH 11/12] Missing space on Regex --- src/zabapgit_definitions.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index f205fa502..2f56f6e19 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -191,7 +191,7 @@ CONSTANTS: gc_english TYPE spras VALUE 'E'. CONSTANTS: gc_root_dir TYPE string VALUE '/', gc_dot_abapgit TYPE string VALUE '.abapgit.xml' ##NO_TEXT, - gc_author_regex TYPE string VALUE '^([\w\s\.@\-_1-9]+) <(.*)> (\d{10}).\d{4}$' ##NO_TEXT. + gc_author_regex TYPE string VALUE '^([\w\s\.@\-_1-9]+) <(.*)> (\d{10}) .\d{4}$' ##NO_TEXT. CONSTANTS: BEGIN OF gc_action, repo_clone TYPE string VALUE 'repo_clone', From 448e5a0c3c3996bba55b2c4ce1918501ba7fddf8 Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Fri, 17 Mar 2017 12:17:14 +0100 Subject: [PATCH 12/12] @sbcgua review --- src/zabapgit_gui_router.prog.abap | 8 ++++---- src/zabapgit_transport.prog.abap | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/zabapgit_gui_router.prog.abap b/src/zabapgit_gui_router.prog.abap index 2fe8ed99a..b716aae7e 100644 --- a/src/zabapgit_gui_router.prog.abap +++ b/src/zabapgit_gui_router.prog.abap @@ -64,10 +64,10 @@ 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. + 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. lv_key = iv_getdata. " TODO refactor lv_url = iv_getdata. " TODO refactor diff --git a/src/zabapgit_transport.prog.abap b/src/zabapgit_transport.prog.abap index de5fa4fe3..d8110175e 100644 --- a/src/zabapgit_transport.prog.abap +++ b/src/zabapgit_transport.prog.abap @@ -316,6 +316,8 @@ CLASS lcl_transport_to_branch IMPLEMENTATION. io_stage->rm( iv_path = ls_object_status-path iv_filename = ls_object_status-filename ). + WHEN OTHERS. + ASSERT 0 = 1. "Unexpected state ENDCASE. ENDLOOP. ENDMETHOD.