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
This commit is contained in:
Christian Günter 2018-07-11 16:18:08 +02:00 committed by Lars Hvam
parent 6ced7c04bb
commit 4f9f47cd59
8 changed files with 114 additions and 63 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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: <ls_tadir> 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 <ls_tadir>.
lo_progress->show( iv_current = sy-tabix
iv_text = |Delete { <ls_tadir>-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 = <ls_tadir>-object.
ls_item-obj_name = <ls_tadir>-obj_name.
delete_obj( ls_item ).
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
lo_progress->show( iv_current = sy-tabix
iv_text = |Delete { <ls_tadir>-obj_name }| ) ##NO_TEXT.
CLEAR ls_item.
ls_item-obj_type = <ls_tadir>-object.
ls_item-obj_name = <ls_tadir>-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: <ls_result> TYPE zif_abapgit_definitions=>ty_result.
LOOP AT it_results ASSIGNING <ls_result>.
ls_item-devclass = <ls_result>-package.
ls_item-obj_type = <ls_result>-obj_type.
ls_item-obj_name = <ls_result>-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: <ls_tadir> TYPE zif_abapgit_definitions=>ty_tadir.
LOOP AT it_tadir ASSIGNING <ls_tadir>.
ls_item-devclass = <ls_tadir>-devclass.
ls_item-obj_type = <ls_tadir>-object.
ls_item-obj_name = <ls_tadir>-obj_name.
INSERT ls_item INTO TABLE rt_items.
ENDLOOP.
ENDMETHOD.
METHOD prioritize_deser.
FIELD-SYMBOLS: <ls_result> 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: <ls_tadir> TYPE zif_abapgit_definitions=>ty_tadir.
LOOP AT it_tadir ASSIGNING <ls_tadir>.
ls_item-devclass = <ls_tadir>-devclass.
ls_item-obj_type = <ls_tadir>-object.
ls_item-obj_name = <ls_tadir>-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: <ls_result> TYPE zif_abapgit_definitions=>ty_result.
LOOP AT it_results ASSIGNING <ls_result>.
ls_item-devclass = <ls_result>-package.
ls_item-obj_type = <ls_result>-obj_type.
ls_item-obj_name = <ls_result>-obj_name.
INSERT ls_item INTO TABLE rt_items.
ENDLOOP.
ENDMETHOD.
ENDCLASS.

View File

@ -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 <ls_tadir>.
lv_msg = |Not deleted properly { <ls_tadir>-object } { <ls_tadir>-obj_name }|.

View File

@ -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: <ls_remote> LIKE LINE OF mt_remote.

View File

@ -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 ).

View File

@ -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,

View File

@ -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