From b5b252744d70d99b92be3f85d5f7d0a055264b7a Mon Sep 17 00:00:00 2001 From: Marc Bernard <59966492+mbtools@users.noreply.github.com> Date: Wed, 2 Feb 2022 14:24:38 -0500 Subject: [PATCH] Detect JSON files during pull (#5313) --- .../core/zcl_abapgit_file_status.clas.abap | 6 +++-- .../core/zcl_abapgit_filename_logic.clas.abap | 7 ++++++ ...apgit_filename_logic.clas.testclasses.abap | 22 +++++++++++++++++++ src/objects/zcl_abapgit_objects.clas.abap | 17 ++++++++++---- 4 files changed, 46 insertions(+), 6 deletions(-) diff --git a/src/objects/core/zcl_abapgit_file_status.clas.abap b/src/objects/core/zcl_abapgit_file_status.clas.abap index e83d268bc..0af5c51ff 100644 --- a/src/objects/core/zcl_abapgit_file_status.clas.abap +++ b/src/objects/core/zcl_abapgit_file_status.clas.abap @@ -546,6 +546,7 @@ CLASS zcl_abapgit_file_status IMPLEMENTATION. DATA: ls_item LIKE LINE OF ct_items, lv_is_xml TYPE abap_bool, + lv_is_json TYPE abap_bool, lv_sub_fetched TYPE abap_bool, lt_sub_packages TYPE zif_abapgit_sap_package=>ty_devclass_tt, lv_msg TYPE string. @@ -562,9 +563,10 @@ CLASS zcl_abapgit_file_status IMPLEMENTATION. iv_devclass = iv_devclass IMPORTING 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( iv_object = ls_item-obj_type diff --git a/src/objects/core/zcl_abapgit_filename_logic.clas.abap b/src/objects/core/zcl_abapgit_filename_logic.clas.abap index 15b9ae2d1..8d90da0fd 100644 --- a/src/objects/core/zcl_abapgit_filename_logic.clas.abap +++ b/src/objects/core/zcl_abapgit_filename_logic.clas.abap @@ -14,6 +14,11 @@ CLASS zcl_abapgit_filename_logic DEFINITION extension TYPE c LENGTH 3 VALUE 'xml', 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 IMPORTING !iv_filename TYPE string @@ -23,6 +28,7 @@ CLASS zcl_abapgit_filename_logic DEFINITION EXPORTING !es_item TYPE zif_abapgit_definitions=>ty_item !ev_is_xml TYPE abap_bool + !ev_is_json TYPE abap_bool RAISING zcx_abapgit_exception . CLASS-METHODS object_to_file @@ -74,6 +80,7 @@ CLASS zcl_abapgit_filename_logic IMPLEMENTATION. es_item-obj_type = lv_type. 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_json = boolc( lv_ext = to_upper( c_json_file-extension ) AND strlen( lv_type ) = 4 ). ENDMETHOD. diff --git a/src/objects/core/zcl_abapgit_filename_logic.clas.testclasses.abap b/src/objects/core/zcl_abapgit_filename_logic.clas.testclasses.abap index f0cfe264a..35ea5633f 100644 --- a/src/objects/core/zcl_abapgit_filename_logic.clas.testclasses.abap +++ b/src/objects/core/zcl_abapgit_filename_logic.clas.testclasses.abap @@ -29,6 +29,7 @@ CLASS ltcl_run_checks IMPLEMENTATION. DATA ls_item TYPE zif_abapgit_definitions=>ty_item. DATA lv_is_xml TYPE abap_bool. + DATA lv_is_json TYPE abap_bool. zcl_abapgit_filename_logic=>file_to_object( EXPORTING @@ -127,6 +128,27 @@ CLASS ltcl_run_checks IMPLEMENTATION. exp = 'ZMIME_<>_?' 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. METHOD object_to_file. diff --git a/src/objects/zcl_abapgit_objects.clas.abap b/src/objects/zcl_abapgit_objects.clas.abap index fa3e7679d..d314f623d 100644 --- a/src/objects/zcl_abapgit_objects.clas.abap +++ b/src/objects/zcl_abapgit_objects.clas.abap @@ -584,6 +584,7 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. lt_remote TYPE zif_abapgit_definitions=>ty_files_tt, lv_package TYPE devclass, 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, lt_results TYPE zif_abapgit_definitions=>ty_results_tt, li_progress TYPE REF TO zif_abapgit_progress, @@ -656,9 +657,10 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. lv_path = -path. ENDIF. + ls_item-devclass = lv_package. + IF -packmove = abap_true. " Move object to new package - ls_item-devclass = lv_package. change_package_assignments( is_item = ls_item ii_log = ii_log ). " No other changes required @@ -670,14 +672,21 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. EXPORTING is_item = ls_item iv_path = lv_path. + lo_files->set_files( lt_remote ). - "analyze XML in order to instantiate the proper serializer - lo_xml = lo_files->read_xml( ). + IF lo_files->is_json_metadata( ) = abap_false. + "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 iv_language = io_repo->get_dot_abapgit( )->get_main_language( ) - is_metadata = lo_xml->get_metadata( ) ). + is_metadata = ls_metadata ). compare_remote_to_local( ii_object = li_obj