mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-03 05:18:59 +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)
|
||||
[](http://abaplint.org/project/larshp/abapGit)
|
||||
[](https://abapgit-slackinviter.herokuapp.com/)
|
||||
|
||||
# abapGit #
|
||||
|
||||
|
|
|
@ -8,6 +8,20 @@ Legend
|
|||
+ : added
|
||||
- : 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
|
||||
------------------
|
||||
+ user interface changed for diff and staging pages
|
||||
|
|
|
@ -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.32.0'. "#EC NOTEXT
|
||||
gc_abap_version TYPE string VALUE 'v1.33.2'. "#EC NOTEXT
|
||||
|
||||
********************************************************************************
|
||||
* The MIT License (MIT)
|
||||
|
@ -49,6 +49,7 @@ INCLUDE zabapgit_dot_abapgit.
|
|||
INCLUDE zabapgit_persistence.
|
||||
INCLUDE zabapgit_sap_package.
|
||||
INCLUDE zabapgit_folder_logic.
|
||||
INCLUDE zabapgit_requirements.
|
||||
|
||||
INCLUDE zabapgit_stage.
|
||||
INCLUDE zabapgit_git_helpers.
|
||||
|
|
|
@ -446,20 +446,22 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
METHOD parse_repo_from_url.
|
||||
CONSTANTS: lc_search_regex TYPE string VALUE 'https?:\/\/(www\.)?github.com\/(.*)$'.
|
||||
DATA: lo_regex TYPE REF TO cl_abap_regex,
|
||||
lo_matcher TYPE REF TO cl_abap_matcher.
|
||||
|
||||
CREATE OBJECT lo_regex
|
||||
EXPORTING
|
||||
pattern = lc_search_regex.
|
||||
|
||||
lo_matcher = lo_regex->create_matcher( text = iv_url ).
|
||||
IF lo_matcher->match( ) = abap_true.
|
||||
rv_repo_name = lo_matcher->get_submatch( 1 ).
|
||||
ELSE.
|
||||
rv_repo_name = '???' ##NO_TEXT.
|
||||
ENDIF.
|
||||
* method not used?
|
||||
ASSERT 0 = 1.
|
||||
* CONSTANTS: lc_search_regex TYPE string VALUE 'https?:\/\/(www\.)?github.com\/(.*)$'.
|
||||
* DATA: lo_regex TYPE REF TO cl_abap_regex,
|
||||
* lo_matcher TYPE REF TO cl_abap_matcher.
|
||||
*
|
||||
* CREATE OBJECT lo_regex
|
||||
* EXPORTING
|
||||
* pattern = lc_search_regex.
|
||||
*
|
||||
* lo_matcher = lo_regex->create_matcher( text = iv_url ).
|
||||
* IF lo_matcher->match( ) = abap_true.
|
||||
* rv_repo_name = lo_matcher->get_submatch( 1 ).
|
||||
* ELSE.
|
||||
* rv_repo_name = '???' ##NO_TEXT.
|
||||
* ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_service_id_from_url.
|
||||
|
@ -468,7 +470,6 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION.
|
|||
|
||||
METHOD is_2fa_required.
|
||||
DATA: li_client TYPE REF TO if_http_client,
|
||||
lv_header_value TYPE string,
|
||||
lo_settings TYPE REF TO lcl_settings.
|
||||
|
||||
lo_settings = lcl_app=>settings( )->read( ).
|
||||
|
|
|
@ -197,6 +197,7 @@ CONSTANTS: BEGIN OF gc_action,
|
|||
repo_clone TYPE string VALUE 'repo_clone',
|
||||
repo_refresh TYPE string VALUE 'repo_refresh',
|
||||
repo_remove TYPE string VALUE 'repo_remove',
|
||||
repo_settings TYPE string VALUE 'repo_settings',
|
||||
repo_purge TYPE string VALUE 'repo_purge',
|
||||
repo_newoffline TYPE string VALUE 'repo_newoffline',
|
||||
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',
|
||||
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,
|
||||
starting_folder TYPE string,
|
||||
folder_logic TYPE string,
|
||||
ignore TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
|
||||
requirements TYPE ty_requirement_tt,
|
||||
END OF ty_dot_abapgit.
|
||||
|
||||
CLASS-METHODS:
|
||||
|
@ -135,6 +142,7 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
|
|||
METHOD to_xml.
|
||||
|
||||
CALL TRANSFORMATION id
|
||||
OPTIONS initial_components = 'suppress'
|
||||
SOURCE data = is_data
|
||||
RESULT XML rv_xml.
|
||||
|
||||
|
|
|
@ -151,6 +151,11 @@ CLASS lcl_git_pack DEFINITION FINAL FRIENDS ltcl_git_pack.
|
|||
EXPORTING ev_length TYPE i
|
||||
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
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
|
@ -854,6 +859,35 @@ CLASS lcl_git_pack IMPLEMENTATION.
|
|||
|
||||
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.
|
||||
|
||||
DATA: lv_x TYPE x,
|
||||
|
@ -864,15 +898,13 @@ CLASS lcl_git_pack IMPLEMENTATION.
|
|||
lv_len TYPE i,
|
||||
lv_sha1 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_decompress_len TYPE i,
|
||||
lv_compressed TYPE xstring,
|
||||
lv_decompressed TYPE xstring,
|
||||
lv_decompress_len TYPE i,
|
||||
lv_xstring TYPE xstring,
|
||||
lv_expected TYPE i,
|
||||
ls_object LIKE LINE OF rt_objects,
|
||||
ls_data TYPE lcl_zlib=>ty_decompress.
|
||||
ls_object LIKE LINE OF rt_objects.
|
||||
|
||||
|
||||
lv_data = iv_data.
|
||||
|
@ -937,37 +969,21 @@ CLASS lcl_git_pack IMPLEMENTATION.
|
|||
gzip_out_len = lv_compressed_len ).
|
||||
|
||||
IF lv_compressed(lv_compressed_len) <> lv_data(lv_compressed_len).
|
||||
lcx_exception=>raise( 'Compressed data doesnt match' ).
|
||||
ENDIF.
|
||||
|
||||
"Lets try with zlib before error in out for good
|
||||
"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.
|
||||
ENDIF.
|
||||
|
||||
ELSEIF lv_zlib = c_zlib_hmm.
|
||||
* cl_abap_gzip copmression works for header '789C', but does not work for
|
||||
* '7801', call custom implementation of DEFLATE algorithm.
|
||||
* The custom implementation could handle both, but most likely the kernel
|
||||
* implementation runs faster than the custom ABAP.
|
||||
ls_data = lcl_zlib=>decompress( lv_data ).
|
||||
lv_compressed_len = ls_data-compressed_len.
|
||||
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.
|
||||
|
||||
zlib_decompress( CHANGING cv_data = lv_data
|
||||
cv_decompressed = lv_decompressed ).
|
||||
ENDIF.
|
||||
|
||||
lv_data = lv_data+4. " skip adler checksum
|
||||
|
|
|
@ -29,3 +29,4 @@ INCLUDE zabapgit_page_main.
|
|||
INCLUDE zabapgit_page_stage.
|
||||
INCLUDE zabapgit_page_debug.
|
||||
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.
|
||||
lcl_services_repo=>transport_to_branch( iv_repository_key = lv_key ).
|
||||
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
|
||||
WHEN gc_action-zip_import. " Import repo from ZIP
|
||||
|
|
|
@ -202,8 +202,6 @@ CLASS lcl_object_clas IMPLEMENTATION.
|
|||
|
||||
DATA: ls_vseoclass TYPE vseoclass,
|
||||
lt_tpool TYPE textpool_table,
|
||||
lv_object TYPE dokhl-object,
|
||||
lv_state TYPE dokhl-dokstate,
|
||||
lt_descriptions TYPE ty_seocompotx_tt,
|
||||
ls_clskey TYPE seoclskey,
|
||||
lt_sotr TYPE ty_sotr_tt,
|
||||
|
@ -274,8 +272,7 @@ CLASS lcl_object_clas IMPLEMENTATION.
|
|||
|
||||
METHOD deserialize_sotr.
|
||||
"OTR stands for Online Text Repository
|
||||
DATA: lt_sotr TYPE ty_sotr_tt,
|
||||
lt_objects TYPE sotr_objects.
|
||||
DATA: lt_sotr TYPE ty_sotr_tt.
|
||||
|
||||
io_xml->read( EXPORTING iv_name = 'SOTR'
|
||||
CHANGING cg_data = lt_sotr ).
|
||||
|
|
|
@ -92,7 +92,6 @@ CLASS lcl_object_ddls IMPLEMENTATION.
|
|||
METHOD lif_object~serialize.
|
||||
|
||||
DATA: li_ddl TYPE REF TO object,
|
||||
lv_source TYPE string,
|
||||
lr_data TYPE REF TO data.
|
||||
|
||||
FIELD-SYMBOLS: <ls_data> TYPE any,
|
||||
|
|
|
@ -690,7 +690,6 @@ CLASS lcl_object_enho_interface IMPLEMENTATION.
|
|||
METHOD lif_object_enho~deserialize.
|
||||
|
||||
DATA: lo_enh_intf TYPE REF TO cl_enh_tool_intf,
|
||||
lt_source TYPE rswsourcet,
|
||||
li_tool TYPE REF TO if_enh_tool,
|
||||
lv_shorttext TYPE string,
|
||||
lv_class TYPE seoclsname,
|
||||
|
|
|
@ -143,13 +143,9 @@ CLASS lcl_object_intf IMPLEMENTATION.
|
|||
|
||||
METHOD serialize_xml.
|
||||
DATA:
|
||||
lt_tpool TYPE textpool_table,
|
||||
lv_object TYPE dokhl-object,
|
||||
lv_state TYPE dokhl-dokstate,
|
||||
lt_descriptions TYPE ty_seocompotx_tt,
|
||||
ls_vseointerf TYPE vseointerf,
|
||||
ls_clskey TYPE seoclskey,
|
||||
lt_sotr TYPE ty_sotr_tt,
|
||||
lt_lines TYPE tlinetab.
|
||||
|
||||
|
||||
|
|
|
@ -112,8 +112,7 @@ CLASS lcl_object_sfpf IMPLEMENTATION.
|
|||
|
||||
METHOD form_to_xstring.
|
||||
|
||||
DATA: lv_xstr TYPE xstring,
|
||||
li_fp_form TYPE REF TO if_fp_form,
|
||||
DATA: li_fp_form TYPE REF TO if_fp_form,
|
||||
li_wb_form TYPE REF TO if_fp_wb_form.
|
||||
|
||||
|
||||
|
@ -130,8 +129,6 @@ CLASS lcl_object_sfpf IMPLEMENTATION.
|
|||
METHOD fix_oref.
|
||||
|
||||
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_old TYPE string,
|
||||
lt_map TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
|
||||
|
|
|
@ -108,8 +108,7 @@ CLASS lcl_object_sfpi IMPLEMENTATION.
|
|||
|
||||
METHOD interface_to_xstring.
|
||||
|
||||
DATA: lv_xstr TYPE xstring,
|
||||
li_fp_interface TYPE REF TO if_fp_interface,
|
||||
DATA: li_fp_interface TYPE REF TO if_fp_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,
|
||||
lv_folder TYPE abap_bool,
|
||||
lv_filename TYPE string,
|
||||
lv_class TYPE smimloio-lo_class,
|
||||
ls_file TYPE ty_file,
|
||||
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.
|
||||
get_url_for_io(
|
||||
IMPORTING
|
||||
|
@ -201,12 +205,16 @@ CLASS lcl_object_smim IMPLEMENTATION.
|
|||
ls_file-path = '/'.
|
||||
ls_file-data = lv_content.
|
||||
mo_files->add( ls_file ).
|
||||
|
||||
SELECT SINGLE lo_class FROM smimloio INTO lv_class WHERE loio_id = lv_loio.
|
||||
ENDIF.
|
||||
|
||||
io_xml->add( iv_name = 'URL'
|
||||
ig_data = lv_url ).
|
||||
io_xml->add( iv_name = 'FOLDER'
|
||||
ig_data = lv_folder ).
|
||||
io_xml->add( iv_name = 'CLASS'
|
||||
ig_data = lv_class ).
|
||||
|
||||
ENDMETHOD. "serialize
|
||||
|
||||
|
@ -217,6 +225,7 @@ CLASS lcl_object_smim IMPLEMENTATION.
|
|||
lv_content TYPE xstring,
|
||||
lv_filename TYPE skwf_filnm,
|
||||
lv_io TYPE sdok_docid,
|
||||
lv_class TYPE smimloio-lo_class,
|
||||
ls_skwf_io TYPE skwf_io,
|
||||
li_api TYPE REF TO if_mr_api.
|
||||
|
||||
|
@ -228,6 +237,8 @@ CLASS lcl_object_smim IMPLEMENTATION.
|
|||
CHANGING cg_data = lv_url ).
|
||||
io_xml->read( EXPORTING iv_name = 'FOLDER'
|
||||
CHANGING cg_data = lv_folder ).
|
||||
io_xml->read( EXPORTING iv_name = 'CLASS'
|
||||
CHANGING cg_data = lv_class ).
|
||||
|
||||
ls_skwf_io-objid = lv_io.
|
||||
|
||||
|
@ -250,12 +261,15 @@ CLASS lcl_object_smim IMPLEMENTATION.
|
|||
ENDIF.
|
||||
ELSE.
|
||||
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(
|
||||
EXPORTING
|
||||
filename = lv_filename
|
||||
IMPORTING
|
||||
io_class = ls_skwf_io-class ).
|
||||
CONCATENATE ls_skwf_io-class '_L' INTO ls_skwf_io-class.
|
||||
ENDIF.
|
||||
|
||||
lv_content = find_content( lv_url ).
|
||||
|
||||
|
|
|
@ -76,8 +76,7 @@ CLASS lcl_object_splo IMPLEMENTATION.
|
|||
|
||||
METHOD lif_object~deserialize.
|
||||
|
||||
DATA: lv_obj_name TYPE e071-obj_name,
|
||||
ls_tsp1t TYPE tsp1t,
|
||||
DATA: ls_tsp1t TYPE tsp1t,
|
||||
ls_tsp1d TYPE tsp1d,
|
||||
ls_tsp0p TYPE tsp0p.
|
||||
|
||||
|
@ -93,17 +92,8 @@ CLASS lcl_object_splo IMPLEMENTATION.
|
|||
MODIFY tsp1d FROM ls_tsp1d. "#EC CI_SUBRC
|
||||
MODIFY tsp0p FROM ls_tsp0p. "#EC CI_SUBRC
|
||||
|
||||
lv_obj_name = ms_item-obj_name.
|
||||
|
||||
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
|
||||
|
||||
METHOD lif_object~delete.
|
||||
|
|
|
@ -1630,6 +1630,7 @@ CLASS lcl_objects_super IMPLEMENTATION.
|
|||
wi_tadir_author = sy-uname
|
||||
wi_tadir_devclass = iv_package
|
||||
wi_tadir_masterlang = mv_language
|
||||
iv_delflag = abap_false
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
IF sy-subrc <> 0.
|
||||
|
@ -1732,8 +1733,6 @@ CLASS lcl_objects DEFINITION FINAL.
|
|||
|
||||
PRIVATE SECTION.
|
||||
|
||||
CLASS-DATA: mv_langs_installed TYPE scplangs.
|
||||
|
||||
CLASS-METHODS check_duplicates
|
||||
IMPORTING it_files TYPE ty_files_tt
|
||||
RAISING lcx_exception.
|
||||
|
|
|
@ -595,8 +595,6 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
|||
|
||||
METHOD render_line_unified.
|
||||
|
||||
DATA lv_line TYPE string.
|
||||
|
||||
FIELD-SYMBOLS <diff_line> LIKE LINE OF mt_delayed_lines.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
* todo, offline projects should have an dot abapgit too
|
||||
lt_tadir = lcl_tadir=>read(
|
||||
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>.
|
||||
APPEND INITIAL LINE TO rt_repo_items ASSIGNING <ls_repo_item>.
|
||||
|
|
|
@ -477,7 +477,8 @@ CLASS lcl_repo IMPLEMENTATION.
|
|||
METHOD deserialize.
|
||||
|
||||
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.
|
||||
|
@ -487,6 +488,12 @@ CLASS lcl_repo IMPLEMENTATION.
|
|||
lo_dot_abapgit = find_remote_dot_abapgit( ).
|
||||
IF lo_dot_abapgit IS BOUND.
|
||||
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.
|
||||
|
||||
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,
|
||||
lt_tadir TYPE ty_tadir_tt,
|
||||
lt_tdevc TYPE STANDARD TABLE OF tdevc,
|
||||
lv_len TYPE i,
|
||||
lv_message TYPE string,
|
||||
lv_path TYPE string.
|
||||
|
||||
FIELD-SYMBOLS: <ls_tdevc> LIKE LINE OF lt_tdevc,
|
||||
|
|
|
@ -29,7 +29,6 @@ ENDCLASS.
|
|||
CLASS lcl_transport IMPLEMENTATION.
|
||||
|
||||
METHOD zip.
|
||||
|
||||
DATA: lt_requests TYPE trwbo_requests,
|
||||
lt_tadir TYPE scts_tadir,
|
||||
lv_package TYPE devclass,
|
||||
|
@ -64,14 +63,10 @@ CLASS lcl_transport IMPLEMENTATION.
|
|||
|
||||
lcl_zip=>export( io_repo = lo_repo
|
||||
it_filter = lt_tadir ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD to_tadir.
|
||||
DATA: lt_requests TYPE trwbo_requests,
|
||||
lt_tadir TYPE scts_tadir,
|
||||
lv_package TYPE devclass,
|
||||
lt_trkorr TYPE trwbo_request_headers.
|
||||
DATA: lt_requests TYPE trwbo_requests.
|
||||
|
||||
|
||||
IF lines( it_transport_headers ) = 0.
|
||||
|
@ -112,11 +107,9 @@ CLASS lcl_transport IMPLEMENTATION.
|
|||
|
||||
SORT lt_super.
|
||||
READ TABLE lt_super INDEX 1 INTO rv_package.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD read_requests.
|
||||
|
||||
DATA lt_requests LIKE rt_requests.
|
||||
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.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD resolve.
|
||||
|
||||
DATA: lv_object TYPE tadir-object,
|
||||
lv_obj_name TYPE tadir-obj_name,
|
||||
lv_trobj_name TYPE trobj_name,
|
||||
|
@ -185,6 +176,80 @@ CLASS lcl_transport IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
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.
|
||||
PUBLIC SECTION.
|
||||
METHODS:
|
||||
|
@ -220,17 +285,11 @@ CLASS lcl_transport_to_branch IMPLEMENTATION.
|
|||
|
||||
METHOD create.
|
||||
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,
|
||||
ls_comment TYPE ty_comment,
|
||||
lo_stage TYPE REF TO lcl_stage,
|
||||
ls_stage_objects TYPE ty_stage_files,
|
||||
lt_object_statuses TYPE ty_results_tt,
|
||||
ls_object_status TYPE LINE OF ty_results_tt.
|
||||
lt_object_statuses TYPE ty_results_tt.
|
||||
|
||||
lv_branch_name = lcl_git_branch_list=>complete_heads_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.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
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.
|
||||
DATA ls_local_file TYPE ty_file_item.
|
||||
DATA ls_object_status TYPE ty_result.
|
||||
|
||||
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.
|
||||
lo_transport_objects->to_stage(
|
||||
io_stage = io_stage
|
||||
is_stage_objects = is_stage_objects
|
||||
it_object_statuses = it_object_statuses ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
|
@ -1247,9 +1247,7 @@ CLASS ltcl_html DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
|
|||
style1 FOR TESTING RAISING lcx_exception.
|
||||
|
||||
METHODS:
|
||||
setup,
|
||||
last_line
|
||||
RETURNING VALUE(rv_line) TYPE string.
|
||||
setup.
|
||||
|
||||
ENDCLASS. "ltcl_html
|
||||
|
||||
|
@ -1331,15 +1329,6 @@ CLASS ltcl_html IMPLEMENTATION.
|
|||
|
||||
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.
|
||||
|
||||
DATA lv_exp TYPE string.
|
||||
|
@ -2243,3 +2232,4 @@ CLASS ltcl_persistence_settings IMPLEMENTATION.
|
|||
ENDCLASS.
|
||||
|
||||
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,
|
||||
lv_key TYPE lcl_persistence_db=>ty_value,
|
||||
lv_wp_opt LIKE gc_html_opt-crossout,
|
||||
lv_pull_opt LIKE gc_html_opt-crossout,
|
||||
lo_repo_online TYPE REF TO lcl_repo_online.
|
||||
lv_pull_opt LIKE gc_html_opt-crossout.
|
||||
|
||||
CREATE OBJECT ro_toolbar.
|
||||
CREATE OBJECT lo_tb_branch.
|
||||
CREATE OBJECT lo_tb_advanced.
|
||||
|
||||
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.
|
||||
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'
|
||||
iv_act = |{ gc_action-repo_remote_attach }?{ lv_key }| ).
|
||||
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'
|
||||
iv_act = |{ gc_action-repo_refresh_checksums }?{ lv_key }| ).
|
||||
lo_tb_advanced->add( iv_txt = 'Remove'
|
||||
|
|
|
@ -69,40 +69,42 @@ ENDCLASS. "lcl_zip DEFINITION
|
|||
CLASS lcl_zip IMPLEMENTATION.
|
||||
|
||||
METHOD get_message.
|
||||
* method not in use?
|
||||
ASSERT 0 = 1.
|
||||
|
||||
DATA: lv_returncode TYPE c,
|
||||
lt_fields TYPE TABLE OF sval.
|
||||
|
||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
||||
|
||||
|
||||
APPEND INITIAL LINE TO lt_fields ASSIGNING <ls_field>.
|
||||
<ls_field>-tabname = 'ABAPTXT255'.
|
||||
<ls_field>-fieldname = 'LINE'.
|
||||
<ls_field>-fieldtext = 'Commit message'. "#EC NOTEXT
|
||||
<ls_field>-field_obl = abap_true.
|
||||
|
||||
CALL FUNCTION 'POPUP_GET_VALUES'
|
||||
EXPORTING
|
||||
no_value_check = abap_true
|
||||
popup_title = 'Enter commit message' "#EC NOTEXT
|
||||
IMPORTING
|
||||
returncode = lv_returncode
|
||||
TABLES
|
||||
fields = lt_fields
|
||||
EXCEPTIONS
|
||||
error_in_fields = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'Error from POPUP_GET_VALUES' ).
|
||||
ENDIF.
|
||||
IF lv_returncode = 'A'.
|
||||
lcx_exception=>raise( 'cancelled' ).
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_fields INDEX 1 ASSIGNING <ls_field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
rv_message = <ls_field>-value.
|
||||
* DATA: lv_returncode TYPE c,
|
||||
* lt_fields TYPE TABLE OF sval.
|
||||
*
|
||||
* FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
||||
*
|
||||
*
|
||||
* APPEND INITIAL LINE TO lt_fields ASSIGNING <ls_field>.
|
||||
* <ls_field>-tabname = 'ABAPTXT255'.
|
||||
* <ls_field>-fieldname = 'LINE'.
|
||||
* <ls_field>-fieldtext = 'Commit message'. "#EC NOTEXT
|
||||
* <ls_field>-field_obl = abap_true.
|
||||
*
|
||||
* CALL FUNCTION 'POPUP_GET_VALUES'
|
||||
* EXPORTING
|
||||
* no_value_check = abap_true
|
||||
* popup_title = 'Enter commit message' "#EC NOTEXT
|
||||
* IMPORTING
|
||||
* returncode = lv_returncode
|
||||
* TABLES
|
||||
* fields = lt_fields
|
||||
* EXCEPTIONS
|
||||
* error_in_fields = 1
|
||||
* OTHERS = 2.
|
||||
* IF sy-subrc <> 0.
|
||||
* lcx_exception=>raise( 'Error from POPUP_GET_VALUES' ).
|
||||
* ENDIF.
|
||||
* IF lv_returncode = 'A'.
|
||||
* lcx_exception=>raise( 'cancelled' ).
|
||||
* ENDIF.
|
||||
*
|
||||
* READ TABLE lt_fields INDEX 1 ASSIGNING <ls_field>.
|
||||
* ASSERT sy-subrc = 0.
|
||||
* rv_message = <ls_field>-value.
|
||||
|
||||
ENDMETHOD. "get_message
|
||||
|
||||
|
@ -396,7 +398,6 @@ CLASS lcl_zip IMPLEMENTATION.
|
|||
METHOD export.
|
||||
|
||||
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.
|
||||
|
|
Loading…
Reference in New Issue
Block a user