transport to zip, close #271

This commit is contained in:
larshp 2016-07-03 09:57:16 +00:00
parent f3b2f0ec33
commit 71447f8538
7 changed files with 237 additions and 28 deletions

View File

@ -474,12 +474,21 @@ CLASS lcl_objects IMPLEMENTATION.
METHOD serialize.
DATA: lt_files TYPE ty_files_tt,
li_obj TYPE REF TO lif_object,
DATA: li_obj TYPE REF TO lif_object,
lo_xml TYPE REF TO lcl_xml_output,
lo_files TYPE REF TO lcl_objects_files.
IF is_supported( is_item ) = abap_false.
IF NOT io_log IS INITIAL.
io_log->add( iv_msgv1 = 'Object type ignored, not supported:'
iv_msgv2 = is_item-obj_type
iv_msgv3 = '-'
iv_msgv4 = is_item-obj_name ) ##no_text.
ENDIF.
RETURN.
ENDIF.
CREATE OBJECT lo_files
EXPORTING
is_item = is_item.
@ -494,15 +503,23 @@ CLASS lcl_objects IMPLEMENTATION.
rt_files = lo_files->get_files( ).
* check for duplicates
lt_files[] = rt_files[].
check_duplicates( rt_files ).
ENDMETHOD. "serialize
METHOD check_duplicates.
DATA: lt_files TYPE ty_files_tt.
lt_files[] = it_files[].
SORT lt_files BY path ASCENDING filename ASCENDING.
DELETE ADJACENT DUPLICATES FROM lt_files COMPARING path filename.
IF lines( lt_files ) <> lines( rt_files ).
IF lines( lt_files ) <> lines( it_files ).
_raise 'Duplicates'.
ENDIF.
ENDMETHOD. "serialize
ENDMETHOD.
METHOD prioritize_deser.

View File

@ -1389,6 +1389,7 @@ CLASS lcl_objects DEFINITION FINAL.
CLASS-METHODS serialize
IMPORTING is_item TYPE ty_item
iv_language TYPE spras
io_log TYPE REF TO lcl_log OPTIONAL
RETURNING VALUE(rt_files) TYPE ty_files_tt
RAISING lcx_exception.
@ -1416,6 +1417,10 @@ CLASS lcl_objects DEFINITION FINAL.
RETURNING VALUE(rt_types) TYPE ty_types_tt.
PRIVATE SECTION.
CLASS-METHODS check_duplicates
IMPORTING it_files TYPE ty_files_tt
RAISING lcx_exception.
CLASS-METHODS create_object
IMPORTING is_item TYPE ty_item
iv_language TYPE spras

View File

@ -327,18 +327,10 @@ CLASS lcl_repo IMPLEMENTATION.
ls_item-obj_type = <ls_tadir>-object.
ls_item-obj_name = <ls_tadir>-obj_name.
IF lcl_objects=>is_supported( ls_item ) = abap_false.
IF NOT io_log IS INITIAL.
io_log->add( iv_msgv1 = 'Object type ignored, not supported:'
iv_msgv2 = ls_item-obj_type
iv_msgv3 = '-'
iv_msgv4 = ls_item-obj_name ) ##no_text.
ENDIF.
CONTINUE.
ENDIF.
lt_files = lcl_objects=>serialize( is_item = ls_item
iv_language = get_master_language( ) ).
lt_files = lcl_objects=>serialize(
is_item = ls_item
iv_language = get_master_language( )
io_log = io_log ).
LOOP AT lt_files ASSIGNING <ls_file>.
<ls_file>-path = mo_dot_abapgit->get_starting_folder( ) && <ls_tadir>-path.

View File

@ -20,6 +20,8 @@ CLASS lcl_sap_package DEFINITION FINAL.
iv_top TYPE devclass,
list_subpackages IMPORTING iv_package TYPE devclass
RETURNING VALUE(rt_list) TYPE ty_devclass_tt,
list_superpackages IMPORTING iv_package TYPE devclass
RETURNING VALUE(rt_list) TYPE ty_devclass_tt,
create_local
IMPORTING iv_package TYPE devclass
RAISING lcx_exception,
@ -271,6 +273,26 @@ CLASS lcl_sap_package IMPLEMENTATION.
ENDMETHOD.
METHOD list_superpackages.
DATA: lt_list LIKE rt_list,
lv_parent TYPE tdevc-parentcl,
lv_devclass LIKE LINE OF rt_list.
APPEND iv_package TO rt_list.
SELECT SINGLE parentcl INTO lv_parent
FROM tdevc WHERE devclass = iv_package. "#EC CI_GENBUFF
IF NOT lv_parent IS INITIAL.
APPEND lv_parent TO rt_list.
lt_list = list_superpackages( lv_devclass ).
APPEND LINES OF lt_list TO rt_list.
ENDIF.
ENDMETHOD.
METHOD list_subpackages.
DATA: lt_list LIKE rt_list,

View File

@ -29,7 +29,6 @@ CLASS lcl_tadir DEFINITION FINAL.
RAISING lcx_exception,
build
IMPORTING iv_package TYPE tadir-devclass
iv_parent TYPE tadir-devclass
iv_path TYPE string
RETURNING VALUE(rt_tadir) TYPE ty_tadir_tt
RAISING lcx_exception.
@ -87,7 +86,6 @@ CLASS lcl_tadir IMPLEMENTATION.
* start recursion
rt_tadir = build( iv_package = iv_package
iv_parent = ''
iv_path = '' ).
rt_tadir = check_exists( rt_tadir ).
@ -161,7 +159,6 @@ CLASS lcl_tadir IMPLEMENTATION.
CONCATENATE iv_path lv_path '/' INTO lv_path.
lt_tadir = build( iv_package = <ls_tdevc>-devclass
iv_parent = iv_package
iv_path = lv_path ).
APPEND LINES OF lt_tadir TO rt_tadir.
ENDLOOP.

View File

@ -2,18 +2,177 @@
*& Include ZABAPGIT_TRANSPORT
*&---------------------------------------------------------------------*
CLASS lcl_transport DEFINITION.
CLASS lcl_transport DEFINITION FINAL.
PUBLIC SECTION.
CLASS-METHODS:
zip RAISING lcx_exception.
PRIVATE SECTION.
CLASS-METHODS:
popup
RETURNING VALUE(rv_trkorr) TYPE e070-trkorr,
read_requests
IMPORTING iv_trkorr TYPE e070-trkorr
RETURNING VALUE(rt_requests) TYPE trwbo_requests
RAISING lcx_exception,
find_top_package
IMPORTING it_tadir TYPE scts_tadir
RETURNING VALUE(rv_package) TYPE devclass,
resolve
IMPORTING it_requests TYPE trwbo_requests
RETURNING VALUE(rt_tadir) TYPE scts_tadir
RAISING lcx_exception.
ENDCLASS.
CLASS lcl_transport IMPLEMENTATION.
METHOD zip.
BREAK-POINT.
DATA: lt_requests TYPE trwbo_requests,
lt_tadir TYPE scts_tadir,
lv_package TYPE devclass,
ls_data TYPE lcl_persistence_repo=>ty_repo,
lo_repo TYPE REF TO lcl_repo_offline,
lv_trkorr TYPE e070-trkorr.
lv_trkorr = popup( ).
IF lv_trkorr IS INITIAL.
RETURN.
ENDIF.
lt_requests = read_requests( lv_trkorr ).
lt_tadir = resolve( lt_requests ).
IF lines( lt_tadir ) = 0.
_raise 'empty transport'.
ENDIF.
lv_package = find_top_package( lt_tadir ).
IF lv_package IS INITIAL.
_raise 'error finding super package'.
ENDIF.
ls_data-key = 'TZIP'.
ls_data-package = lv_package.
ls_data-master_language = sy-langu.
CREATE OBJECT lo_repo
EXPORTING
is_data = ls_data.
lcl_zip=>export( io_repo = lo_repo
it_filter = lt_tadir ).
ENDMETHOD.
METHOD find_top_package.
* assumption: all objects in transport share a common super package
DATA: lt_obj TYPE lcl_sap_package=>ty_devclass_tt,
lt_super TYPE lcl_sap_package=>ty_devclass_tt,
lv_super LIKE LINE OF lt_super,
lv_index TYPE i.
FIELD-SYMBOLS: <ls_tadir> LIKE LINE OF it_tadir.
READ TABLE it_tadir INDEX 1 ASSIGNING <ls_tadir>.
ASSERT sy-subrc = 0.
lt_super = lcl_sap_package=>list_superpackages( <ls_tadir>-devclass ).
LOOP AT it_tadir ASSIGNING <ls_tadir>.
lt_obj = lcl_sap_package=>list_superpackages( <ls_tadir>-devclass ).
* filter out possibilities from lt_super
LOOP AT lt_super INTO lv_super.
lv_index = sy-tabix.
READ TABLE lt_obj FROM lv_super TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
DELETE lt_super INDEX lv_index.
ENDIF.
ENDLOOP.
ENDLOOP.
SORT lt_super.
READ TABLE lt_super INDEX 1 INTO rv_package.
ENDMETHOD.
METHOD popup.
CALL FUNCTION 'TR_F4_REQUESTS'
EXPORTING
iv_username = sy-uname
iv_trkorr_pattern = rv_trkorr
iv_trfunctions = sctsc_types_all
iv_trstatus = sctsc_states_changeable
IMPORTING
ev_selected_request = rv_trkorr.
ENDMETHOD.
METHOD read_requests.
CALL FUNCTION 'TR_READ_REQUEST_WITH_TASKS'
EXPORTING
iv_trkorr = iv_trkorr
IMPORTING
et_requests = rt_requests
EXCEPTIONS
invalid_input = 1
OTHERS = 2.
IF sy-subrc <> 0.
_raise 'error from TR_READ_REQUEST_WITH_TASKS'.
ENDIF.
ENDMETHOD.
METHOD resolve.
DATA: lv_object TYPE tadir-object,
lv_obj_name TYPE tadir-obj_name,
lv_trobj_name TYPE trobj_name,
ls_tadir TYPE tadir.
FIELD-SYMBOLS: <ls_request> LIKE LINE OF it_requests,
<ls_object> LIKE LINE OF <ls_request>-objects.
LOOP AT it_requests ASSIGNING <ls_request>.
LOOP AT <ls_request>-objects ASSIGNING <ls_object>.
IF <ls_object>-pgmid = 'LIMU'.
CALL FUNCTION 'GET_R3TR_OBJECT_FROM_LIMU_OBJ'
EXPORTING
p_limu_objtype = <ls_object>-object
p_limu_objname = <ls_object>-obj_name
IMPORTING
p_r3tr_objtype = lv_object
p_r3tr_objname = lv_trobj_name
EXCEPTIONS
no_mapping = 1
OTHERS = 2.
IF sy-subrc <> 0.
_raise 'error from GET_R3TR_OBJECT_FROM_LIMU_OBJ'.
ENDIF.
lv_obj_name = lv_trobj_name.
ELSE.
lv_object = <ls_object>-object.
lv_obj_name = <ls_object>-obj_name.
ENDIF.
ls_tadir = lcl_tadir=>read_single(
iv_object = lv_object
iv_obj_name = lv_obj_name ).
APPEND ls_tadir TO rt_tadir.
ENDLOOP.
ENDLOOP.
SORT rt_tadir BY object ASCENDING obj_name ASCENDING.
DELETE ADJACENT DUPLICATES FROM rt_tadir COMPARING object obj_name.
ENDMETHOD.
ENDCLASS.

View File

@ -15,8 +15,9 @@ CLASS lcl_zip DEFINITION FINAL.
RAISING lcx_exception.
CLASS-METHODS export
IMPORTING io_repo TYPE REF TO lcl_repo
iv_zip TYPE abap_bool DEFAULT abap_true
IMPORTING io_repo TYPE REF TO lcl_repo
iv_zip TYPE abap_bool DEFAULT abap_true
it_filter TYPE scts_tadir OPTIONAL
RAISING lcx_exception.
PRIVATE SECTION.
@ -332,8 +333,11 @@ CLASS lcl_zip IMPLEMENTATION.
METHOD export.
DATA: lo_log TYPE REF TO lcl_log,
lt_zip TYPE ty_files_item_tt.
DATA: lo_log TYPE REF TO lcl_log,
lv_index TYPE i,
lt_zip TYPE ty_files_item_tt.
FIELD-SYMBOLS: <ls_zip> LIKE LINE OF lt_zip.
CREATE OBJECT lo_log.
@ -344,9 +348,22 @@ CLASS lcl_zip IMPLEMENTATION.
lo_log->show( ).
ENDIF.
IF lines( it_filter ) > 0.
LOOP AT lt_zip ASSIGNING <ls_zip>.
lv_index = sy-tabix.
READ TABLE it_filter WITH KEY
object = <ls_zip>-item-obj_type
obj_name = <ls_zip>-item-obj_name
TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
DELETE lt_zip INDEX lv_index.
ENDIF.
ENDLOOP.
ENDIF.
IF iv_zip = abap_true.
file_download( iv_package = io_repo->get_package( )
iv_xstr = encode_files( lt_zip ) ).
iv_xstr = encode_files( lt_zip ) ).
ELSE.
files_commit( lt_zip ).
ENDIF.