mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
transport to zip, close #271
This commit is contained in:
parent
f3b2f0ec33
commit
71447f8538
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue
Block a user