From c083ba347f1dc6c4a4bdc4592f816ef4df8971a1 Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Fri, 17 Mar 2017 11:03:18 +0100 Subject: [PATCH] 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.