Detect JSON files during pull (#5313)

This commit is contained in:
Marc Bernard 2022-02-02 14:24:38 -05:00 committed by GitHub
parent a18d7542e7
commit b5b252744d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 46 additions and 6 deletions

View File

@ -546,6 +546,7 @@ CLASS zcl_abapgit_file_status IMPLEMENTATION.
DATA: DATA:
ls_item LIKE LINE OF ct_items, ls_item LIKE LINE OF ct_items,
lv_is_xml TYPE abap_bool, lv_is_xml TYPE abap_bool,
lv_is_json TYPE abap_bool,
lv_sub_fetched TYPE abap_bool, lv_sub_fetched TYPE abap_bool,
lt_sub_packages TYPE zif_abapgit_sap_package=>ty_devclass_tt, lt_sub_packages TYPE zif_abapgit_sap_package=>ty_devclass_tt,
lv_msg TYPE string. lv_msg TYPE string.
@ -562,9 +563,10 @@ CLASS zcl_abapgit_file_status IMPLEMENTATION.
iv_devclass = iv_devclass iv_devclass = iv_devclass
IMPORTING IMPORTING
es_item = ls_item es_item = ls_item
ev_is_xml = lv_is_xml ). ev_is_xml = lv_is_xml
ev_is_json = lv_is_json ).
CHECK lv_is_xml = abap_true. " only object definitions CHECK lv_is_xml = abap_true OR lv_is_json = abap_true. " only object definitions
ls_item-devclass = get_object_package( ls_item-devclass = get_object_package(
iv_object = ls_item-obj_type iv_object = ls_item-obj_type

View File

@ -14,6 +14,11 @@ CLASS zcl_abapgit_filename_logic DEFINITION
extension TYPE c LENGTH 3 VALUE 'xml', extension TYPE c LENGTH 3 VALUE 'xml',
END OF c_package_file. END OF c_package_file.
CONSTANTS:
BEGIN OF c_json_file,
extension TYPE c LENGTH 4 VALUE 'json',
END OF c_json_file.
CLASS-METHODS file_to_object CLASS-METHODS file_to_object
IMPORTING IMPORTING
!iv_filename TYPE string !iv_filename TYPE string
@ -23,6 +28,7 @@ CLASS zcl_abapgit_filename_logic DEFINITION
EXPORTING EXPORTING
!es_item TYPE zif_abapgit_definitions=>ty_item !es_item TYPE zif_abapgit_definitions=>ty_item
!ev_is_xml TYPE abap_bool !ev_is_xml TYPE abap_bool
!ev_is_json TYPE abap_bool
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception .
CLASS-METHODS object_to_file CLASS-METHODS object_to_file
@ -74,6 +80,7 @@ CLASS zcl_abapgit_filename_logic IMPLEMENTATION.
es_item-obj_type = lv_type. es_item-obj_type = lv_type.
es_item-obj_name = lv_name. es_item-obj_name = lv_name.
ev_is_xml = boolc( lv_ext = to_upper( c_package_file-extension ) AND strlen( lv_type ) = 4 ). ev_is_xml = boolc( lv_ext = to_upper( c_package_file-extension ) AND strlen( lv_type ) = 4 ).
ev_is_json = boolc( lv_ext = to_upper( c_json_file-extension ) AND strlen( lv_type ) = 4 ).
ENDMETHOD. ENDMETHOD.

View File

@ -29,6 +29,7 @@ CLASS ltcl_run_checks IMPLEMENTATION.
DATA ls_item TYPE zif_abapgit_definitions=>ty_item. DATA ls_item TYPE zif_abapgit_definitions=>ty_item.
DATA lv_is_xml TYPE abap_bool. DATA lv_is_xml TYPE abap_bool.
DATA lv_is_json TYPE abap_bool.
zcl_abapgit_filename_logic=>file_to_object( zcl_abapgit_filename_logic=>file_to_object(
EXPORTING EXPORTING
@ -127,6 +128,27 @@ CLASS ltcl_run_checks IMPLEMENTATION.
exp = 'ZMIME_<>_?' exp = 'ZMIME_<>_?'
act = ls_item-obj_name ). act = ls_item-obj_name ).
" JSON
zcl_abapgit_filename_logic=>file_to_object(
EXPORTING
iv_filename = 'ztest.chko.json'
iv_path = '/src/'
iv_devclass = '$PACK'
io_dot = mo_dot
IMPORTING
es_item = ls_item
ev_is_json = lv_is_json ).
cl_abap_unit_assert=>assert_equals(
exp = 'CHKO'
act = ls_item-obj_type ).
cl_abap_unit_assert=>assert_equals(
exp = 'ZTEST'
act = ls_item-obj_name ).
cl_abap_unit_assert=>assert_equals(
exp = abap_true
act = lv_is_json ).
ENDMETHOD. ENDMETHOD.
METHOD object_to_file. METHOD object_to_file.

View File

@ -584,6 +584,7 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
lt_remote TYPE zif_abapgit_definitions=>ty_files_tt, lt_remote TYPE zif_abapgit_definitions=>ty_files_tt,
lv_package TYPE devclass, lv_package TYPE devclass,
lo_files TYPE REF TO zcl_abapgit_objects_files, lo_files TYPE REF TO zcl_abapgit_objects_files,
ls_metadata TYPE zif_abapgit_definitions=>ty_metadata,
lo_xml TYPE REF TO zif_abapgit_xml_input, lo_xml TYPE REF TO zif_abapgit_xml_input,
lt_results TYPE zif_abapgit_definitions=>ty_results_tt, lt_results TYPE zif_abapgit_definitions=>ty_results_tt,
li_progress TYPE REF TO zif_abapgit_progress, li_progress TYPE REF TO zif_abapgit_progress,
@ -656,9 +657,10 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
lv_path = <ls_result>-path. lv_path = <ls_result>-path.
ENDIF. ENDIF.
ls_item-devclass = lv_package.
IF <ls_result>-packmove = abap_true. IF <ls_result>-packmove = abap_true.
" Move object to new package " Move object to new package
ls_item-devclass = lv_package.
change_package_assignments( is_item = ls_item change_package_assignments( is_item = ls_item
ii_log = ii_log ). ii_log = ii_log ).
" No other changes required " No other changes required
@ -670,14 +672,21 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
EXPORTING EXPORTING
is_item = ls_item is_item = ls_item
iv_path = lv_path. iv_path = lv_path.
lo_files->set_files( lt_remote ). lo_files->set_files( lt_remote ).
"analyze XML in order to instantiate the proper serializer IF lo_files->is_json_metadata( ) = abap_false.
lo_xml = lo_files->read_xml( ). "analyze XML in order to instantiate the proper serializer
lo_xml = lo_files->read_xml( ).
ls_metadata = lo_xml->get_metadata( ).
ELSE.
" there's no XML and metadata for JSON format
CLEAR: lo_xml, ls_metadata.
ENDIF.
li_obj = create_object( is_item = ls_item li_obj = create_object( is_item = ls_item
iv_language = io_repo->get_dot_abapgit( )->get_main_language( ) iv_language = io_repo->get_dot_abapgit( )->get_main_language( )
is_metadata = lo_xml->get_metadata( ) ). is_metadata = ls_metadata ).
compare_remote_to_local( compare_remote_to_local(
ii_object = li_obj ii_object = li_obj