mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-03 21:37:26 +08:00
Merge remote-tracking branch 'refs/remotes/larshp/master'
This commit is contained in:
commit
407416b1bb
|
@ -1,5 +1,6 @@
|
||||||
[](https://travis-ci.org/larshp/abapGit)
|
[](https://travis-ci.org/larshp/abapGit)
|
||||||
[](http://abaplint.org/project/larshp/abapGit)
|
[](http://abaplint.org/project/larshp/abapGit)
|
||||||
|
[](https://abapgit-slackinviter.herokuapp.com/)
|
||||||
|
|
||||||
# abapGit #
|
# abapGit #
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,20 @@ Legend
|
||||||
+ : added
|
+ : added
|
||||||
- : removed
|
- : removed
|
||||||
|
|
||||||
|
2017-03-23 v1.33.2
|
||||||
|
------------------
|
||||||
|
* fix Microsoft TFS zlib decompression error
|
||||||
|
* downport of new requirements feature
|
||||||
|
* fix for SMIM document class
|
||||||
|
|
||||||
|
2017-03-21 v1.33.1
|
||||||
|
------------------
|
||||||
|
* reset TADIR-DELFLAG resetting or pulling object again
|
||||||
|
|
||||||
|
2017-03-20 v1.33.0
|
||||||
|
------------------
|
||||||
|
+ possibility to define software component requirements for repo
|
||||||
|
|
||||||
2017-03-07 v1.32.0
|
2017-03-07 v1.32.0
|
||||||
------------------
|
------------------
|
||||||
+ user interface changed for diff and staging pages
|
+ user interface changed for diff and staging pages
|
||||||
|
|
|
@ -3,7 +3,7 @@ REPORT zabapgit LINE-SIZE 100.
|
||||||
* See http://www.abapgit.org
|
* See http://www.abapgit.org
|
||||||
|
|
||||||
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
|
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
|
||||||
gc_abap_version TYPE string VALUE 'v1.32.0'. "#EC NOTEXT
|
gc_abap_version TYPE string VALUE 'v1.33.2'. "#EC NOTEXT
|
||||||
|
|
||||||
********************************************************************************
|
********************************************************************************
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
|
@ -49,6 +49,7 @@ INCLUDE zabapgit_dot_abapgit.
|
||||||
INCLUDE zabapgit_persistence.
|
INCLUDE zabapgit_persistence.
|
||||||
INCLUDE zabapgit_sap_package.
|
INCLUDE zabapgit_sap_package.
|
||||||
INCLUDE zabapgit_folder_logic.
|
INCLUDE zabapgit_folder_logic.
|
||||||
|
INCLUDE zabapgit_requirements.
|
||||||
|
|
||||||
INCLUDE zabapgit_stage.
|
INCLUDE zabapgit_stage.
|
||||||
INCLUDE zabapgit_git_helpers.
|
INCLUDE zabapgit_git_helpers.
|
||||||
|
|
|
@ -446,20 +446,22 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD parse_repo_from_url.
|
METHOD parse_repo_from_url.
|
||||||
CONSTANTS: lc_search_regex TYPE string VALUE 'https?:\/\/(www\.)?github.com\/(.*)$'.
|
* method not used?
|
||||||
DATA: lo_regex TYPE REF TO cl_abap_regex,
|
ASSERT 0 = 1.
|
||||||
lo_matcher TYPE REF TO cl_abap_matcher.
|
* CONSTANTS: lc_search_regex TYPE string VALUE 'https?:\/\/(www\.)?github.com\/(.*)$'.
|
||||||
|
* DATA: lo_regex TYPE REF TO cl_abap_regex,
|
||||||
CREATE OBJECT lo_regex
|
* lo_matcher TYPE REF TO cl_abap_matcher.
|
||||||
EXPORTING
|
*
|
||||||
pattern = lc_search_regex.
|
* CREATE OBJECT lo_regex
|
||||||
|
* EXPORTING
|
||||||
lo_matcher = lo_regex->create_matcher( text = iv_url ).
|
* pattern = lc_search_regex.
|
||||||
IF lo_matcher->match( ) = abap_true.
|
*
|
||||||
rv_repo_name = lo_matcher->get_submatch( 1 ).
|
* lo_matcher = lo_regex->create_matcher( text = iv_url ).
|
||||||
ELSE.
|
* IF lo_matcher->match( ) = abap_true.
|
||||||
rv_repo_name = '???' ##NO_TEXT.
|
* rv_repo_name = lo_matcher->get_submatch( 1 ).
|
||||||
ENDIF.
|
* ELSE.
|
||||||
|
* rv_repo_name = '???' ##NO_TEXT.
|
||||||
|
* ENDIF.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD get_service_id_from_url.
|
METHOD get_service_id_from_url.
|
||||||
|
@ -468,7 +470,6 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD is_2fa_required.
|
METHOD is_2fa_required.
|
||||||
DATA: li_client TYPE REF TO if_http_client,
|
DATA: li_client TYPE REF TO if_http_client,
|
||||||
lv_header_value TYPE string,
|
|
||||||
lo_settings TYPE REF TO lcl_settings.
|
lo_settings TYPE REF TO lcl_settings.
|
||||||
|
|
||||||
lo_settings = lcl_app=>settings( )->read( ).
|
lo_settings = lcl_app=>settings( )->read( ).
|
||||||
|
|
|
@ -197,6 +197,7 @@ CONSTANTS: BEGIN OF gc_action,
|
||||||
repo_clone TYPE string VALUE 'repo_clone',
|
repo_clone TYPE string VALUE 'repo_clone',
|
||||||
repo_refresh TYPE string VALUE 'repo_refresh',
|
repo_refresh TYPE string VALUE 'repo_refresh',
|
||||||
repo_remove TYPE string VALUE 'repo_remove',
|
repo_remove TYPE string VALUE 'repo_remove',
|
||||||
|
repo_settings TYPE string VALUE 'repo_settings',
|
||||||
repo_purge TYPE string VALUE 'repo_purge',
|
repo_purge TYPE string VALUE 'repo_purge',
|
||||||
repo_newoffline TYPE string VALUE 'repo_newoffline',
|
repo_newoffline TYPE string VALUE 'repo_newoffline',
|
||||||
repo_remote_attach TYPE string VALUE 'repo_remote_attach',
|
repo_remote_attach TYPE string VALUE 'repo_remote_attach',
|
||||||
|
|
|
@ -12,11 +12,18 @@ CLASS lcl_dot_abapgit DEFINITION FINAL FRIENDS ltcl_dot_abapgit.
|
||||||
full TYPE string VALUE 'FULL',
|
full TYPE string VALUE 'FULL',
|
||||||
END OF c_folder_logic.
|
END OF c_folder_logic.
|
||||||
|
|
||||||
TYPES: BEGIN OF ty_dot_abapgit,
|
TYPES: BEGIN OF ty_requirement,
|
||||||
|
component TYPE dlvunit,
|
||||||
|
min_release TYPE saprelease,
|
||||||
|
min_patch TYPE sappatchlv,
|
||||||
|
END OF ty_requirement,
|
||||||
|
ty_requirement_tt TYPE STANDARD TABLE OF ty_requirement WITH DEFAULT KEY,
|
||||||
|
BEGIN OF ty_dot_abapgit,
|
||||||
master_language TYPE spras,
|
master_language TYPE spras,
|
||||||
starting_folder TYPE string,
|
starting_folder TYPE string,
|
||||||
folder_logic TYPE string,
|
folder_logic TYPE string,
|
||||||
ignore TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
|
ignore TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
|
||||||
|
requirements TYPE ty_requirement_tt,
|
||||||
END OF ty_dot_abapgit.
|
END OF ty_dot_abapgit.
|
||||||
|
|
||||||
CLASS-METHODS:
|
CLASS-METHODS:
|
||||||
|
@ -135,6 +142,7 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
|
||||||
METHOD to_xml.
|
METHOD to_xml.
|
||||||
|
|
||||||
CALL TRANSFORMATION id
|
CALL TRANSFORMATION id
|
||||||
|
OPTIONS initial_components = 'suppress'
|
||||||
SOURCE data = is_data
|
SOURCE data = is_data
|
||||||
RESULT XML rv_xml.
|
RESULT XML rv_xml.
|
||||||
|
|
||||||
|
|
|
@ -151,6 +151,11 @@ CLASS lcl_git_pack DEFINITION FINAL FRIENDS ltcl_git_pack.
|
||||||
EXPORTING ev_length TYPE i
|
EXPORTING ev_length TYPE i
|
||||||
CHANGING cv_data TYPE xstring.
|
CHANGING cv_data TYPE xstring.
|
||||||
|
|
||||||
|
CLASS-METHODS zlib_decompress
|
||||||
|
CHANGING cv_data TYPE xstring
|
||||||
|
cv_decompressed TYPE xstring
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
ENDCLASS. "lcl_pack DEFINITION
|
ENDCLASS. "lcl_pack DEFINITION
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
|
@ -854,6 +859,35 @@ CLASS lcl_git_pack IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD. "decode_tree
|
ENDMETHOD. "decode_tree
|
||||||
|
|
||||||
|
METHOD zlib_decompress.
|
||||||
|
|
||||||
|
DATA: ls_data TYPE lcl_zlib=>ty_decompress,
|
||||||
|
lv_compressed_len TYPE i,
|
||||||
|
lv_adler32 TYPE lcl_hash=>ty_adler32.
|
||||||
|
|
||||||
|
|
||||||
|
ls_data = lcl_zlib=>decompress( cv_data ).
|
||||||
|
lv_compressed_len = ls_data-compressed_len.
|
||||||
|
cv_decompressed = ls_data-raw.
|
||||||
|
|
||||||
|
IF lv_compressed_len IS INITIAL.
|
||||||
|
lcx_exception=>raise( 'Decompression falied :o/' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
cv_data = cv_data+lv_compressed_len.
|
||||||
|
|
||||||
|
lv_adler32 = lcl_hash=>adler32( cv_decompressed ).
|
||||||
|
IF cv_data(4) <> lv_adler32.
|
||||||
|
cv_data = cv_data+1.
|
||||||
|
ENDIF.
|
||||||
|
IF cv_data(4) <> lv_adler32.
|
||||||
|
cv_data = cv_data+1.
|
||||||
|
ENDIF.
|
||||||
|
IF cv_data(4) <> lv_adler32.
|
||||||
|
lcx_exception=>raise( 'Wrong Adler checksum' ).
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD decode.
|
METHOD decode.
|
||||||
|
|
||||||
DATA: lv_x TYPE x,
|
DATA: lv_x TYPE x,
|
||||||
|
@ -864,15 +898,13 @@ CLASS lcl_git_pack IMPLEMENTATION.
|
||||||
lv_len TYPE i,
|
lv_len TYPE i,
|
||||||
lv_sha1 TYPE ty_sha1,
|
lv_sha1 TYPE ty_sha1,
|
||||||
lv_ref_delta TYPE ty_sha1,
|
lv_ref_delta TYPE ty_sha1,
|
||||||
lv_adler32 TYPE lcl_hash=>ty_adler32,
|
|
||||||
lv_compressed TYPE xstring,
|
|
||||||
lv_compressed_len TYPE i,
|
lv_compressed_len TYPE i,
|
||||||
lv_decompress_len TYPE i,
|
lv_compressed TYPE xstring,
|
||||||
lv_decompressed TYPE xstring,
|
lv_decompressed TYPE xstring,
|
||||||
|
lv_decompress_len TYPE i,
|
||||||
lv_xstring TYPE xstring,
|
lv_xstring TYPE xstring,
|
||||||
lv_expected TYPE i,
|
lv_expected TYPE i,
|
||||||
ls_object LIKE LINE OF rt_objects,
|
ls_object LIKE LINE OF rt_objects.
|
||||||
ls_data TYPE lcl_zlib=>ty_decompress.
|
|
||||||
|
|
||||||
|
|
||||||
lv_data = iv_data.
|
lv_data = iv_data.
|
||||||
|
@ -937,37 +969,21 @@ CLASS lcl_git_pack IMPLEMENTATION.
|
||||||
gzip_out_len = lv_compressed_len ).
|
gzip_out_len = lv_compressed_len ).
|
||||||
|
|
||||||
IF lv_compressed(lv_compressed_len) <> lv_data(lv_compressed_len).
|
IF lv_compressed(lv_compressed_len) <> lv_data(lv_compressed_len).
|
||||||
lcx_exception=>raise( 'Compressed data doesnt match' ).
|
"Lets try with zlib before error in out for good
|
||||||
ENDIF.
|
"This fixes issues with TFS 2017 and visualstudio.com Git repos
|
||||||
|
zlib_decompress( CHANGING cv_data = lv_data
|
||||||
|
cv_decompressed = lv_decompressed ).
|
||||||
|
ELSE.
|
||||||
lv_data = lv_data+lv_compressed_len.
|
lv_data = lv_data+lv_compressed_len.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
ELSEIF lv_zlib = c_zlib_hmm.
|
ELSEIF lv_zlib = c_zlib_hmm.
|
||||||
* cl_abap_gzip copmression works for header '789C', but does not work for
|
* cl_abap_gzip copmression works for header '789C', but does not work for
|
||||||
* '7801', call custom implementation of DEFLATE algorithm.
|
* '7801', call custom implementation of DEFLATE algorithm.
|
||||||
* The custom implementation could handle both, but most likely the kernel
|
* The custom implementation could handle both, but most likely the kernel
|
||||||
* implementation runs faster than the custom ABAP.
|
* implementation runs faster than the custom ABAP.
|
||||||
ls_data = lcl_zlib=>decompress( lv_data ).
|
zlib_decompress( CHANGING cv_data = lv_data
|
||||||
lv_compressed_len = ls_data-compressed_len.
|
cv_decompressed = lv_decompressed ).
|
||||||
lv_decompressed = ls_data-raw.
|
|
||||||
|
|
||||||
IF lv_compressed_len IS INITIAL.
|
|
||||||
lcx_exception=>raise( 'Decompression falied :o/' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lv_data = lv_data+lv_compressed_len.
|
|
||||||
|
|
||||||
lv_adler32 = lcl_hash=>adler32( lv_decompressed ).
|
|
||||||
IF lv_data(4) <> lv_adler32.
|
|
||||||
lv_data = lv_data+1.
|
|
||||||
ENDIF.
|
|
||||||
IF lv_data(4) <> lv_adler32.
|
|
||||||
lv_data = lv_data+1.
|
|
||||||
ENDIF.
|
|
||||||
IF lv_data(4) <> lv_adler32.
|
|
||||||
lcx_exception=>raise( 'Wrong Adler checksum' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
lv_data = lv_data+4. " skip adler checksum
|
lv_data = lv_data+4. " skip adler checksum
|
||||||
|
|
|
@ -29,3 +29,4 @@ INCLUDE zabapgit_page_main.
|
||||||
INCLUDE zabapgit_page_stage.
|
INCLUDE zabapgit_page_stage.
|
||||||
INCLUDE zabapgit_page_debug.
|
INCLUDE zabapgit_page_debug.
|
||||||
INCLUDE zabapgit_page_settings.
|
INCLUDE zabapgit_page_settings.
|
||||||
|
INCLUDE zabapgit_page_repo_settings.
|
||||||
|
|
|
@ -174,6 +174,11 @@ CLASS lcl_gui_router IMPLEMENTATION.
|
||||||
WHEN gc_action-repo_transport_to_branch.
|
WHEN gc_action-repo_transport_to_branch.
|
||||||
lcl_services_repo=>transport_to_branch( iv_repository_key = lv_key ).
|
lcl_services_repo=>transport_to_branch( iv_repository_key = lv_key ).
|
||||||
ev_state = gc_event_state-re_render.
|
ev_state = gc_event_state-re_render.
|
||||||
|
WHEN gc_action-repo_settings.
|
||||||
|
CREATE OBJECT ei_page TYPE lcl_gui_page_repo_settings
|
||||||
|
EXPORTING
|
||||||
|
io_repo = lcl_app=>repo_srv( )->get( lv_key ).
|
||||||
|
ev_state = gc_event_state-new_page.
|
||||||
|
|
||||||
" ZIP services actions
|
" ZIP services actions
|
||||||
WHEN gc_action-zip_import. " Import repo from ZIP
|
WHEN gc_action-zip_import. " Import repo from ZIP
|
||||||
|
|
|
@ -202,8 +202,6 @@ CLASS lcl_object_clas IMPLEMENTATION.
|
||||||
|
|
||||||
DATA: ls_vseoclass TYPE vseoclass,
|
DATA: ls_vseoclass TYPE vseoclass,
|
||||||
lt_tpool TYPE textpool_table,
|
lt_tpool TYPE textpool_table,
|
||||||
lv_object TYPE dokhl-object,
|
|
||||||
lv_state TYPE dokhl-dokstate,
|
|
||||||
lt_descriptions TYPE ty_seocompotx_tt,
|
lt_descriptions TYPE ty_seocompotx_tt,
|
||||||
ls_clskey TYPE seoclskey,
|
ls_clskey TYPE seoclskey,
|
||||||
lt_sotr TYPE ty_sotr_tt,
|
lt_sotr TYPE ty_sotr_tt,
|
||||||
|
@ -274,8 +272,7 @@ CLASS lcl_object_clas IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD deserialize_sotr.
|
METHOD deserialize_sotr.
|
||||||
"OTR stands for Online Text Repository
|
"OTR stands for Online Text Repository
|
||||||
DATA: lt_sotr TYPE ty_sotr_tt,
|
DATA: lt_sotr TYPE ty_sotr_tt.
|
||||||
lt_objects TYPE sotr_objects.
|
|
||||||
|
|
||||||
io_xml->read( EXPORTING iv_name = 'SOTR'
|
io_xml->read( EXPORTING iv_name = 'SOTR'
|
||||||
CHANGING cg_data = lt_sotr ).
|
CHANGING cg_data = lt_sotr ).
|
||||||
|
|
|
@ -92,7 +92,6 @@ CLASS lcl_object_ddls IMPLEMENTATION.
|
||||||
METHOD lif_object~serialize.
|
METHOD lif_object~serialize.
|
||||||
|
|
||||||
DATA: li_ddl TYPE REF TO object,
|
DATA: li_ddl TYPE REF TO object,
|
||||||
lv_source TYPE string,
|
|
||||||
lr_data TYPE REF TO data.
|
lr_data TYPE REF TO data.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_data> TYPE any,
|
FIELD-SYMBOLS: <ls_data> TYPE any,
|
||||||
|
|
|
@ -690,7 +690,6 @@ CLASS lcl_object_enho_interface IMPLEMENTATION.
|
||||||
METHOD lif_object_enho~deserialize.
|
METHOD lif_object_enho~deserialize.
|
||||||
|
|
||||||
DATA: lo_enh_intf TYPE REF TO cl_enh_tool_intf,
|
DATA: lo_enh_intf TYPE REF TO cl_enh_tool_intf,
|
||||||
lt_source TYPE rswsourcet,
|
|
||||||
li_tool TYPE REF TO if_enh_tool,
|
li_tool TYPE REF TO if_enh_tool,
|
||||||
lv_shorttext TYPE string,
|
lv_shorttext TYPE string,
|
||||||
lv_class TYPE seoclsname,
|
lv_class TYPE seoclsname,
|
||||||
|
|
|
@ -143,13 +143,9 @@ CLASS lcl_object_intf IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD serialize_xml.
|
METHOD serialize_xml.
|
||||||
DATA:
|
DATA:
|
||||||
lt_tpool TYPE textpool_table,
|
|
||||||
lv_object TYPE dokhl-object,
|
|
||||||
lv_state TYPE dokhl-dokstate,
|
|
||||||
lt_descriptions TYPE ty_seocompotx_tt,
|
lt_descriptions TYPE ty_seocompotx_tt,
|
||||||
ls_vseointerf TYPE vseointerf,
|
ls_vseointerf TYPE vseointerf,
|
||||||
ls_clskey TYPE seoclskey,
|
ls_clskey TYPE seoclskey,
|
||||||
lt_sotr TYPE ty_sotr_tt,
|
|
||||||
lt_lines TYPE tlinetab.
|
lt_lines TYPE tlinetab.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -112,8 +112,7 @@ CLASS lcl_object_sfpf IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD form_to_xstring.
|
METHOD form_to_xstring.
|
||||||
|
|
||||||
DATA: lv_xstr TYPE xstring,
|
DATA: li_fp_form TYPE REF TO if_fp_form,
|
||||||
li_fp_form TYPE REF TO if_fp_form,
|
|
||||||
li_wb_form TYPE REF TO if_fp_wb_form.
|
li_wb_form TYPE REF TO if_fp_wb_form.
|
||||||
|
|
||||||
|
|
||||||
|
@ -130,8 +129,6 @@ CLASS lcl_object_sfpf IMPLEMENTATION.
|
||||||
METHOD fix_oref.
|
METHOD fix_oref.
|
||||||
|
|
||||||
DATA: li_iterator TYPE REF TO if_ixml_node_iterator,
|
DATA: li_iterator TYPE REF TO if_ixml_node_iterator,
|
||||||
lv_name TYPE string,
|
|
||||||
lv_value TYPE string,
|
|
||||||
lv_new TYPE n LENGTH 3,
|
lv_new TYPE n LENGTH 3,
|
||||||
lv_old TYPE string,
|
lv_old TYPE string,
|
||||||
lt_map TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
|
lt_map TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
|
||||||
|
|
|
@ -108,8 +108,7 @@ CLASS lcl_object_sfpi IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD interface_to_xstring.
|
METHOD interface_to_xstring.
|
||||||
|
|
||||||
DATA: lv_xstr TYPE xstring,
|
DATA: li_fp_interface TYPE REF TO if_fp_interface,
|
||||||
li_fp_interface TYPE REF TO if_fp_interface,
|
|
||||||
li_wb_interface TYPE REF TO if_fp_wb_interface.
|
li_wb_interface TYPE REF TO if_fp_wb_interface.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -164,11 +164,15 @@ CLASS lcl_object_smim IMPLEMENTATION.
|
||||||
DATA: lv_url TYPE string,
|
DATA: lv_url TYPE string,
|
||||||
lv_folder TYPE abap_bool,
|
lv_folder TYPE abap_bool,
|
||||||
lv_filename TYPE string,
|
lv_filename TYPE string,
|
||||||
|
lv_class TYPE smimloio-lo_class,
|
||||||
ls_file TYPE ty_file,
|
ls_file TYPE ty_file,
|
||||||
lv_content TYPE xstring,
|
lv_content TYPE xstring,
|
||||||
li_api TYPE REF TO if_mr_api.
|
li_api TYPE REF TO if_mr_api,
|
||||||
|
lv_loio TYPE sdok_docid.
|
||||||
|
|
||||||
|
|
||||||
|
lv_loio = ms_item-obj_name.
|
||||||
|
|
||||||
TRY.
|
TRY.
|
||||||
get_url_for_io(
|
get_url_for_io(
|
||||||
IMPORTING
|
IMPORTING
|
||||||
|
@ -201,12 +205,16 @@ CLASS lcl_object_smim IMPLEMENTATION.
|
||||||
ls_file-path = '/'.
|
ls_file-path = '/'.
|
||||||
ls_file-data = lv_content.
|
ls_file-data = lv_content.
|
||||||
mo_files->add( ls_file ).
|
mo_files->add( ls_file ).
|
||||||
|
|
||||||
|
SELECT SINGLE lo_class FROM smimloio INTO lv_class WHERE loio_id = lv_loio.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
io_xml->add( iv_name = 'URL'
|
io_xml->add( iv_name = 'URL'
|
||||||
ig_data = lv_url ).
|
ig_data = lv_url ).
|
||||||
io_xml->add( iv_name = 'FOLDER'
|
io_xml->add( iv_name = 'FOLDER'
|
||||||
ig_data = lv_folder ).
|
ig_data = lv_folder ).
|
||||||
|
io_xml->add( iv_name = 'CLASS'
|
||||||
|
ig_data = lv_class ).
|
||||||
|
|
||||||
ENDMETHOD. "serialize
|
ENDMETHOD. "serialize
|
||||||
|
|
||||||
|
@ -217,6 +225,7 @@ CLASS lcl_object_smim IMPLEMENTATION.
|
||||||
lv_content TYPE xstring,
|
lv_content TYPE xstring,
|
||||||
lv_filename TYPE skwf_filnm,
|
lv_filename TYPE skwf_filnm,
|
||||||
lv_io TYPE sdok_docid,
|
lv_io TYPE sdok_docid,
|
||||||
|
lv_class TYPE smimloio-lo_class,
|
||||||
ls_skwf_io TYPE skwf_io,
|
ls_skwf_io TYPE skwf_io,
|
||||||
li_api TYPE REF TO if_mr_api.
|
li_api TYPE REF TO if_mr_api.
|
||||||
|
|
||||||
|
@ -228,6 +237,8 @@ CLASS lcl_object_smim IMPLEMENTATION.
|
||||||
CHANGING cg_data = lv_url ).
|
CHANGING cg_data = lv_url ).
|
||||||
io_xml->read( EXPORTING iv_name = 'FOLDER'
|
io_xml->read( EXPORTING iv_name = 'FOLDER'
|
||||||
CHANGING cg_data = lv_folder ).
|
CHANGING cg_data = lv_folder ).
|
||||||
|
io_xml->read( EXPORTING iv_name = 'CLASS'
|
||||||
|
CHANGING cg_data = lv_class ).
|
||||||
|
|
||||||
ls_skwf_io-objid = lv_io.
|
ls_skwf_io-objid = lv_io.
|
||||||
|
|
||||||
|
@ -250,12 +261,15 @@ CLASS lcl_object_smim IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ELSE.
|
ELSE.
|
||||||
lv_filename = get_filename( lv_url ).
|
lv_filename = get_filename( lv_url ).
|
||||||
|
ls_skwf_io-class = lv_class.
|
||||||
|
IF ls_skwf_io-class IS INITIAL.
|
||||||
cl_wb_mime_repository=>determine_io_class(
|
cl_wb_mime_repository=>determine_io_class(
|
||||||
EXPORTING
|
EXPORTING
|
||||||
filename = lv_filename
|
filename = lv_filename
|
||||||
IMPORTING
|
IMPORTING
|
||||||
io_class = ls_skwf_io-class ).
|
io_class = ls_skwf_io-class ).
|
||||||
CONCATENATE ls_skwf_io-class '_L' INTO ls_skwf_io-class.
|
CONCATENATE ls_skwf_io-class '_L' INTO ls_skwf_io-class.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
lv_content = find_content( lv_url ).
|
lv_content = find_content( lv_url ).
|
||||||
|
|
||||||
|
|
|
@ -76,8 +76,7 @@ CLASS lcl_object_splo IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD lif_object~deserialize.
|
METHOD lif_object~deserialize.
|
||||||
|
|
||||||
DATA: lv_obj_name TYPE e071-obj_name,
|
DATA: ls_tsp1t TYPE tsp1t,
|
||||||
ls_tsp1t TYPE tsp1t,
|
|
||||||
ls_tsp1d TYPE tsp1d,
|
ls_tsp1d TYPE tsp1d,
|
||||||
ls_tsp0p TYPE tsp0p.
|
ls_tsp0p TYPE tsp0p.
|
||||||
|
|
||||||
|
@ -93,17 +92,8 @@ CLASS lcl_object_splo IMPLEMENTATION.
|
||||||
MODIFY tsp1d FROM ls_tsp1d. "#EC CI_SUBRC
|
MODIFY tsp1d FROM ls_tsp1d. "#EC CI_SUBRC
|
||||||
MODIFY tsp0p FROM ls_tsp0p. "#EC CI_SUBRC
|
MODIFY tsp0p FROM ls_tsp0p. "#EC CI_SUBRC
|
||||||
|
|
||||||
lv_obj_name = ms_item-obj_name.
|
|
||||||
|
|
||||||
tadir_insert( iv_package ).
|
tadir_insert( iv_package ).
|
||||||
|
|
||||||
* CALL FUNCTION 'TR_TADIR_POPUP_ENTRY_E071'
|
|
||||||
* EXPORTING
|
|
||||||
* wi_e071_pgmid = 'R3TR'
|
|
||||||
* wi_e071_object = ms_item-obj_type
|
|
||||||
* wi_e071_obj_name = lv_obj_name
|
|
||||||
* wi_tadir_devclass = iv_package.
|
|
||||||
|
|
||||||
ENDMETHOD. "lif_object~deserialize
|
ENDMETHOD. "lif_object~deserialize
|
||||||
|
|
||||||
METHOD lif_object~delete.
|
METHOD lif_object~delete.
|
||||||
|
|
|
@ -1630,6 +1630,7 @@ CLASS lcl_objects_super IMPLEMENTATION.
|
||||||
wi_tadir_author = sy-uname
|
wi_tadir_author = sy-uname
|
||||||
wi_tadir_devclass = iv_package
|
wi_tadir_devclass = iv_package
|
||||||
wi_tadir_masterlang = mv_language
|
wi_tadir_masterlang = mv_language
|
||||||
|
iv_delflag = abap_false
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
OTHERS = 1.
|
OTHERS = 1.
|
||||||
IF sy-subrc <> 0.
|
IF sy-subrc <> 0.
|
||||||
|
@ -1732,8 +1733,6 @@ CLASS lcl_objects DEFINITION FINAL.
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
CLASS-DATA: mv_langs_installed TYPE scplangs.
|
|
||||||
|
|
||||||
CLASS-METHODS check_duplicates
|
CLASS-METHODS check_duplicates
|
||||||
IMPORTING it_files TYPE ty_files_tt
|
IMPORTING it_files TYPE ty_files_tt
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
|
@ -595,8 +595,6 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD render_line_unified.
|
METHOD render_line_unified.
|
||||||
|
|
||||||
DATA lv_line TYPE string.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <diff_line> LIKE LINE OF mt_delayed_lines.
|
FIELD-SYMBOLS <diff_line> LIKE LINE OF mt_delayed_lines.
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
CREATE OBJECT ro_html.
|
||||||
|
|
91
src/zabapgit_page_repo_settings.prog.abap
Normal file
91
src/zabapgit_page_repo_settings.prog.abap
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_PAGE_REPO_SETTINGS
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
CLASS lcl_gui_page_repo_settings DEFINITION FINAL INHERITING FROM lcl_gui_page.
|
||||||
|
PUBLIC SECTION.
|
||||||
|
METHODS:
|
||||||
|
constructor
|
||||||
|
IMPORTING io_repo TYPE REF TO lcl_repo,
|
||||||
|
lif_gui_page~on_event REDEFINITION.
|
||||||
|
|
||||||
|
PROTECTED SECTION.
|
||||||
|
CONSTANTS:
|
||||||
|
BEGIN OF c_action,
|
||||||
|
save_settings TYPE string VALUE 'save_settings',
|
||||||
|
END OF c_action.
|
||||||
|
|
||||||
|
DATA: mo_repo TYPE REF TO lcl_repo.
|
||||||
|
|
||||||
|
METHODS:
|
||||||
|
render_content REDEFINITION,
|
||||||
|
parse_post
|
||||||
|
IMPORTING
|
||||||
|
it_postdata TYPE cnht_post_data_tab
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_post_fields) TYPE tihttpnvp.
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_gui_page_debuginfo
|
||||||
|
|
||||||
|
CLASS lcl_gui_page_repo_settings IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD constructor.
|
||||||
|
super->constructor( ).
|
||||||
|
ms_control-page_title = 'REPO SETTINGS'.
|
||||||
|
mo_repo = io_repo.
|
||||||
|
ENDMETHOD. " constructor.
|
||||||
|
|
||||||
|
METHOD parse_post.
|
||||||
|
|
||||||
|
DATA lv_serialized_post_data TYPE string.
|
||||||
|
|
||||||
|
CONCATENATE LINES OF it_postdata INTO lv_serialized_post_data.
|
||||||
|
rt_post_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_serialized_post_data ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD render_content.
|
||||||
|
|
||||||
|
DATA: ls_dot TYPE lcl_dot_abapgit=>ty_dot_abapgit.
|
||||||
|
|
||||||
|
|
||||||
|
ls_dot = mo_repo->get_dot_abapgit( )->get_data( ).
|
||||||
|
|
||||||
|
CREATE OBJECT ro_html.
|
||||||
|
ro_html->add( '<div class="settings_container">' ).
|
||||||
|
ro_html->add( '<form id="settings_form" method="post" action="sapevent:' &&
|
||||||
|
c_action-save_settings && '">' ).
|
||||||
|
ro_html->add( '<br>' ).
|
||||||
|
ro_html->add( 'Folder logic: <input name="folder_logic" type="text" size="10" value="' &&
|
||||||
|
ls_dot-folder_logic && '">' ).
|
||||||
|
ro_html->add( '<br>' ).
|
||||||
|
ro_html->add( '<input type="submit" value="Save" class="submit">' ).
|
||||||
|
ro_html->add( '</form>' ).
|
||||||
|
ro_html->add( '</div>' ).
|
||||||
|
|
||||||
|
ENDMETHOD. "render_content
|
||||||
|
|
||||||
|
METHOD lif_gui_page~on_event.
|
||||||
|
|
||||||
|
DATA: lt_post_fields TYPE tihttpnvp,
|
||||||
|
lo_dot TYPE REF TO lcl_dot_abapgit,
|
||||||
|
ls_post_field LIKE LINE OF lt_post_fields.
|
||||||
|
|
||||||
|
|
||||||
|
CASE iv_action.
|
||||||
|
WHEN c_action-save_settings.
|
||||||
|
lt_post_fields = parse_post( it_postdata ).
|
||||||
|
|
||||||
|
READ TABLE lt_post_fields INTO ls_post_field WITH KEY name = 'folder_logic'.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
|
||||||
|
lo_dot = mo_repo->get_dot_abapgit( ).
|
||||||
|
lo_dot->set_folder_logic( ls_post_field-value ).
|
||||||
|
mo_repo->set_dot_abapgit( lo_dot ).
|
||||||
|
|
||||||
|
ev_state = gc_event_state-go_back.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_gui_page_debuginfo
|
22
src/zabapgit_page_repo_settings.prog.xml
Normal file
22
src/zabapgit_page_repo_settings.prog.xml
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_PAGE_REPO_SETTINGS</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<RLOAD>E</RLOAD>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<ENTRY>Include ZABAPGIT_PAGE_REPO_SETTINGS</ENTRY>
|
||||||
|
<LENGTH>35</LENGTH>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -181,10 +181,9 @@ CLASS lcl_repo_content_browser IMPLEMENTATION.
|
||||||
<ls_tadir> LIKE LINE OF lt_tadir.
|
<ls_tadir> LIKE LINE OF lt_tadir.
|
||||||
|
|
||||||
|
|
||||||
* todo, offline projects should have an dot abapgit too
|
|
||||||
lt_tadir = lcl_tadir=>read(
|
lt_tadir = lcl_tadir=>read(
|
||||||
iv_package = mo_repo->get_package( )
|
iv_package = mo_repo->get_package( )
|
||||||
io_dot = lcl_dot_abapgit=>build_default( ) ).
|
io_dot = mo_repo->get_dot_abapgit( ) ).
|
||||||
|
|
||||||
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
|
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
|
||||||
APPEND INITIAL LINE TO rt_repo_items ASSIGNING <ls_repo_item>.
|
APPEND INITIAL LINE TO rt_repo_items ASSIGNING <ls_repo_item>.
|
||||||
|
|
|
@ -477,7 +477,8 @@ CLASS lcl_repo IMPLEMENTATION.
|
||||||
METHOD deserialize.
|
METHOD deserialize.
|
||||||
|
|
||||||
DATA: lt_updated_files TYPE ty_file_signatures_tt,
|
DATA: lt_updated_files TYPE ty_file_signatures_tt,
|
||||||
lo_dot_abapgit TYPE REF TO lcl_dot_abapgit.
|
lo_dot_abapgit TYPE REF TO lcl_dot_abapgit,
|
||||||
|
lt_requirements TYPE STANDARD TABLE OF lcl_dot_abapgit=>ty_requirement.
|
||||||
|
|
||||||
|
|
||||||
IF get_dot_abapgit( )->get_master_language( ) <> sy-langu.
|
IF get_dot_abapgit( )->get_master_language( ) <> sy-langu.
|
||||||
|
@ -487,6 +488,12 @@ CLASS lcl_repo IMPLEMENTATION.
|
||||||
lo_dot_abapgit = find_remote_dot_abapgit( ).
|
lo_dot_abapgit = find_remote_dot_abapgit( ).
|
||||||
IF lo_dot_abapgit IS BOUND.
|
IF lo_dot_abapgit IS BOUND.
|
||||||
set_dot_abapgit( lo_dot_abapgit ).
|
set_dot_abapgit( lo_dot_abapgit ).
|
||||||
|
|
||||||
|
lt_requirements = lo_dot_abapgit->get_data( )-requirements.
|
||||||
|
IF lt_requirements IS NOT INITIAL.
|
||||||
|
lcl_requirement_helper=>check_requirements( it_requirements = lt_requirements
|
||||||
|
iv_show_popup = abap_true ).
|
||||||
|
ENDIF.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
lt_updated_files = lcl_objects=>deserialize( me ).
|
lt_updated_files = lcl_objects=>deserialize( me ).
|
||||||
|
|
223
src/zabapgit_requirements.prog.abap
Normal file
223
src/zabapgit_requirements.prog.abap
Normal file
|
@ -0,0 +1,223 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include zabapgit_requirements
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
"! Helper class for checking requirements / dependencies
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_requirement_helper DEFINITION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_requirement_helper DEFINITION FINAL.
|
||||||
|
PUBLIC SECTION.
|
||||||
|
TYPES:
|
||||||
|
BEGIN OF ty_requirement_status,
|
||||||
|
met TYPE abap_bool,
|
||||||
|
component TYPE dlvunit,
|
||||||
|
description TYPE text80,
|
||||||
|
installed_release TYPE saprelease,
|
||||||
|
installed_patch TYPE sappatchlv,
|
||||||
|
required_release TYPE saprelease,
|
||||||
|
required_patch TYPE sappatchlv,
|
||||||
|
END OF ty_requirement_status,
|
||||||
|
ty_requirement_status_tt TYPE STANDARD TABLE OF ty_requirement_status WITH DEFAULT KEY.
|
||||||
|
CLASS-METHODS:
|
||||||
|
"! Check if the given requirements are met with user interaction
|
||||||
|
"! <p>
|
||||||
|
"! Shows a popup if requested and asks the user if he wants to continue if there are unmet
|
||||||
|
"! requirements. If not an exception is raised.
|
||||||
|
"! </p>
|
||||||
|
"! @parameter it_requirements | The requirements to check
|
||||||
|
"! @parameter iv_show_popup | Show popup with requirements
|
||||||
|
"! @raising lcx_exception | Cancelled by user or internal error
|
||||||
|
check_requirements IMPORTING it_requirements TYPE lcl_dot_abapgit=>ty_requirement_tt
|
||||||
|
iv_show_popup TYPE abap_bool DEFAULT abap_true
|
||||||
|
RAISING lcx_exception,
|
||||||
|
"! Get a table with information about each requirement
|
||||||
|
"! @parameter it_requirements | Requirements
|
||||||
|
"! @parameter rt_status | Result
|
||||||
|
"! @raising lcx_exception | Internal error
|
||||||
|
get_requirement_met_status IMPORTING it_requirements TYPE lcl_dot_abapgit=>ty_requirement_tt
|
||||||
|
RETURNING value(rt_status) TYPE ty_requirement_status_tt
|
||||||
|
RAISING lcx_exception.
|
||||||
|
PROTECTED SECTION.
|
||||||
|
PRIVATE SECTION.
|
||||||
|
CLASS-METHODS:
|
||||||
|
show_requirement_popup IMPORTING it_requirements TYPE ty_requirement_status_tt
|
||||||
|
RAISING lcx_exception,
|
||||||
|
version_greater_or_equal IMPORTING is_status TYPE ty_requirement_status
|
||||||
|
RETURNING value(rv_true) TYPE abap_bool.
|
||||||
|
ENDCLASS. "lcl_requirement_helper DEFINITION
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_requirement_helper IMPLEMENTATION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_requirement_helper IMPLEMENTATION.
|
||||||
|
METHOD check_requirements.
|
||||||
|
DATA: lt_met_status TYPE ty_requirement_status_tt,
|
||||||
|
lv_answer TYPE c LENGTH 1.
|
||||||
|
|
||||||
|
lt_met_status = get_requirement_met_status( it_requirements ).
|
||||||
|
|
||||||
|
IF iv_show_popup = abap_true.
|
||||||
|
show_requirement_popup( lt_met_status ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
LOOP AT lt_met_status TRANSPORTING NO FIELDS WHERE met = abap_false.
|
||||||
|
EXIT.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
CALL FUNCTION 'POPUP_TO_CONFIRM'
|
||||||
|
EXPORTING
|
||||||
|
text_question = 'The project has unmet requirements. Do you want to continue?'
|
||||||
|
IMPORTING
|
||||||
|
answer = lv_answer.
|
||||||
|
IF lv_answer <> '1'.
|
||||||
|
lcx_exception=>raise( 'Cancelling because of unmet requirements.' ).
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD. "check_requirements
|
||||||
|
|
||||||
|
METHOD get_requirement_met_status.
|
||||||
|
DATA: lt_installed TYPE STANDARD TABLE OF cvers_sdu.
|
||||||
|
FIELD-SYMBOLS: <ls_requirement> TYPE lcl_dot_abapgit=>ty_requirement,
|
||||||
|
<ls_status> TYPE ty_requirement_status,
|
||||||
|
<ls_installed_comp> TYPE cvers_sdu.
|
||||||
|
|
||||||
|
CALL FUNCTION 'DELIVERY_GET_INSTALLED_COMPS'
|
||||||
|
TABLES
|
||||||
|
tt_comptab = lt_installed
|
||||||
|
EXCEPTIONS
|
||||||
|
no_release_found = 1
|
||||||
|
OTHERS = 2.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( |Error from DELIVERY_GET_INSTALLED_COMPS { sy-subrc }| ) ##no_text.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
LOOP AT it_requirements ASSIGNING <ls_requirement>.
|
||||||
|
APPEND INITIAL LINE TO rt_status ASSIGNING <ls_status>.
|
||||||
|
<ls_status>-component = <ls_requirement>-component.
|
||||||
|
<ls_status>-required_release = <ls_requirement>-min_release.
|
||||||
|
<ls_status>-required_patch = <ls_requirement>-min_patch.
|
||||||
|
|
||||||
|
READ TABLE lt_installed WITH KEY component = <ls_requirement>-component
|
||||||
|
ASSIGNING <ls_installed_comp>.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
" Component is installed, requirement is met if the installed version is greater or equal
|
||||||
|
" to the required one.
|
||||||
|
<ls_status>-installed_release = <ls_installed_comp>-release.
|
||||||
|
<ls_status>-installed_patch = <ls_installed_comp>-extrelease.
|
||||||
|
<ls_status>-description = <ls_installed_comp>-desc_text.
|
||||||
|
<ls_status>-met = version_greater_or_equal( <ls_status> ).
|
||||||
|
ELSE.
|
||||||
|
" Component is not installed at all
|
||||||
|
<ls_status>-met = abap_false.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
UNASSIGN <ls_installed_comp>.
|
||||||
|
ENDLOOP.
|
||||||
|
ENDMETHOD. "get_requirement_met_status
|
||||||
|
|
||||||
|
METHOD version_greater_or_equal.
|
||||||
|
DATA: lv_number TYPE numc4.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
MOVE EXACT: is_status-installed_release TO lv_number,
|
||||||
|
is_status-installed_patch TO lv_number,
|
||||||
|
is_status-required_release TO lv_number,
|
||||||
|
is_status-required_patch TO lv_number.
|
||||||
|
CATCH cx_sy_conversion_error.
|
||||||
|
" Cannot compare by number, assume requirement not fullfilled (user can force install
|
||||||
|
" anyways if this was an error)
|
||||||
|
rv_true = abap_false.
|
||||||
|
RETURN.
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
" Versions are comparable by number, compare release and if necessary patch level
|
||||||
|
IF is_status-installed_release > is_status-required_release
|
||||||
|
OR ( is_status-installed_release = is_status-required_release
|
||||||
|
AND ( is_status-required_patch IS INITIAL OR
|
||||||
|
is_status-installed_patch >= is_status-required_patch ) ).
|
||||||
|
|
||||||
|
rv_true = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD. "version_greater_or_equal
|
||||||
|
|
||||||
|
METHOD show_requirement_popup.
|
||||||
|
|
||||||
|
TYPES: BEGIN OF lty_color_line,
|
||||||
|
color TYPE lvc_t_scol.
|
||||||
|
INCLUDE TYPE ty_requirement_status.
|
||||||
|
TYPES: END OF lty_color_line,
|
||||||
|
lty_color_tab TYPE STANDARD TABLE OF lty_color_line WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
DATA: lo_alv TYPE REF TO cl_salv_table,
|
||||||
|
lo_column TYPE REF TO cl_salv_column,
|
||||||
|
lo_columns TYPE REF TO cl_salv_columns_table,
|
||||||
|
lt_color_table TYPE lty_color_tab,
|
||||||
|
lt_color_negative TYPE lvc_t_scol,
|
||||||
|
lt_color_positive TYPE lvc_t_scol,
|
||||||
|
ls_color TYPE lvc_s_scol,
|
||||||
|
lx_ex TYPE REF TO cx_root.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_line> TYPE lty_color_line,
|
||||||
|
<ls_requirement> LIKE LINE OF it_requirements.
|
||||||
|
|
||||||
|
|
||||||
|
ls_color-color-col = col_negative.
|
||||||
|
APPEND ls_color TO lt_color_negative.
|
||||||
|
|
||||||
|
ls_color-color-col = col_positive.
|
||||||
|
APPEND ls_color TO lt_color_positive.
|
||||||
|
|
||||||
|
CLEAR ls_color.
|
||||||
|
|
||||||
|
LOOP AT it_requirements ASSIGNING <ls_requirement>.
|
||||||
|
APPEND INITIAL LINE TO lt_color_table ASSIGNING <ls_line>.
|
||||||
|
MOVE-CORRESPONDING <ls_requirement> TO <ls_line>.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
LOOP AT lt_color_table ASSIGNING <ls_line>.
|
||||||
|
IF <ls_line>-met = abap_false.
|
||||||
|
<ls_line>-color = lt_color_negative.
|
||||||
|
ELSE.
|
||||||
|
<ls_line>-color = lt_color_positive.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
UNASSIGN <ls_line>.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
cl_salv_table=>factory( IMPORTING r_salv_table = lo_alv
|
||||||
|
CHANGING t_table = lt_color_table ).
|
||||||
|
|
||||||
|
lo_columns = lo_alv->get_columns( ).
|
||||||
|
lo_columns->get_column( 'MET' )->set_short_text( 'Met' ).
|
||||||
|
lo_columns->set_color_column( 'COLOR' ).
|
||||||
|
lo_columns->set_optimize( ).
|
||||||
|
|
||||||
|
lo_column = lo_columns->get_column( 'REQUIRED_RELEASE' ).
|
||||||
|
* lo_column->set_fixed_header_text( 'S' ).
|
||||||
|
lo_column->set_short_text( 'Req. Rel.' ).
|
||||||
|
|
||||||
|
lo_column = lo_columns->get_column( 'REQUIRED_PATCH' ).
|
||||||
|
* lo_column->set_fixed_header_text( 'S' ).
|
||||||
|
lo_column->set_short_text( 'Req. SP L.' ).
|
||||||
|
|
||||||
|
lo_alv->set_screen_popup( start_column = 30
|
||||||
|
end_column = 100
|
||||||
|
start_line = 10
|
||||||
|
end_line = 20 ).
|
||||||
|
lo_alv->get_display_settings( )->set_list_header( 'Requirements' ).
|
||||||
|
lo_alv->display( ).
|
||||||
|
|
||||||
|
CATCH cx_salv_msg cx_salv_not_found cx_salv_data_error INTO lx_ex.
|
||||||
|
RAISE EXCEPTION TYPE lcx_exception
|
||||||
|
EXPORTING
|
||||||
|
iv_text = lx_ex->get_text( )
|
||||||
|
ix_previous = lx_ex.
|
||||||
|
ENDTRY.
|
||||||
|
ENDMETHOD. "show_requirement_popup
|
||||||
|
ENDCLASS. "lcl_requirement_helper IMPLEMENTATION
|
25
src/zabapgit_requirements.prog.xml
Normal file
25
src/zabapgit_requirements.prog.xml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_REQUIREMENTS</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL>S</DBAPL>
|
||||||
|
<DBNA>D$</DBNA>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<FIXPT>X</FIXPT>
|
||||||
|
<LDBNAME>D$S</LDBNAME>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<ENTRY>ZABAPGIT_REQUIREMENTS</ENTRY>
|
||||||
|
<LENGTH>21</LENGTH>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -129,8 +129,6 @@ CLASS lcl_tadir IMPLEMENTATION.
|
||||||
DATA: lv_index TYPE i,
|
DATA: lv_index TYPE i,
|
||||||
lt_tadir TYPE ty_tadir_tt,
|
lt_tadir TYPE ty_tadir_tt,
|
||||||
lt_tdevc TYPE STANDARD TABLE OF tdevc,
|
lt_tdevc TYPE STANDARD TABLE OF tdevc,
|
||||||
lv_len TYPE i,
|
|
||||||
lv_message TYPE string,
|
|
||||||
lv_path TYPE string.
|
lv_path TYPE string.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_tdevc> LIKE LINE OF lt_tdevc,
|
FIELD-SYMBOLS: <ls_tdevc> LIKE LINE OF lt_tdevc,
|
||||||
|
|
|
@ -29,7 +29,6 @@ ENDCLASS.
|
||||||
CLASS lcl_transport IMPLEMENTATION.
|
CLASS lcl_transport IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD zip.
|
METHOD zip.
|
||||||
|
|
||||||
DATA: lt_requests TYPE trwbo_requests,
|
DATA: lt_requests TYPE trwbo_requests,
|
||||||
lt_tadir TYPE scts_tadir,
|
lt_tadir TYPE scts_tadir,
|
||||||
lv_package TYPE devclass,
|
lv_package TYPE devclass,
|
||||||
|
@ -64,14 +63,10 @@ CLASS lcl_transport IMPLEMENTATION.
|
||||||
|
|
||||||
lcl_zip=>export( io_repo = lo_repo
|
lcl_zip=>export( io_repo = lo_repo
|
||||||
it_filter = lt_tadir ).
|
it_filter = lt_tadir ).
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD to_tadir.
|
METHOD to_tadir.
|
||||||
DATA: lt_requests TYPE trwbo_requests,
|
DATA: lt_requests TYPE trwbo_requests.
|
||||||
lt_tadir TYPE scts_tadir,
|
|
||||||
lv_package TYPE devclass,
|
|
||||||
lt_trkorr TYPE trwbo_request_headers.
|
|
||||||
|
|
||||||
|
|
||||||
IF lines( it_transport_headers ) = 0.
|
IF lines( it_transport_headers ) = 0.
|
||||||
|
@ -112,11 +107,9 @@ CLASS lcl_transport IMPLEMENTATION.
|
||||||
|
|
||||||
SORT lt_super.
|
SORT lt_super.
|
||||||
READ TABLE lt_super INDEX 1 INTO rv_package.
|
READ TABLE lt_super INDEX 1 INTO rv_package.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD read_requests.
|
METHOD read_requests.
|
||||||
|
|
||||||
DATA lt_requests LIKE rt_requests.
|
DATA lt_requests LIKE rt_requests.
|
||||||
FIELD-SYMBOLS <fs_trkorr> LIKE LINE OF it_trkorr.
|
FIELD-SYMBOLS <fs_trkorr> LIKE LINE OF it_trkorr.
|
||||||
|
|
||||||
|
@ -135,11 +128,9 @@ CLASS lcl_transport IMPLEMENTATION.
|
||||||
|
|
||||||
APPEND LINES OF lt_requests TO rt_requests.
|
APPEND LINES OF lt_requests TO rt_requests.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD resolve.
|
METHOD resolve.
|
||||||
|
|
||||||
DATA: lv_object TYPE tadir-object,
|
DATA: lv_object TYPE tadir-object,
|
||||||
lv_obj_name TYPE tadir-obj_name,
|
lv_obj_name TYPE tadir-obj_name,
|
||||||
lv_trobj_name TYPE trobj_name,
|
lv_trobj_name TYPE trobj_name,
|
||||||
|
@ -185,6 +176,80 @@ CLASS lcl_transport IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcl_transport_objects DEFINITION.
|
||||||
|
"Under test at ltcl_transport_objects
|
||||||
|
PUBLIC SECTION.
|
||||||
|
METHODS constructor
|
||||||
|
IMPORTING
|
||||||
|
it_transport_objects TYPE scts_tadir.
|
||||||
|
METHODS to_stage
|
||||||
|
IMPORTING
|
||||||
|
io_stage TYPE REF TO lcl_stage
|
||||||
|
is_stage_objects TYPE ty_stage_files
|
||||||
|
it_object_statuses TYPE ty_results_tt
|
||||||
|
RAISING
|
||||||
|
lcx_exception.
|
||||||
|
PRIVATE SECTION.
|
||||||
|
DATA mt_transport_objects TYPE scts_tadir.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcl_transport_objects IMPLEMENTATION.
|
||||||
|
METHOD constructor.
|
||||||
|
mt_transport_objects = it_transport_objects.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD to_stage.
|
||||||
|
DATA: ls_transport_object TYPE tadir,
|
||||||
|
ls_local_file TYPE ty_file_item,
|
||||||
|
ls_object_status TYPE ty_result.
|
||||||
|
|
||||||
|
LOOP AT mt_transport_objects INTO ls_transport_object.
|
||||||
|
LOOP AT it_object_statuses INTO ls_object_status
|
||||||
|
WHERE obj_name = ls_transport_object-obj_name
|
||||||
|
AND obj_type = ls_transport_object-object.
|
||||||
|
|
||||||
|
CASE ls_object_status-lstate.
|
||||||
|
WHEN gc_state-added OR gc_state-modified.
|
||||||
|
IF ls_transport_object-delflag = abap_true.
|
||||||
|
lcx_exception=>raise( |Object { ls_transport_object-obj_name
|
||||||
|
} should be added/modified, but has deletion flag in transport| ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
READ TABLE is_stage_objects-local
|
||||||
|
INTO ls_local_file
|
||||||
|
WITH KEY item-obj_name = ls_transport_object-obj_name
|
||||||
|
item-obj_type = ls_transport_object-object
|
||||||
|
file-filename = ls_object_status-filename.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( |Object { ls_transport_object-obj_name
|
||||||
|
} not found in the local repository files| ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
io_stage->add(
|
||||||
|
iv_path = ls_local_file-file-path
|
||||||
|
iv_filename = ls_local_file-file-filename
|
||||||
|
iv_data = ls_local_file-file-data ).
|
||||||
|
WHEN gc_state-deleted.
|
||||||
|
IF ls_transport_object-delflag = abap_false.
|
||||||
|
lcx_exception=>raise( |Object { ls_transport_object-obj_name
|
||||||
|
} should be removed, but has NO deletion flag in transport| ).
|
||||||
|
ENDIF.
|
||||||
|
io_stage->rm(
|
||||||
|
iv_path = ls_object_status-path
|
||||||
|
iv_filename = ls_object_status-filename ).
|
||||||
|
WHEN OTHERS.
|
||||||
|
ASSERT 0 = 1. "Unexpected state
|
||||||
|
ENDCASE.
|
||||||
|
ENDLOOP.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( |Object { ls_transport_object-obj_name
|
||||||
|
} not found in the local repository files| ).
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
CLASS lcl_transport_to_branch DEFINITION.
|
CLASS lcl_transport_to_branch DEFINITION.
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
METHODS:
|
METHODS:
|
||||||
|
@ -220,17 +285,11 @@ CLASS lcl_transport_to_branch IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD create.
|
METHOD create.
|
||||||
DATA:
|
DATA:
|
||||||
ls_transport_object TYPE LINE OF scts_tadir,
|
|
||||||
lt_items TYPE ty_files_item_tt,
|
|
||||||
ls_local_file TYPE LINE OF ty_files_item_tt,
|
|
||||||
ls_remote_file TYPE LINE OF ty_files_tt,
|
|
||||||
ls_item TYPE string,
|
|
||||||
lv_branch_name TYPE string,
|
lv_branch_name TYPE string,
|
||||||
ls_comment TYPE ty_comment,
|
ls_comment TYPE ty_comment,
|
||||||
lo_stage TYPE REF TO lcl_stage,
|
lo_stage TYPE REF TO lcl_stage,
|
||||||
ls_stage_objects TYPE ty_stage_files,
|
ls_stage_objects TYPE ty_stage_files,
|
||||||
lt_object_statuses TYPE ty_results_tt,
|
lt_object_statuses TYPE ty_results_tt.
|
||||||
ls_object_status TYPE LINE OF ty_results_tt.
|
|
||||||
|
|
||||||
lv_branch_name = lcl_git_branch_list=>complete_heads_branch_name(
|
lv_branch_name = lcl_git_branch_list=>complete_heads_branch_name(
|
||||||
lcl_git_branch_list=>normalize_branch_name( is_transport_to_branch-branch_name ) ).
|
lcl_git_branch_list=>normalize_branch_name( is_transport_to_branch-branch_name ) ).
|
||||||
|
@ -280,45 +339,15 @@ CLASS lcl_transport_to_branch IMPLEMENTATION.
|
||||||
rs_comment-comment = is_transport_to_branch-commit_text.
|
rs_comment-comment = is_transport_to_branch-commit_text.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD stage_transport_objects.
|
METHOD stage_transport_objects.
|
||||||
|
DATA lo_transport_objects TYPE REF TO lcl_transport_objects.
|
||||||
|
CREATE OBJECT lo_transport_objects
|
||||||
|
EXPORTING
|
||||||
|
it_transport_objects = it_transport_objects.
|
||||||
|
|
||||||
DATA ls_transport_object TYPE tadir.
|
lo_transport_objects->to_stage(
|
||||||
DATA ls_local_file TYPE ty_file_item.
|
io_stage = io_stage
|
||||||
DATA ls_object_status TYPE ty_result.
|
is_stage_objects = is_stage_objects
|
||||||
|
it_object_statuses = it_object_statuses ).
|
||||||
LOOP AT it_transport_objects INTO ls_transport_object.
|
|
||||||
READ TABLE it_object_statuses INTO ls_object_status
|
|
||||||
WITH KEY obj_name = ls_transport_object-obj_name
|
|
||||||
obj_type = ls_transport_object-object.
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
lcx_exception=>raise( |Object { ls_transport_object-obj_name } not found in the local repository files | ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
CASE ls_object_status-lstate.
|
|
||||||
WHEN gc_state-added OR gc_state-modified.
|
|
||||||
ASSERT ls_transport_object-delflag = abap_false.
|
|
||||||
|
|
||||||
READ TABLE is_stage_objects-local
|
|
||||||
INTO ls_local_file
|
|
||||||
WITH KEY item-obj_name = ls_transport_object-obj_name
|
|
||||||
item-obj_type = ls_transport_object-object.
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
lcx_exception=>raise( |Object { ls_transport_object-obj_name } not found in the local repository files | ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
io_stage->add(
|
|
||||||
iv_path = ls_local_file-file-path
|
|
||||||
iv_filename = ls_local_file-file-filename
|
|
||||||
iv_data = ls_local_file-file-data ).
|
|
||||||
WHEN gc_state-deleted.
|
|
||||||
ASSERT ls_transport_object-delflag = abap_true.
|
|
||||||
io_stage->rm(
|
|
||||||
iv_path = ls_object_status-path
|
|
||||||
iv_filename = ls_object_status-filename ).
|
|
||||||
WHEN OTHERS.
|
|
||||||
ASSERT 0 = 1. "Unexpected state
|
|
||||||
ENDCASE.
|
|
||||||
ENDLOOP.
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
|
@ -1247,9 +1247,7 @@ CLASS ltcl_html DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
|
||||||
style1 FOR TESTING RAISING lcx_exception.
|
style1 FOR TESTING RAISING lcx_exception.
|
||||||
|
|
||||||
METHODS:
|
METHODS:
|
||||||
setup,
|
setup.
|
||||||
last_line
|
|
||||||
RETURNING VALUE(rv_line) TYPE string.
|
|
||||||
|
|
||||||
ENDCLASS. "ltcl_html
|
ENDCLASS. "ltcl_html
|
||||||
|
|
||||||
|
@ -1331,15 +1329,6 @@ CLASS ltcl_html IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD last_line.
|
|
||||||
|
|
||||||
DATA: lt_strings TYPE STANDARD TABLE OF string WITH DEFAULT KEY.
|
|
||||||
|
|
||||||
SPLIT mo_html->render( ) AT gc_newline INTO TABLE lt_strings.
|
|
||||||
READ TABLE lt_strings INDEX lines( lt_strings ) INTO rv_line.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD style1.
|
METHOD style1.
|
||||||
|
|
||||||
DATA lv_exp TYPE string.
|
DATA lv_exp TYPE string.
|
||||||
|
@ -2243,3 +2232,4 @@ CLASS ltcl_persistence_settings IMPLEMENTATION.
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
INCLUDE zabapgit_unit_test_clas_intf.
|
INCLUDE zabapgit_unit_test_clas_intf.
|
||||||
|
INCLUDE zabapgit_unit_test_transport.
|
||||||
|
|
361
src/zabapgit_unit_test_transport.prog.abap
Normal file
361
src/zabapgit_unit_test_transport.prog.abap
Normal file
|
@ -0,0 +1,361 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_UNIT_TEST_TRANSPORT
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
|
||||||
|
CLASS ltcl_transport_objects DEFINITION FOR TESTING.
|
||||||
|
PRIVATE SECTION.
|
||||||
|
METHODS:
|
||||||
|
add_new_to_local_files FOR TESTING RAISING cx_static_check,
|
||||||
|
modified_to_new_local_files FOR TESTING RAISING cx_static_check,
|
||||||
|
transport_not_in_repository FOR TESTING RAISING cx_static_check,
|
||||||
|
object_not_in_local_files FOR TESTING RAISING cx_static_check,
|
||||||
|
cant_be_added_with_del_flag FOR TESTING RAISING cx_static_check,
|
||||||
|
cant_be_modified_with_del_flag FOR TESTING RAISING cx_static_check,
|
||||||
|
deleted_to_removed_files FOR TESTING RAISING cx_static_check,
|
||||||
|
shouldnt_remove_no_delflag FOR TESTING RAISING cx_static_check,
|
||||||
|
should_add_all_local_files FOR TESTING RAISING cx_static_check,
|
||||||
|
should_delete_all_related FOR TESTING RAISING cx_static_check,
|
||||||
|
setup,
|
||||||
|
given_the_transport_object
|
||||||
|
IMPORTING iv_obj_name TYPE string
|
||||||
|
iv_obj_type TYPE string
|
||||||
|
iv_delflag TYPE abap_bool OPTIONAL,
|
||||||
|
given_the_object_status
|
||||||
|
IMPORTING
|
||||||
|
iv_obj_name TYPE string OPTIONAL
|
||||||
|
iv_obj_type TYPE string OPTIONAL
|
||||||
|
iv_filename TYPE string OPTIONAL
|
||||||
|
iv_path TYPE string OPTIONAL
|
||||||
|
iv_lstate TYPE char1,
|
||||||
|
given_the_local_file
|
||||||
|
IMPORTING iv_obj_name TYPE string
|
||||||
|
iv_obj_type TYPE string
|
||||||
|
iv_filename TYPE string
|
||||||
|
iv_path TYPE string
|
||||||
|
iv_data TYPE string
|
||||||
|
RETURNING VALUE(rs_local_file) TYPE ty_file_item,
|
||||||
|
when_staging
|
||||||
|
RAISING lcx_exception,
|
||||||
|
then_file_should_be_added
|
||||||
|
IMPORTING
|
||||||
|
is_local_file TYPE ty_file_item,
|
||||||
|
then_it_should_raise_exception
|
||||||
|
IMPORTING
|
||||||
|
with_text TYPE string,
|
||||||
|
then_it_should_remove_at_stage
|
||||||
|
IMPORTING
|
||||||
|
iv_filename TYPE string
|
||||||
|
iv_path TYPE string.
|
||||||
|
|
||||||
|
DATA: mo_transport_objects TYPE REF TO lcl_transport_objects,
|
||||||
|
mt_transport_objects TYPE scts_tadir,
|
||||||
|
mt_object_statuses TYPE ty_results_tt,
|
||||||
|
ms_stage_objects TYPE ty_stage_files,
|
||||||
|
mo_stage TYPE REF TO lcl_stage.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS ltcl_transport_objects IMPLEMENTATION.
|
||||||
|
METHOD setup.
|
||||||
|
CREATE OBJECT mo_stage
|
||||||
|
EXPORTING
|
||||||
|
iv_branch_name = 'A_branch_name'
|
||||||
|
iv_branch_sha1 = 'Branch_SH1'.
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD add_new_to_local_files.
|
||||||
|
DATA ls_local_file TYPE ty_file_item.
|
||||||
|
|
||||||
|
given_the_transport_object(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS' ).
|
||||||
|
|
||||||
|
given_the_object_status(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_filename = 'CL_FOO.abap'
|
||||||
|
iv_lstate = gc_state-added ).
|
||||||
|
|
||||||
|
ls_local_file = given_the_local_file(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_filename = 'CL_FOO.abap'
|
||||||
|
iv_path = '/path'
|
||||||
|
iv_data = 'data' ).
|
||||||
|
|
||||||
|
when_staging( ).
|
||||||
|
|
||||||
|
then_file_should_be_added( ls_local_file ).
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD modified_to_new_local_files.
|
||||||
|
DATA ls_local_file TYPE ty_file_item.
|
||||||
|
given_the_transport_object(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS' ).
|
||||||
|
|
||||||
|
given_the_object_status(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_filename = 'CL_FOO.abap'
|
||||||
|
iv_lstate = gc_state-modified ).
|
||||||
|
|
||||||
|
ls_local_file = given_the_local_file(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_filename = 'CL_FOO.abap'
|
||||||
|
iv_path = '/path'
|
||||||
|
iv_data = 'data' ).
|
||||||
|
|
||||||
|
when_staging( ).
|
||||||
|
|
||||||
|
then_file_should_be_added( ls_local_file ).
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD should_add_all_local_files.
|
||||||
|
"Not only .abap, but also .xml and other includes
|
||||||
|
DATA ls_abap_local_file TYPE ty_file_item.
|
||||||
|
DATA ls_xml_local_file TYPE ty_file_item.
|
||||||
|
|
||||||
|
given_the_transport_object(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS' ).
|
||||||
|
|
||||||
|
given_the_object_status(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_filename = 'CL_FOO.abap'
|
||||||
|
iv_lstate = gc_state-modified ).
|
||||||
|
|
||||||
|
given_the_object_status(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_filename = 'CL_FOO.xml'
|
||||||
|
iv_lstate = gc_state-modified ).
|
||||||
|
|
||||||
|
ls_abap_local_file = given_the_local_file(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_filename = 'CL_FOO.abap'
|
||||||
|
iv_path = '/path'
|
||||||
|
iv_data = 'data' ).
|
||||||
|
|
||||||
|
ls_xml_local_file = given_the_local_file(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_filename = 'CL_FOO.xml'
|
||||||
|
iv_path = '/path'
|
||||||
|
iv_data = 'data' ).
|
||||||
|
|
||||||
|
when_staging( ).
|
||||||
|
|
||||||
|
then_file_should_be_added( ls_abap_local_file ).
|
||||||
|
then_file_should_be_added( ls_xml_local_file ).
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD transport_not_in_repository.
|
||||||
|
given_the_transport_object(
|
||||||
|
iv_obj_name = 'CL_A_CLASS_NOT_IN_REPO'
|
||||||
|
iv_obj_type = 'CLAS' ).
|
||||||
|
|
||||||
|
given_the_object_status(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_lstate = gc_state-added ).
|
||||||
|
|
||||||
|
then_it_should_raise_exception(
|
||||||
|
with_text = 'Object CL_A_CLASS_NOT_IN_REPO not found in the local repository files' ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD object_not_in_local_files.
|
||||||
|
|
||||||
|
given_the_transport_object(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS' ).
|
||||||
|
|
||||||
|
given_the_object_status(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_lstate = gc_state-added ).
|
||||||
|
|
||||||
|
given_the_local_file(
|
||||||
|
iv_obj_name = 'CL_ANOTHER_LOCAL_FILE'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_filename = 'CL_FOO.abap'
|
||||||
|
iv_path = '/path'
|
||||||
|
iv_data = 'data' ).
|
||||||
|
|
||||||
|
then_it_should_raise_exception(
|
||||||
|
with_text = 'Object CL_FOO not found in the local repository files' ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD cant_be_added_with_del_flag.
|
||||||
|
given_the_transport_object(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_delflag = abap_true ).
|
||||||
|
|
||||||
|
given_the_object_status(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_lstate = gc_state-added ).
|
||||||
|
|
||||||
|
then_it_should_raise_exception(
|
||||||
|
with_text = 'Object CL_FOO should be added/modified, but has deletion flag in transport' ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD cant_be_modified_with_del_flag.
|
||||||
|
given_the_transport_object(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_delflag = abap_true ).
|
||||||
|
|
||||||
|
given_the_object_status(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_lstate = gc_state-modified ).
|
||||||
|
|
||||||
|
then_it_should_raise_exception(
|
||||||
|
with_text = 'Object CL_FOO should be added/modified, but has deletion flag in transport' ).
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD deleted_to_removed_files.
|
||||||
|
given_the_transport_object(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_delflag = abap_true ).
|
||||||
|
|
||||||
|
given_the_object_status(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_filename = 'CL_FOO.abap'
|
||||||
|
iv_path = '/a_path'
|
||||||
|
iv_lstate = gc_state-deleted ).
|
||||||
|
|
||||||
|
when_staging( ).
|
||||||
|
|
||||||
|
then_it_should_remove_at_stage(
|
||||||
|
iv_filename = 'CL_FOO.abap'
|
||||||
|
iv_path = '/a_path' ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD should_delete_all_related.
|
||||||
|
"i.e. Should also delete the XMLs related to the transport objects
|
||||||
|
given_the_transport_object(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_delflag = abap_true ).
|
||||||
|
|
||||||
|
given_the_object_status(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_filename = 'CL_FOO.abap'
|
||||||
|
iv_path = '/a_path'
|
||||||
|
iv_lstate = gc_state-deleted ).
|
||||||
|
|
||||||
|
given_the_object_status(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_filename = 'CL_FOO.xml'
|
||||||
|
iv_path = '/a_path'
|
||||||
|
iv_lstate = gc_state-deleted ).
|
||||||
|
|
||||||
|
when_staging( ).
|
||||||
|
|
||||||
|
then_it_should_remove_at_stage(
|
||||||
|
iv_filename = 'CL_FOO.abap'
|
||||||
|
iv_path = '/a_path' ).
|
||||||
|
|
||||||
|
then_it_should_remove_at_stage(
|
||||||
|
iv_filename = 'CL_FOO.xml'
|
||||||
|
iv_path = '/a_path' ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD shouldnt_remove_no_delflag.
|
||||||
|
given_the_transport_object(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_delflag = abap_false ).
|
||||||
|
|
||||||
|
given_the_object_status(
|
||||||
|
iv_obj_name = 'CL_FOO'
|
||||||
|
iv_obj_type = 'CLAS'
|
||||||
|
iv_filename = 'CL_FOO.abap'
|
||||||
|
iv_path = '/a_path'
|
||||||
|
iv_lstate = gc_state-deleted ).
|
||||||
|
|
||||||
|
then_it_should_raise_exception(
|
||||||
|
with_text = 'Object CL_FOO should be removed, but has NO deletion flag in transport' ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD given_the_transport_object.
|
||||||
|
DATA ls_transport_object TYPE tadir.
|
||||||
|
ls_transport_object-obj_name = iv_obj_name.
|
||||||
|
ls_transport_object-object = iv_obj_type.
|
||||||
|
ls_transport_object-delflag = iv_delflag.
|
||||||
|
APPEND ls_transport_object TO mt_transport_objects.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD given_the_object_status.
|
||||||
|
DATA ls_object_status TYPE ty_result.
|
||||||
|
ls_object_status-obj_name = iv_obj_name.
|
||||||
|
ls_object_status-obj_type = iv_obj_type.
|
||||||
|
ls_object_status-filename = iv_filename.
|
||||||
|
ls_object_status-path = iv_path.
|
||||||
|
ls_object_status-lstate = iv_lstate.
|
||||||
|
APPEND ls_object_status TO mt_object_statuses.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD given_the_local_file.
|
||||||
|
rs_local_file-item-obj_name = iv_obj_name.
|
||||||
|
rs_local_file-item-obj_type = iv_obj_type.
|
||||||
|
rs_local_file-file-filename = iv_filename.
|
||||||
|
rs_local_file-file-path = iv_path.
|
||||||
|
rs_local_file-file-data = iv_data.
|
||||||
|
APPEND rs_local_file TO ms_stage_objects-local.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD when_staging.
|
||||||
|
CREATE OBJECT mo_transport_objects
|
||||||
|
EXPORTING
|
||||||
|
it_transport_objects = mt_transport_objects.
|
||||||
|
mo_transport_objects->to_stage(
|
||||||
|
io_stage = mo_stage
|
||||||
|
is_stage_objects = ms_stage_objects
|
||||||
|
it_object_statuses = mt_object_statuses ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD then_file_should_be_added.
|
||||||
|
DATA: lt_staged_objects TYPE lcl_stage=>ty_stage_tt.
|
||||||
|
lt_staged_objects = mo_stage->get_all( ).
|
||||||
|
|
||||||
|
READ TABLE lt_staged_objects TRANSPORTING NO FIELDS
|
||||||
|
WITH KEY file-filename = is_local_file-file-filename
|
||||||
|
file-path = is_local_file-file-path
|
||||||
|
file-data = is_local_file-file-data
|
||||||
|
method = lcl_stage=>c_method-add.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
cl_abap_unit_assert=>fail( |Object { is_local_file-file-filename } not added to stage| ).
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD then_it_should_raise_exception.
|
||||||
|
DATA: lo_exception TYPE REF TO lcx_exception.
|
||||||
|
TRY.
|
||||||
|
when_staging( ).
|
||||||
|
cl_abap_unit_assert=>fail( 'Should have raised exception').
|
||||||
|
CATCH lcx_exception INTO lo_exception.
|
||||||
|
cl_abap_unit_assert=>assert_equals(
|
||||||
|
act = lo_exception->mv_text
|
||||||
|
exp = with_text ).
|
||||||
|
ENDTRY.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD then_it_should_remove_at_stage.
|
||||||
|
DATA: lt_staged_objects TYPE lcl_stage=>ty_stage_tt.
|
||||||
|
lt_staged_objects = mo_stage->get_all( ).
|
||||||
|
|
||||||
|
READ TABLE lt_staged_objects TRANSPORTING NO FIELDS
|
||||||
|
WITH KEY file-filename = iv_filename
|
||||||
|
file-path = iv_path.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
cl_abap_unit_assert=>fail( |Object { iv_filename } not removed in stage| ).
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS.
|
22
src/zabapgit_unit_test_transport.prog.xml
Normal file
22
src/zabapgit_unit_test_transport.prog.xml
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_UNIT_TEST_TRANSPORT</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<RLOAD>E</RLOAD>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<ENTRY>Include ZABAPGIT_UNIT_TEST_TRANSPORT</ENTRY>
|
||||||
|
<LENGTH>36</LENGTH>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -264,17 +264,13 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
|
||||||
lo_tb_branch TYPE REF TO lcl_html_toolbar,
|
lo_tb_branch TYPE REF TO lcl_html_toolbar,
|
||||||
lv_key TYPE lcl_persistence_db=>ty_value,
|
lv_key TYPE lcl_persistence_db=>ty_value,
|
||||||
lv_wp_opt LIKE gc_html_opt-crossout,
|
lv_wp_opt LIKE gc_html_opt-crossout,
|
||||||
lv_pull_opt LIKE gc_html_opt-crossout,
|
lv_pull_opt LIKE gc_html_opt-crossout.
|
||||||
lo_repo_online TYPE REF TO lcl_repo_online.
|
|
||||||
|
|
||||||
CREATE OBJECT ro_toolbar.
|
CREATE OBJECT ro_toolbar.
|
||||||
CREATE OBJECT lo_tb_branch.
|
CREATE OBJECT lo_tb_branch.
|
||||||
CREATE OBJECT lo_tb_advanced.
|
CREATE OBJECT lo_tb_advanced.
|
||||||
|
|
||||||
lv_key = mo_repo->get_key( ).
|
lv_key = mo_repo->get_key( ).
|
||||||
IF mo_repo->is_offline( ) = abap_false.
|
|
||||||
lo_repo_online ?= mo_repo.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
IF mo_repo->is_write_protected( ) = abap_true.
|
IF mo_repo->is_write_protected( ) = abap_true.
|
||||||
lv_wp_opt = gc_html_opt-crossout.
|
lv_wp_opt = gc_html_opt-crossout.
|
||||||
|
@ -315,6 +311,8 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
|
||||||
lo_tb_advanced->add( iv_txt = 'Make on-line'
|
lo_tb_advanced->add( iv_txt = 'Make on-line'
|
||||||
iv_act = |{ gc_action-repo_remote_attach }?{ lv_key }| ).
|
iv_act = |{ gc_action-repo_remote_attach }?{ lv_key }| ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
lo_tb_advanced->add( iv_txt = 'Repo settings'
|
||||||
|
iv_act = |{ gc_action-repo_settings }?{ lv_key }| ).
|
||||||
lo_tb_advanced->add( iv_txt = 'Update local checksums'
|
lo_tb_advanced->add( iv_txt = 'Update local checksums'
|
||||||
iv_act = |{ gc_action-repo_refresh_checksums }?{ lv_key }| ).
|
iv_act = |{ gc_action-repo_refresh_checksums }?{ lv_key }| ).
|
||||||
lo_tb_advanced->add( iv_txt = 'Remove'
|
lo_tb_advanced->add( iv_txt = 'Remove'
|
||||||
|
|
|
@ -69,40 +69,42 @@ ENDCLASS. "lcl_zip DEFINITION
|
||||||
CLASS lcl_zip IMPLEMENTATION.
|
CLASS lcl_zip IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD get_message.
|
METHOD get_message.
|
||||||
|
* method not in use?
|
||||||
|
ASSERT 0 = 1.
|
||||||
|
|
||||||
DATA: lv_returncode TYPE c,
|
* DATA: lv_returncode TYPE c,
|
||||||
lt_fields TYPE TABLE OF sval.
|
* lt_fields TYPE TABLE OF sval.
|
||||||
|
*
|
||||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
* FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
||||||
|
*
|
||||||
|
*
|
||||||
APPEND INITIAL LINE TO lt_fields ASSIGNING <ls_field>.
|
* APPEND INITIAL LINE TO lt_fields ASSIGNING <ls_field>.
|
||||||
<ls_field>-tabname = 'ABAPTXT255'.
|
* <ls_field>-tabname = 'ABAPTXT255'.
|
||||||
<ls_field>-fieldname = 'LINE'.
|
* <ls_field>-fieldname = 'LINE'.
|
||||||
<ls_field>-fieldtext = 'Commit message'. "#EC NOTEXT
|
* <ls_field>-fieldtext = 'Commit message'. "#EC NOTEXT
|
||||||
<ls_field>-field_obl = abap_true.
|
* <ls_field>-field_obl = abap_true.
|
||||||
|
*
|
||||||
CALL FUNCTION 'POPUP_GET_VALUES'
|
* CALL FUNCTION 'POPUP_GET_VALUES'
|
||||||
EXPORTING
|
* EXPORTING
|
||||||
no_value_check = abap_true
|
* no_value_check = abap_true
|
||||||
popup_title = 'Enter commit message' "#EC NOTEXT
|
* popup_title = 'Enter commit message' "#EC NOTEXT
|
||||||
IMPORTING
|
* IMPORTING
|
||||||
returncode = lv_returncode
|
* returncode = lv_returncode
|
||||||
TABLES
|
* TABLES
|
||||||
fields = lt_fields
|
* fields = lt_fields
|
||||||
EXCEPTIONS
|
* EXCEPTIONS
|
||||||
error_in_fields = 1
|
* error_in_fields = 1
|
||||||
OTHERS = 2.
|
* OTHERS = 2.
|
||||||
IF sy-subrc <> 0.
|
* IF sy-subrc <> 0.
|
||||||
lcx_exception=>raise( 'Error from POPUP_GET_VALUES' ).
|
* lcx_exception=>raise( 'Error from POPUP_GET_VALUES' ).
|
||||||
ENDIF.
|
* ENDIF.
|
||||||
IF lv_returncode = 'A'.
|
* IF lv_returncode = 'A'.
|
||||||
lcx_exception=>raise( 'cancelled' ).
|
* lcx_exception=>raise( 'cancelled' ).
|
||||||
ENDIF.
|
* ENDIF.
|
||||||
|
*
|
||||||
READ TABLE lt_fields INDEX 1 ASSIGNING <ls_field>.
|
* READ TABLE lt_fields INDEX 1 ASSIGNING <ls_field>.
|
||||||
ASSERT sy-subrc = 0.
|
* ASSERT sy-subrc = 0.
|
||||||
rv_message = <ls_field>-value.
|
* rv_message = <ls_field>-value.
|
||||||
|
|
||||||
ENDMETHOD. "get_message
|
ENDMETHOD. "get_message
|
||||||
|
|
||||||
|
@ -396,7 +398,6 @@ CLASS lcl_zip IMPLEMENTATION.
|
||||||
METHOD export.
|
METHOD export.
|
||||||
|
|
||||||
DATA: lo_log TYPE REF TO lcl_log,
|
DATA: lo_log TYPE REF TO lcl_log,
|
||||||
lv_index TYPE i,
|
|
||||||
lt_zip TYPE ty_files_item_tt.
|
lt_zip TYPE ty_files_item_tt.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_zip> LIKE LINE OF lt_zip.
|
FIELD-SYMBOLS: <ls_zip> LIKE LINE OF lt_zip.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user