From 4f9f47cd591e7bb46f2bbf993eb76466282d2cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCnter?= Date: Wed, 11 Jul 2018 16:18:08 +0200 Subject: [PATCH] Set transport request if needed during uninstall or reset local (#1596) * delete checks: set transport request if needed this ensures that the transport request is set when deleting objects. E.g. uninstalling the repositoy or reset local. * separate type for delete checks --- src/ui/zcl_abapgit_services_git.clas.abap | 12 +- src/ui/zcl_abapgit_services_repo.clas.abap | 12 +- src/zcl_abapgit_objects.clas.abap | 123 ++++++++++-------- src/zcl_abapgit_objects.clas.testclasses.abap | 2 +- src/zcl_abapgit_repo.clas.abap | 17 ++- src/zcl_abapgit_repo_srv.clas.abap | 3 +- src/zif_abapgit_definitions.intf.abap | 5 +- src/zif_abapgit_repo_srv.intf.abap | 3 +- 8 files changed, 114 insertions(+), 63 deletions(-) diff --git a/src/ui/zcl_abapgit_services_git.clas.abap b/src/ui/zcl_abapgit_services_git.clas.abap index 522f09f8a..b290566c1 100644 --- a/src/ui/zcl_abapgit_services_git.clas.abap +++ b/src/ui/zcl_abapgit_services_git.clas.abap @@ -228,7 +228,8 @@ CLASS zcl_abapgit_services_git IMPLEMENTATION. lv_answer TYPE c LENGTH 1, lt_unnecessary_local_objs TYPE zif_abapgit_definitions=>ty_tadir_tt, lt_selected LIKE lt_unnecessary_local_objs, - lt_columns TYPE stringtab. + lt_columns TYPE stringtab, + ls_checks TYPE zif_abapgit_definitions=>ty_delete_checks. lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ). @@ -268,7 +269,14 @@ CLASS zcl_abapgit_services_git IMPLEMENTATION. et_list = lt_selected ). IF lines( lt_selected ) > 0. - zcl_abapgit_objects=>delete( lt_selected ). + ls_checks = lo_repo->delete_checks( ). + IF ls_checks-transport-required = abap_true. + ls_checks-transport-transport = zcl_abapgit_ui_factory=>get_popups( + )->popup_transport_request( ls_checks-transport-type ). + ENDIF. + + zcl_abapgit_objects=>delete( it_tadir = lt_selected + is_checks = ls_checks ). * update repo cache lo_repo->refresh( ). ENDIF. diff --git a/src/ui/zcl_abapgit_services_repo.clas.abap b/src/ui/zcl_abapgit_services_repo.clas.abap index 82bc13a1b..ad94976a8 100644 --- a/src/ui/zcl_abapgit_services_repo.clas.abap +++ b/src/ui/zcl_abapgit_services_repo.clas.abap @@ -282,7 +282,8 @@ CLASS zcl_abapgit_services_repo IMPLEMENTATION. lv_answer TYPE c LENGTH 1, lo_repo TYPE REF TO zcl_abapgit_repo, lv_package TYPE devclass, - lv_question TYPE c LENGTH 100. + lv_question TYPE c LENGTH 100, + ls_checks TYPE zif_abapgit_definitions=>ty_delete_checks. lo_repo = zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ). @@ -311,7 +312,14 @@ CLASS zcl_abapgit_services_repo IMPLEMENTATION. ENDIF. - zcl_abapgit_repo_srv=>get_instance( )->purge( lo_repo ). + ls_checks = lo_repo->delete_checks( ). + IF ls_checks-transport-required = abap_true. + ls_checks-transport-transport = zcl_abapgit_ui_factory=>get_popups( + )->popup_transport_request( ls_checks-transport-type ). + ENDIF. + + zcl_abapgit_repo_srv=>get_instance( )->purge( io_repo = lo_repo + is_checks = ls_checks ). COMMIT WORK. diff --git a/src/zcl_abapgit_objects.clas.abap b/src/zcl_abapgit_objects.clas.abap index 07bd2bf33..a01c25267 100644 --- a/src/zcl_abapgit_objects.clas.abap +++ b/src/zcl_abapgit_objects.clas.abap @@ -42,7 +42,8 @@ CLASS zcl_abapgit_objects DEFINITION zcx_abapgit_exception . CLASS-METHODS delete IMPORTING - !it_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt + !it_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt + !is_checks TYPE zif_abapgit_definitions=>ty_delete_checks OPTIONAL RAISING zcx_abapgit_exception . CLASS-METHODS jump @@ -205,7 +206,7 @@ ENDCLASS. -CLASS zcl_abapgit_objects IMPLEMENTATION. +CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION. METHOD changed_by. @@ -385,35 +386,50 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. DATA: ls_item TYPE zif_abapgit_definitions=>ty_item, lo_progress TYPE REF TO zcl_abapgit_progress, lt_tadir LIKE it_tadir, - lt_items TYPE zif_abapgit_definitions=>ty_items_tt. + lt_items TYPE zif_abapgit_definitions=>ty_items_tt, + lx_error TYPE REF TO zcx_abapgit_exception, + lv_text TYPE string. FIELD-SYMBOLS: LIKE LINE OF it_tadir. lt_tadir = it_tadir. - zcl_abapgit_dependencies=>resolve( CHANGING ct_tadir = lt_tadir ). + IF is_checks-transport-required = abap_true. + zcl_abapgit_default_transport=>get_instance( )->set( is_checks-transport-transport ). + ENDIF. - CREATE OBJECT lo_progress - EXPORTING - iv_total = lines( lt_tadir ). + TRY. + zcl_abapgit_dependencies=>resolve( CHANGING ct_tadir = lt_tadir ). - lt_items = map_tadir_to_items( lt_tadir ). + CREATE OBJECT lo_progress + EXPORTING + iv_total = lines( lt_tadir ). - check_objects_locked( iv_language = zif_abapgit_definitions=>gc_english - it_items = lt_items ). + lt_items = map_tadir_to_items( lt_tadir ). - LOOP AT lt_tadir ASSIGNING . - lo_progress->show( iv_current = sy-tabix - iv_text = |Delete { -obj_name }| ) ##NO_TEXT. + check_objects_locked( iv_language = zif_abapgit_definitions=>gc_english + it_items = lt_items ). - CLEAR ls_item. - ls_item-obj_type = -object. - ls_item-obj_name = -obj_name. - delete_obj( ls_item ). + LOOP AT lt_tadir ASSIGNING . + lo_progress->show( iv_current = sy-tabix + iv_text = |Delete { -obj_name }| ) ##NO_TEXT. + + CLEAR ls_item. + ls_item-obj_type = -object. + ls_item-obj_name = -obj_name. + delete_obj( ls_item ). * make sure to save object deletions - COMMIT WORK. - ENDLOOP. + COMMIT WORK. + ENDLOOP. + + CATCH zcx_abapgit_exception INTO lx_error. + zcl_abapgit_default_transport=>get_instance( )->reset( ). + lv_text = lx_error->get_text( ). + zcx_abapgit_exception=>raise( lv_text ). + ENDTRY. + + zcl_abapgit_default_transport=>get_instance( )->reset( ). ENDMETHOD. "delete @@ -446,7 +462,6 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. METHOD deserialize. DATA: ls_item TYPE zif_abapgit_definitions=>ty_item, - lv_cancel TYPE abap_bool, li_obj TYPE REF TO zif_abapgit_object, lt_remote TYPE zif_abapgit_definitions=>ty_files_tt, lv_package TYPE devclass, @@ -718,6 +733,40 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. ENDMETHOD. "jump + METHOD map_results_to_items. + + DATA: ls_item LIKE LINE OF rt_items. + FIELD-SYMBOLS: TYPE zif_abapgit_definitions=>ty_result. + + LOOP AT it_results ASSIGNING . + + ls_item-devclass = -package. + ls_item-obj_type = -obj_type. + ls_item-obj_name = -obj_name. + INSERT ls_item INTO TABLE rt_items. + + ENDLOOP. + + ENDMETHOD. + + + METHOD map_tadir_to_items. + + DATA: ls_item LIKE LINE OF rt_items. + FIELD-SYMBOLS: TYPE zif_abapgit_definitions=>ty_tadir. + + LOOP AT it_tadir ASSIGNING . + + ls_item-devclass = -devclass. + ls_item-obj_type = -object. + ls_item-obj_name = -obj_name. + INSERT ls_item INTO TABLE rt_items. + + ENDLOOP. + + ENDMETHOD. + + METHOD prioritize_deser. FIELD-SYMBOLS: LIKE LINE OF it_results. @@ -970,38 +1019,4 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. ENDLOOP. ENDMETHOD. - - METHOD map_tadir_to_items. - - DATA: ls_item LIKE LINE OF rt_items. - FIELD-SYMBOLS: TYPE zif_abapgit_definitions=>ty_tadir. - - LOOP AT it_tadir ASSIGNING . - - ls_item-devclass = -devclass. - ls_item-obj_type = -object. - ls_item-obj_name = -obj_name. - INSERT ls_item INTO TABLE rt_items. - - ENDLOOP. - - ENDMETHOD. - - - METHOD map_results_to_items. - - DATA: ls_item LIKE LINE OF rt_items. - FIELD-SYMBOLS: TYPE zif_abapgit_definitions=>ty_result. - - LOOP AT it_results ASSIGNING . - - ls_item-devclass = -package. - ls_item-obj_type = -obj_type. - ls_item-obj_name = -obj_name. - INSERT ls_item INTO TABLE rt_items. - - ENDLOOP. - - ENDMETHOD. - ENDCLASS. diff --git a/src/zcl_abapgit_objects.clas.testclasses.abap b/src/zcl_abapgit_objects.clas.testclasses.abap index cf9255bb5..ab06a0f63 100644 --- a/src/zcl_abapgit_objects.clas.testclasses.abap +++ b/src/zcl_abapgit_objects.clas.testclasses.abap @@ -84,7 +84,7 @@ CLASS ltcl_dangerous IMPLEMENTATION. quit = if_aunit_constants=>no ). ENDLOOP. - zcl_abapgit_objects=>delete( lt_tadir ). + zcl_abapgit_objects=>delete( it_tadir = lt_tadir ). lt_tadir = zcl_abapgit_factory=>get_tadir( )->read( c_package ). LOOP AT lt_tadir ASSIGNING . lv_msg = |Not deleted properly { -object } { -obj_name }|. diff --git a/src/zcl_abapgit_repo.clas.abap b/src/zcl_abapgit_repo.clas.abap index 240e2a2d5..2230ffd6d 100644 --- a/src/zcl_abapgit_repo.clas.abap +++ b/src/zcl_abapgit_repo.clas.abap @@ -12,6 +12,11 @@ CLASS zcl_abapgit_repo DEFINITION VALUE(rs_checks) TYPE zif_abapgit_definitions=>ty_deserialize_checks RAISING zcx_abapgit_exception . + METHODS delete_checks + RETURNING + VALUE(rs_checks) TYPE zif_abapgit_definitions=>ty_delete_checks + RAISING + zcx_abapgit_exception . METHODS constructor IMPORTING !is_data TYPE zif_abapgit_persistence=>ty_repo . @@ -124,7 +129,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION. +CLASS zcl_abapgit_repo IMPLEMENTATION. METHOD constructor. @@ -205,6 +210,16 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION. ENDMETHOD. + METHOD delete_checks. + + DATA: li_package TYPE REF TO zif_abapgit_sap_package. + + li_package = zcl_abapgit_factory=>get_sap_package( get_package( ) ). + rs_checks-transport-required = li_package->are_changes_recorded_in_tr_req( ). + + ENDMETHOD. + + METHOD find_remote_dot_abapgit. FIELD-SYMBOLS: LIKE LINE OF mt_remote. diff --git a/src/zcl_abapgit_repo_srv.clas.abap b/src/zcl_abapgit_repo_srv.clas.abap index 15a1b36f2..d284272fe 100644 --- a/src/zcl_abapgit_repo_srv.clas.abap +++ b/src/zcl_abapgit_repo_srv.clas.abap @@ -285,7 +285,8 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION. lt_tadir = zcl_abapgit_factory=>get_tadir( )->read( io_repo->get_package( ) ). - zcl_abapgit_objects=>delete( lt_tadir ). + zcl_abapgit_objects=>delete( it_tadir = lt_tadir + is_checks = is_checks ). delete( io_repo ). diff --git a/src/zif_abapgit_definitions.intf.abap b/src/zif_abapgit_definitions.intf.abap index 5c04e247d..79e07c07b 100644 --- a/src/zif_abapgit_definitions.intf.abap +++ b/src/zif_abapgit_definitions.intf.abap @@ -128,7 +128,10 @@ INTERFACE zif_abapgit_definitions PUBLIC. warning_package TYPE ty_overwrite_tt, requirements TYPE ty_requirements, transport TYPE ty_transport, - END OF ty_deserialize_checks. + END OF ty_deserialize_checks, + BEGIN OF ty_delete_checks, + transport TYPE ty_transport, + END OF ty_delete_checks. TYPES: BEGIN OF ty_metadata, diff --git a/src/zif_abapgit_repo_srv.intf.abap b/src/zif_abapgit_repo_srv.intf.abap index 0ab89d978..c803c1358 100644 --- a/src/zif_abapgit_repo_srv.intf.abap +++ b/src/zif_abapgit_repo_srv.intf.abap @@ -46,7 +46,8 @@ INTERFACE zif_abapgit_repo_srv zcx_abapgit_exception . METHODS purge IMPORTING - !io_repo TYPE REF TO zcl_abapgit_repo + !io_repo TYPE REF TO zcl_abapgit_repo + is_checks TYPE zif_abapgit_definitions=>ty_delete_checks RAISING zcx_abapgit_exception . METHODS switch_repo_type