From 32cac9d00e641c41454f65791097782956e2c6cf Mon Sep 17 00:00:00 2001 From: larshp Date: Tue, 25 Oct 2016 19:37:55 +0200 Subject: [PATCH] rework "object to zip" to files for cherry picking objects, without exporting the entire package previous implementation was too slow, as it had to serialize the entire package, and just needed files for one object --- src/zabapgit.prog.abap | 2 +- src/zabapgit_html_action_utils.prog.abap | 12 +-- src/zabapgit_page_main.prog.abap | 4 +- src/zabapgit_password_dialog.prog.abap | 6 +- src/zabapgit_zip.prog.abap | 97 +++++++++++++++++++----- 5 files changed, 92 insertions(+), 29 deletions(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 47c80e486..bbeadffc3 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -3,7 +3,7 @@ REPORT zabapgit LINE-SIZE 100. * See http://www.abapgit.org CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.18.5'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.18.6'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) diff --git a/src/zabapgit_html_action_utils.prog.abap b/src/zabapgit_html_action_utils.prog.abap index 4fc1a543d..4c6838765 100644 --- a/src/zabapgit_html_action_utils.prog.abap +++ b/src/zabapgit_html_action_utils.prog.abap @@ -104,9 +104,9 @@ CLASS lcl_html_action_utils IMPLEMENTATION. DATA ls_field LIKE LINE OF ct. - FIELD-SYMBOLS TYPE any. + FIELD-SYMBOLS TYPE any. - ls_field-name = name. + ls_field-name = name. CASE cl_abap_typedescr=>describe_by_data( iv )->kind. WHEN cl_abap_typedescr=>kind_elem. @@ -116,7 +116,7 @@ CLASS lcl_html_action_utils IMPLEMENTATION. ASSERT IS ASSIGNED. ls_field-value = . WHEN OTHERS. - ASSERT 2 = 1. + ASSERT 0 = 1. ENDCASE. APPEND ls_field TO ct. @@ -125,8 +125,8 @@ CLASS lcl_html_action_utils IMPLEMENTATION. METHOD get_field. - FIELD-SYMBOLS LIKE LINE OF it. - FIELD-SYMBOLS TYPE any. + FIELD-SYMBOLS: LIKE LINE OF it, + TYPE any. READ TABLE it ASSIGNING WITH KEY name = name. @@ -142,7 +142,7 @@ CLASS lcl_html_action_utils IMPLEMENTATION. ASSERT IS ASSIGNED. = -value. WHEN OTHERS. - ASSERT 2 = 1. + ASSERT 0 = 1. ENDCASE. ENDMETHOD. "get_field diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap index 751738730..f62a63e44 100644 --- a/src/zabapgit_page_main.prog.abap +++ b/src/zabapgit_page_main.prog.abap @@ -83,7 +83,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. lcl_app=>user( )->set_repo_show( lv_key ). TRY. lcl_app=>repo_srv( )->get( lv_key )->refresh( ). - CATCH lcx_exception. + CATCH lcx_exception ##NO_HANDLER. ENDTRY. ev_state = gc_event_state-re_render. @@ -176,7 +176,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. lo_betasub->add( iv_txt = 'Database util' iv_act = gc_action-go_db ) ##NO_TEXT. lo_betasub->add( iv_txt = 'Package to zip' iv_act = gc_action-zip_package ) ##NO_TEXT. lo_betasub->add( iv_txt = 'Transport to zip' iv_act = gc_action-zip_transport ) ##NO_TEXT. - lo_betasub->add( iv_txt = 'Object to zip' iv_act = gc_action-zip_object ) ##NO_TEXT. + lo_betasub->add( iv_txt = 'Object to files' iv_act = gc_action-zip_object ) ##NO_TEXT. lo_betasub->add( iv_txt = 'Page playground' iv_act = gc_action-go_playground ) ##NO_TEXT. lo_betasub->add( iv_txt = 'Debug info' iv_act = gc_action-go_debuginfo ) ##NO_TEXT. diff --git a/src/zabapgit_password_dialog.prog.abap b/src/zabapgit_password_dialog.prog.abap index 63ba43ea1..896d94e0a 100644 --- a/src/zabapgit_password_dialog.prog.abap +++ b/src/zabapgit_password_dialog.prog.abap @@ -6,15 +6,15 @@ TABLES sscrfields. SELECTION-SCREEN BEGIN OF SCREEN 1002 TITLE s_title. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(10) s_url FOR FIELD p_url. -PARAMETERS: p_url TYPE string LOWER CASE VISIBLE LENGTH 40. +PARAMETERS: p_url TYPE string LOWER CASE VISIBLE LENGTH 40 ##SEL_WRONG. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(10) s_user FOR FIELD p_user. -PARAMETERS: p_user TYPE string LOWER CASE VISIBLE LENGTH 40. +PARAMETERS: p_user TYPE string LOWER CASE VISIBLE LENGTH 40 ##SEL_WRONG. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(10) s_pass FOR FIELD p_pass. -PARAMETERS: p_pass TYPE string LOWER CASE VISIBLE LENGTH 40. +PARAMETERS: p_pass TYPE string LOWER CASE VISIBLE LENGTH 40 ##SEL_WRONG. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF SCREEN 1002. diff --git a/src/zabapgit_zip.prog.abap b/src/zabapgit_zip.prog.abap index 942d95961..44b3cf79b 100644 --- a/src/zabapgit_zip.prog.abap +++ b/src/zabapgit_zip.prog.abap @@ -27,12 +27,12 @@ CLASS lcl_zip DEFINITION FINAL. PRIVATE SECTION. CLASS-METHODS file_upload - RETURNING VALUE(rv_xstr) TYPE xstring + RETURNING value(rv_xstr) TYPE xstring RAISING lcx_exception. CLASS-METHODS unzip_file IMPORTING iv_xstr TYPE xstring - RETURNING VALUE(rt_files) TYPE ty_files_tt + RETURNING value(rt_files) TYPE ty_files_tt RAISING lcx_exception. CLASS-METHODS normalize_path @@ -52,11 +52,11 @@ CLASS lcl_zip DEFINITION FINAL. CLASS-METHODS encode_files IMPORTING it_files TYPE ty_files_item_tt - RETURNING VALUE(rv_xstr) TYPE xstring + RETURNING value(rv_xstr) TYPE xstring RAISING lcx_exception. CLASS-METHODS get_message - RETURNING VALUE(rv_message) TYPE string + RETURNING value(rv_message) TYPE string RAISING lcx_exception. ENDCLASS. "lcl_zip DEFINITION @@ -337,7 +337,7 @@ CLASS lcl_zip IMPLEMENTATION. ENDLOOP. ENDIF. - ENDMETHOD. + ENDMETHOD. "normalize_path METHOD unzip_file. @@ -460,10 +460,17 @@ CLASS lcl_zip IMPLEMENTATION. METHOD export_object. - DATA: lo_repo TYPE REF TO lcl_repo_offline, - ls_data TYPE lcl_persistence_repo=>ty_repo, - lt_tadir TYPE scts_tadir, - ls_tadir TYPE tadir. + DATA: ls_tadir TYPE tadir, + ls_item TYPE ty_item, + lv_folder TYPE string, + lv_fullpath TYPE string, + lt_rawdata TYPE solix_tab, + lv_sep TYPE c LENGTH 1, + lt_files TYPE ty_files_tt. + + STATICS: lv_prev TYPE string. + + FIELD-SYMBOLS: LIKE LINE OF lt_files. ls_tadir = lcl_popups=>popup_object( ). @@ -471,18 +478,74 @@ CLASS lcl_zip IMPLEMENTATION. RAISE EXCEPTION TYPE lcx_cancel. ENDIF. - ls_data-key = 'TZIP'. - ls_data-package = ls_tadir-devclass. - ls_data-master_language = sy-langu. + ls_item-obj_type = ls_tadir-object. + ls_item-obj_name = ls_tadir-obj_name. - CREATE OBJECT lo_repo + lt_files = lcl_objects=>serialize( + is_item = ls_item + iv_language = sy-langu ). + + IF lines( lt_files ) = 0. + MESSAGE 'Empty' TYPE 'S'. + RETURN. + ENDIF. + + cl_gui_frontend_services=>directory_browse( EXPORTING - is_data = ls_data. + initial_folder = lv_prev + CHANGING + selected_folder = lv_folder ). + IF lv_folder IS INITIAL. + RETURN. + ENDIF. - APPEND ls_tadir TO lt_tadir. + lv_prev = lv_folder. - lcl_zip=>export( io_repo = lo_repo - it_filter = lt_tadir ). + cl_gui_frontend_services=>get_file_separator( + CHANGING + file_separator = lv_sep ). + + LOOP AT lt_files ASSIGNING . + CONCATENATE lv_folder lv_sep -filename INTO lv_fullpath. + + lt_rawdata = cl_bcs_convert=>xstring_to_solix( -data ). + + cl_gui_frontend_services=>gui_download( + EXPORTING + bin_filesize = xstrlen( -data ) + filename = lv_fullpath + filetype = 'BIN' + CHANGING + data_tab = lt_rawdata + EXCEPTIONS + file_write_error = 1 + no_batch = 2 + gui_refuse_filetransfer = 3 + invalid_type = 4 + no_authority = 5 + unknown_error = 6 + header_not_allowed = 7 + separator_not_allowed = 8 + filesize_not_allowed = 9 + header_too_long = 10 + dp_error_create = 11 + dp_error_send = 12 + dp_error_write = 13 + unknown_dp_error = 14 + access_denied = 15 + dp_out_of_memory = 16 + disk_full = 17 + dp_timeout = 18 + file_not_found = 19 + dataprovider_exception = 20 + control_flush_error = 21 + not_supported_by_gui = 22 + error_no_gui = 23 + OTHERS = 24 ). + IF sy-subrc <> 0. + lcx_exception=>raise( 'error from gui_download' ). + ENDIF. + ENDLOOP. ENDMETHOD. "export_package