diff --git a/changelog.txt b/changelog.txt index 729224b7d..3f06ef2c9 100644 --- a/changelog.txt +++ b/changelog.txt @@ -8,6 +8,27 @@ Legend + : added - : removed +2025-01-01 v1.131.0 +------------------- + +! Remove need to `parallel_generators` server group (#7119) ++ VIEW: save `tddat` entries to transport (#7042) ++ Support for HTTP Destination (#7100) ++ Enhance logging with message id and number (#7111) +* Fix language conversion for language A (#7076) +* longtexts: workaround strange object names dump (#7077) +* SRVB: Clear fields and fix deserialize order (#7085) +* MSAG: Fix error handling during deletion (#7093) +* Fix error handling in exception viewer (#7095) +* Fix dark theme CSS whitespace (#7104) +* MSAG: Fix deletion of message longtexts (#7109) +* Fix RFC error handling (#7102) +* IDOC/IEXT: Fix deserialize in background (#7113) +* USCA: Fix missing transport entry (#7110) +* FUGS: Fix activation error (#7115) +* Limit number of GUI sessions (#7080) +* Fix dump when converting `xstring` to `bintab` (#7120) + 2024-11-04 v1.130.0 ------------------- diff --git a/deps/tcdrs.tabl.xml b/deps/tcdrs.tabl.xml index 016dd523e..493ca39a4 100644 --- a/deps/tcdrs.tabl.xml +++ b/deps/tcdrs.tabl.xml @@ -14,9 +14,9 @@ TABNAME 0 C - 000002 + 000060 CHAR - 000001 + 000030 CHAR diff --git a/package.json b/package.json index 8811523c1..2296909d3 100644 --- a/package.json +++ b/package.json @@ -23,14 +23,14 @@ ] }, "devDependencies": { - "@abaplint/cli": "^2.113.31", + "@abaplint/cli": "^2.113.82", "@abaplint/database-sqlite": "^2.10.20", - "@abaplint/runtime": "^2.10.20", - "express": "^4.21.1", - "@abaplint/transpiler-cli": "^2.10.20", - "globals": "^15.11.0", + "@abaplint/runtime": "^2.10.23", + "express": "^4.21.2", + "@abaplint/transpiler-cli": "^2.10.23", + "globals": "^15.13.0", "abapmerge": "^0.16.6", - "c8": "^10.1.2", - "eslint": "^9.13.0" + "c8": "^10.1.3", + "eslint": "^9.17.0" } } diff --git a/src/apack/zcl_abapgit_apack_migration.clas.abap b/src/apack/zcl_abapgit_apack_migration.clas.abap index 885b479af..e3ac8239e 100644 --- a/src/apack/zcl_abapgit_apack_migration.clas.abap +++ b/src/apack/zcl_abapgit_apack_migration.clas.abap @@ -178,7 +178,7 @@ CLASS zcl_abapgit_apack_migration IMPLEMENTATION. component_error = 4 no_access = 5 other = 6 - OTHERS = 7. + OTHERS = 7 ##FM_SUBRC_OK. CATCH cx_sy_dyn_call_param_not_found. CALL FUNCTION 'SEO_INTERFACE_CREATE_COMPLETE' EXPORTING diff --git a/src/cts/zcl_abapgit_cts_api.clas.abap b/src/cts/zcl_abapgit_cts_api.clas.abap index 0892d56f5..0ef490902 100644 --- a/src/cts/zcl_abapgit_cts_api.clas.abap +++ b/src/cts/zcl_abapgit_cts_api.clas.abap @@ -623,7 +623,7 @@ CLASS zcl_abapgit_cts_api IMPLEMENTATION. ev_object = ls_list-object ev_obj_name = ls_list-obj_name ). INSERT ls_list INTO TABLE rt_list. - CATCH zcx_abapgit_exception. + CATCH zcx_abapgit_exception ##NO_HANDLER. ENDTRY. ENDCASE. ENDLOOP. diff --git a/src/cts/zif_abapgit_default_transport.intf.xml b/src/cts/zif_abapgit_default_transport.intf.xml index 1d7795e67..e7ad06161 100644 --- a/src/cts/zif_abapgit_default_transport.intf.xml +++ b/src/cts/zif_abapgit_default_transport.intf.xml @@ -5,7 +5,7 @@ ZIF_ABAPGIT_DEFAULT_TRANSPORT E - ZIF_ABAPGIT_DEFAULT_TRANSPORT + abapGit - Default Transport 2 1 X diff --git a/src/data/zcl_abapgit_data_utils.clas.abap b/src/data/zcl_abapgit_data_utils.clas.abap index 91da50dd8..b205f93d4 100644 --- a/src/data/zcl_abapgit_data_utils.clas.abap +++ b/src/data/zcl_abapgit_data_utils.clas.abap @@ -49,7 +49,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_DATA_UTILS IMPLEMENTATION. +CLASS zcl_abapgit_data_utils IMPLEMENTATION. METHOD build_config_filename. @@ -196,7 +196,7 @@ CLASS ZCL_ABAPGIT_DATA_UTILS IMPLEMENTATION. db_not_exists = 3 no_permission = 4 no_change_allowed = 5 - table_is_gtt = 6 +* table_is_gtt = 6 " not in lower releases OTHERS = 7. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( |Table { is_item-obj_name } cannot be displayed| ). diff --git a/src/env/zcl_abapgit_abap_language_vers.clas.testclasses.abap b/src/env/zcl_abapgit_abap_language_vers.clas.testclasses.abap index ef1eb9011..51fafede6 100644 --- a/src/env/zcl_abapgit_abap_language_vers.clas.testclasses.abap +++ b/src/env/zcl_abapgit_abap_language_vers.clas.testclasses.abap @@ -26,6 +26,8 @@ CLASS lcl_environment IMPLEMENTATION. ENDMETHOD. METHOD zif_abapgit_environment~get_basis_release. ENDMETHOD. + METHOD zif_abapgit_environment~get_available_user_sessions. + ENDMETHOD. METHOD zif_abapgit_environment~get_system_language_filter. ENDMETHOD. METHOD zif_abapgit_environment~is_merged. @@ -40,6 +42,8 @@ CLASS lcl_environment IMPLEMENTATION. ENDMETHOD. METHOD zif_abapgit_environment~init_parallel_processing. ENDMETHOD. + METHOD zif_abapgit_environment~check_parallel_processing. + ENDMETHOD. ENDCLASS. @@ -77,10 +81,12 @@ CLASS ltcl_abap_language_version DEFINITION FOR TESTING RISK LEVEL HARMLESS PRIVATE SECTION. " Cloud package hardcoded in cl_abap_language_version CONSTANTS c_cloud_package TYPE devclass VALUE 'TEST_LANGUAGE_VERSION_SCP'. + CONSTANTS c_language_cfg TYPE seoclsname VALUE 'CL_ABAP_LANGUAGE_VERSION_CFG'. DATA: mt_versions TYPE string_table, mv_has_cloud_package TYPE abap_bool, + mv_has_language_cfg TYPE abap_bool, mo_environment TYPE REF TO lcl_environment, mi_persistency TYPE REF TO zif_abapgit_persist_settings, mo_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit, @@ -364,9 +370,11 @@ CLASS ltcl_abap_language_version IMPLEMENTATION. " Assume on-prem (no cloud) set_environment( abap_false ). - cl_abap_unit_assert=>assert_equals( - act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package - exp = iv_standard ). + IF mv_has_language_cfg = abap_true. + cl_abap_unit_assert=>assert_equals( + act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package + exp = iv_standard ). + ENDIF. IF mv_has_cloud_package = abap_true. cl_abap_unit_assert=>assert_equals( @@ -381,9 +389,11 @@ CLASS ltcl_abap_language_version IMPLEMENTATION. " Assume cloud platform set_environment( abap_true ). - cl_abap_unit_assert=>assert_equals( - act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package - exp = iv_standard ). + IF mv_has_language_cfg = abap_true. + cl_abap_unit_assert=>assert_equals( + act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package + exp = iv_standard ). + ENDIF. IF mv_has_cloud_package = abap_true. cl_abap_unit_assert=>assert_equals( @@ -401,6 +411,19 @@ CLASS ltcl_abap_language_version IMPLEMENTATION. METHOD is_import_allowed. DATA lv_version TYPE string. + DATA ls_clskey TYPE seoclskey. + + ls_clskey-clsname = c_language_cfg. + + " Tests using ABAP language version "standard" only work if the required + " SAP class is available. In older releases, all packages will have + " ABAP language version "undefined" and are handled like a new package + CALL FUNCTION 'SEO_CLASS_EXISTENCE_CHECK' + EXPORTING + clskey = ls_clskey + EXCEPTIONS + OTHERS = 1. + mv_has_language_cfg = boolc( sy-subrc = 0 ). LOOP AT mt_versions INTO lv_version. diff --git a/src/env/zcl_abapgit_environment.clas.abap b/src/env/zcl_abapgit_environment.clas.abap index e9277f22f..6c2f3ce45 100644 --- a/src/env/zcl_abapgit_environment.clas.abap +++ b/src/env/zcl_abapgit_environment.clas.abap @@ -2,11 +2,11 @@ CLASS zcl_abapgit_environment DEFINITION PUBLIC FINAL CREATE PRIVATE - GLOBAL FRIENDS zcl_abapgit_factory . + GLOBAL FRIENDS zcl_abapgit_factory. PUBLIC SECTION. - INTERFACES zif_abapgit_environment . + INTERFACES zif_abapgit_environment. PROTECTED SECTION. PRIVATE SECTION. @@ -16,7 +16,7 @@ CLASS zcl_abapgit_environment DEFINITION METHODS is_system_changes_allowed RETURNING - VALUE(rv_result) TYPE abap_bool . + VALUE(rv_result) TYPE abap_bool. ENDCLASS. @@ -76,11 +76,74 @@ CLASS zcl_abapgit_environment IMPLEMENTATION. ENDMETHOD. + METHOD zif_abapgit_environment~check_parallel_processing. + + " If check fails, see transactions RZ12 + DATA: + lt_setup TYPE STANDARD TABLE OF rzllitab, + ls_setup LIKE LINE OF lt_setup, + lt_erfc_setup TYPE STANDARD TABLE OF rzlliclass, + lt_instances TYPE STANDARD TABLE OF msxxlist WITH DEFAULT KEY. + + " Check if server group for parallel processing exists + CALL FUNCTION 'SMLG_GET_SETUP' + EXPORTING + grouptype = 'S' + TABLES + setup = lt_setup + erfc_setup = lt_erfc_setup + EXCEPTIONS + foreign_lock = 1 + system_failure = 2 + invalid_group_type = 3 + OTHERS = 4. + IF sy-subrc <> 0. + RETURN. + ENDIF. + + READ TABLE lt_setup INTO ls_setup WITH KEY classname = iv_group. + IF sy-subrc = 0 AND ls_setup-applserver IS NOT INITIAL. + + " Check if assigned server instance exists + CALL FUNCTION 'TH_SERVER_LIST' + TABLES + list = lt_instances. + + READ TABLE lt_instances TRANSPORTING NO FIELDS WITH KEY name = ls_setup-applserver. + IF sy-subrc = 0. + rv_checked = abap_true. + ENDIF. + + ENDIF. + + ENDMETHOD. + + METHOD zif_abapgit_environment~compare_with_inactive. rv_result = zif_abapgit_environment~is_sap_cloud_platform( ). ENDMETHOD. + METHOD zif_abapgit_environment~get_available_user_sessions. + + DATA: + lv_act_sessions TYPE i, + lv_max_sessions TYPE i, + lv_subrc TYPE sy-subrc. + + CALL FUNCTION 'TH_USER_INFO' + IMPORTING + act_sessions = lv_act_sessions + max_sessions = lv_max_sessions + rc = lv_subrc. + + IF lv_subrc = 0. + rv_sessions = lv_max_sessions - lv_act_sessions. + ENDIF. + + ENDMETHOD. + + METHOD zif_abapgit_environment~get_basis_release. SELECT SINGLE release extrelease FROM cvers INTO (rs_result-release, rs_result-sp) @@ -89,6 +152,78 @@ CLASS zcl_abapgit_environment IMPLEMENTATION. ENDMETHOD. + METHOD zif_abapgit_environment~get_system_language_filter. + DATA lv_translation_detective_lang TYPE spras. + DATA lv_pseudo_translation_language TYPE spras. + FIELD-SYMBOLS LIKE LINE OF rt_system_language_filter. + + " Translation Object Detective + " https://help.sap.com/docs/ABAP_PLATFORM_NEW/ceb25152cb0d4adba664cebea2bf4670/88a3d3cbccf64601975acabaccdfde45.html + CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT' + EXPORTING + input = '1Q' + IMPORTING + output = lv_translation_detective_lang + EXCEPTIONS + unknown_language = 1 + OTHERS = 2. + IF sy-subrc = 1. + " The language for Translation Object Detective was not setup + ENDIF. + IF NOT lv_translation_detective_lang IS INITIAL. + APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING . + -sign = 'E'. + -option = 'EQ'. + -low = lv_translation_detective_lang. + ENDIF. + " 1943470 - Using technical language key 2Q to create pseudo-translations of ABAP developments + " https://launchpad.support.sap.com/#/notes/1943470 + CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT' + EXPORTING + input = '2Q' + IMPORTING + output = lv_pseudo_translation_language + EXCEPTIONS + unknown_language = 1 + OTHERS = 2. + IF sy-subrc = 1. + " The language for Pseudo Translation was not setup + ENDIF. + IF NOT lv_pseudo_translation_language IS INITIAL. + APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING . + -sign = 'E'. + -option = 'EQ'. + -low = lv_pseudo_translation_language. + ENDIF. + ENDMETHOD. + + + METHOD zif_abapgit_environment~init_parallel_processing. + + DATA: lv_group TYPE rzlli_apcl. + + lv_group = iv_group. + + " SPBT_INITIALIZE gives error PBT_ENV_ALREADY_INITIALIZED if called + " multiple times in same session + CALL FUNCTION 'SPBT_INITIALIZE' + EXPORTING + group_name = lv_group + IMPORTING + free_pbt_wps = rv_free_work_processes + EXCEPTIONS + invalid_group_name = 1 + internal_error = 2 + pbt_env_already_initialized = 3 + currently_no_resources_avail = 4 + no_pbt_resources_found = 5 + cant_init_different_pbt_groups = 6 + OTHERS = 7 ##FM_SUBRC_OK. + " If SPBT_INITIALIZE fails, check transactions RZ12, SM50, SM21, SARFC + + ENDMETHOD. + + METHOD zif_abapgit_environment~is_merged. DATA lr_marker TYPE REF TO data ##NEEDED. @@ -155,50 +290,6 @@ CLASS zcl_abapgit_environment IMPLEMENTATION. ENDMETHOD. - METHOD zif_abapgit_environment~get_system_language_filter. - DATA lv_translation_detective_lang TYPE spras. - DATA lv_pseudo_translation_language TYPE spras. - FIELD-SYMBOLS LIKE LINE OF rt_system_language_filter. - - " Translation Object Detective - " https://help.sap.com/docs/ABAP_PLATFORM_NEW/ceb25152cb0d4adba664cebea2bf4670/88a3d3cbccf64601975acabaccdfde45.html - CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT' - EXPORTING - input = '1Q' - IMPORTING - output = lv_translation_detective_lang - EXCEPTIONS - unknown_language = 1 - OTHERS = 2. - IF sy-subrc = 1. - " The language for Translation Object Detective was not setup - ENDIF. - IF NOT lv_translation_detective_lang IS INITIAL. - APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING . - -sign = 'E'. - -option = 'EQ'. - -low = lv_translation_detective_lang. - ENDIF. - " 1943470 - Using technical language key 2Q to create pseudo-translations of ABAP developments - " https://launchpad.support.sap.com/#/notes/1943470 - CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT' - EXPORTING - input = '2Q' - IMPORTING - output = lv_pseudo_translation_language - EXCEPTIONS - unknown_language = 1 - OTHERS = 2. - IF sy-subrc = 1. - " The language for Pseudo Translation was not setup - ENDIF. - IF NOT lv_pseudo_translation_language IS INITIAL. - APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING . - -sign = 'E'. - -option = 'EQ'. - -low = lv_pseudo_translation_language. - ENDIF. - ENDMETHOD. METHOD zif_abapgit_environment~is_variant_maintenance. @@ -212,30 +303,4 @@ CLASS zcl_abapgit_environment IMPLEMENTATION. rv_is_variant_maintenance = boolc( lines( lt_variscreens ) > 0 ). ENDMETHOD. - - METHOD zif_abapgit_environment~init_parallel_processing. - - DATA: lv_group TYPE rzlli_apcl. - - lv_group = iv_group. - - " SPBT_INITIALIZE gives error PBT_ENV_ALREADY_INITIALIZED if called - " multiple times in same session - CALL FUNCTION 'SPBT_INITIALIZE' - EXPORTING - group_name = lv_group - IMPORTING - free_pbt_wps = rv_free_work_processes - EXCEPTIONS - invalid_group_name = 1 - internal_error = 2 - pbt_env_already_initialized = 3 - currently_no_resources_avail = 4 - no_pbt_resources_found = 5 - cant_init_different_pbt_groups = 6 - OTHERS = 7. - " If SPBT_INITIALIZE fails, check transactions RZ12, SM50, SM21, SARFC - - ENDMETHOD. - ENDCLASS. diff --git a/src/env/zif_abapgit_environment.intf.abap b/src/env/zif_abapgit_environment.intf.abap index 6fcaa06fb..a5c908763 100644 --- a/src/env/zif_abapgit_environment.intf.abap +++ b/src/env/zif_abapgit_environment.intf.abap @@ -39,5 +39,13 @@ INTERFACE zif_abapgit_environment iv_group TYPE clike RETURNING VALUE(rv_free_work_processes) TYPE i. + METHODS check_parallel_processing + IMPORTING + iv_group TYPE clike + RETURNING + VALUE(rv_checked) TYPE abap_bool. + METHODS get_available_user_sessions + RETURNING + VALUE(rv_sessions) TYPE i. ENDINTERFACE. diff --git a/src/exits/zif_abapgit_exit.intf.abap b/src/exits/zif_abapgit_exit.intf.abap index 5a95ec67b..e07b0b21f 100644 --- a/src/exits/zif_abapgit_exit.intf.abap +++ b/src/exits/zif_abapgit_exit.intf.abap @@ -7,7 +7,7 @@ INTERFACE zif_abapgit_exit PUBLIC. clone_url TYPE string, END OF ty_ci_repo. TYPES: - ty_ci_repos TYPE TABLE OF ty_ci_repo. + ty_ci_repos TYPE STANDARD TABLE OF ty_ci_repo WITH DEFAULT KEY. TYPES: ty_object_types TYPE STANDARD TABLE OF tadir-object WITH DEFAULT KEY. TYPES: diff --git a/src/git_platform/zcl_abapgit_pr_enumerator.clas.abap b/src/git_platform/zcl_abapgit_pr_enumerator.clas.abap index 6d731a02f..dadea98c5 100644 --- a/src/git_platform/zcl_abapgit_pr_enumerator.clas.abap +++ b/src/git_platform/zcl_abapgit_pr_enumerator.clas.abap @@ -50,7 +50,7 @@ CLASS zcl_abapgit_pr_enumerator IMPLEMENTATION. mv_repo_url = to_lower( iv_url ). TRY. mi_enum_provider = create_provider( mv_repo_url ). - CATCH zcx_abapgit_exception. + CATCH zcx_abapgit_exception ##NO_HANDLER. ENDTRY. ENDMETHOD. diff --git a/src/inspect/zcl_abapgit_where_used_tools.clas.abap b/src/inspect/zcl_abapgit_where_used_tools.clas.abap index d99572336..14d13ef11 100644 --- a/src/inspect/zcl_abapgit_where_used_tools.clas.abap +++ b/src/inspect/zcl_abapgit_where_used_tools.clas.abap @@ -124,7 +124,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_WHERE_USED_TOOLS IMPLEMENTATION. +CLASS zcl_abapgit_where_used_tools IMPLEMENTATION. METHOD build_package_scope. @@ -311,7 +311,7 @@ CLASS ZCL_ABAPGIT_WHERE_USED_TOOLS IMPLEMENTATION. not_enough_input = 1 no_function_pool = 2 delimiter_wrong_position = 3 - OTHERS = 4. + OTHERS = 4 ##FM_SUBRC_OK. IF lv_area IS INITIAL. SELECT SINGLE master FROM d010inc INTO lv_program @@ -325,7 +325,7 @@ CLASS ZCL_ABAPGIT_WHERE_USED_TOOLS IMPLEMENTATION. not_enough_input = 1 no_function_pool = 2 delimiter_wrong_position = 3 - OTHERS = 4. + OTHERS = 4 ##FM_SUBRC_OK. ENDIF. IF lv_area IS NOT INITIAL. diff --git a/src/inspect/zcl_abapgit_where_used_tools.clas.xml b/src/inspect/zcl_abapgit_where_used_tools.clas.xml index bcbde1723..2a5281546 100644 --- a/src/inspect/zcl_abapgit_where_used_tools.clas.xml +++ b/src/inspect/zcl_abapgit_where_used_tools.clas.xml @@ -5,7 +5,7 @@ ZCL_ABAPGIT_WHERE_USED_TOOLS E - abapGit where used utilities + abapGit - Where-used Utilities 1 X X diff --git a/src/objects/aff/zcl_abapgit_json_handler.clas.abap b/src/objects/aff/zcl_abapgit_json_handler.clas.abap index 738d017f9..877dde787 100644 --- a/src/objects/aff/zcl_abapgit_json_handler.clas.abap +++ b/src/objects/aff/zcl_abapgit_json_handler.clas.abap @@ -18,7 +18,7 @@ CLASS zcl_abapgit_json_handler DEFINITION mappings TYPE ty_json_abap_mappings, END OF ty_enum_mapping . TYPES: - ty_enum_mappings TYPE TABLE OF ty_enum_mapping WITH DEFAULT KEY . + ty_enum_mappings TYPE STANDARD TABLE OF ty_enum_mapping WITH DEFAULT KEY . TYPES: BEGIN OF ty_path_value_pair, path TYPE string, diff --git a/src/objects/core/zcl_abapgit_dependencies.clas.abap b/src/objects/core/zcl_abapgit_dependencies.clas.abap index eccdd37d1..3c6c3523a 100644 --- a/src/objects/core/zcl_abapgit_dependencies.clas.abap +++ b/src/objects/core/zcl_abapgit_dependencies.clas.abap @@ -61,7 +61,7 @@ CLASS zcl_abapgit_dependencies IMPLEMENTATION. INSERT ls_ddls_name INTO TABLE lt_ddls_name. PERFORM ('DDLS_GET_DEP') IN PROGRAM ('RADMASDL') - TABLES lt_ddls_name rt_dependency. + TABLES lt_ddls_name rt_dependency ##PERF_NO_FORM. ENDMETHOD. @@ -119,7 +119,7 @@ CLASS zcl_abapgit_dependencies IMPLEMENTATION. " AUTH after DCLS -korrnum = '715000'. WHEN 'SUSH'. - " SUSH after SUSC + " SUSH after SUSC and SRVB -korrnum = '712000'. WHEN 'SUSC'. " SUSC after SUSO @@ -130,6 +130,14 @@ CLASS zcl_abapgit_dependencies IMPLEMENTATION. WHEN 'DCLS'. " AUTH and SUSO after DCLS -korrnum = '705000'. + WHEN 'G4BA' OR 'G4BS' OR 'IWMO' OR 'IWSV' OR 'IWVB'. + " after SRVB + -korrnum = '610000'. + WHEN 'SRVB'. + " after SRVD + -korrnum = '600500'. + WHEN 'SRVD'. + -korrnum = '600000'. WHEN 'IASP'. -korrnum = '552000'. WHEN 'IARP'. diff --git a/src/objects/core/zcl_abapgit_file_deserialize.clas.abap b/src/objects/core/zcl_abapgit_file_deserialize.clas.abap index 52dc4b90e..f98af1a20 100644 --- a/src/objects/core/zcl_abapgit_file_deserialize.clas.abap +++ b/src/objects/core/zcl_abapgit_file_deserialize.clas.abap @@ -214,6 +214,9 @@ CLASS zcl_abapgit_file_deserialize IMPLEMENTATION. DELETE lt_requires WHERE obj_type <> 'IASP' AND obj_type <> 'PROG' AND obj_type <> 'IARP'. + WHEN 'IDOC' OR 'IEXT'. + lt_requires = lt_items. + DELETE lt_requires WHERE obj_type <> 'TABL'. WHEN 'DCLS'. lt_requires = lt_items. DELETE lt_requires WHERE obj_type <> 'DDLS'. @@ -245,6 +248,15 @@ CLASS zcl_abapgit_file_deserialize IMPLEMENTATION. WHEN 'ENSC'. lt_requires = lt_items. DELETE lt_requires WHERE obj_type <> 'ENHS'. + WHEN 'IWMO' OR 'IWSV' OR 'IWVB'. + lt_requires = lt_items. + DELETE lt_requires WHERE obj_type <> 'SRVB'. + WHEN 'SUSH'. + lt_requires = lt_items. + DELETE lt_requires WHERE obj_type <> 'SRVB' AND obj_type <> 'HTTP'. + WHEN 'SRVB'. + lt_requires = lt_items. + DELETE lt_requires WHERE obj_type <> 'SRVD'. ENDCASE. * TODO: END extract to object handler method diff --git a/src/objects/core/zcl_abapgit_objects_activation.clas.abap b/src/objects/core/zcl_abapgit_objects_activation.clas.abap index 833f456b7..2aa608696 100644 --- a/src/objects/core/zcl_abapgit_objects_activation.clas.abap +++ b/src/objects/core/zcl_abapgit_objects_activation.clas.abap @@ -310,7 +310,7 @@ CLASS zcl_abapgit_objects_activation IMPLEMENTATION. excecution_error = 1 cancelled = 2 insert_into_corr_error = 3 - OTHERS = 4 ##SUBRC_OK. + OTHERS = 4 ##FM_SUBRC_OK. CATCH cx_sy_dyn_call_param_not_found. CALL FUNCTION 'RS_WORKING_OBJECTS_ACTIVATE' EXPORTING @@ -324,7 +324,7 @@ CLASS zcl_abapgit_objects_activation IMPLEMENTATION. excecution_error = 1 cancelled = 2 insert_into_corr_error = 3 - OTHERS = 4 ##SUBRC_OK. + OTHERS = 4 ##FM_SUBRC_OK. ENDTRY. CASE sy-subrc. WHEN 1 OR 3 OR 4. @@ -398,9 +398,18 @@ CLASS zcl_abapgit_objects_activation IMPLEMENTATION. WHERE type = -show_req->object_type. ENDIF. LOOP AT -mtext ASSIGNING . - ii_log->add_error( - iv_msg = - is_item = ls_item ). + IF sy-tabix = 1. + ii_log->add( + iv_type = 'E' + iv_msg = + iv_class = -message-msgid + iv_number = -message-msgno + is_item = ls_item ). + ELSE. + ii_log->add_error( + iv_msg = + is_item = ls_item ). + ENDIF. ENDLOOP. ENDLOOP. @@ -439,8 +448,10 @@ CLASS zcl_abapgit_objects_activation IMPLEMENTATION. DELETE lt_lines WHERE class = 'D0' AND number = '319'. LOOP AT lt_lines ASSIGNING . - ii_log->add( iv_msg = -line - iv_type = -severity ). + ii_log->add( iv_msg = -line + iv_type = -severity + iv_class = -class + iv_number = |{ -number }| ). ENDLOOP. ii_log->add_info( |View complete activation log in program RSPUTPRT (type D, log name { iv_logname })| ). diff --git a/src/objects/core/zcl_abapgit_serialize.clas.abap b/src/objects/core/zcl_abapgit_serialize.clas.abap index 21dae0a50..d2b5ffeac 100644 --- a/src/objects/core/zcl_abapgit_serialize.clas.abap +++ b/src/objects/core/zcl_abapgit_serialize.clas.abap @@ -99,6 +99,11 @@ CLASS zcl_abapgit_serialize DEFINITION VALUE(ct_files) TYPE zif_abapgit_definitions=>ty_files_item_tt RAISING zcx_abapgit_exception . + METHODS determine_rfc_server_group + RETURNING + VALUE(rv_group) TYPE rzlli_apcl + RAISING + zcx_abapgit_exception. METHODS determine_max_processes IMPORTING !iv_force_sequential TYPE abap_bool DEFAULT abap_false @@ -255,11 +260,7 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION. METHOD constructor. - DATA li_exit TYPE REF TO zif_abapgit_exit. - - mv_group = 'parallel_generators'. - li_exit = zcl_abapgit_exit=>get_instance( ). - li_exit->change_rfc_server_group( CHANGING cv_group = mv_group ). + mv_group = determine_rfc_server_group( ). mo_dot_abapgit = io_dot_abapgit. ms_local_settings = is_local_settings. @@ -280,6 +281,7 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION. METHOD determine_max_processes. DATA: li_exit TYPE REF TO zif_abapgit_exit. + DATA lv_available_sessions TYPE i. IF iv_force_sequential = abap_true. rv_processes = 1. @@ -319,6 +321,40 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION. ASSERT rv_processes >= 1. " check exit above + " Avoid going over the maximum available user sessions + IF sy-batch IS INITIAL. + lv_available_sessions = zcl_abapgit_factory=>get_environment( )->get_available_user_sessions( ). + + IF rv_processes > lv_available_sessions AND lv_available_sessions <> 0. + rv_processes = lv_available_sessions. + ENDIF. + ENDIF. + + ASSERT rv_processes >= 1. + + ENDMETHOD. + + + METHOD determine_rfc_server_group. + + DATA: + li_exit TYPE REF TO zif_abapgit_exit, + lv_exists TYPE abap_bool. + + " According to SAP Note 3215918 it's recommended NOT to use this group anymore. + " However, we keep it for compatibility. If it does not exist, we switch to the + " recommended DEFAULT behaviour. + rv_group = 'parallel_generators'. + + li_exit = zcl_abapgit_exit=>get_instance( ). + li_exit->change_rfc_server_group( CHANGING cv_group = rv_group ). + + " Check if RFC server group exists and fallback to the default + lv_exists = zcl_abapgit_factory=>get_environment( )->check_parallel_processing( rv_group ). + IF lv_exists = abap_false. + rv_group = ''. + ENDIF. + ENDMETHOD. @@ -432,7 +468,7 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION. METHOD filter_unsupported_objects. DATA: ls_unsupported_count TYPE ty_unsupported_count, - lt_supported_types TYPE zcl_abapgit_objects=>ty_types_tt, + lt_supported_types TYPE zif_abapgit_objects=>ty_types_tt, lt_unsupported_count TYPE ty_unsupported_count_tt. FIELD-SYMBOLS: LIKE LINE OF ct_tadir, @@ -483,7 +519,6 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION. rv_result = boolc( zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_false AND zcl_abapgit_persist_factory=>get_settings( )->read( )->get_parallel_proc_disabled( ) = abap_false - AND mv_group IS NOT INITIAL " The function module below should always exist here as is_merged evaluated to false above. " It does however not exist in the transpiled version which then causes unit tests to fail. " Therefore the check needs to stay. @@ -545,6 +580,7 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION. DO. lv_task = |{ iv_task }-{ sy-index }|. + " An initial server group is handled like DEFAULT meaning all instances are used CALL FUNCTION 'Z_ABAPGIT_SERIALIZE_PARALLEL' STARTING NEW TASK lv_task DESTINATION IN GROUP mv_group diff --git a/src/objects/core/zcl_abapgit_serialize.clas.testclasses.abap b/src/objects/core/zcl_abapgit_serialize.clas.testclasses.abap index a224ff5da..65c6332a4 100644 --- a/src/objects/core/zcl_abapgit_serialize.clas.testclasses.abap +++ b/src/objects/core/zcl_abapgit_serialize.clas.testclasses.abap @@ -1,5 +1,6 @@ CLASS ltcl_determine_max_processes DEFINITION DEFERRED. -CLASS zcl_abapgit_serialize DEFINITION LOCAL FRIENDS ltcl_determine_max_processes. +CLASS ltcl_determine_server_group DEFINITION DEFERRED. +CLASS zcl_abapgit_serialize DEFINITION LOCAL FRIENDS ltcl_determine_max_processes ltcl_determine_server_group. CLASS ltd_settings DEFINITION FINAL FOR TESTING DURATION SHORT @@ -67,15 +68,23 @@ CLASS ltd_environment DEFINITION FINAL FOR TESTING zif_abapgit_environment. METHODS: + set_server_group + IMPORTING iv_group TYPE rzlli_apcl, + set_is_merged IMPORTING iv_is_merged TYPE abap_bool, + set_available_sessions + IMPORTING iv_available_sessions TYPE i, + set_free_work_processes IMPORTING iv_free_work_processes TYPE i. PRIVATE SECTION. DATA: + mv_group TYPE rzlli_apcl, mv_is_merged TYPE abap_bool, + mv_available_sessions TYPE i, mv_free_work_processes TYPE i. ENDCLASS. @@ -89,6 +98,10 @@ CLASS ltd_environment IMPLEMENTATION. METHOD zif_abapgit_environment~get_basis_release. ENDMETHOD. + METHOD zif_abapgit_environment~get_available_user_sessions. + rv_sessions = mv_available_sessions. + ENDMETHOD. + METHOD zif_abapgit_environment~get_system_language_filter. ENDMETHOD. @@ -115,12 +128,25 @@ CLASS ltd_environment IMPLEMENTATION. rv_free_work_processes = mv_free_work_processes. ENDMETHOD. - METHOD set_is_merged. - me->mv_is_merged = iv_is_merged. + METHOD zif_abapgit_environment~check_parallel_processing. + rv_checked = boolc( iv_group = mv_group ). ENDMETHOD. + METHOD set_server_group. + mv_group = iv_group. + ENDMETHOD. + + METHOD set_is_merged. + mv_is_merged = iv_is_merged. + ENDMETHOD. + + METHOD set_available_sessions. + mv_available_sessions = iv_available_sessions. + ENDMETHOD. + + METHOD set_free_work_processes. - me->mv_free_work_processes = iv_free_work_processes. + mv_free_work_processes = iv_free_work_processes. ENDMETHOD. ENDCLASS. @@ -134,12 +160,16 @@ CLASS ltd_exit DEFINITION FINAL FOR TESTING zif_abapgit_exit. METHODS: + set_server_group + IMPORTING iv_group TYPE rzlli_apcl, + set_max_parallel_processes IMPORTING iv_max_parallel_processes TYPE i. PRIVATE SECTION. DATA: + mv_group TYPE rzlli_apcl, mv_max_parallel_processes TYPE i. ENDCLASS. @@ -175,6 +205,9 @@ CLASS ltd_exit IMPLEMENTATION. ENDMETHOD. METHOD zif_abapgit_exit~change_rfc_server_group. + IF mv_group IS NOT INITIAL. + cv_group = mv_group. + ENDIF. ENDMETHOD. METHOD zif_abapgit_exit~change_supported_data_objects. @@ -228,6 +261,10 @@ CLASS ltd_exit IMPLEMENTATION. METHOD zif_abapgit_exit~wall_message_repo. ENDMETHOD. + METHOD set_server_group. + mv_group = iv_group. + ENDMETHOD. + METHOD set_max_parallel_processes. mv_max_parallel_processes = iv_max_parallel_processes. ENDMETHOD. @@ -235,6 +272,110 @@ CLASS ltd_exit IMPLEMENTATION. ENDCLASS. +CLASS ltcl_determine_server_group DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL. + + PRIVATE SECTION. + DATA: + mo_cut TYPE REF TO zcl_abapgit_serialize, + mo_environment_double TYPE REF TO ltd_environment, + mo_exit TYPE REF TO ltd_exit, + mv_act_group TYPE rzlli_apcl. + + METHODS: + setup, + + default_server_group FOR TESTING RAISING zcx_abapgit_exception, + legacy_server_group FOR TESTING RAISING zcx_abapgit_exception, + exit_server_group FOR TESTING RAISING zcx_abapgit_exception, + exit_not_exist_server_group FOR TESTING RAISING zcx_abapgit_exception, + + teardown, + + given_db_server_group + IMPORTING + iv_group TYPE rzlli_apcl, + + given_exit_chg_server_group + IMPORTING + iv_group TYPE rzlli_apcl, + + when_determine_server_group + RAISING + zcx_abapgit_exception, + + then_we_shd_have_server_group + IMPORTING + iv_exp_group TYPE rzlli_apcl. + +ENDCLASS. + +CLASS ltcl_determine_server_group IMPLEMENTATION. + + METHOD setup. + + CREATE OBJECT mo_environment_double. + zcl_abapgit_injector=>set_environment( mo_environment_double ). + + CREATE OBJECT mo_exit. + zcl_abapgit_injector=>set_exit( mo_exit ). + + TRY. + CREATE OBJECT mo_cut. + CATCH zcx_abapgit_exception. + cl_abap_unit_assert=>fail( 'Error creating serializer' ). + ENDTRY. + + ENDMETHOD. + + METHOD teardown. + CLEAR: mo_cut->mv_group. + ENDMETHOD. + + METHOD default_server_group. + when_determine_server_group( ). + then_we_shd_have_server_group( '' ). + ENDMETHOD. + + METHOD legacy_server_group. + given_db_server_group( 'parallel_generators' ). + when_determine_server_group( ). + then_we_shd_have_server_group( 'parallel_generators' ). + ENDMETHOD. + + METHOD exit_server_group. + given_db_server_group( 'my_group' ). + given_exit_chg_server_group( 'my_group' ). + when_determine_server_group( ). + then_we_shd_have_server_group( 'my_group' ). + ENDMETHOD. + + METHOD exit_not_exist_server_group. + given_exit_chg_server_group( 'my_servers' ). + when_determine_server_group( ). + then_we_shd_have_server_group( '' ). + ENDMETHOD. + + METHOD given_db_server_group. + mo_environment_double->set_server_group( iv_group ). + ENDMETHOD. + + METHOD given_exit_chg_server_group. + mo_exit->set_server_group( iv_group ). + ENDMETHOD. + + METHOD when_determine_server_group. + mv_act_group = mo_cut->determine_rfc_server_group( ). + ENDMETHOD. + + METHOD then_we_shd_have_server_group. + cl_abap_unit_assert=>assert_equals( + act = mv_act_group + exp = iv_exp_group ). + ENDMETHOD. + +ENDCLASS. + + CLASS ltcl_determine_max_processes DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL. PRIVATE SECTION. @@ -255,6 +396,7 @@ CLASS ltcl_determine_max_processes DEFINITION FOR TESTING DURATION SHORT RISK LE determine_max_processes_no_pp FOR TESTING RAISING zcx_abapgit_exception, determine_max_processes_merged FOR TESTING RAISING zcx_abapgit_exception, determine_max_processes_exit FOR TESTING RAISING zcx_abapgit_exception, + determine_max_processes_capped FOR TESTING RAISING zcx_abapgit_exception, force FOR TESTING RAISING zcx_abapgit_exception, teardown, @@ -267,6 +409,10 @@ CLASS ltcl_determine_max_processes DEFINITION FOR TESTING DURATION SHORT RISK LE IMPORTING iv_is_merged TYPE abap_bool, + given_available_sessions + IMPORTING + iv_available_sessions TYPE i, + given_free_work_processes IMPORTING iv_free_work_processes TYPE i, @@ -390,6 +536,19 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. + METHOD determine_max_processes_capped. + + given_parallel_proc_disabled( abap_false ). + given_is_merged( abap_false ). + given_free_work_processes( 50 ). " big system + given_available_sessions( 10 ). " but user session is capped + + when_determine_max_processes( ). + + then_we_shd_have_n_processes( 10 ). + + ENDMETHOD. + METHOD force. @@ -413,6 +572,12 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION. ENDMETHOD. + METHOD given_available_sessions. + + mo_environment_double->set_available_sessions( iv_available_sessions ). + + ENDMETHOD. + METHOD given_free_work_processes. diff --git a/src/objects/ecatt/zcl_abapgit_ecatt_helper.clas.abap b/src/objects/ecatt/zcl_abapgit_ecatt_helper.clas.abap index e4244297e..a6768c13e 100644 --- a/src/objects/ecatt/zcl_abapgit_ecatt_helper.clas.abap +++ b/src/objects/ecatt/zcl_abapgit_ecatt_helper.clas.abap @@ -66,7 +66,7 @@ CLASS zcl_abapgit_ecatt_helper IMPLEMENTATION. lv_text = lx_ecatt->get_text( ). zcx_abapgit_exception=>raise( lv_text ). " note, exception cx_ecatt_ui_attachment doesn't exist in 702 - CATCH cx_ecatt. + CATCH cx_ecatt ##NO_HANDLER. "will never be raised from download, when called with mv_generate_xml_no_download = 'X'. ENDTRY. diff --git a/src/objects/ecatt/zcl_abapgit_ecatt_sp_download.clas.abap b/src/objects/ecatt/zcl_abapgit_ecatt_sp_download.clas.abap index 03b6a0eeb..175e3544a 100644 --- a/src/objects/ecatt/zcl_abapgit_ecatt_sp_download.clas.abap +++ b/src/objects/ecatt/zcl_abapgit_ecatt_sp_download.clas.abap @@ -25,7 +25,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_ECATT_SP_DOWNLOAD IMPLEMENTATION. +CLASS zcl_abapgit_ecatt_sp_download IMPLEMENTATION. METHOD download. @@ -93,7 +93,7 @@ CLASS ZCL_ABAPGIT_ECATT_SP_DOWNLOAD IMPLEMENTATION. CALL METHOD lo_ecatt_sp->('GET_SP_ATTRIBUTES') IMPORTING e_sp_xml = lv_sp_xml. - CATCH cx_ecatt_apl. + CATCH cx_ecatt_apl ##NO_HANDLER. ENDTRY. CALL FUNCTION 'SDIXML_XML_TO_DOM' diff --git a/src/objects/ecatt/zcl_abapgit_ecatt_sp_upload.clas.abap b/src/objects/ecatt/zcl_abapgit_ecatt_sp_upload.clas.abap index fab1f31f8..2874dfbf7 100644 --- a/src/objects/ecatt/zcl_abapgit_ecatt_sp_upload.clas.abap +++ b/src/objects/ecatt/zcl_abapgit_ecatt_sp_upload.clas.abap @@ -27,7 +27,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_ECATT_SP_UPLOAD IMPLEMENTATION. +CLASS zcl_abapgit_ecatt_sp_upload IMPLEMENTATION. METHOD get_ecatt_sp. @@ -129,7 +129,6 @@ CLASS ZCL_ABAPGIT_ECATT_SP_UPLOAD IMPLEMENTATION. ENDTRY. ASSIGN ecatt_object TO . - ASSERT sy-subrc = 0. lo_ecatt_sp = . @@ -162,13 +161,12 @@ CLASS ZCL_ABAPGIT_ECATT_SP_UPLOAD IMPLEMENTATION. CATCH cx_ecatt_apl INTO lx_ecatt. lv_exc_occ = 'X'. ENDTRY. -* Devesh,C5129871 18.07.2011 Releasing enqueue after uploading -*begin + " Releasing enqueue after uploading TRY. ecatt_object->close_object( im_suppress_events = 'X' ). - CATCH cx_ecatt_apl INTO lx_ecatt. + CATCH cx_ecatt_apl INTO lx_ecatt ##NO_HANDLER. ENDTRY. -*end + * get devclass from existing object TRY. cl_apl_ecatt_object=>get_tadir_entry( diff --git a/src/objects/enh/zcl_abapgit_object_enho_clif.clas.abap b/src/objects/enh/zcl_abapgit_object_enho_clif.clas.abap index 7eceedf0b..206100054 100644 --- a/src/objects/enh/zcl_abapgit_object_enho_clif.clas.abap +++ b/src/objects/enh/zcl_abapgit_object_enho_clif.clas.abap @@ -62,7 +62,7 @@ CLASS zcl_abapgit_object_enho_clif IMPLEMENTATION. TRY. io_clif->add_change_enha_type( type_line = ls_type_line ). CATCH cx_enh_mod_not_allowed - cx_enh_is_not_enhanceable. + cx_enh_is_not_enhanceable ##NO_HANDLER. " TODO ENDTRY. ENDLOOP. diff --git a/src/objects/jump/zcl_abapgit_gui_jumper.clas.abap b/src/objects/jump/zcl_abapgit_gui_jumper.clas.abap index 247961df6..35a048049 100644 --- a/src/objects/jump/zcl_abapgit_gui_jumper.clas.abap +++ b/src/objects/jump/zcl_abapgit_gui_jumper.clas.abap @@ -253,7 +253,8 @@ CLASS zcl_abapgit_gui_jumper IMPLEMENTATION. EXCEPTIONS communication_failure = 1 MESSAGE lv_msg system_failure = 2 MESSAGE lv_msg - OTHERS = 3. + resource_failure = 3 + OTHERS = 4. lv_subrc = sy-subrc. diff --git a/src/objects/oo/zcl_abapgit_oo_class.clas.abap b/src/objects/oo/zcl_abapgit_oo_class.clas.abap index 7d7091a3b..ad60369bb 100644 --- a/src/objects/oo/zcl_abapgit_oo_class.clas.abap +++ b/src/objects/oo/zcl_abapgit_oo_class.clas.abap @@ -611,7 +611,7 @@ CLASS zcl_abapgit_oo_class IMPLEMENTATION. component_error = 4 no_access = 5 other = 6 - OTHERS = 7. + OTHERS = 7 ##FM_SUBRC_OK. CATCH cx_sy_dyn_call_param_not_found. CALL FUNCTION 'SEO_CLASS_CREATE_COMPLETE' EXPORTING @@ -628,7 +628,7 @@ CLASS zcl_abapgit_oo_class IMPLEMENTATION. component_error = 4 no_access = 5 other = 6 - OTHERS = 7. + OTHERS = 7 ##FM_SUBRC_OK. ENDTRY. IF sy-subrc <> 0. zcx_abapgit_exception=>raise_t100( ). @@ -998,5 +998,4 @@ CLASS zcl_abapgit_oo_class IMPLEMENTATION. zcx_abapgit_exception=>raise( |Class { ls_clskey-clsname } has syntax errors | ). ENDIF. ENDMETHOD. - ENDCLASS. diff --git a/src/objects/oo/zcl_abapgit_oo_interface.clas.abap b/src/objects/oo/zcl_abapgit_oo_interface.clas.abap index a4852bee2..2715e70ac 100644 --- a/src/objects/oo/zcl_abapgit_oo_interface.clas.abap +++ b/src/objects/oo/zcl_abapgit_oo_interface.clas.abap @@ -212,7 +212,7 @@ CLASS zcl_abapgit_oo_interface IMPLEMENTATION. component_error = 4 no_access = 5 other = 6 - OTHERS = 7. + OTHERS = 7 ##FM_SUBRC_OK. CATCH cx_sy_dyn_call_param_not_found. CALL FUNCTION 'SEO_INTERFACE_CREATE_COMPLETE' EXPORTING @@ -229,7 +229,7 @@ CLASS zcl_abapgit_oo_interface IMPLEMENTATION. component_error = 4 no_access = 5 other = 6 - OTHERS = 7. + OTHERS = 7 ##FM_SUBRC_OK. ENDTRY. IF sy-subrc <> 0. zcx_abapgit_exception=>raise_t100( ). @@ -368,5 +368,4 @@ CLASS zcl_abapgit_oo_interface IMPLEMENTATION. zcx_abapgit_exception=>raise( |Interface { ls_intkey-clsname } has syntax errors | ). ENDIF. ENDMETHOD. - ENDCLASS. diff --git a/src/objects/oo/zcl_abapgit_oo_serializer.clas.abap b/src/objects/oo/zcl_abapgit_oo_serializer.clas.abap index d90d1fc6f..bf55ef56a 100644 --- a/src/objects/oo/zcl_abapgit_oo_serializer.clas.abap +++ b/src/objects/oo/zcl_abapgit_oo_serializer.clas.abap @@ -151,7 +151,7 @@ CLASS zcl_abapgit_oo_serializer IMPLEMENTATION. lv_program = ls_include. TRY. lt_source = zcl_abapgit_factory=>get_sap_report( )->read_report( lv_program ). - CATCH zcx_abapgit_exception. + CATCH zcx_abapgit_exception ##NO_HANDLER. * ignore if the report is not found, sometimes the CCDEF include does not exist ENDTRY. rt_source = lt_source. diff --git a/src/objects/rules/zcl_abapgit_field_rules.clas.testclasses.abap b/src/objects/rules/zcl_abapgit_field_rules.clas.testclasses.abap index ea1250fa5..43a72f230 100644 --- a/src/objects/rules/zcl_abapgit_field_rules.clas.testclasses.abap +++ b/src/objects/rules/zcl_abapgit_field_rules.clas.testclasses.abap @@ -37,10 +37,7 @@ CLASS ltcl_field_rules DEFINITION FOR TESTING RISK LEVEL HARMLESS RETURNING VALUE(ri_rules) TYPE REF TO zif_abapgit_field_rules, apply_clear_logic FOR TESTING, - apply_fill_logic FOR TESTING, - get_utc_timestamp - RETURNING - VALUE(rv_timestamp) TYPE timestamp. + apply_fill_logic FOR TESTING. ENDCLASS. @@ -88,7 +85,7 @@ CLASS ltcl_field_rules IMPLEMENTATION. METHOD fill3. DATA lv_timestamp TYPE timestamp. - lv_timestamp = get_utc_timestamp( ). + GET TIME STAMP FIELD lv_timestamp. fill_value( iv_rule = zif_abapgit_field_rules=>c_fill_rule-timestamp iv_len = 10 @@ -205,6 +202,8 @@ CLASS ltcl_field_rules IMPLEMENTATION. lv_ts TYPE string, lv_timestamp TYPE timestamp. + GET TIME STAMP FIELD lv_timestamp. + ls_act-key = 1. INSERT ls_act INTO TABLE lt_act. ls_act-key = 2. @@ -241,17 +240,16 @@ CLASS ltcl_field_rules IMPLEMENTATION. act = ls_act-time(4) exp = sy-uzeit(4) ). " avoid comparing seconds - lv_timestamp = get_utc_timestamp( ). lv_ts = ls_act-ts. - lv_ts = lv_ts(12). + lv_ts = lv_ts(10). cl_abap_unit_assert=>assert_equals( act = lv_ts - exp = |{ lv_timestamp DIV 100 }| ). " avoid comparing second + exp = |{ lv_timestamp DIV 10000 }| ). " avoid comparing second lv_ts = ls_act-tl. - lv_ts = lv_ts(12). + lv_ts = lv_ts(10). cl_abap_unit_assert=>assert_equals( act = lv_ts - exp = |{ lv_timestamp DIV 100 }| ). " avoid comparing seconds + exp = |{ lv_timestamp DIV 10000 }| ). " avoid comparing seconds READ TABLE lt_act INTO ls_act INDEX 2. @@ -269,21 +267,4 @@ CLASS ltcl_field_rules IMPLEMENTATION. exp = sy-uzeit(4) ). " avoid comparing seconds ENDMETHOD. - - METHOD get_utc_timestamp. - DATA lv_syst_timezone TYPE timezone. - CALL FUNCTION 'GET_SYSTEM_TIMEZONE' - IMPORTING - timezone = lv_syst_timezone - EXCEPTIONS - customizing_missing = 1 - OTHERS = 2. - IF sy-subrc <> 0. - cl_abap_unit_assert=>fail( 'Could not get system timezone' ). - ENDIF. - - CONVERT DATE sy-datum TIME sy-uzeit - INTO TIME STAMP rv_timestamp - TIME ZONE lv_syst_timezone. - ENDMETHOD. ENDCLASS. diff --git a/src/objects/sap/zcl_abapgit_sap_report.clas.abap b/src/objects/sap/zcl_abapgit_sap_report.clas.abap index 4f0bfaa2c..4f229d659 100644 --- a/src/objects/sap/zcl_abapgit_sap_report.clas.abap +++ b/src/objects/sap/zcl_abapgit_sap_report.clas.abap @@ -47,7 +47,7 @@ CLASS zcl_abapgit_sap_report IMPLEMENTATION. no_show_permission = 7 permission_failure = 8 request_language_denied = 9 - OTHERS = 10. + OTHERS = 10 ##FM_SUBRC_OK. CATCH cx_sy_dyn_call_param_not_found. CALL FUNCTION 'RS_ACCESS_PERMISSION' EXPORTING @@ -67,7 +67,7 @@ CLASS zcl_abapgit_sap_report IMPLEMENTATION. no_show_permission = 7 permission_failure = 8 request_language_denied = 9 - OTHERS = 10. + OTHERS = 10 ##FM_SUBRC_OK. ENDTRY. IF sy-subrc <> 0. zcx_abapgit_exception=>raise_t100( ). diff --git a/src/objects/tabl/zcl_abapgit_object_tabl.clas.abap b/src/objects/tabl/zcl_abapgit_object_tabl.clas.abap index 321331d10..b5b099665 100644 --- a/src/objects/tabl/zcl_abapgit_object_tabl.clas.abap +++ b/src/objects/tabl/zcl_abapgit_object_tabl.clas.abap @@ -84,7 +84,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_OBJECT_TABL IMPLEMENTATION. +CLASS zcl_abapgit_object_tabl IMPLEMENTATION. METHOD clear_dd03p_fields. @@ -838,6 +838,14 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL IMPLEMENTATION. ENDIF. rv_bool = boolc( sy-subrc = 0 ). + " Skip TABL generated by CHDO + IF rv_bool = abap_true. + SELECT SINGLE tabname FROM tcdrs INTO lv_tabname WHERE tabname = lv_tabname. + IF sy-subrc = 0. + rv_bool = abap_false. + ENDIF. + ENDIF. + ENDMETHOD. diff --git a/src/objects/tabl/zcl_abapgit_object_tabl_ddl.clas.abap b/src/objects/tabl/zcl_abapgit_object_tabl_ddl.clas.abap index ca9222106..4e9740f3c 100644 --- a/src/objects/tabl/zcl_abapgit_object_tabl_ddl.clas.abap +++ b/src/objects/tabl/zcl_abapgit_object_tabl_ddl.clas.abap @@ -103,7 +103,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_OBJECT_TABL_DDL IMPLEMENTATION. +CLASS zcl_abapgit_object_tabl_ddl IMPLEMENTATION. METHOD deserialize. @@ -158,9 +158,9 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL_DDL IMPLEMENTATION. start TYPE i VALUE 0, colon TYPE i VALUE 1, type TYPE i VALUE 2, - aftertype TYPE i VALUE 2, - null TYPE i VALUE 2, - afternull TYPE i VALUE 2, + aftertype TYPE i VALUE 3, + null TYPE i VALUE 4, + afternull TYPE i VALUE 5, END OF lc_mode. DATA lv_field TYPE string. diff --git a/src/objects/texts/zcl_abapgit_longtexts.clas.abap b/src/objects/texts/zcl_abapgit_longtexts.clas.abap index 11c2a94b7..8db89aae7 100644 --- a/src/objects/texts/zcl_abapgit_longtexts.clas.abap +++ b/src/objects/texts/zcl_abapgit_longtexts.clas.abap @@ -64,6 +64,10 @@ CLASS zcl_abapgit_longtexts IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF lt_dokil. + IF iv_object_name CA '#'. + zcx_abapgit_exception=>raise( |Invalid name for longtext: { iv_longtext_id } { iv_object_name }| ). + ENDIF. + lv_object = escape_name( iv_longtext_id = iv_longtext_id iv_object_name = iv_object_name ). @@ -77,21 +81,19 @@ CLASS zcl_abapgit_longtexts IMPLEMENTATION. ENDIF. ELSEIF iv_longtext_id IS NOT INITIAL. - IF lv_object NA '#'. - IF iv_main_lang_only = abap_true. - SELECT * FROM dokil - INTO TABLE lt_dokil - WHERE id = iv_longtext_id - AND object LIKE lv_object ESCAPE '#' - AND masterlang = abap_true - ORDER BY PRIMARY KEY. - ELSE. - SELECT * FROM dokil - INTO TABLE lt_dokil - WHERE id = iv_longtext_id - AND object LIKE lv_object ESCAPE '#' - ORDER BY PRIMARY KEY. - ENDIF. + IF iv_main_lang_only = abap_true. + SELECT * FROM dokil + INTO TABLE lt_dokil + WHERE id = iv_longtext_id + AND object LIKE lv_object ESCAPE '#' + AND masterlang = abap_true + ORDER BY PRIMARY KEY. + ELSE. + SELECT * FROM dokil + INTO TABLE lt_dokil + WHERE id = iv_longtext_id + AND object LIKE lv_object ESCAPE '#' + ORDER BY PRIMARY KEY. ENDIF. ELSE. diff --git a/src/objects/zcl_abapgit_object_aifc.clas.abap b/src/objects/zcl_abapgit_object_aifc.clas.abap index e54a12d16..55dc58237 100644 --- a/src/objects/zcl_abapgit_object_aifc.clas.abap +++ b/src/objects/zcl_abapgit_object_aifc.clas.abap @@ -383,7 +383,7 @@ CLASS zcl_abapgit_object_aifc IMPLEMENTATION. packages = '' ). CATCH cx_abap_not_a_table INTO lx_abap_not_a_table. zcx_abapgit_exception=>raise_with_text( lx_abap_not_a_table ). - CATCH cx_abap_not_in_package. + CATCH cx_abap_not_in_package ##NO_HANDLER. "that's fine ENDTRY. diff --git a/src/objects/zcl_abapgit_object_auth.clas.abap b/src/objects/zcl_abapgit_object_auth.clas.abap index 4241eec8b..462cd5e2b 100644 --- a/src/objects/zcl_abapgit_object_auth.clas.abap +++ b/src/objects/zcl_abapgit_object_auth.clas.abap @@ -159,7 +159,7 @@ CLASS zcl_abapgit_object_auth IMPLEMENTATION. CALL FUNCTION 'SU20_MAINTAIN_SNGL' EXPORTING id_field = mv_fieldname - id_wbo_mode = abap_false. + id_wbo_mode = abap_false ##EXISTS. rv_exit = abap_true. ENDIF. ENDMETHOD. diff --git a/src/objects/zcl_abapgit_object_cmpt.clas.abap b/src/objects/zcl_abapgit_object_cmpt.clas.abap index 3d0a0a710..a20b5cc56 100644 --- a/src/objects/zcl_abapgit_object_cmpt.clas.abap +++ b/src/objects/zcl_abapgit_object_cmpt.clas.abap @@ -38,6 +38,7 @@ CLASS zcl_abapgit_object_cmpt IMPLEMENTATION. r_ref_db_access = mo_cmp_db. CATCH cx_root. + zcx_abapgit_exception=>raise( 'CMPT not supported' ). ENDTRY. mv_name = ms_item-obj_name. diff --git a/src/objects/zcl_abapgit_object_dcls.clas.abap b/src/objects/zcl_abapgit_object_dcls.clas.abap index 74addfb1c..ec71a8a97 100644 --- a/src/objects/zcl_abapgit_object_dcls.clas.abap +++ b/src/objects/zcl_abapgit_object_dcls.clas.abap @@ -70,9 +70,10 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION. METHOD zif_abapgit_object~deserialize. - DATA: lr_data TYPE REF TO data, - lo_dcl TYPE REF TO object, - lx_error TYPE REF TO cx_root. + DATA: lr_data TYPE REF TO data, + lo_dcl TYPE REF TO object, + lx_error TYPE REF TO cx_root, + lv_abap_language_version TYPE uccheck. FIELD-SYMBOLS: TYPE any, TYPE any. @@ -91,6 +92,12 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION. ASSERT sy-subrc = 0. = mo_files->read_string( 'asdcls' ). + ASSIGN COMPONENT 'ABAP_LANGUAGE_VERSION' OF STRUCTURE TO . + IF sy-subrc = 0. + lv_abap_language_version = . + set_abap_language_version( CHANGING cv_abap_language_version = lv_abap_language_version ). + ENDIF. + TRY. tadir_insert( iv_package ). @@ -98,13 +105,24 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION. RECEIVING ro_handler = lo_dcl. - CALL METHOD lo_dcl->('SAVE') - EXPORTING - iv_dclname = ms_item-obj_name - iv_put_state = 'I' - is_dclsrc = - iv_devclass = iv_package - iv_access_mode = 'INSERT'. + TRY. + CALL METHOD lo_dcl->('SAVE') + EXPORTING + iv_dclname = ms_item-obj_name + iv_put_state = 'I' + is_dclsrc = + iv_devclass = iv_package + iv_access_mode = 'INSERT' + iv_abap_language_version = lv_abap_language_version. + CATCH cx_sy_dyn_call_param_not_found. + CALL METHOD lo_dcl->('SAVE') + EXPORTING + iv_dclname = ms_item-obj_name + iv_put_state = 'I' + is_dclsrc = + iv_devclass = iv_package + iv_access_mode = 'INSERT'. + ENDTRY. CATCH cx_root INTO lx_error. zcx_abapgit_exception=>raise_with_text( lx_error ). @@ -236,7 +254,7 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION. ASSIGN COMPONENT 'ABAP_LANGUAGE_VERSION' OF STRUCTURE TO . IF sy-subrc = 0. - CLEAR . + clear_abap_language_version( CHANGING cv_abap_language_version = ). ENDIF. ASSIGN COMPONENT 'SOURCE' OF STRUCTURE TO . diff --git a/src/objects/zcl_abapgit_object_ddls.clas.abap b/src/objects/zcl_abapgit_object_ddls.clas.abap index e91b09de8..063a003a4 100644 --- a/src/objects/zcl_abapgit_object_ddls.clas.abap +++ b/src/objects/zcl_abapgit_object_ddls.clas.abap @@ -276,11 +276,12 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. lx_error TYPE REF TO cx_root. FIELD-SYMBOLS: - TYPE any, - TYPE any, - TYPE any, - TYPE any, - TYPE any. + TYPE any, + TYPE any, + TYPE any, + TYPE any, + TYPE any, + TYPE any. TRY. CREATE DATA lr_data TYPE ('DDDDLSRCV'). @@ -293,6 +294,11 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. ASSERT sy-subrc = 0. = mo_files->read_string( 'asddls' ). + ASSIGN COMPONENT 'ABAP_LANGUAGE_VERSION' OF STRUCTURE TO . + IF sy-subrc = 0. + set_abap_language_version( CHANGING cv_abap_language_version = ). + ENDIF. + CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE') RECEIVING handler = lo_ddl. @@ -310,12 +316,22 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. ASSERT sy-subrc = 0. = ms_item-obj_name. - CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~SAVE') - EXPORTING - name = ms_item-obj_name - put_state = 'N' - ddddlsrcv_wa = - baseinfo_string = . + TRY. + CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~SAVE') + EXPORTING + name = ms_item-obj_name + put_state = 'N' + ddddlsrcv_wa = + baseinfo_string = + save_language_version = abap_true. + CATCH cx_sy_dyn_call_param_not_found. + CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~SAVE') + EXPORTING + name = ms_item-obj_name + put_state = 'N' + ddddlsrcv_wa = + baseinfo_string = . + ENDTRY. ELSE. CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~SAVE') EXPORTING @@ -447,13 +463,14 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. lt_clr_comps TYPE STANDARD TABLE OF fieldname WITH DEFAULT KEY, lx_error TYPE REF TO cx_root. - FIELD-SYMBOLS: TYPE any, - TYPE any, - LIKE LINE OF lt_clr_comps, - TYPE ANY TABLE, - TYPE any, - TYPE any, - TYPE any. + FIELD-SYMBOLS: TYPE any, + TYPE any, + LIKE LINE OF lt_clr_comps, + TYPE ANY TABLE, + TYPE any, + TYPE any, + TYPE any, + TYPE any. TRY. @@ -506,12 +523,16 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. zcx_abapgit_exception=>raise_with_text( lx_error ). ENDTRY. + ASSIGN COMPONENT 'ABAP_LANGUAGE_VERSION' OF STRUCTURE TO . + IF sy-subrc = 0. + clear_abap_language_version( CHANGING cv_abap_language_version = ). + ENDIF. + APPEND 'AS4USER' TO lt_clr_comps. APPEND 'AS4DATE' TO lt_clr_comps. APPEND 'AS4TIME' TO lt_clr_comps. APPEND 'ACTFLAG' TO lt_clr_comps. APPEND 'CHGFLAG' TO lt_clr_comps. - APPEND 'ABAP_LANGUAGE_VERSION' TO lt_clr_comps. APPEND 'ABAP_LANGU_VERSION' TO lt_clr_comps. LOOP AT lt_clr_comps ASSIGNING . diff --git a/src/objects/zcl_abapgit_object_ddlx.clas.abap b/src/objects/zcl_abapgit_object_ddlx.clas.abap index d48fb6668..e543dcaab 100644 --- a/src/objects/zcl_abapgit_object_ddlx.clas.abap +++ b/src/objects/zcl_abapgit_object_ddlx.clas.abap @@ -80,8 +80,6 @@ CLASS zcl_abapgit_object_ddlx IMPLEMENTATION. clear_field( EXPORTING iv_fieldname = 'ABAP_LANGUAGE_VERSION' CHANGING cg_metadata = ). - clear_field( EXPORTING iv_fieldname = 'ABAP_LANGU_VERSION' - CHANGING cg_metadata = ). ENDMETHOD. @@ -179,12 +177,13 @@ CLASS zcl_abapgit_object_ddlx IMPLEMENTATION. lr_data TYPE REF TO data, lx_error TYPE REF TO cx_root. - FIELD-SYMBOLS: TYPE any, - TYPE data, - TYPE data, - TYPE data, - TYPE syuname, - TYPE xsddatetime_z. + FIELD-SYMBOLS: TYPE any, + TYPE data, + TYPE data, + TYPE data, + TYPE syuname, + TYPE xsddatetime_z, + TYPE data. TRY. CREATE DATA lr_data @@ -197,6 +196,11 @@ CLASS zcl_abapgit_object_ddlx IMPLEMENTATION. CHANGING cg_data = ). + ASSIGN COMPONENT 'METADATA-ABAP_LANGU_VERSION' OF STRUCTURE TO . + IF sy-subrc = 0. + set_abap_language_version( CHANGING cv_abap_language_version = ). + ENDIF. + ASSIGN COMPONENT 'CONTENT-SOURCE' OF STRUCTURE TO . ASSERT sy-subrc = 0. @@ -367,6 +371,11 @@ CLASS zcl_abapgit_object_ddlx IMPLEMENTATION. li_data_model->get_data( IMPORTING p_data = ). + ASSIGN COMPONENT 'METADATA-ABAP_LANGU_VERSION' OF STRUCTURE TO . + IF sy-subrc = 0. + clear_abap_language_version( CHANGING cv_abap_language_version = ). + ENDIF. + clear_fields( CHANGING cg_data = ). ASSIGN COMPONENT 'CONTENT-SOURCE' OF STRUCTURE TO . diff --git a/src/objects/zcl_abapgit_object_doma.clas.abap b/src/objects/zcl_abapgit_object_doma.clas.abap index 8bc1f7280..79e6860a2 100644 --- a/src/objects/zcl_abapgit_object_doma.clas.abap +++ b/src/objects/zcl_abapgit_object_doma.clas.abap @@ -43,7 +43,7 @@ CLASS zcl_abapgit_object_doma DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje METHODS handle_dependencies IMPORTING - !iv_step TYPE zif_abapgit_definitions=>ty_deserialization_step + !iv_step TYPE zif_abapgit_objects=>ty_deserialization_step CHANGING !cv_exit TYPE dd01v-convexit !cv_done TYPE abap_bool. diff --git a/src/objects/zcl_abapgit_object_fugr.clas.abap b/src/objects/zcl_abapgit_object_fugr.clas.abap index 9dc0c1406..41b53c503 100644 --- a/src/objects/zcl_abapgit_object_fugr.clas.abap +++ b/src/objects/zcl_abapgit_object_fugr.clas.abap @@ -786,7 +786,8 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION. CHANGING include = lv_include EXCEPTIONS - OTHERS = 1. + OTHERS = 1 ##FM_SUBRC_OK. + IF lv_function_group(1) = 'X'. " "EXIT"-function-module ls_tadir-object = 'FUGS'. ENDIF. @@ -1276,6 +1277,14 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION. pool_not_exists = 1. rv_bool = boolc( sy-subrc <> 1 ). + " Skip FUGR generated by CHDO + IF rv_bool = abap_true. + SELECT SINGLE fgrp FROM tcdrp INTO lv_pool WHERE fgrp = lv_pool. + IF sy-subrc = 0. + rv_bool = abap_false. + ENDIF. + ENDIF. + ENDMETHOD. diff --git a/src/objects/zcl_abapgit_object_fugs.clas.xml b/src/objects/zcl_abapgit_object_fugs.clas.xml index 54cdabde2..a52df4001 100644 --- a/src/objects/zcl_abapgit_object_fugs.clas.xml +++ b/src/objects/zcl_abapgit_object_fugs.clas.xml @@ -5,7 +5,7 @@ ZCL_ABAPGIT_OBJECT_FUGS E - abapGit - FUGS + abapGit - FUGS - Function Group (SAP) 1 X X diff --git a/src/objects/zcl_abapgit_object_http.clas.abap b/src/objects/zcl_abapgit_object_http.clas.abap new file mode 100644 index 000000000..1f143a0a8 --- /dev/null +++ b/src/objects/zcl_abapgit_object_http.clas.abap @@ -0,0 +1,283 @@ +CLASS zcl_abapgit_object_http DEFINITION + PUBLIC + INHERITING FROM zcl_abapgit_objects_super + FINAL + CREATE PUBLIC. + + PUBLIC SECTION. + + INTERFACES zif_abapgit_object. + + PROTECTED SECTION. + PRIVATE SECTION. + + TYPES: BEGIN OF ty_uconservhttphandler, + id TYPE c LENGTH 30, + version TYPE c LENGTH 1, + serviceorder TYPE n LENGTH 2, + servicehandler TYPE c LENGTH 30, + END OF ty_uconservhttphandler. + TYPES: BEGIN OF ty_uconhttpservtext, + id TYPE c LENGTH 30, + version TYPE c LENGTH 1, + lang TYPE c LENGTH 1, + shorttext TYPE c LENGTH 255, + END OF ty_uconhttpservtext. + TYPES: BEGIN OF ty_handler, + id TYPE c LENGTH 30, + version TYPE c LENGTH 1, + serviceorder TYPE n LENGTH 2, + servicehandler TYPE c LENGTH 30, + END OF ty_handler. + TYPES: BEGIN OF ty_gs_object_version, + id TYPE c LENGTH 1, + object_state TYPE c LENGTH 1, + END OF ty_gs_object_version. + +ENDCLASS. + + + +CLASS zcl_abapgit_object_http IMPLEMENTATION. + + + METHOD zif_abapgit_object~changed_by. + + TRY. + SELECT SINGLE changedby FROM ('UCONHTTPSERVHEAD') INTO rv_user WHERE id = ms_item-obj_name. + IF sy-subrc <> 0. + rv_user = c_user_unknown. + ENDIF. + CATCH cx_root. + zcx_abapgit_exception=>raise( 'HTTP not supported' ). + ENDTRY. + + ENDMETHOD. + + + METHOD zif_abapgit_object~delete. + + DATA lv_name TYPE c LENGTH 30. + + lv_name = ms_item-obj_name. + TRY. + CALL METHOD ('CL_UCON_API_FACTORY')=>('DELETE_HTTP_SERVICE') + EXPORTING + name = lv_name + devclass = iv_package. + CATCH cx_root. + zcx_abapgit_exception=>raise( 'HTTP not supported' ). + ENDTRY. + + ENDMETHOD. + + + METHOD zif_abapgit_object~deserialize. + + DATA: lv_http_servid TYPE c LENGTH 30, + lt_handler TYPE TABLE OF ty_handler, + ls_handler LIKE LINE OF lt_handler, + ls_description TYPE ty_uconhttpservtext, + lv_check_object_name TYPE c LENGTH 40, + lx_root TYPE REF TO cx_root, + lv_id TYPE c LENGTH 30, + lo_http TYPE REF TO object, + ls_abap_lang TYPE ty_gs_object_version, + lo_instance TYPE REF TO object, + lv_tadir_name TYPE tadir-obj_name, + lt_ret TYPE STANDARD TABLE OF bapiret2. + + TRY. + io_xml->read( + EXPORTING iv_name = 'HTTPID' + CHANGING cg_data = lv_http_servid ). + io_xml->read( + EXPORTING iv_name = 'HTTPTEXT' + CHANGING cg_data = ls_description ). + io_xml->read( + EXPORTING iv_name = 'HTTPHDL' + CHANGING cg_data = lt_handler ). + + SELECT SINGLE id FROM ('UCONHTTPSERVHEAD') INTO lv_id WHERE id = lv_http_servid AND version = 'A'. + IF sy-subrc = 0. + "update + CALL METHOD ('CL_UCON_API_FACTORY')=>('GET_HTTP_SERVICE') + EXPORTING + name = lv_http_servid + no_auth_check = abap_true + RECEIVING + http_service = lo_http. + ELSE. + "create + CALL METHOD ('CL_UCON_API_FACTORY')=>('NEW_HTTP_SERVICE') + EXPORTING + name = lv_http_servid + RECEIVING + http_service = lo_http. + ENDIF. + + CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~SET_HANDLER') + EXPORTING + handler = lt_handler. + IF lt_handler IS NOT INITIAL. + READ TABLE lt_handler INTO ls_handler INDEX 1. + "get language version from abap class + + lv_check_object_name = ls_handler-servicehandler. + IF lv_check_object_name IS NOT INITIAL. + TRY. + CALL METHOD ('CL_ABAP_LANGUAGE_VERSION')=>('GET_INSTANCE') + RECEIVING + ro_version_handler = lo_instance. + CALL METHOD lo_instance->('IF_ABAP_LANGUAGE_VERSION~GET_VERSION_OF_OBJECT') + EXPORTING + iv_object_type = 'CLAS' + iv_object_name = lv_check_object_name + RECEIVING + rs_object_version = ls_abap_lang. + + IF ls_abap_lang-id = 'X'. "language version X not supported, use space instead + ls_abap_lang-id = space. + ENDIF. + + CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~SET_LANGUAGE_VERSION') + EXPORTING + iv_langu_version = ls_abap_lang-id. + CATCH cx_root ##NO_HANDLER. + " ABAP language version not supported in this system + ENDTRY. + ENDIF. + ENDIF. + + CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~SET_DESCRIPTION') + EXPORTING + texts = ls_description. + CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~SAVE') + EXPORTING + run_dark = abap_true + dev_class = iv_package + korrnum = iv_transport. + CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~FREE'). + + lv_tadir_name = lv_http_servid. + CALL METHOD ('CL_AUTH_START_TOOLS')=>('SUSH_CREATE') + EXPORTING + iv_type = 'HTTP' + iv_name = lv_tadir_name + iv_silent = abap_true + iv_task = iv_transport + IMPORTING + et_log = lt_ret. + + CATCH cx_root INTO lx_root. + zcx_abapgit_exception=>raise_with_text( lx_root ). + ENDTRY. + + ENDMETHOD. + + + METHOD zif_abapgit_object~exists. + + DATA lv_id TYPE c LENGTH 30. + + TRY. + SELECT SINGLE id FROM ('UCONHTTPSERVHEAD') INTO lv_id WHERE id = ms_item-obj_name AND version = 'A'. + rv_bool = boolc( sy-subrc = 0 ). + CATCH cx_root. + zcx_abapgit_exception=>raise( 'HTTP not supported' ). + ENDTRY. + + ENDMETHOD. + + + METHOD zif_abapgit_object~get_comparator. + ENDMETHOD. + + + METHOD zif_abapgit_object~get_deserialize_order. + RETURN. + ENDMETHOD. + + + METHOD zif_abapgit_object~get_deserialize_steps. + APPEND zif_abapgit_object=>gc_step_id-abap TO rt_steps. + ENDMETHOD. + + + METHOD zif_abapgit_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. + + + METHOD zif_abapgit_object~is_active. + rv_active = is_active( ). + ENDMETHOD. + + + METHOD zif_abapgit_object~is_locked. + rv_is_locked = abap_false. + ENDMETHOD. + + + METHOD zif_abapgit_object~jump. + + ENDMETHOD. + + + METHOD zif_abapgit_object~map_filename_to_object. + RETURN. + ENDMETHOD. + + + METHOD zif_abapgit_object~map_object_to_filename. + RETURN. + ENDMETHOD. + + + METHOD zif_abapgit_object~serialize. + + DATA: lv_http_srv_id TYPE c LENGTH 30, + lo_serv TYPE REF TO object, "if_ucon_api_http_service + lt_handler TYPE TABLE OF ty_uconservhttphandler, + ls_description TYPE ty_uconhttpservtext, + lx_root TYPE REF TO cx_root, + lv_name TYPE c LENGTH 30. + + TRY. + lv_http_srv_id = ms_item-obj_name. + "read http service object + CALL METHOD ('CL_UCON_API_FACTORY')=>('GET_HTTP_SERVICE') + EXPORTING + name = lv_http_srv_id + no_auth_check = abap_true + RECEIVING + http_service = lo_serv. + + CALL METHOD lo_serv->('IF_UCON_API_HTTP_SERVICE~GET_HANDLER') RECEIVING handler = lt_handler. + CALL METHOD lo_serv->('IF_UCON_API_HTTP_SERVICE~GET_DESCRIPTION') + EXPORTING + lang = sy-langu + RECEIVING + text = ls_description. + + "add data to output + CALL METHOD lo_serv->('IF_UCON_API_HTTP_SERVICE~GET_NAME') RECEIVING name = lv_name. + + io_xml->add( + iv_name = 'HTTPID' + ig_data = lv_name ). + + io_xml->add( + iv_name = 'HTTPTEXT' + ig_data = ls_description ). + + io_xml->add( + iv_name = 'HTTPHDL' + ig_data = lt_handler ). + + CATCH cx_root INTO lx_root. + zcx_abapgit_exception=>raise_with_text( lx_root ). + ENDTRY. + + ENDMETHOD. +ENDCLASS. diff --git a/src/objects/zcl_abapgit_object_http.clas.xml b/src/objects/zcl_abapgit_object_http.clas.xml new file mode 100644 index 000000000..303519641 --- /dev/null +++ b/src/objects/zcl_abapgit_object_http.clas.xml @@ -0,0 +1,16 @@ + + + + + + ZCL_ABAPGIT_OBJECT_HTTP + E + abapGit - HTTP - HTTP Destination + 1 + X + X + X + + + + diff --git a/src/objects/zcl_abapgit_object_idoc.clas.abap b/src/objects/zcl_abapgit_object_idoc.clas.abap index e01d7db1a..5b958f5b0 100644 --- a/src/objects/zcl_abapgit_object_idoc.clas.abap +++ b/src/objects/zcl_abapgit_object_idoc.clas.abap @@ -163,6 +163,9 @@ CLASS zcl_abapgit_object_idoc IMPLEMENTATION. MOVE-CORRESPONDING ls_idoc-attributes TO ls_attributes. IF zif_abapgit_object~exists( ) = abap_false. + " Avoid popup asking for package + tadir_insert( iv_package ). + CALL FUNCTION 'IDOCTYPE_CREATE' EXPORTING pi_idoctyp = mv_idoctyp diff --git a/src/objects/zcl_abapgit_object_iext.clas.abap b/src/objects/zcl_abapgit_object_iext.clas.abap index e0f681080..c3240dc82 100644 --- a/src/objects/zcl_abapgit_object_iext.clas.abap +++ b/src/objects/zcl_abapgit_object_iext.clas.abap @@ -53,8 +53,9 @@ CLASS zcl_abapgit_object_iext IMPLEMENTATION. pe_attributes = ls_attributes EXCEPTIONS OTHERS = 1. - - rv_user = ls_attributes-plast. + IF sy-subrc = 0. + rv_user = ls_attributes-plast. + ENDIF. ENDMETHOD. @@ -96,6 +97,9 @@ CLASS zcl_abapgit_object_iext IMPLEMENTATION. EXCEPTIONS OTHERS = 1. ELSE. + " Avoid popup asking for package + tadir_insert( iv_package ). + CALL FUNCTION 'EXTTYPE_CREATE' EXPORTING pi_cimtyp = mv_extension diff --git a/src/objects/zcl_abapgit_object_iobj.clas.abap b/src/objects/zcl_abapgit_object_iobj.clas.abap index ae70908a1..ed1d4f4da 100644 --- a/src/objects/zcl_abapgit_object_iobj.clas.abap +++ b/src/objects/zcl_abapgit_object_iobj.clas.abap @@ -61,7 +61,7 @@ CLASS zcl_abapgit_object_iobj IMPLEMENTATION. iobj_not_found = 1 illegal_input = 2 bct_comp_invalid = 3 - not_authorized = 4 +* not_authorized = 4 " not in lower releases OTHERS = 5. IF sy-subrc = 0. ASSIGN COMPONENT 'TSTPNM' OF STRUCTURE TO . @@ -200,36 +200,67 @@ CLASS zcl_abapgit_object_iobj IMPLEMENTATION. ASSERT sy-subrc = 0. IF zif_abapgit_object~exists( ) = abap_false. - CALL FUNCTION 'BAPI_IOBJ_CREATE' - EXPORTING - details = - IMPORTING - return = ls_return - TABLES - compounds = - attributes = - navigationattributes = - atrnavinfoprovider = - hierarchycharacteristics = - elimination = - hanafieldsmapping = - xxlattributes = . + TRY. + CALL FUNCTION 'BAPI_IOBJ_CREATE' + EXPORTING + details = + IMPORTING + return = ls_return + TABLES + compounds = + attributes = + navigationattributes = + atrnavinfoprovider = + hierarchycharacteristics = + elimination = + hanafieldsmapping = + xxlattributes = ##ARG_OK. + CATCH cx_sy_dyn_call_param_not_found. + CALL FUNCTION 'BAPI_IOBJ_CREATE' + EXPORTING + details = + IMPORTING + return = ls_return + TABLES + compounds = + attributes = + navigationattributes = + atrnavinfoprovider = + hierarchycharacteristics = + elimination = . + ENDTRY. ELSE. - CALL FUNCTION 'BAPI_IOBJ_CHANGE' - EXPORTING - infoobject = - details = - IMPORTING - return = ls_return - TABLES - compounds = - attributes = - navigationattributes = - atrnavinfoprovider = - hierarchycharacteristics = - elimination = - hanafieldsmapping = - xxlattributes = . + TRY. + CALL FUNCTION 'BAPI_IOBJ_CHANGE' + EXPORTING + infoobject = + details = + IMPORTING + return = ls_return + TABLES + compounds = + attributes = + navigationattributes = + atrnavinfoprovider = + hierarchycharacteristics = + elimination = + hanafieldsmapping = + xxlattributes = ##ARG_OK. + CATCH cx_sy_dyn_call_param_not_found. + CALL FUNCTION 'BAPI_IOBJ_CHANGE' + EXPORTING + infoobject = + details = + IMPORTING + return = ls_return + TABLES + compounds = + attributes = + navigationattributes = + atrnavinfoprovider = + hierarchycharacteristics = + elimination = . + ENDTRY. ENDIF. IF ls_return-type = 'E'. @@ -409,21 +440,37 @@ CLASS zcl_abapgit_object_iobj IMPLEMENTATION. lv_iobjnam = ms_item-obj_name. - CALL FUNCTION 'BAPI_IOBJ_GETDETAIL' - EXPORTING - infoobject = lv_iobjnam - IMPORTING - details = - return = ls_return - TABLES - compounds = - attributes = - navigationattributes = - atrnavinfoprovider = - hierarchycharacteristics = - elimination = - hanafieldsmapping = - xxlattributes = . + TRY. + CALL FUNCTION 'BAPI_IOBJ_GETDETAIL' + EXPORTING + infoobject = lv_iobjnam + IMPORTING + details = + return = ls_return + TABLES + compounds = + attributes = + navigationattributes = + atrnavinfoprovider = + hierarchycharacteristics = + elimination = + hanafieldsmapping = + xxlattributes = ##ARG_OK. + CATCH cx_sy_dyn_call_param_not_found. + CALL FUNCTION 'BAPI_IOBJ_GETDETAIL' + EXPORTING + infoobject = lv_iobjnam + IMPORTING + details = + return = ls_return + TABLES + compounds = + attributes = + navigationattributes = + atrnavinfoprovider = + hierarchycharacteristics = + elimination = . + ENDTRY. IF ls_return-type = 'E'. zcx_abapgit_exception=>raise( |Error getting details of InfoObject: { ls_return-message }| ). diff --git a/src/objects/zcl_abapgit_object_iwpr.clas.abap b/src/objects/zcl_abapgit_object_iwpr.clas.abap index 1701dc6ec..a0251fce3 100644 --- a/src/objects/zcl_abapgit_object_iwpr.clas.abap +++ b/src/objects/zcl_abapgit_object_iwpr.clas.abap @@ -124,7 +124,11 @@ CLASS zcl_abapgit_object_iwpr IMPLEMENTATION. METHOD zif_abapgit_object~jump. - SUBMIT /iwbep/r_sbui_service_builder + DATA lv_prog TYPE progname. + + lv_prog = '/IWBEP/R_SBUI_SERVICE_BUILDER'. + + SUBMIT (lv_prog) WITH i_prname = ms_item-obj_name AND RETURN. diff --git a/src/objects/zcl_abapgit_object_iwvb.clas.abap b/src/objects/zcl_abapgit_object_iwvb.clas.abap index 78b21145d..e2405e71a 100644 --- a/src/objects/zcl_abapgit_object_iwvb.clas.abap +++ b/src/objects/zcl_abapgit_object_iwvb.clas.abap @@ -131,7 +131,11 @@ CLASS zcl_abapgit_object_iwvb IMPLEMENTATION. METHOD zif_abapgit_object~jump. - SUBMIT /iwbep/r_dst_vocan_register + DATA lv_prog TYPE progname. + + lv_prog = '/IWBEP/R_DST_VOCAN_REGISTER'. + + SUBMIT (lv_prog) WITH ip_aname = ms_item-obj_name WITH ip_avers = ms_item-obj_name+32(4) AND RETURN. diff --git a/src/objects/zcl_abapgit_object_msag.clas.abap b/src/objects/zcl_abapgit_object_msag.clas.abap index 995788751..6a66fa415 100644 --- a/src/objects/zcl_abapgit_object_msag.clas.abap +++ b/src/objects/zcl_abapgit_object_msag.clas.abap @@ -37,13 +37,17 @@ CLASS zcl_abapgit_object_msag DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje zcx_abapgit_exception . METHODS delete_msgid IMPORTING - !iv_message_id TYPE arbgb . + !iv_message_id TYPE arbgb + RAISING + zcx_abapgit_exception. METHODS free_access_permission IMPORTING !iv_message_id TYPE arbgb . METHODS delete_documentation IMPORTING - !iv_message_id TYPE arbgb . + !iv_message_id TYPE arbgb + RAISING + zcx_abapgit_exception. ENDCLASS. @@ -61,9 +65,7 @@ CLASS zcl_abapgit_object_msag IMPLEMENTATION. element = iv_message_id addition = ' ' IMPORTING - object = lv_key_s - EXCEPTIONS - OTHERS = 0. + object = lv_key_s. CALL FUNCTION 'DOKU_DELETE_ALL' EXPORTING @@ -80,7 +82,11 @@ CLASS zcl_abapgit_object_msag IMPLEMENTATION. no_docu_found = 4 object_is_already_enqueued = 5 object_is_enqueued_by_corr = 6 - user_break = 7. + user_break = 7 + OTHERS = 8. + IF sy-subrc <> 0 AND sy-subrc <> 4. + zcx_abapgit_exception=>raise( 'Error deleting longtext for message' ). + ENDIF. ENDMETHOD. diff --git a/src/objects/zcl_abapgit_object_oa2p.clas.abap b/src/objects/zcl_abapgit_object_oa2p.clas.abap index 3a2d26068..d4cb699d0 100644 --- a/src/objects/zcl_abapgit_object_oa2p.clas.abap +++ b/src/objects/zcl_abapgit_object_oa2p.clas.abap @@ -90,7 +90,7 @@ CLASS zcl_abapgit_object_oa2p IMPLEMENTATION. "authority check AUTHORITY-CHECK OBJECT 'S_OA2C_ADM' - ID 'ACTVT' FIELD lc_actvt. + ID 'ACTVT' FIELD lc_actvt ##AUTH_OBJ_OK. IF sy-subrc <> 0. MESSAGE e463(01) WITH mv_profile INTO zcx_abapgit_exception=>null. zcx_abapgit_exception=>raise_t100( ). @@ -104,7 +104,7 @@ CLASS zcl_abapgit_object_oa2p IMPLEMENTATION. CALL METHOD lo_persist->('IF_WB_OBJECT_PERSIST~DELETE') EXPORTING p_object_key = lv_profile_key. " Object Key - CATCH cx_swb_object_does_not_exist. + CATCH cx_swb_object_does_not_exist ##NO_HANDLER. CATCH cx_swb_exception. zcx_abapgit_exception=>raise( |Error when deleting OAuth2 Profile { lv_profile_key }.| ). ENDTRY. diff --git a/src/objects/zcl_abapgit_object_otgr.clas.abap b/src/objects/zcl_abapgit_object_otgr.clas.abap index 73e22c19a..cd5108d74 100644 --- a/src/objects/zcl_abapgit_object_otgr.clas.abap +++ b/src/objects/zcl_abapgit_object_otgr.clas.abap @@ -137,7 +137,7 @@ CLASS zcl_abapgit_object_otgr IMPLEMENTATION. TRY. CREATE DATA lo_parents TYPE TABLE OF ('CLS_TYGR_PARENT'). ASSIGN lo_parents->* TO . - CATCH cx_sy_create_data_error. + CATCH cx_sy_create_data_error ##NO_HANDLER. ENDTRY. IF IS ASSIGNED. @@ -288,7 +288,7 @@ CLASS zcl_abapgit_object_otgr IMPLEMENTATION. TRY. CREATE DATA lo_parents TYPE TABLE OF ('CLS_TYGR_PARENT'). ASSIGN lo_parents->* TO . - CATCH cx_sy_create_data_error. + CATCH cx_sy_create_data_error ##NO_HANDLER. ENDTRY. TRY. diff --git a/src/objects/zcl_abapgit_object_pdts.clas.locals_imp.abap b/src/objects/zcl_abapgit_object_pdts.clas.locals_imp.abap index e8ccc60e4..d21fb9742 100644 --- a/src/objects/zcl_abapgit_object_pdts.clas.locals_imp.abap +++ b/src/objects/zcl_abapgit_object_pdts.clas.locals_imp.abap @@ -172,7 +172,7 @@ CLASS lcl_task_definition IMPLEMENTATION. IF sy-subrc <> 0. TRY. li_container->element_remove( name = lv_element ). - CATCH cx_swf_cnt_container. + CATCH cx_swf_cnt_container ##NO_HANDLER. "Shouldn't happen, doesn't matter if it does ENDTRY. ENDIF. diff --git a/src/objects/zcl_abapgit_object_pdxx_super.clas.abap b/src/objects/zcl_abapgit_object_pdxx_super.clas.abap index 004a4b501..3b066e968 100644 --- a/src/objects/zcl_abapgit_object_pdxx_super.clas.abap +++ b/src/objects/zcl_abapgit_object_pdxx_super.clas.abap @@ -77,7 +77,7 @@ CLASS zcl_abapgit_object_pdxx_super IMPLEMENTATION. enqueue_failed = 1 object_not_deleted = 2 object_not_found = 3 - OTHERS = 4. "#EC SUBRC_OK + OTHERS = 4 ##FM_SUBRC_OK. check_subrc_for( `RH_HRSOBJECT_DELETE` ). diff --git a/src/objects/zcl_abapgit_object_prog.clas.abap b/src/objects/zcl_abapgit_object_prog.clas.abap index 5009c4e46..d0bb9bbd7 100644 --- a/src/objects/zcl_abapgit_object_prog.clas.abap +++ b/src/objects/zcl_abapgit_object_prog.clas.abap @@ -279,6 +279,15 @@ CLASS zcl_abapgit_object_prog IMPLEMENTATION. WHERE progname = ms_item-obj_name. rv_bool = boolc( sy-subrc = 0 ). + " Skip PROG generated by CHDO + IF rv_bool = abap_true. + FIND REGEX '^F.*CD[C|F|T|V]' IN ms_item-obj_name. + IF sy-subrc <> 0. + FIND REGEX '^/.*/F.*CD[C|F|T|V]' IN ms_item-obj_name. + ENDIF. + rv_bool = boolc( sy-subrc <> 0 ). + ENDIF. + ENDMETHOD. diff --git a/src/objects/zcl_abapgit_object_scp1.clas.abap b/src/objects/zcl_abapgit_object_scp1.clas.abap index 00bfe1355..b31918f1a 100644 --- a/src/objects/zcl_abapgit_object_scp1.clas.abap +++ b/src/objects/zcl_abapgit_object_scp1.clas.abap @@ -486,7 +486,8 @@ CLASS zcl_abapgit_object_scp1 IMPLEMENTATION. TABLES texts = ls_scp1-scprtext EXCEPTIONS - no_text_found = 1. + no_text_found = 1 + OTHERS = 2 ##FM_SUBRC_OK. IF ls_scp1-scprattr-type = 'TMP'. load_hier( CHANGING cs_scp1 = ls_scp1 ). diff --git a/src/objects/zcl_abapgit_object_sfpf.clas.abap b/src/objects/zcl_abapgit_object_sfpf.clas.abap index 29564ada8..908114251 100644 --- a/src/objects/zcl_abapgit_object_sfpf.clas.abap +++ b/src/objects/zcl_abapgit_object_sfpf.clas.abap @@ -134,7 +134,7 @@ CLASS zcl_abapgit_object_sfpf IMPLEMENTATION. TRY. rv_xstr = cl_fp_helper=>convert_form_to_xstring( li_fp_form ). - CATCH cx_fp_api INTO lx_fp_conv_err. + CATCH cx_fp_api INTO lx_fp_conv_err ##NO_HANDLER. " Pass - the exception is handled below! ENDTRY. diff --git a/src/objects/zcl_abapgit_object_shlp.clas.abap b/src/objects/zcl_abapgit_object_shlp.clas.abap index 02dd0c9b6..c4b800b8b 100644 --- a/src/objects/zcl_abapgit_object_shlp.clas.abap +++ b/src/objects/zcl_abapgit_object_shlp.clas.abap @@ -7,7 +7,7 @@ CLASS zcl_abapgit_object_shlp DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje METHODS handle_dependencies IMPORTING - !iv_step TYPE zif_abapgit_definitions=>ty_deserialization_step + !iv_step TYPE zif_abapgit_objects=>ty_deserialization_step CHANGING !cv_exit TYPE dd30v-selmexit !cv_done TYPE abap_bool. diff --git a/src/objects/zcl_abapgit_object_srvb.clas.abap b/src/objects/zcl_abapgit_object_srvb.clas.abap index a76dbfa01..85c5ca8fe 100644 --- a/src/objects/zcl_abapgit_object_srvb.clas.abap +++ b/src/objects/zcl_abapgit_object_srvb.clas.abap @@ -129,6 +129,18 @@ CLASS zcl_abapgit_object_srvb IMPLEMENTATION. CHANGING cs_service_binding = cs_service_binding ). + clear_field( + EXPORTING + iv_fieldname = 'METADATA-RESPONSIBLE' + CHANGING + cs_service_binding = cs_service_binding ). + + clear_field( + EXPORTING + iv_fieldname = 'METADATA-MASTER_LANGUAGE' + CHANGING + cs_service_binding = cs_service_binding ). + ENDMETHOD. diff --git a/src/objects/zcl_abapgit_object_sush.clas.abap b/src/objects/zcl_abapgit_object_sush.clas.abap index d9e0cc92d..974a94250 100644 --- a/src/objects/zcl_abapgit_object_sush.clas.abap +++ b/src/objects/zcl_abapgit_object_sush.clas.abap @@ -23,10 +23,10 @@ CLASS zcl_abapgit_object_sush DEFINITION METHODS clear_metadata CHANGING cs_data_head TYPE any - ct_usobx TYPE table - ct_usobt TYPE table - ct_usobx_ext TYPE table - ct_usobt_ext TYPE table. + ct_usobx TYPE STANDARD TABLE + ct_usobt TYPE STANDARD TABLE + ct_usobx_ext TYPE STANDARD TABLE + ct_usobt_ext TYPE STANDARD TABLE. ENDCLASS. diff --git a/src/objects/zcl_abapgit_object_ucsa.clas.abap b/src/objects/zcl_abapgit_object_ucsa.clas.abap index 95b791087..0f80e1516 100644 --- a/src/objects/zcl_abapgit_object_ucsa.clas.abap +++ b/src/objects/zcl_abapgit_object_ucsa.clas.abap @@ -158,6 +158,8 @@ CLASS zcl_abapgit_object_ucsa IMPLEMENTATION. tadir_delete( ). + corr_insert( iv_package ). + ENDMETHOD. @@ -195,6 +197,8 @@ CLASS zcl_abapgit_object_ucsa IMPLEMENTATION. tadir_insert( iv_package ). + corr_insert( iv_package ). + CATCH cx_root INTO lx_root. lv_text = lx_root->get_text( ). zcx_abapgit_exception=>raise( lv_text ). diff --git a/src/objects/zcl_abapgit_object_ueno.clas.abap b/src/objects/zcl_abapgit_object_ueno.clas.abap index 079ac07ac..d23a46759 100644 --- a/src/objects/zcl_abapgit_object_ueno.clas.abap +++ b/src/objects/zcl_abapgit_object_ueno.clas.abap @@ -569,7 +569,7 @@ CLASS zcl_abapgit_object_ueno IMPLEMENTATION. header = ls_docu-header content = ls_docu-content itf = ls_docu-itf - pstatus = lv_error_status. + pstatus = lv_error_status ##ARG_OK. CHECK lv_error_status = 'S'. "Success diff --git a/src/objects/zcl_abapgit_object_wdca.clas.abap b/src/objects/zcl_abapgit_object_wdca.clas.abap index f5f8a1276..fd041d6fc 100644 --- a/src/objects/zcl_abapgit_object_wdca.clas.abap +++ b/src/objects/zcl_abapgit_object_wdca.clas.abap @@ -303,7 +303,7 @@ CLASS zcl_abapgit_object_wdca IMPLEMENTATION. WHERE config_id = ls_outline-config_id AND config_type = ls_outline-config_type AND config_var = ls_outline-config_var. - CATCH zcx_abapgit_exception. + CATCH zcx_abapgit_exception ##NO_HANDLER. " File not found ENDTRY. diff --git a/src/objects/zcl_abapgit_object_xinx.clas.abap b/src/objects/zcl_abapgit_object_xinx.clas.abap index 305e7cef9..020901d8c 100644 --- a/src/objects/zcl_abapgit_object_xinx.clas.abap +++ b/src/objects/zcl_abapgit_object_xinx.clas.abap @@ -100,7 +100,7 @@ CLASS zcl_abapgit_object_xinx IMPLEMENTATION. suppress_transport = 'X' EXCEPTIONS no_docu_found = 1 - OTHERS = 2. + OTHERS = 2 ##FM_SUBRC_OK. ENDMETHOD. @@ -317,6 +317,9 @@ CLASS zcl_abapgit_object_xinx IMPLEMENTATION. EXCEPTIONS illegal_input = 1 OTHERS = 2. + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( 'Error reading index' ). + ENDIF. rv_bool = boolc( ls_dd12v IS NOT INITIAL ). diff --git a/src/objects/zcl_abapgit_objects.clas.abap b/src/objects/zcl_abapgit_objects.clas.abap index 218529719..3c82e136e 100644 --- a/src/objects/zcl_abapgit_objects.clas.abap +++ b/src/objects/zcl_abapgit_objects.clas.abap @@ -4,9 +4,6 @@ CLASS zcl_abapgit_objects DEFINITION PUBLIC SECTION. - TYPES: - ty_types_tt TYPE SORTED TABLE OF tadir-object WITH UNIQUE KEY table_line . - CLASS-METHODS serialize IMPORTING !is_item TYPE zif_abapgit_definitions=>ty_item @@ -71,7 +68,7 @@ CLASS zcl_abapgit_objects DEFINITION VALUE(rv_bool) TYPE abap_bool . CLASS-METHODS supported_list RETURNING - VALUE(rt_types) TYPE ty_types_tt . + VALUE(rt_types) TYPE zif_abapgit_objects=>ty_types_tt. CLASS-METHODS is_active IMPORTING !is_item TYPE zif_abapgit_definitions=>ty_item @@ -663,7 +660,7 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. li_progress TYPE REF TO zif_abapgit_progress, lv_path TYPE string, lt_items TYPE zif_abapgit_definitions=>ty_items_tt, - lt_steps_id TYPE zif_abapgit_definitions=>ty_deserialization_step_tt, + lt_steps_id TYPE zif_abapgit_objects=>ty_deserialization_step_tt, lt_steps TYPE zif_abapgit_objects=>ty_step_data_tt, lx_exc TYPE REF TO zcx_abapgit_exception. DATA lo_folder_logic TYPE REF TO zcl_abapgit_folder_logic. @@ -672,7 +669,7 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. DATA lo_abap_language_vers TYPE REF TO zcl_abapgit_abap_language_vers. FIELD-SYMBOLS: TYPE zif_abapgit_definitions=>ty_result, - TYPE LINE OF zif_abapgit_definitions=>ty_deserialization_step_tt, + TYPE LINE OF zif_abapgit_objects=>ty_deserialization_step_tt, TYPE LINE OF zif_abapgit_objects=>ty_step_data_tt, TYPE LINE OF zif_abapgit_objects=>ty_deserialization_tt. diff --git a/src/objects/zcl_abapgit_objects.clas.testclasses.abap b/src/objects/zcl_abapgit_objects.clas.testclasses.abap index ae2704279..5d29ba4e6 100644 --- a/src/objects/zcl_abapgit_objects.clas.testclasses.abap +++ b/src/objects/zcl_abapgit_objects.clas.testclasses.abap @@ -29,7 +29,7 @@ CLASS ltcl_object_types IMPLEMENTATION. DATA: ls_item TYPE zif_abapgit_definitions=>ty_item, lv_exists TYPE abap_bool, - lt_types TYPE zcl_abapgit_objects=>ty_types_tt. + lt_types TYPE zif_abapgit_objects=>ty_types_tt. FIELD-SYMBOLS: LIKE LINE OF lt_types. diff --git a/src/objects/zcl_abapgit_objects_program.clas.abap b/src/objects/zcl_abapgit_objects_program.clas.abap index fc75e7f71..8c6063d92 100644 --- a/src/objects/zcl_abapgit_objects_program.clas.abap +++ b/src/objects/zcl_abapgit_objects_program.clas.abap @@ -601,7 +601,8 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION. ENDIF. ENDIF. - IF lv_state = c_state-inactive. "Textpool in main language needs to be activated + "Textpool in main language needs to be activated (not for FUGS/FUGX) + IF lv_state = c_state-inactive AND iv_program NP 'SAPLX*'. zcl_abapgit_objects_activation=>add( iv_type = 'REPT' iv_name = iv_program @@ -650,7 +651,7 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION. cancelled = 2 name_not_allowed = 3 permission_error = 4 - OTHERS = 5. + OTHERS = 5 ##FM_SUBRC_OK. CATCH cx_sy_dyn_call_param_not_found. CALL FUNCTION 'RPY_PROGRAM_INSERT' EXPORTING @@ -667,7 +668,7 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION. cancelled = 2 name_not_allowed = 3 permission_error = 4 - OTHERS = 5. + OTHERS = 5 ##FM_SUBRC_OK. ENDTRY. IF sy-subrc = 3. diff --git a/src/objects/zcl_abapgit_objects_super.clas.abap b/src/objects/zcl_abapgit_objects_super.clas.abap index c6b6d0382..3ad0a10c5 100644 --- a/src/objects/zcl_abapgit_objects_super.clas.abap +++ b/src/objects/zcl_abapgit_objects_super.clas.abap @@ -191,7 +191,7 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION. object_not_specified = 3 permission_failure = 4 dialog_needed = 5 - OTHERS = 6. + OTHERS = 6 ##FM_SUBRC_OK. CATCH cx_sy_dyn_call_param_not_found. TRY. " try to force deletion for APPENDs @@ -207,7 +207,7 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION. object_not_specified = 3 permission_failure = 4 dialog_needed = 5 - OTHERS = 6. + OTHERS = 6 ##FM_SUBRC_OK. CATCH cx_sy_dyn_call_param_not_found. " no_ask_delete_append and aie_force_deletion not available in lower releases CALL FUNCTION 'RS_DD_DELETE_OBJ' @@ -221,7 +221,7 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION. object_not_specified = 3 permission_failure = 4 dialog_needed = 5 - OTHERS = 6. + OTHERS = 6 ##FM_SUBRC_OK. ENDTRY. ENDTRY. diff --git a/src/objects/zif_abapgit_object.intf.abap b/src/objects/zif_abapgit_object.intf.abap index b2a4b7121..24d938fbb 100644 --- a/src/objects/zif_abapgit_object.intf.abap +++ b/src/objects/zif_abapgit_object.intf.abap @@ -1,12 +1,11 @@ -INTERFACE zif_abapgit_object - PUBLIC . +INTERFACE zif_abapgit_object PUBLIC. CONSTANTS: BEGIN OF gc_step_id, - early TYPE zif_abapgit_definitions=>ty_deserialization_step VALUE `EARLY`, - abap TYPE zif_abapgit_definitions=>ty_deserialization_step VALUE `ABAP`, - ddic TYPE zif_abapgit_definitions=>ty_deserialization_step VALUE `DDIC`, - late TYPE zif_abapgit_definitions=>ty_deserialization_step VALUE `LATE`, + early TYPE zif_abapgit_objects=>ty_deserialization_step VALUE 'EARLY', + abap TYPE zif_abapgit_objects=>ty_deserialization_step VALUE 'ABAP', + ddic TYPE zif_abapgit_objects=>ty_deserialization_step VALUE 'DDIC', + late TYPE zif_abapgit_objects=>ty_deserialization_step VALUE 'LATE', END OF gc_step_id. METHODS serialize @@ -19,7 +18,7 @@ INTERFACE zif_abapgit_object IMPORTING !iv_package TYPE devclass !io_xml TYPE REF TO zif_abapgit_xml_input - !iv_step TYPE zif_abapgit_definitions=>ty_deserialization_step + !iv_step TYPE zif_abapgit_objects=>ty_deserialization_step !ii_log TYPE REF TO zif_abapgit_log !iv_transport TYPE trkorr RAISING @@ -78,7 +77,7 @@ INTERFACE zif_abapgit_object METHODS get_deserialize_steps RETURNING - VALUE(rt_steps) TYPE zif_abapgit_definitions=>ty_deserialization_step_tt . + VALUE(rt_steps) TYPE zif_abapgit_objects=>ty_deserialization_step_tt. METHODS get_deserialize_order IMPORTING diff --git a/src/objects/zif_abapgit_objects.intf.abap b/src/objects/zif_abapgit_objects.intf.abap index 8709cb6dd..e20f4bd19 100644 --- a/src/objects/zif_abapgit_objects.intf.abap +++ b/src/objects/zif_abapgit_objects.intf.abap @@ -1,5 +1,4 @@ -INTERFACE zif_abapgit_objects - PUBLIC. +INTERFACE zif_abapgit_objects PUBLIC. TYPES: BEGIN OF ty_serialization, @@ -15,9 +14,15 @@ INTERFACE zif_abapgit_objects END OF ty_deserialization . TYPES: ty_deserialization_tt TYPE STANDARD TABLE OF ty_deserialization WITH DEFAULT KEY . + TYPES: + ty_types_tt TYPE SORTED TABLE OF tadir-object WITH UNIQUE KEY table_line. + TYPES: + ty_deserialization_step TYPE string. + TYPES: + ty_deserialization_step_tt TYPE STANDARD TABLE OF ty_deserialization_step WITH DEFAULT KEY. TYPES: BEGIN OF ty_step_data, - step_id TYPE zif_abapgit_definitions=>ty_deserialization_step, + step_id TYPE ty_deserialization_step, order TYPE i, descr TYPE string, syntax_check TYPE abap_bool, diff --git a/src/persist/zcl_abapgit_persist_migrate.clas.abap b/src/persist/zcl_abapgit_persist_migrate.clas.abap index 77ef0989d..c2f0a53ef 100644 --- a/src/persist/zcl_abapgit_persist_migrate.clas.abap +++ b/src/persist/zcl_abapgit_persist_migrate.clas.abap @@ -53,7 +53,7 @@ CLASS zcl_abapgit_persist_migrate IMPLEMENTATION. TRY. lcl_cua_interface=>new( )->put_own_cua( ls_cua ). - CATCH zcx_abapgit_exception. + CATCH zcx_abapgit_exception ##NO_HANDLER. ENDTRY. ENDMETHOD. @@ -70,7 +70,7 @@ CLASS zcl_abapgit_persist_migrate IMPLEMENTATION. TRY. ls_own_cua = lcl_cua_interface=>new( )->get_own_cua( ). - CATCH zcx_abapgit_exception. + CATCH zcx_abapgit_exception ##NO_HANDLER. ENDTRY. IF ls_own_cua IS INITIAL. diff --git a/src/repo/filter/zcl_abapgit_repo_filter.clas.abap b/src/repo/filter/zcl_abapgit_repo_filter.clas.abap index 5dc36a3a1..4f9f073a1 100644 --- a/src/repo/filter/zcl_abapgit_repo_filter.clas.abap +++ b/src/repo/filter/zcl_abapgit_repo_filter.clas.abap @@ -19,12 +19,8 @@ CLASS zcl_abapgit_repo_filter DEFINITION ct_files TYPE zif_abapgit_git_definitions=>ty_files_tt RAISING zcx_abapgit_exception. + PROTECTED SECTION. - - METHODS filter_generated_tadir - CHANGING - !ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt . - PRIVATE SECTION. ENDCLASS. @@ -41,8 +37,6 @@ CLASS zcl_abapgit_repo_filter IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF ct_tadir. - filter_generated_tadir( CHANGING ct_tadir = ct_tadir ). - IF lines( it_filter ) = 0. RETURN. ENDIF. @@ -96,13 +90,6 @@ CLASS zcl_abapgit_repo_filter IMPLEMENTATION. INSERT ls_tadir INTO TABLE lt_tadir. - filter_generated_tadir( CHANGING ct_tadir = lt_tadir ). - - IF lt_tadir IS INITIAL. - DELETE ct_files. - CONTINUE. - ENDIF. - READ TABLE lt_filter TRANSPORTING NO FIELDS WITH KEY object = ls_tadir-object obj_name = ls_tadir-obj_name @@ -115,52 +102,4 @@ CLASS zcl_abapgit_repo_filter IMPLEMENTATION. ENDLOOP. ENDMETHOD. - - - METHOD filter_generated_tadir. - - DATA: ls_tadir TYPE zif_abapgit_definitions=>ty_tadir, - ls_tadir_gen TYPE zif_abapgit_definitions=>ty_tadir, - lv_cd_object TYPE cdobjectcl, - lt_cd_names TYPE STANDARD TABLE OF cdnames, - ls_cd_names TYPE cdnames, - lt_tcdrs TYPE STANDARD TABLE OF tcdrs, - ls_tcdrs TYPE tcdrs. - - LOOP AT ct_tadir INTO ls_tadir WHERE pgmid = 'R3TR' AND object = 'CHDO'. - CLEAR: lv_cd_object, lt_cd_names, ls_tadir_gen, lt_tcdrs, ls_tcdrs. - - lv_cd_object = ls_tadir-obj_name. - - CALL FUNCTION 'CDNAMES_GET' - EXPORTING - iv_object = lv_cd_object - TABLES - it_names = lt_cd_names - it_tcdrs = lt_tcdrs - EXCEPTIONS - object_space = 1 - object_not_found = 2 - OTHERS = 3. - IF sy-subrc <> 0. - CONTINUE. - ENDIF. - - LOOP AT lt_cd_names INTO ls_cd_names. - DELETE ct_tadir WHERE pgmid = 'R3TR' - AND ( ( object = 'PROG' - AND ( obj_name = ls_cd_names-repnamec - OR obj_name = ls_cd_names-repnamet - OR obj_name = ls_cd_names-repnamefix - OR obj_name = ls_cd_names-repnamevar ) ) - OR object = 'FUGR' AND obj_name = ls_cd_names-fgrp ). - ENDLOOP. - - LOOP AT lt_tcdrs INTO ls_tcdrs. - DELETE ct_tadir WHERE pgmid = 'R3TR' AND object = 'TABL' AND obj_name = ls_tcdrs-tabname. - ENDLOOP. - - ENDLOOP. - - ENDMETHOD. ENDCLASS. diff --git a/src/repo/utils/zcl_abapgit_repo_labels.clas.abap b/src/repo/utils/zcl_abapgit_repo_labels.clas.abap index f76a21936..5793913ec 100644 --- a/src/repo/utils/zcl_abapgit_repo_labels.clas.abap +++ b/src/repo/utils/zcl_abapgit_repo_labels.clas.abap @@ -136,7 +136,7 @@ CLASS zcl_abapgit_repo_labels IMPLEMENTATION. TRY. validate_one_label_color( ). APPEND TO lt_normalized. - CATCH zcx_abapgit_exception. + CATCH zcx_abapgit_exception ##NO_HANDLER. ENDTRY. ENDLOOP. @@ -225,7 +225,7 @@ CLASS zcl_abapgit_repo_labels IMPLEMENTATION. ro_map->set( iv_key = -label iv_val = -color ). - CATCH zcx_abapgit_exception. + CATCH zcx_abapgit_exception ##NO_HANDLER. ENDTRY. ENDLOOP. diff --git a/src/repo/zcl_abapgit_repo.clas.abap b/src/repo/zcl_abapgit_repo.clas.abap index b24ecf3d4..b74622984 100644 --- a/src/repo/zcl_abapgit_repo.clas.abap +++ b/src/repo/zcl_abapgit_repo.clas.abap @@ -192,7 +192,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION. +CLASS zcl_abapgit_repo IMPLEMENTATION. METHOD bind_listener. @@ -402,7 +402,7 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION. METHOD get_unsupported_objects_local. DATA: lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt, - lt_supported_types TYPE zcl_abapgit_objects=>ty_types_tt. + lt_supported_types TYPE zif_abapgit_objects=>ty_types_tt. FIELD-SYMBOLS: LIKE LINE OF lt_tadir, LIKE LINE OF rt_objects. diff --git a/src/ui/core/zcl_abapgit_gui.clas.abap b/src/ui/core/zcl_abapgit_gui.clas.abap index ef5e6f477..9c9b5bfe2 100644 --- a/src/ui/core/zcl_abapgit_gui.clas.abap +++ b/src/ui/core/zcl_abapgit_gui.clas.abap @@ -115,7 +115,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_GUI IMPLEMENTATION. +CLASS zcl_abapgit_gui IMPLEMENTATION. METHOD back. @@ -373,7 +373,7 @@ CLASS ZCL_ABAPGIT_GUI IMPLEMENTATION. li_modal ?= ii_page. rv_yes = li_modal->is_modal( ). ENDIF. - CATCH cx_sy_move_cast_error. + CATCH cx_sy_move_cast_error ##NO_HANDLER. ENDTRY. ENDMETHOD. diff --git a/src/ui/core/zcl_abapgit_html.clas.abap b/src/ui/core/zcl_abapgit_html.clas.abap index a8aaafdf7..f0936f9d6 100644 --- a/src/ui/core/zcl_abapgit_html.clas.abap +++ b/src/ui/core/zcl_abapgit_html.clas.abap @@ -48,6 +48,7 @@ CLASS zcl_abapgit_html DEFINITION within_style TYPE abap_bool, within_js TYPE abap_bool, within_textarea TYPE abap_bool, + within_pre TYPE abap_bool, indent TYPE i, indent_str TYPE string, END OF ty_indent_context . @@ -59,6 +60,8 @@ CLASS zcl_abapgit_html DEFINITION script_close TYPE abap_bool, textarea_open TYPE abap_bool, textarea_close TYPE abap_bool, + pre_open TYPE abap_bool, + pre_close TYPE abap_bool, tag_close TYPE abap_bool, curly_close TYPE abap_bool, openings TYPE i, @@ -85,7 +88,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_HTML IMPLEMENTATION. +CLASS zcl_abapgit_html IMPLEMENTATION. METHOD checkbox. @@ -120,10 +123,6 @@ CLASS ZCL_ABAPGIT_HTML IMPLEMENTATION. ENDMETHOD. - METHOD set_debug_mode. - gv_debug_mode = iv_mode. - ENDMETHOD. - METHOD create. CREATE OBJECT ri_instance TYPE zcl_abapgit_html. IF iv_initial_chunk IS NOT INITIAL. @@ -134,11 +133,11 @@ CLASS ZCL_ABAPGIT_HTML IMPLEMENTATION. METHOD icon. - DATA: lv_hint TYPE string, - lv_name TYPE string, - lv_color TYPE string, - lv_class TYPE string, - lv_onclick TYPE string. + DATA: lv_hint TYPE string, + lv_name TYPE string, + lv_color TYPE string, + lv_class TYPE string, + lv_onclick TYPE string. SPLIT iv_name AT '/' INTO lv_name lv_color. @@ -181,6 +180,17 @@ CLASS ZCL_ABAPGIT_HTML IMPLEMENTATION. RETURN. ENDIF. + " No indent for pre tags + IF ls_study-pre_open = abap_true. + cs_context-within_pre = abap_true. + RETURN. + ELSEIF ls_study-pre_close = abap_true. + cs_context-within_pre = abap_false. + RETURN. + ELSEIF cs_context-within_pre = abap_true. + RETURN. + ENDIF. + " First closing tag - shift back exceptionally IF ( ls_study-script_close = abap_true OR ls_study-style_close = abap_true @@ -239,6 +249,11 @@ CLASS ZCL_ABAPGIT_HTML IMPLEMENTATION. ENDMETHOD. + METHOD set_debug_mode. + gv_debug_mode = iv_mode. + ENDMETHOD. + + METHOD study_line. DATA: lv_line TYPE string, @@ -309,6 +324,16 @@ CLASS ZCL_ABAPGIT_HTML IMPLEMENTATION. ENDIF. ENDIF. + " Pre (same assumptions as above) + IF is_context-within_pre = abap_true AND lv_len >= 5 AND lv_line(5) = '= 4 AND lv_line(4) = ' 0. " Not found + rs_result-pre_open = abap_true. + ENDIF. + ENDIF. + ENDMETHOD. @@ -564,10 +589,10 @@ CLASS ZCL_ABAPGIT_HTML IMPLEMENTATION. DATA lv_close_tag TYPE string. DATA ls_data_attr LIKE LINE OF it_data_attrs. - DATA: lv_class TYPE string, - lv_id TYPE string, + DATA: lv_class TYPE string, + lv_id TYPE string, lv_data_attr TYPE string, - lv_title TYPE string. + lv_title TYPE string. IF iv_id IS NOT INITIAL. lv_id = | id="{ iv_id }"|. diff --git a/src/ui/core/zcl_abapgit_html.clas.testclasses.abap b/src/ui/core/zcl_abapgit_html.clas.testclasses.abap index 1e97e3232..09f920dd3 100644 --- a/src/ui/core/zcl_abapgit_html.clas.testclasses.abap +++ b/src/ui/core/zcl_abapgit_html.clas.testclasses.abap @@ -34,6 +34,8 @@ CLASS ltcl_html DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. indent3 FOR TESTING RAISING zcx_abapgit_exception, indent4 FOR TESTING RAISING zcx_abapgit_exception, indent5 FOR TESTING RAISING zcx_abapgit_exception, + indent6 FOR TESTING RAISING zcx_abapgit_exception, + indent7 FOR TESTING RAISING zcx_abapgit_exception, style1 FOR TESTING RAISING zcx_abapgit_exception. METHODS: @@ -130,6 +132,59 @@ CLASS ltcl_html IMPLEMENTATION. ENDMETHOD. + METHOD indent6. + + " Content of textarea must not be indented + DATA lv_exp TYPE string. + + mo_html->add( '' ). + mo_html->add( '' ). + mo_html->add( '' ). + + lv_exp = '' && cl_abap_char_utilities=>newline && + '' && cl_abap_char_utilities=>newline && + ''. + + cl_abap_unit_assert=>assert_equals( + act = mo_html->render( ) + exp = lv_exp ). + + ENDMETHOD. + + METHOD indent7. + + " Content of pre tag must not be indented + DATA lv_exp TYPE string. + + mo_html->add( '' ). + mo_html->add( '
' ).
+    mo_html->add( 'Do not change' ).
+    mo_html->add( '  the indent' ).
+    mo_html->add( '    here' ).
+    mo_html->add( '
' ). + mo_html->add( '' ). + + lv_exp = '' && cl_abap_char_utilities=>newline && + '
' && cl_abap_char_utilities=>newline &&
+             'Do not change' && cl_abap_char_utilities=>newline &&
+             '  the indent' && cl_abap_char_utilities=>newline &&
+             '    here' && cl_abap_char_utilities=>newline &&
+             '
' && cl_abap_char_utilities=>newline && + ''. + + cl_abap_unit_assert=>assert_equals( + act = mo_html->render( ) + exp = lv_exp ). + + ENDMETHOD. + + METHOD style1. DATA lv_exp TYPE string. diff --git a/src/ui/lib/zcl_abapgit_exception_viewer.clas.abap b/src/ui/lib/zcl_abapgit_exception_viewer.clas.abap index 31e1fc8ac..0dc5fa2f2 100644 --- a/src/ui/lib/zcl_abapgit_exception_viewer.clas.abap +++ b/src/ui/lib/zcl_abapgit_exception_viewer.clas.abap @@ -146,6 +146,7 @@ CLASS zcl_abapgit_exception_viewer IMPLEMENTATION. METHOD goto_message. + DATA: lv_msg TYPE c LENGTH 100. DATA: lt_bdcdata TYPE STANDARD TABLE OF bdcdata, ls_bdcdata LIKE LINE OF lt_bdcdata. @@ -177,17 +178,18 @@ CLASS zcl_abapgit_exception_viewer IMPLEMENTATION. CALL FUNCTION 'ABAP4_CALL_TRANSACTION' STARTING NEW TASK 'GIT' EXPORTING - tcode = 'SE91' - mode_val = 'E' + tcode = 'SE91' + mode_val = 'E' TABLES - using_tab = lt_bdcdata + using_tab = lt_bdcdata EXCEPTIONS - call_transaction_denied = 1 - tcode_invalid = 2 - OTHERS = 3. + system_failure = 1 MESSAGE lv_msg + communication_failure = 2 MESSAGE lv_msg + resource_failure = 3 + OTHERS = 4. IF sy-subrc <> 0. - zcx_abapgit_exception=>raise_t100( ). + zcx_abapgit_exception=>raise( lv_msg ). ENDIF. ENDMETHOD. diff --git a/src/ui/lib/zcl_abapgit_gui_chunk_lib.clas.abap b/src/ui/lib/zcl_abapgit_gui_chunk_lib.clas.abap index fe330fbeb..85babc732 100644 --- a/src/ui/lib/zcl_abapgit_gui_chunk_lib.clas.abap +++ b/src/ui/lib/zcl_abapgit_gui_chunk_lib.clas.abap @@ -243,7 +243,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_GUI_CHUNK_LIB IMPLEMENTATION. +CLASS zcl_abapgit_gui_chunk_lib IMPLEMENTATION. METHOD class_constructor. @@ -261,7 +261,7 @@ CLASS ZCL_ABAPGIT_GUI_CHUNK_LIB IMPLEMENTATION. timezone = gv_time_zone EXCEPTIONS customizing_missing = 1 - OTHERS = 2. + OTHERS = 2 ##FM_SUBRC_OK. ENDTRY. ENDMETHOD. diff --git a/src/ui/lib/zcl_abapgit_gui_page_hoc.clas.abap b/src/ui/lib/zcl_abapgit_gui_page_hoc.clas.abap index 2a8ae8e53..ff2d8b1c9 100644 --- a/src/ui/lib/zcl_abapgit_gui_page_hoc.clas.abap +++ b/src/ui/lib/zcl_abapgit_gui_page_hoc.clas.abap @@ -54,7 +54,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_GUI_PAGE_HOC IMPLEMENTATION. +CLASS zcl_abapgit_gui_page_hoc IMPLEMENTATION. METHOD constructor. @@ -96,14 +96,14 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_HOC IMPLEMENTATION. IF ls_control-page_menu_provider IS NOT BOUND. " try component itself TRY. ls_control-page_menu_provider ?= ii_child_component. - CATCH cx_sy_move_cast_error. + CATCH cx_sy_move_cast_error ##NO_HANDLER. ENDTRY. ENDIF. IF ls_control-page_title_provider IS NOT BOUND. " try component itself TRY. ls_control-page_title_provider ?= ii_child_component. - CATCH cx_sy_move_cast_error. + CATCH cx_sy_move_cast_error ##NO_HANDLER. ENDTRY. ENDIF. @@ -132,7 +132,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_HOC IMPLEMENTATION. TRY. li_modal ?= mi_child. rv_is_modal = li_modal->is_modal( ). - CATCH cx_sy_move_cast_error. + CATCH cx_sy_move_cast_error ##NO_HANDLER. ENDTRY. ENDMETHOD. @@ -141,7 +141,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_HOC IMPLEMENTATION. METHOD detect_title_provider. TRY. ri_ref ?= mi_child. - CATCH cx_sy_move_cast_error. + CATCH cx_sy_move_cast_error ##NO_HANDLER. ENDTRY. ENDMETHOD. diff --git a/src/ui/lib/zcl_abapgit_gui_picklist.clas.xml b/src/ui/lib/zcl_abapgit_gui_picklist.clas.xml index 3830c0365..d11fbd3be 100644 --- a/src/ui/lib/zcl_abapgit_gui_picklist.clas.xml +++ b/src/ui/lib/zcl_abapgit_gui_picklist.clas.xml @@ -5,7 +5,7 @@ ZCL_ABAPGIT_GUI_PICKLIST E - abapGit - Pick from list + abapGit - GUI Pick List 1 X X diff --git a/src/ui/lib/zcl_abapgit_log_viewer.clas.abap b/src/ui/lib/zcl_abapgit_log_viewer.clas.abap index 9c86a540a..b78d2fa71 100644 --- a/src/ui/lib/zcl_abapgit_log_viewer.clas.abap +++ b/src/ui/lib/zcl_abapgit_log_viewer.clas.abap @@ -30,6 +30,8 @@ CLASS zcl_abapgit_log_viewer DEFINITION source TYPE icon_d, callstack TYPE icon_d, cell_type TYPE salv_t_int4_column, + id TYPE sy-msgid, + number TYPE sy-msgno, END OF ty_log_out. TYPES: ty_log_outs TYPE STANDARD TABLE OF ty_log_out @@ -91,7 +93,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_LOG_VIEWER IMPLEMENTATION. +CLASS zcl_abapgit_log_viewer IMPLEMENTATION. METHOD calculate_cell_type. @@ -230,7 +232,7 @@ CLASS ZCL_ABAPGIT_LOG_VIEWER IMPLEMENTATION. CLEAR: ls_log. - ls_log-msg = lr_message->text. + ls_log-msg = lr_message->text. ls_log-exception = lr_message->exception. CASE lr_message->type. @@ -268,6 +270,10 @@ CLASS ZCL_ABAPGIT_LOG_VIEWER IMPLEMENTATION. CATCH cx_sy_move_cast_error ##NO_HANDLER. ENDTRY. + ELSEIF lr_message->id IS NOT INITIAL AND lr_message->number IS NOT INITIAL. + ls_log-id = lr_message->id. + ls_log-number = lr_message->number. + ls_log-longtext = icon_system_help. ENDIF. ls_log-obj_type = lr_message->obj_type. @@ -387,6 +393,16 @@ CLASS ZCL_ABAPGIT_LOG_VIEWER IMPLEMENTATION. lo_column->set_technical( abap_true ). ENDIF. + LOOP AT gt_log TRANSPORTING NO FIELDS WHERE id IS NOT INITIAL. + EXIT. + ENDLOOP. + IF sy-subrc <> 0. + lo_column = lo_columns->get_column( |ID| ). + lo_column->set_technical( abap_true ). + lo_column = lo_columns->get_column( |NUMBER| ). + lo_column->set_technical( abap_true ). + ENDIF. + ls_position = zcl_abapgit_popups=>center( iv_width = 125 iv_height = 20 ). @@ -424,31 +440,34 @@ CLASS ZCL_ABAPGIT_LOG_VIEWER IMPLEMENTATION. lt_dummy2 TYPE TABLE OF dval, ls_help_info TYPE help_info. - IF is_log-exception IS NOT BOUND. + IF is_log-exception IS BOUND. + TRY. + lx_abapgit ?= is_log-exception. + CATCH cx_sy_move_cast_error. + RETURN. + ENDTRY. + + lv_docu_object = lx_abapgit->if_t100_message~t100key-msgid && lx_abapgit->if_t100_message~t100key-msgno. + ls_help_info-messageid = lx_abapgit->if_t100_message~t100key-msgid. + ls_help_info-messagenr = lx_abapgit->if_t100_message~t100key-msgno. + ls_help_info-msgv1 = lx_abapgit->msgv1. + ls_help_info-msgv2 = lx_abapgit->msgv2. + ls_help_info-msgv3 = lx_abapgit->msgv3. + ls_help_info-msgv4 = lx_abapgit->msgv4. + ELSEIF is_log-id IS NOT INITIAL AND is_log-number IS NOT INITIAL. + lv_docu_object = is_log-id && is_log-number. + ls_help_info-messageid = is_log-id. + ls_help_info-messagenr = is_log-number. + ELSE. RETURN. ENDIF. - TRY. - lx_abapgit ?= is_log-exception. - CATCH cx_sy_move_cast_error. - RETURN. - ENDTRY. - - lv_docu_object = lx_abapgit->if_t100_message~t100key-msgid. - lv_docu_object+2 = lx_abapgit->if_t100_message~t100key-msgno. - ls_help_info-call = 'D'. ls_help_info-spras = sy-langu. - ls_help_info-messageid = lx_abapgit->if_t100_message~t100key-msgid. - ls_help_info-messagenr = lx_abapgit->if_t100_message~t100key-msgno. ls_help_info-message = is_log-msg. ls_help_info-title = 'Longtext'. ls_help_info-docuid = 'NA'. - ls_help_info-docuobject = lv_docu_object. - ls_help_info-msgv1 = lx_abapgit->msgv1. - ls_help_info-msgv2 = lx_abapgit->msgv2. - ls_help_info-msgv3 = lx_abapgit->msgv3. - ls_help_info-msgv4 = lx_abapgit->msgv4. + ls_help_info-docuobject = condense( lv_docu_object ). CALL FUNCTION 'HELP_START' EXPORTING diff --git a/src/ui/pages/codi/zcl_abapgit_gui_page_codi_base.clas.abap b/src/ui/pages/codi/zcl_abapgit_gui_page_codi_base.clas.abap index 4a18a629b..822f53c53 100644 --- a/src/ui/pages/codi/zcl_abapgit_gui_page_codi_base.clas.abap +++ b/src/ui/pages/codi/zcl_abapgit_gui_page_codi_base.clas.abap @@ -127,7 +127,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_GUI_PAGE_CODI_BASE IMPLEMENTATION. +CLASS zcl_abapgit_gui_page_codi_base IMPLEMENTATION. METHOD apply_filter_kind. @@ -256,7 +256,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_CODI_BASE IMPLEMENTATION. ENDIF. ENDCASE. - CATCH cx_root. + CATCH cx_root ##NO_HANDLER. " leave empty, fallback to default, defined elsewhere ENDTRY. @@ -340,7 +340,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_CODI_BASE IMPLEMENTATION. RETURN. ENDIF. - CATCH zcx_abapgit_exception. + CATCH zcx_abapgit_exception ##NO_HANDLER. ENDTRY. TRY. diff --git a/src/ui/pages/codi/zcl_abapgit_gui_page_whereused.clas.xml b/src/ui/pages/codi/zcl_abapgit_gui_page_whereused.clas.xml index 1f1873811..ad32d13b8 100644 --- a/src/ui/pages/codi/zcl_abapgit_gui_page_whereused.clas.xml +++ b/src/ui/pages/codi/zcl_abapgit_gui_page_whereused.clas.xml @@ -5,7 +5,7 @@ ZCL_ABAPGIT_GUI_PAGE_WHEREUSED E - abapGit where-used page + abapGit - GUI Where-used 1 X X diff --git a/src/ui/pages/sett/zcl_abapgit_gui_page_sett_info.clas.abap b/src/ui/pages/sett/zcl_abapgit_gui_page_sett_info.clas.abap index 3125d605c..690b144cc 100644 --- a/src/ui/pages/sett/zcl_abapgit_gui_page_sett_info.clas.abap +++ b/src/ui/pages/sett/zcl_abapgit_gui_page_sett_info.clas.abap @@ -422,7 +422,7 @@ CLASS zcl_abapgit_gui_page_sett_info IMPLEMENTATION. DATA: ls_stats TYPE ty_stats, ls_item TYPE zif_abapgit_definitions=>ty_item, - lt_supported_types TYPE zcl_abapgit_objects=>ty_types_tt. + lt_supported_types TYPE zif_abapgit_objects=>ty_types_tt. ls_stats-measure = 'Number of Objects'. diff --git a/src/ui/pages/sett/zcl_abapgit_gui_page_sett_pers.clas.abap b/src/ui/pages/sett/zcl_abapgit_gui_page_sett_pers.clas.abap index 7e1209753..71f423278 100644 --- a/src/ui/pages/sett/zcl_abapgit_gui_page_sett_pers.clas.abap +++ b/src/ui/pages/sett/zcl_abapgit_gui_page_sett_pers.clas.abap @@ -317,7 +317,7 @@ CLASS zcl_abapgit_gui_page_sett_pers IMPLEMENTATION. lo_colors->set( iv_key = lv_l iv_val = lv_l ). - CATCH zcx_abapgit_exception. + CATCH zcx_abapgit_exception ##NO_HANDLER. ENDTRY. ENDLOOP. diff --git a/src/ui/pages/zcl_abapgit_gui_page_debuginfo.clas.abap b/src/ui/pages/zcl_abapgit_gui_page_debuginfo.clas.abap index 9fc930243..c2b561118 100644 --- a/src/ui/pages/zcl_abapgit_gui_page_debuginfo.clas.abap +++ b/src/ui/pages/zcl_abapgit_gui_page_debuginfo.clas.abap @@ -298,15 +298,15 @@ CLASS zcl_abapgit_gui_page_debuginfo IMPLEMENTATION. DATA: lv_list TYPE string, li_html TYPE REF TO zif_abapgit_html, - lt_types TYPE zcl_abapgit_objects=>ty_types_tt, + lt_types TYPE zif_abapgit_objects=>ty_types_tt, lv_type LIKE LINE OF lt_types, lt_obj TYPE STANDARD TABLE OF ko100 WITH DEFAULT KEY, lv_class TYPE seoclsname, li_object TYPE REF TO zif_abapgit_object, ls_item TYPE zif_abapgit_definitions=>ty_item, ls_metadata TYPE zif_abapgit_definitions=>ty_metadata, - lv_step TYPE zif_abapgit_definitions=>ty_deserialization_step, - lt_steps TYPE zif_abapgit_definitions=>ty_deserialization_step_tt. + lv_step TYPE zif_abapgit_objects=>ty_deserialization_step, + lt_steps TYPE zif_abapgit_objects=>ty_deserialization_step_tt. FIELD-SYMBOLS: TYPE ko100. diff --git a/src/ui/pages/zcl_abapgit_gui_page_patch.clas.abap b/src/ui/pages/zcl_abapgit_gui_page_patch.clas.abap index 9391f8a5a..922f9e049 100644 --- a/src/ui/pages/zcl_abapgit_gui_page_patch.clas.abap +++ b/src/ui/pages/zcl_abapgit_gui_page_patch.clas.abap @@ -528,7 +528,10 @@ CLASS zcl_abapgit_gui_page_patch IMPLEMENTATION. lv_patched TYPE abap_bool, lv_is_patch_possible TYPE abap_bool. - lv_patched = get_diff_object( iv_filename )->is_line_patched( iv_index ). + " In case an object is falsely detected as changed, filename is empty and there's no diff object + IF iv_filename IS NOT INITIAL. + lv_patched = get_diff_object( iv_filename )->is_line_patched( iv_index ). + ENDIF. lv_is_patch_possible = is_patch_line_possible( is_diff_line ). diff --git a/src/ui/pages/zcl_abapgit_gui_page_stage.clas.abap b/src/ui/pages/zcl_abapgit_gui_page_stage.clas.abap index 79c55fd92..9f4dba922 100644 --- a/src/ui/pages/zcl_abapgit_gui_page_stage.clas.abap +++ b/src/ui/pages/zcl_abapgit_gui_page_stage.clas.abap @@ -137,7 +137,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION. +CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION. METHOD check_selected. @@ -281,7 +281,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION. es_item = ls_item ). ls_changed_by-item = ls_item. INSERT ls_changed_by INTO TABLE lt_changed_by_remote. - CATCH zcx_abapgit_exception. + CATCH zcx_abapgit_exception ##NO_HANDLER. ENDTRY. ENDLOOP. @@ -348,7 +348,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION. rt_transports = li_cts_api->get_transports_for_list( lt_items ). - CATCH zcx_abapgit_exception. + CATCH zcx_abapgit_exception ##NO_HANDLER. ENDTRY. ENDMETHOD. diff --git a/src/ui/popups/zcl_abapgit_popup_branch_list.clas.abap b/src/ui/popups/zcl_abapgit_popup_branch_list.clas.abap index 7e6d5e8c3..232395a02 100644 --- a/src/ui/popups/zcl_abapgit_popup_branch_list.clas.abap +++ b/src/ui/popups/zcl_abapgit_popup_branch_list.clas.abap @@ -22,6 +22,7 @@ CLASS zcl_abapgit_popup_branch_list DEFINITION !iv_default_branch TYPE string OPTIONAL !iv_show_new_option TYPE abap_bool DEFAULT abap_false. + PROTECTED SECTION. PRIVATE SECTION. DATA mv_repo_url TYPE string. @@ -41,15 +42,6 @@ ENDCLASS. CLASS zcl_abapgit_popup_branch_list IMPLEMENTATION. - METHOD create. - CREATE OBJECT ri_popup TYPE zcl_abapgit_popup_branch_list - EXPORTING - iv_url = iv_url - iv_default_branch = iv_default_branch - iv_show_new_option = iv_show_new_option. - ENDMETHOD. - - METHOD constructor. mv_repo_url = iv_url. mv_default_branch = zif_abapgit_git_definitions=>c_git_branch-heads_prefix && iv_default_branch. @@ -57,14 +49,12 @@ CLASS zcl_abapgit_popup_branch_list IMPLEMENTATION. ENDMETHOD. - METHOD zif_abapgit_html_popup~create_picklist. - - CREATE OBJECT ro_picklist + METHOD create. + CREATE OBJECT ri_popup TYPE zcl_abapgit_popup_branch_list EXPORTING - iv_title = 'Choose Branch' - it_list = fetch_branch_list( ) - ii_item_renderer = me. - + iv_url = iv_url + iv_default_branch = iv_default_branch + iv_show_new_option = iv_show_new_option. ENDMETHOD. @@ -109,7 +99,6 @@ CLASS zcl_abapgit_popup_branch_list IMPLEMENTATION. FIELD-SYMBOLS TYPE zif_abapgit_git_definitions=>ty_git_branch. ASSIGN iv_item TO . - ASSERT sy-subrc = 0. " TODO render mv_default_branch properly, needs respecting support from the picklist components @@ -120,4 +109,15 @@ CLASS zcl_abapgit_popup_branch_list IMPLEMENTATION. ri_html = zcl_abapgit_html=>create( |{ -display_name }{ lv_head_marker }| ). ENDMETHOD. + + + METHOD zif_abapgit_html_popup~create_picklist. + + CREATE OBJECT ro_picklist + EXPORTING + iv_title = 'Choose Branch' + it_list = fetch_branch_list( ) + ii_item_renderer = me. + + ENDMETHOD. ENDCLASS. diff --git a/src/ui/popups/zcl_abapgit_popup_code_insp.clas.abap b/src/ui/popups/zcl_abapgit_popup_code_insp.clas.abap index 4e39b9984..09b14720c 100644 --- a/src/ui/popups/zcl_abapgit_popup_code_insp.clas.abap +++ b/src/ui/popups/zcl_abapgit_popup_code_insp.clas.abap @@ -24,7 +24,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_POPUP_CODE_INSP IMPLEMENTATION. +CLASS zcl_abapgit_popup_code_insp IMPLEMENTATION. METHOD create. @@ -44,7 +44,6 @@ CLASS ZCL_ABAPGIT_POPUP_CODE_INSP IMPLEMENTATION. FIELD-SYMBOLS TYPE LINE OF zif_abapgit_code_inspector=>ty_variants. ASSIGN iv_item TO . - ASSERT sy-subrc = 0. ri_html = zcl_abapgit_html=>create( |{ -name } - { -description }| ). diff --git a/src/ui/popups/zcl_abapgit_popup_pull_request.clas.abap b/src/ui/popups/zcl_abapgit_popup_pull_request.clas.abap index e6ed9f72b..327550038 100644 --- a/src/ui/popups/zcl_abapgit_popup_pull_request.clas.abap +++ b/src/ui/popups/zcl_abapgit_popup_pull_request.clas.abap @@ -67,7 +67,6 @@ CLASS zcl_abapgit_popup_pull_request IMPLEMENTATION. FIELD-SYMBOLS TYPE zif_abapgit_pr_enum_provider=>ty_pull_request. ASSIGN iv_item TO . - ASSERT sy-subrc = 0. ri_html = zcl_abapgit_html=>create( |{ -number } - { -title } @{ -user }| ). diff --git a/src/ui/popups/zcl_abapgit_popup_tag_list.clas.abap b/src/ui/popups/zcl_abapgit_popup_tag_list.clas.abap index 85ecdb296..fb99de911 100644 --- a/src/ui/popups/zcl_abapgit_popup_tag_list.clas.abap +++ b/src/ui/popups/zcl_abapgit_popup_tag_list.clas.abap @@ -18,6 +18,7 @@ CLASS zcl_abapgit_popup_tag_list DEFINITION IMPORTING iv_url TYPE string. + PROTECTED SECTION. PRIVATE SECTION. DATA mv_repo_url TYPE string. @@ -34,26 +35,15 @@ ENDCLASS. CLASS zcl_abapgit_popup_tag_list IMPLEMENTATION. - METHOD create. - CREATE OBJECT ri_popup TYPE zcl_abapgit_popup_tag_list - EXPORTING - iv_url = iv_url. - ENDMETHOD. - - METHOD constructor. mv_repo_url = iv_url. ENDMETHOD. - METHOD zif_abapgit_html_popup~create_picklist. - - CREATE OBJECT ro_picklist + METHOD create. + CREATE OBJECT ri_popup TYPE zcl_abapgit_popup_tag_list EXPORTING - iv_title = 'Choose Tag' - it_list = fetch_tag_list( ) - ii_item_renderer = me. - + iv_url = iv_url. ENDMETHOD. @@ -80,9 +70,19 @@ CLASS zcl_abapgit_popup_tag_list IMPLEMENTATION. FIELD-SYMBOLS TYPE zif_abapgit_git_definitions=>ty_git_branch. ASSIGN iv_item TO . - ASSERT sy-subrc = 0. ri_html = zcl_abapgit_html=>create( |{ -display_name }| ). ENDMETHOD. + + + METHOD zif_abapgit_html_popup~create_picklist. + + CREATE OBJECT ro_picklist + EXPORTING + iv_title = 'Choose Tag' + it_list = fetch_tag_list( ) + ii_item_renderer = me. + + ENDMETHOD. ENDCLASS. diff --git a/src/ui/routing/zcl_abapgit_gui_router.clas.abap b/src/ui/routing/zcl_abapgit_gui_router.clas.abap index 685b6af98..db7cf5da2 100644 --- a/src/ui/routing/zcl_abapgit_gui_router.clas.abap +++ b/src/ui/routing/zcl_abapgit_gui_router.clas.abap @@ -186,7 +186,8 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION. EXCEPTIONS communication_failure = 1 MESSAGE lv_msg system_failure = 2 MESSAGE lv_msg - OTHERS = 3. + resource_failure = 3 + OTHERS = 4. IF sy-subrc <> 0. lv_msg = |Error starting transaction { iv_tcode }: { lv_msg }|. MESSAGE lv_msg TYPE 'I'. @@ -478,6 +479,22 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION. ENDMETHOD. + METHOD go_stage_transport. + + DATA lt_r_trkorr TYPE zif_abapgit_definitions=>ty_trrngtrkor_tt. + DATA lo_repo TYPE REF TO zcl_abapgit_repo. + + lt_r_trkorr = zcl_abapgit_ui_factory=>get_popups( )->popup_select_wb_tc_tr_and_tsk( ). + + lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ). + + CREATE OBJECT ro_filter. + ro_filter->set_filter_values( iv_package = lo_repo->get_package( ) + it_r_trkorr = lt_r_trkorr ). + + ENDMETHOD. + + METHOD jump_display_transport. DATA: @@ -762,6 +779,28 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION. ENDMETHOD. + METHOD zip_export_transport. + + DATA lo_obj_filter_trans TYPE REF TO zcl_abapgit_object_filter_tran. + DATA lt_r_trkorr TYPE zif_abapgit_definitions=>ty_trrngtrkor_tt. + DATA lo_repo TYPE REF TO zcl_abapgit_repo. + DATA lv_xstr TYPE xstring. + + lt_r_trkorr = zcl_abapgit_ui_factory=>get_popups( )->popup_select_wb_tc_tr_and_tsk( ). + lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ). + lo_repo->refresh( ). + CREATE OBJECT lo_obj_filter_trans. + lo_obj_filter_trans->set_filter_values( iv_package = lo_repo->get_package( ) + it_r_trkorr = lt_r_trkorr ). + + lv_xstr = zcl_abapgit_zip=>encode_files( lo_repo->get_files_local_filtered( lo_obj_filter_trans ) ). + lo_repo->refresh( ). + file_download( iv_package = lo_repo->get_package( ) + iv_xstr = lv_xstr ). + + ENDMETHOD. + + METHOD zip_services. DATA: lv_key TYPE zif_abapgit_persistence=>ty_repo-key, @@ -860,40 +899,4 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION. ENDCASE. ENDMETHOD. - - METHOD zip_export_transport. - - DATA lo_obj_filter_trans TYPE REF TO zcl_abapgit_object_filter_tran. - DATA lt_r_trkorr TYPE zif_abapgit_definitions=>ty_trrngtrkor_tt. - DATA lo_repo TYPE REF TO zcl_abapgit_repo. - DATA lv_xstr TYPE xstring. - - lt_r_trkorr = zcl_abapgit_ui_factory=>get_popups( )->popup_select_wb_tc_tr_and_tsk( ). - lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ). - lo_repo->refresh( ). - CREATE OBJECT lo_obj_filter_trans. - lo_obj_filter_trans->set_filter_values( iv_package = lo_repo->get_package( ) - it_r_trkorr = lt_r_trkorr ). - - lv_xstr = zcl_abapgit_zip=>encode_files( lo_repo->get_files_local_filtered( lo_obj_filter_trans ) ). - lo_repo->refresh( ). - file_download( iv_package = lo_repo->get_package( ) - iv_xstr = lv_xstr ). - - ENDMETHOD. - - METHOD go_stage_transport. - - DATA lt_r_trkorr TYPE zif_abapgit_definitions=>ty_trrngtrkor_tt. - DATA lo_repo TYPE REF TO zcl_abapgit_repo. - - lt_r_trkorr = zcl_abapgit_ui_factory=>get_popups( )->popup_select_wb_tc_tr_and_tsk( ). - - lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ). - - CREATE OBJECT ro_filter. - ro_filter->set_filter_values( iv_package = lo_repo->get_package( ) - it_r_trkorr = lt_r_trkorr ). - - ENDMETHOD. ENDCLASS. diff --git a/src/ui/zabapgit_css_theme_dark.w3mi.data.css b/src/ui/zabapgit_css_theme_dark.w3mi.data.css index e6e867b36..2d59d8e4c 100644 --- a/src/ui/zabapgit_css_theme_dark.w3mi.data.css +++ b/src/ui/zabapgit_css_theme_dark.w3mi.data.css @@ -263,4 +263,4 @@ div.log { color: var(--theme-greyscale-dark); } .dialog input[readonly] { background-color: var(--theme-greyscale-dark); color: var(--theme-greyscale-medium); -} +} diff --git a/src/ui/zcl_abapgit_popups.clas.locals_imp.abap b/src/ui/zcl_abapgit_popups.clas.locals_imp.abap index 5facf3f92..1bbfcc52a 100644 --- a/src/ui/zcl_abapgit_popups.clas.locals_imp.abap +++ b/src/ui/zcl_abapgit_popups.clas.locals_imp.abap @@ -248,7 +248,7 @@ CLASS lcl_object_decision_list IMPLEMENTATION. TRY. lo_columns->get_column( |{ c_fieldname_obj_type }| ). lv_object_list = abap_true. - CATCH cx_salv_not_found. + CATCH cx_salv_not_found ##NO_HANDLER. ENDTRY. setup_columns( diff --git a/src/ui/zif_abapgit_popups.intf.abap b/src/ui/zif_abapgit_popups.intf.abap index d6217dbcb..d921b749e 100644 --- a/src/ui/zif_abapgit_popups.intf.abap +++ b/src/ui/zif_abapgit_popups.intf.abap @@ -12,7 +12,7 @@ INTERFACE zif_abapgit_popups show_icon TYPE abap_bool, center TYPE abap_bool, END OF ty_alv_column, - ty_alv_column_tt TYPE TABLE OF ty_alv_column WITH DEFAULT KEY. + ty_alv_column_tt TYPE STANDARD TABLE OF ty_alv_column WITH DEFAULT KEY. TYPES: BEGIN OF ty_popup_position, diff --git a/src/utils/zcl_abapgit_convert.clas.abap b/src/utils/zcl_abapgit_convert.clas.abap index c395457e0..f85d5f97e 100644 --- a/src/utils/zcl_abapgit_convert.clas.abap +++ b/src/utils/zcl_abapgit_convert.clas.abap @@ -85,7 +85,7 @@ CLASS zcl_abapgit_convert DEFINITION VALUE(rv_xstr) TYPE xstring . CLASS-METHODS xstring_to_bintab IMPORTING - !iv_xstr TYPE xstring + !iv_xstr TYPE xsequence EXPORTING !ev_size TYPE i !et_bintab TYPE STANDARD TABLE . @@ -144,6 +144,7 @@ ENDCLASS. CLASS zcl_abapgit_convert IMPLEMENTATION. + METHOD base64_to_xstring. rv_xstr = cl_http_utility=>decode_x_base64( iv_base64 ). @@ -207,32 +208,6 @@ CLASS zcl_abapgit_convert IMPLEMENTATION. ENDMETHOD. - METHOD language_sap1_to_bcp47. - DATA lv_converter_instance TYPE REF TO object. - DATA lv_converter_class_name TYPE string VALUE `CL_AFF_LANGUAGE_CONVERTER`. - - TRY. - CALL METHOD (lv_converter_class_name)=>create_instance - RECEIVING - result = lv_converter_instance. - - TRY. - CALL METHOD lv_converter_instance->(`IF_AFF_LANGUAGE_CONVERTER~SAP1_TO_BCP47`) - EXPORTING - language = im_lang_sap1 - RECEIVING - result = re_lang_bcp47. - CATCH cx_static_check. - RAISE no_assignment. - ENDTRY. - CATCH cx_sy_dyn_call_error. - TRY. - re_lang_bcp47 = lcl_bcp47_language_table=>sap1_to_bcp47( im_lang_sap1 ). - CATCH zcx_abapgit_exception. - RAISE no_assignment. - ENDTRY. - ENDTRY. - ENDMETHOD. METHOD language_bcp47_to_sap1. DATA lv_converter_instance TYPE REF TO object. @@ -289,6 +264,35 @@ CLASS zcl_abapgit_convert IMPLEMENTATION. ENDTRY. ENDMETHOD. + + METHOD language_sap1_to_bcp47. + DATA lv_converter_instance TYPE REF TO object. + DATA lv_converter_class_name TYPE string VALUE `CL_AFF_LANGUAGE_CONVERTER`. + + TRY. + CALL METHOD (lv_converter_class_name)=>create_instance + RECEIVING + result = lv_converter_instance. + + TRY. + CALL METHOD lv_converter_instance->(`IF_AFF_LANGUAGE_CONVERTER~SAP1_TO_BCP47`) + EXPORTING + language = im_lang_sap1 + RECEIVING + result = re_lang_bcp47. + CATCH cx_static_check. + RAISE no_assignment. + ENDTRY. + CATCH cx_sy_dyn_call_error. + TRY. + re_lang_bcp47 = lcl_bcp47_language_table=>sap1_to_bcp47( im_lang_sap1 ). + CATCH zcx_abapgit_exception. + RAISE no_assignment. + ENDTRY. + ENDTRY. + ENDMETHOD. + + METHOD language_sap1_to_sap2. TRY. @@ -381,6 +385,42 @@ CLASS zcl_abapgit_convert IMPLEMENTATION. ENDMETHOD. + METHOD uccp. + + DATA lv_class TYPE string. + DATA lv_xstr TYPE xstring. + DATA lo_instance TYPE REF TO object. + + lv_class = 'CL_ABAP_CONV_IN_CE'. + + TRY. + CALL METHOD (lv_class)=>uccp + EXPORTING + uccp = iv_uccp + RECEIVING + char = rv_char. + CATCH cx_sy_dyn_call_illegal_class. + lv_xstr = iv_uccp. + + CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_in + EXPORTING + codepage = 'UTF-16' + RECEIVING + instance = lo_instance. + +* convert endianness + CONCATENATE lv_xstr+1(1) lv_xstr(1) INTO lv_xstr IN BYTE MODE. + + CALL METHOD lo_instance->('IF_ABAP_CONV_IN~CONVERT') + EXPORTING + source = lv_xstr + RECEIVING + result = rv_char. + ENDTRY. + + ENDMETHOD. + + METHOD xstring_remove_bom. rv_xstr = iv_xstr. @@ -405,10 +445,13 @@ CLASS zcl_abapgit_convert IMPLEMENTATION. FIELD-SYMBOLS TYPE any. - CLEAR et_bintab. ev_size = xstrlen( iv_xstr ). + IF iv_xstr IS INITIAL. + RETURN. + ENDIF. + APPEND INITIAL LINE TO et_bintab ASSIGNING . lv_struct = boolc( cl_abap_typedescr=>describe_by_data( )->type_kind = cl_abap_typedescr=>typekind_struct1 ). @@ -418,7 +461,9 @@ CLASS zcl_abapgit_convert IMPLEMENTATION. = iv_xstr. lv_length = cl_abap_typedescr=>describe_by_data( )->length. - lv_iterations = ev_size DIV lv_length. + ASSERT lv_length > 0. + + lv_iterations = ( ev_size - 1 ) DIV lv_length. DO lv_iterations TIMES. lv_offset = sy-index * lv_length. @@ -493,39 +538,4 @@ CLASS zcl_abapgit_convert IMPLEMENTATION. GET BIT 8 OF iv_x INTO rv_bitbyte+7(1). ENDMETHOD. - - METHOD uccp. - - DATA lv_class TYPE string. - DATA lv_xstr TYPE xstring. - DATA lo_instance TYPE REF TO object. - - lv_class = 'CL_ABAP_CONV_IN_CE'. - - TRY. - CALL METHOD (lv_class)=>uccp - EXPORTING - uccp = iv_uccp - RECEIVING - char = rv_char. - CATCH cx_sy_dyn_call_illegal_class. - lv_xstr = iv_uccp. - - CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_in - EXPORTING - codepage = 'UTF-16' - RECEIVING - instance = lo_instance. - -* convert endianness - CONCATENATE lv_xstr+1(1) lv_xstr(1) INTO lv_xstr IN BYTE MODE. - - CALL METHOD lo_instance->('IF_ABAP_CONV_IN~CONVERT') - EXPORTING - source = lv_xstr - RECEIVING - result = rv_char. - ENDTRY. - - ENDMETHOD. ENDCLASS. diff --git a/src/utils/zcl_abapgit_convert.clas.locals_imp.abap b/src/utils/zcl_abapgit_convert.clas.locals_imp.abap index e7606c952..1b153248f 100644 --- a/src/utils/zcl_abapgit_convert.clas.locals_imp.abap +++ b/src/utils/zcl_abapgit_convert.clas.locals_imp.abap @@ -125,16 +125,22 @@ CLASS lcl_bcp47_language_table DEFINITION CREATE PRIVATE. bcp47_code TYPE string, END OF ty_language_mapping, ty_language_mappings TYPE STANDARD TABLE OF ty_language_mapping WITH DEFAULT KEY. - CLASS-DATA gv_language_mappings TYPE ty_language_mappings. + CLASS-DATA gt_language_mappings TYPE ty_language_mappings. CLASS-METHODS: sap1_to_sap2 - IMPORTING im_sap1 TYPE sy-langu - RETURNING VALUE(re_sap2) TYPE laiso - RAISING zcx_abapgit_exception, + IMPORTING + im_sap1 TYPE sy-langu + RETURNING + VALUE(re_sap2) TYPE laiso + RAISING + zcx_abapgit_exception, sap2_to_sap1 - IMPORTING im_sap2 TYPE laiso - RETURNING VALUE(re_sap1) TYPE sy-langu - RAISING zcx_abapgit_exception, + IMPORTING + im_sap2 TYPE laiso + RETURNING + VALUE(re_sap1) TYPE sy-langu + RAISING + zcx_abapgit_exception, sap1_to_bcp47 IMPORTING im_sap1 TYPE sy-langu @@ -168,11 +174,11 @@ CLASS lcl_bcp47_language_table IMPLEMENTATION. METHOD sap1_to_bcp47. DATA lv_language_mapping TYPE ty_language_mapping. - IF gv_language_mappings IS INITIAL OR lines( gv_language_mappings ) = 0. + IF gt_language_mappings IS INITIAL OR lines( gt_language_mappings ) = 0. fill_language_mappings( ). ENDIF. - LOOP AT gv_language_mappings INTO lv_language_mapping WHERE sap1_code = im_sap1. + LOOP AT gt_language_mappings INTO lv_language_mapping WHERE sap1_code = im_sap1. IF re_bcp47 IS INITIAL OR strlen( re_bcp47 ) > strlen( lv_language_mapping-bcp47_code ). re_bcp47 = lv_language_mapping-bcp47_code. ENDIF. @@ -186,11 +192,11 @@ CLASS lcl_bcp47_language_table IMPLEMENTATION. METHOD bcp47_to_sap1. DATA lv_language_mapping TYPE ty_language_mapping. - IF gv_language_mappings IS INITIAL OR lines( gv_language_mappings ) = 0. + IF gt_language_mappings IS INITIAL OR lines( gt_language_mappings ) = 0. fill_language_mappings( ). ENDIF. - LOOP AT gv_language_mappings INTO lv_language_mapping. + LOOP AT gt_language_mappings INTO lv_language_mapping. IF to_lower( lv_language_mapping-bcp47_code ) = to_lower( im_bcp47 ) AND re_sap1 IS INITIAL. re_sap1 = lv_language_mapping-sap1_code. ENDIF. @@ -205,26 +211,26 @@ CLASS lcl_bcp47_language_table IMPLEMENTATION. METHOD sap1_to_sap2. DATA lv_language_mapping TYPE ty_language_mapping. - IF gv_language_mappings IS INITIAL. + IF gt_language_mappings IS INITIAL. fill_language_mappings( ). ENDIF. - READ TABLE gv_language_mappings WITH KEY sap1_code = im_sap1 INTO lv_language_mapping. + READ TABLE gt_language_mappings WITH KEY sap1_code = im_sap1 INTO lv_language_mapping. re_sap2 = lv_language_mapping-sap2_code. IF re_sap2 IS INITIAL. - zcx_abapgit_exception=>raise( |Could not convert SAP1 language code { im_sap1 } to SAP2 language code.| ). + zcx_abapgit_exception=>raise( |Could not map SAP1 language code { im_sap1 } to SAP2 language code.| ). ENDIF. ENDMETHOD. METHOD sap2_to_sap1. DATA lv_language_mapping TYPE ty_language_mapping. - IF gv_language_mappings IS INITIAL. + IF gt_language_mappings IS INITIAL. fill_language_mappings( ). ENDIF. - READ TABLE gv_language_mappings WITH KEY sap2_code = im_sap2 INTO lv_language_mapping. + READ TABLE gt_language_mappings WITH KEY sap2_code = im_sap2 INTO lv_language_mapping. re_sap1 = lv_language_mapping-sap1_code. IF re_sap1 IS INITIAL. @@ -237,7 +243,13 @@ CLASS lcl_bcp47_language_table IMPLEMENTATION. DATA lv_sap1 TYPE sy-langu. IF strlen( im_sap1 ) = 4. - lv_sap1 = zcl_abapgit_convert=>uccp( im_sap1 ). + TRY. + lv_sap1 = zcl_abapgit_convert=>uccp( im_sap1 ). + CATCH cx_root. + " Language is not supported in this system -> ignore it + " Should someone try to use the language in a repo, it will result in an error (see above) + RETURN. + ENDTRY. ELSEIF strlen( im_sap1 ) = 1. lv_sap1 = im_sap1. ENDIF. @@ -246,7 +258,7 @@ CLASS lcl_bcp47_language_table IMPLEMENTATION. lv_line-sap2_code = im_sap2. lv_line-sap1_code = lv_sap1. - APPEND lv_line TO gv_language_mappings. + APPEND lv_line TO gt_language_mappings. CLEAR lv_line. ENDMETHOD. diff --git a/src/utils/zcl_abapgit_convert.clas.testclasses.abap b/src/utils/zcl_abapgit_convert.clas.testclasses.abap index 97b82ee10..5067fc5c4 100644 --- a/src/utils/zcl_abapgit_convert.clas.testclasses.abap +++ b/src/utils/zcl_abapgit_convert.clas.testclasses.abap @@ -19,6 +19,9 @@ CLASS ltcl_convert DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FIN METHODS string_to_xstring FOR TESTING RAISING zcx_abapgit_exception. METHODS xstring_to_bintab FOR TESTING. METHODS xstring_to_bintab_with_field FOR TESTING. + METHODS xstring_to_bintab_initial FOR TESTING. + METHODS xstring_to_bintab_long FOR TESTING. + METHODS xstring_to_bintab_exact FOR TESTING. ENDCLASS. @@ -74,6 +77,89 @@ CLASS ltcl_convert IMPLEMENTATION. ENDMETHOD. + METHOD xstring_to_bintab_initial. + + DATA lt_bintab TYPE TABLE OF w3mime. + DATA lv_size TYPE i. + DATA lv_xstr TYPE xstring. + + zcl_abapgit_convert=>xstring_to_bintab( + EXPORTING + iv_xstr = lv_xstr + IMPORTING + ev_size = lv_size + et_bintab = lt_bintab ). + + cl_abap_unit_assert=>assert_equals( + act = lv_size + exp = 0 ). + + cl_abap_unit_assert=>assert_equals( + act = lines( lt_bintab ) + exp = 0 ). + + ENDMETHOD. + + METHOD xstring_to_bintab_long. + + DATA lt_bintab TYPE TABLE OF w3mime. " x(255) + DATA lv_bin LIKE LINE OF lt_bintab. + DATA lv_size TYPE i. + DATA lv_xstr TYPE xstring. + + lv_xstr = repeat( + val = '1122334455' + occ = 200 ). + + zcl_abapgit_convert=>xstring_to_bintab( + EXPORTING + iv_xstr = lv_xstr + IMPORTING + ev_size = lv_size + et_bintab = lt_bintab ). + + cl_abap_unit_assert=>assert_equals( + act = lv_size + exp = 1000 ). + + cl_abap_unit_assert=>assert_equals( + act = lines( lt_bintab ) + exp = 4 ). + + READ TABLE lt_bintab INTO lv_bin INDEX 4. + + cl_abap_unit_assert=>assert_equals( + act = lv_bin-line+230(10) + exp = '11223344550000000000' ). + + ENDMETHOD. + + METHOD xstring_to_bintab_exact. + + TYPES ty_line TYPE x LENGTH 5. + DATA lv_xdata TYPE x LENGTH 10. + DATA lt_bintab TYPE TABLE OF ty_line. + DATA lv_size TYPE i. + + lv_xdata = '1122334455FFEEDDCCBB'. + + " must not dump if content fits exactly into bintab + zcl_abapgit_convert=>xstring_to_bintab( + EXPORTING + iv_xstr = lv_xdata + IMPORTING + ev_size = lv_size + et_bintab = lt_bintab ). + + cl_abap_unit_assert=>assert_equals( + act = lv_size + exp = 10 ). + + cl_abap_unit_assert=>assert_equals( + act = lines( lt_bintab ) + exp = 2 ). + + ENDMETHOD. METHOD string_to_xstring. @@ -331,12 +417,15 @@ CLASS ltcl_bcp47_to_sap1 IMPLEMENTATION. DATA lv_result TYPE sy-langu. lv_result = zcl_abapgit_convert=>language_bcp47_to_sap1( im_from ). - cl_abap_unit_assert=>assert_equals( exp = im_to - act = lv_result ). + cl_abap_unit_assert=>assert_equals( + exp = im_to + act = lv_result + msg = |Converting "{ im_from }" should result in "{ im_to }"| ). ENDMETHOD. METHOD assert_bcp47_to_sap1_fail. DATA lv_result TYPE string. + DATA lv_act TYPE sy-subrc. zcl_abapgit_convert=>language_bcp47_to_sap1( EXPORTING @@ -345,10 +434,15 @@ CLASS ltcl_bcp47_to_sap1 IMPLEMENTATION. re_lang_sap1 = lv_result EXCEPTIONS no_assignment = 1 - OTHERS = 2 ). + OTHERS = 2 ). - cl_abap_unit_assert=>assert_equals( exp = 1 - act = sy-subrc ). + " Assert itself might change sy-subrc (it does in 702!) + lv_act = sy-subrc. + + cl_abap_unit_assert=>assert_equals( + exp = 1 + act = lv_act + msg = |Converting "{ im_from }" should fail| ). ENDMETHOD. METHOD english. @@ -466,14 +560,18 @@ CLASS ltcl_sap1_to_bcp47 IMPLEMENTATION. METHOD assert_sap1_to_bcp47. DATA lv_result TYPE string. + lv_result = zcl_abapgit_convert=>language_sap1_to_bcp47( im_from ). - cl_abap_unit_assert=>assert_equals( exp = im_to - act = lv_result ). + cl_abap_unit_assert=>assert_equals( + exp = im_to + act = lv_result + msg = |Converting "{ im_from }" should result in "{ im_to }"| ). ENDMETHOD. METHOD assert_sap1_to_bcp47_fail. DATA lv_result TYPE string. + DATA lv_act TYPE sy-subrc. zcl_abapgit_convert=>language_sap1_to_bcp47( EXPORTING @@ -482,10 +580,15 @@ CLASS ltcl_sap1_to_bcp47 IMPLEMENTATION. re_lang_bcp47 = lv_result EXCEPTIONS no_assignment = 1 - OTHERS = 2 ). + OTHERS = 2 ). - cl_abap_unit_assert=>assert_equals( exp = 1 - act = sy-subrc ). + " Assert itself might change sy-subrc (it does in 702!) + lv_act = sy-subrc. + + cl_abap_unit_assert=>assert_equals( + exp = 1 + act = lv_act + msg = |Converting "{ im_from }" should fail| ). ENDMETHOD. METHOD english. diff --git a/src/utils/zcl_abapgit_diff.clas.abap b/src/utils/zcl_abapgit_diff.clas.abap index a3319f1eb..b8e936abd 100644 --- a/src/utils/zcl_abapgit_diff.clas.abap +++ b/src/utils/zcl_abapgit_diff.clas.abap @@ -89,6 +89,12 @@ CLASS zcl_abapgit_diff DEFINITION VALUE(rt_diff) TYPE zif_abapgit_definitions=>ty_diffs_tt. METHODS calculate_stats. METHODS adjust_diff. + METHODS has_line_diff + IMPORTING + iv_old TYPE string + iv_new TYPE string + RETURNING + VALUE(rv_has_diff) TYPE abap_bool. ENDCLASS. @@ -262,43 +268,27 @@ CLASS zcl_abapgit_diff IMPLEMENTATION. METHOD compute_diff_extra. DATA: - lv_last_new TYPE c LENGTH 1, - lv_last_old TYPE c LENGTH 1, - ls_diff LIKE LINE OF rt_diff. + ls_diff LIKE LINE OF rt_diff. FIELD-SYMBOLS: - LIKE LINE OF it_old, - LIKE LINE OF it_new. + LIKE LINE OF it_old, + LIKE LINE OF it_new. - LOOP AT it_old ASSIGNING . + LOOP AT it_old ASSIGNING . CLEAR ls_diff. ls_diff-old_num = sy-tabix. - ls_diff-old = . - READ TABLE it_new ASSIGNING INDEX sy-tabix. + ls_diff-old = . + READ TABLE it_new ASSIGNING INDEX sy-tabix. IF sy-subrc <> 0. EXIT. ENDIF. ls_diff-new_num = sy-tabix. - ls_diff-new = . - " SAP function ignores lines that contain only whitespace so we compare directly - " Also check if one line has trailing space(s) - IF ( mv_compare_mode = 1 OR mv_compare_mode = 3 ) AND <> . + ls_diff-new = . - IF strlen( condense( ) ) = 0 OR strlen( condense( ) ) = 0. - - ls_diff-result = zif_abapgit_definitions=>c_diff-update. - - ELSEIF strlen( ) > 0 AND strlen( ) > 0. - - lv_last_new = substring( val = - off = strlen( ) - 1 ). - lv_last_old = substring( val = - off = strlen( ) - 1 ). - IF lv_last_new = space OR lv_last_old = space. - ls_diff-result = zif_abapgit_definitions=>c_diff-update. - ENDIF. - - ENDIF. + IF ( mv_compare_mode = 1 OR mv_compare_mode = 3 ) + AND has_line_diff( iv_old = + iv_new = ) = abap_true. + ls_diff-result = zif_abapgit_definitions=>c_diff-update. ENDIF. APPEND ls_diff TO rt_diff. ENDLOOP. @@ -575,4 +565,17 @@ CLASS zcl_abapgit_diff IMPLEMENTATION. SPLIT lv_old AT cl_abap_char_utilities=>newline INTO TABLE et_old. ENDMETHOD. + + + METHOD has_line_diff. + + " SAP function ignores lines that contain only whitespace so we compare directly + " Also check if length differs and implicitly if one line has trailing space(s) + rv_has_diff = boolc( iv_old <> iv_new + AND ( strlen( condense( iv_old ) ) = 0 + OR strlen( condense( iv_new ) ) = 0 + OR strlen( iv_old ) <> strlen( iv_new ) ) ). + + ENDMETHOD. + ENDCLASS. diff --git a/src/utils/zcl_abapgit_diff.clas.testclasses.abap b/src/utils/zcl_abapgit_diff.clas.testclasses.abap index 2746a78ae..a44c503c1 100644 --- a/src/utils/zcl_abapgit_diff.clas.testclasses.abap +++ b/src/utils/zcl_abapgit_diff.clas.testclasses.abap @@ -48,6 +48,8 @@ CLASS ltcl_diff DEFINITION FOR TESTING diff14 FOR TESTING RAISING zcx_abapgit_exception, diff15 FOR TESTING RAISING zcx_abapgit_exception, diff16 FOR TESTING RAISING zcx_abapgit_exception, + diff17 FOR TESTING RAISING zcx_abapgit_exception, + diff18 FOR TESTING RAISING zcx_abapgit_exception, map_beacons FOR TESTING RAISING zcx_abapgit_exception. ENDCLASS. @@ -609,6 +611,42 @@ CLASS ltcl_diff IMPLEMENTATION. ENDMETHOD. + METHOD diff17. + + " tab vs space + add_new( |*\tTest| ). + + add_old( `* Test` ). + + add_expected( iv_new_num = ' 1' + iv_new = |*\tTest| + iv_result = zif_abapgit_definitions=>c_diff-update + iv_old_num = ' 1' + iv_old = `* Test` ). + + test( ). + + ENDMETHOD. + + + METHOD diff18. + + " no diff + add_new( `* Test` ). + + add_old( `* Test` ). + + add_expected( iv_new_num = ' 1' + iv_new = `* Test` + iv_result = zif_abapgit_definitions=>c_diff-unchanged + iv_old_num = ' 1' + iv_old = `* Test` ). + + test( ). + + ENDMETHOD. + + METHOD map_beacons. add_new( `REPORT ztest_beacon.` ). diff --git a/src/utils/zcl_abapgit_log.clas.abap b/src/utils/zcl_abapgit_log.clas.abap index a22becf90..098d1537a 100644 --- a/src/utils/zcl_abapgit_log.clas.abap +++ b/src/utils/zcl_abapgit_log.clas.abap @@ -90,10 +90,12 @@ CLASS zcl_abapgit_log IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF mt_log. APPEND INITIAL LINE TO mt_log ASSIGNING . - -msg-text = iv_msg. - -msg-type = iv_type. - -item = is_item. - -exception = ix_exc. + -msg-text = iv_msg. + -msg-type = iv_type. + -msg-id = iv_class. + -msg-number = iv_number. + -item = is_item. + -exception = ix_exc. CASE iv_type. WHEN 'E' OR 'A' OR 'X'. @@ -252,6 +254,8 @@ CLASS zcl_abapgit_log IMPLEMENTATION. FIELD-SYMBOLS TYPE ty_log. LOOP AT mt_log ASSIGNING . ls_msg-type = -msg-type. + ls_msg-id = -msg-id. + ls_msg-number = -msg-number. ls_msg-text = -msg-text. ls_msg-obj_type = -item-obj_type. ls_msg-obj_name = -item-obj_name. diff --git a/src/utils/zcl_abapgit_log.clas.testclasses.abap b/src/utils/zcl_abapgit_log.clas.testclasses.abap index d23c5e975..dd897dc12 100644 --- a/src/utils/zcl_abapgit_log.clas.testclasses.abap +++ b/src/utils/zcl_abapgit_log.clas.testclasses.abap @@ -14,7 +14,8 @@ CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL. merge_with_min_level FOR TESTING, empty FOR TESTING, clone FOR TESTING, - add FOR TESTING. + add FOR TESTING, + add_with_id_number FOR TESTING. ENDCLASS. @@ -64,6 +65,44 @@ CLASS ltcl_test IMPLEMENTATION. ENDMETHOD. + METHOD add_with_id_number. + + DATA lv_message TYPE string. + DATA lt_messages TYPE zif_abapgit_log=>ty_log_outs. + DATA ls_message LIKE LINE OF lt_messages. + + lv_message = 'abracadabra'. + + mi_cut->add( + iv_msg = lv_message + iv_type = 'W' + iv_class = 'SL' + iv_number = '123' ). + + cl_abap_unit_assert=>assert_equals( + act = mi_cut->count( ) + exp = 1 ). + + cl_abap_unit_assert=>assert_equals( + act = mi_cut->get_status( ) + exp = 'W' ). + + lt_messages = mi_cut->get_messages( ). + READ TABLE lt_messages INDEX 1 INTO ls_message. + cl_abap_unit_assert=>assert_subrc( ). + + cl_abap_unit_assert=>assert_equals( + act = ls_message-text + exp = lv_message ). + cl_abap_unit_assert=>assert_equals( + act = ls_message-id + exp = 'SL' ). + cl_abap_unit_assert=>assert_equals( + act = ls_message-number + exp = '123' ). + + ENDMETHOD. + METHOD get_status. DATA lo_x TYPE REF TO zcx_abapgit_exception. diff --git a/src/utils/zif_abapgit_log.intf.abap b/src/utils/zif_abapgit_log.intf.abap index aeb4ea669..8e18e69be 100644 --- a/src/utils/zif_abapgit_log.intf.abap +++ b/src/utils/zif_abapgit_log.intf.abap @@ -19,6 +19,8 @@ INTERFACE zif_abapgit_log TYPES: BEGIN OF ty_log_out, type TYPE sy-msgty, + id TYPE sy-msgid, + number TYPE sy-msgno, text TYPE string, obj_type TYPE tadir-object, obj_name TYPE tadir-obj_name, @@ -29,9 +31,11 @@ INTERFACE zif_abapgit_log WITH NON-UNIQUE DEFAULT KEY . TYPES: BEGIN OF ty_msg, - text TYPE string, - type TYPE sy-msgty, - level TYPE i, + text TYPE string, + type TYPE sy-msgty, + id TYPE sy-msgid, + number TYPE sy-msgno, + level TYPE i, END OF ty_msg . TYPES: ty_msgs TYPE STANDARD TABLE OF ty_msg @@ -48,10 +52,12 @@ INTERFACE zif_abapgit_log METHODS add IMPORTING - !iv_msg TYPE csequence - !iv_type TYPE sy-msgty DEFAULT 'E' - !is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL - !ix_exc TYPE REF TO cx_root OPTIONAL . + !iv_msg TYPE csequence + !iv_type TYPE sy-msgty DEFAULT 'E' + !iv_class TYPE sy-msgid OPTIONAL + !iv_number TYPE sy-msgno OPTIONAL + !is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL + !ix_exc TYPE REF TO cx_root OPTIONAL . METHODS add_error IMPORTING !iv_msg TYPE csequence diff --git a/src/zabapgit_forms.prog.abap b/src/zabapgit_forms.prog.abap index 5b1b241af..b966f61f7 100644 --- a/src/zabapgit_forms.prog.abap +++ b/src/zabapgit_forms.prog.abap @@ -81,18 +81,18 @@ CLASS lcl_startup IMPLEMENTATION. " - open a specific repo by package name provided by ADT " These overrule the last shown repo - GET PARAMETER ID zif_abapgit_definitions=>c_spagpa_param_repo_key FIELD lv_repo_key. - GET PARAMETER ID zif_abapgit_definitions=>c_spagpa_param_package FIELD lv_package. + GET PARAMETER ID zif_abapgit_definitions=>c_spagpa_param_repo_key FIELD lv_repo_key ##EXISTS. + GET PARAMETER ID zif_abapgit_definitions=>c_spagpa_param_package FIELD lv_package ##EXISTS. lv_package_adt = get_package_from_adt( ). IF lv_repo_key IS NOT INITIAL. - SET PARAMETER ID zif_abapgit_definitions=>c_spagpa_param_repo_key FIELD ''. + SET PARAMETER ID zif_abapgit_definitions=>c_spagpa_param_repo_key FIELD '' ##EXISTS. zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( lv_repo_key ). ELSEIF lv_package IS NOT INITIAL. - SET PARAMETER ID zif_abapgit_definitions=>c_spagpa_param_package FIELD ''. + SET PARAMETER ID zif_abapgit_definitions=>c_spagpa_param_package FIELD '' ##EXISTS. set_start_repo_from_package( lv_package ). ELSEIF lv_package_adt IS NOT INITIAL. @@ -198,7 +198,7 @@ CLASS lcl_startup IMPLEMENTATION. ENDIF. - CATCH cx_root. + CATCH cx_root ##NO_HANDLER. " Some problems with dynamic ADT access. " Let's ignore it for now and fail silently ENDTRY. diff --git a/src/zabapgit_password_dialog.prog.abap b/src/zabapgit_password_dialog.prog.abap index 85224b8d8..79562e80f 100644 --- a/src/zabapgit_password_dialog.prog.abap +++ b/src/zabapgit_password_dialog.prog.abap @@ -181,7 +181,7 @@ FORM password_popup pv_repo_url TYPE string CHANGING cv_user TYPE string - cv_pass TYPE string. + cv_pass TYPE string ##CALLED. lcl_password_dialog=>popup( EXPORTING diff --git a/src/zcx_abapgit_exception.clas.abap b/src/zcx_abapgit_exception.clas.abap index 10cefb92d..a35606974 100644 --- a/src/zcx_abapgit_exception.clas.abap +++ b/src/zcx_abapgit_exception.clas.abap @@ -104,11 +104,6 @@ CLASS zcx_abapgit_exception DEFINITION CONSTANTS c_generic_error_msg TYPE string VALUE `An error occurred (ZCX_ABAPGIT_EXCEPTION)`. - CLASS-METHODS split_text_to_symsg - IMPORTING - !iv_text TYPE string - RETURNING - VALUE(rs_msg) TYPE symsg . METHODS save_callstack . METHODS itf_to_string IMPORTING @@ -250,7 +245,6 @@ CLASS zcx_abapgit_exception IMPLEMENTATION. DATA: lt_stream TYPE TABLE OF tdline, lt_string TYPE TABLE OF string, - lv_string LIKE LINE OF lt_string, lt_itf TYPE tline_tab, lv_has_content TYPE abap_bool, lv_tabix_from TYPE syst-tabix, @@ -307,32 +301,21 @@ CLASS zcx_abapgit_exception IMPLEMENTATION. itf_text = lt_itf text_stream = lt_stream. - LOOP AT lt_string INTO lv_string. - IF sy-tabix = 1. - rv_result = lv_string. - ELSE. - CONCATENATE rv_result lv_string - INTO rv_result - SEPARATED BY cl_abap_char_utilities=>newline. - ENDIF. - - ENDLOOP. + rv_result = concat_lines_of( + table = lt_string + sep = cl_abap_char_utilities=>newline ). ENDMETHOD. METHOD raise. - DATA lv_text TYPE string. - IF iv_text IS INITIAL. - lv_text = c_generic_error_msg. + cl_message_helper=>set_msg_vars_for_clike( c_generic_error_msg ). ELSE. - lv_text = iv_text. + cl_message_helper=>set_msg_vars_for_clike( iv_text ). ENDIF. - split_text_to_symsg( lv_text ). - raise_t100( ii_log = ii_log ix_previous = ix_previous @@ -439,22 +422,4 @@ CLASS zcx_abapgit_exception IMPLEMENTATION. ENDLOOP. ENDMETHOD. - - - METHOD split_text_to_symsg. - - DATA ls_msg TYPE symsg. - - cl_message_helper=>set_msg_vars_for_clike( iv_text ). - ls_msg-msgv1 = sy-msgv1. - ls_msg-msgv2 = sy-msgv2. - ls_msg-msgv3 = sy-msgv3. - ls_msg-msgv4 = sy-msgv4. - - " Set syst using generic error message - MESSAGE e001(00) WITH ls_msg-msgv1 ls_msg-msgv2 ls_msg-msgv3 ls_msg-msgv4 INTO null. - - rs_msg = ls_msg. - - ENDMETHOD. ENDCLASS. diff --git a/src/zcx_abapgit_exception.clas.testclasses.abap b/src/zcx_abapgit_exception.clas.testclasses.abap index e52918730..0fc3fdeb4 100644 --- a/src/zcx_abapgit_exception.clas.testclasses.abap +++ b/src/zcx_abapgit_exception.clas.testclasses.abap @@ -406,7 +406,7 @@ CLASS ltcl_split_text IMPLEMENTATION. ENDMETHOD. METHOD test_set_msg_vars. - zcx_abapgit_exception=>split_text_to_symsg( iv_text ). + cl_message_helper=>set_msg_vars_for_clike( iv_text ). cl_abap_unit_assert=>assert_equals( act = sy-msgv1 exp = is_msg-v1 ). diff --git a/src/zif_abapgit_definitions.intf.abap b/src/zif_abapgit_definitions.intf.abap index c205a0200..db0ca4e89 100644 --- a/src/zif_abapgit_definitions.intf.abap +++ b/src/zif_abapgit_definitions.intf.abap @@ -268,11 +268,6 @@ INTERFACE zif_abapgit_definitions prerelase TYPE string, prerelase_patch TYPE i, END OF ty_version. - TYPES: - ty_deserialization_step TYPE string. - TYPES: - ty_deserialization_step_tt TYPE STANDARD TABLE OF ty_deserialization_step - WITH DEFAULT KEY . TYPES ty_sci_result TYPE c LENGTH 1. CONSTANTS: BEGIN OF c_sci_result, diff --git a/src/zif_abapgit_version.intf.abap b/src/zif_abapgit_version.intf.abap index 01af9b364..ec8f0c1db 100644 --- a/src/zif_abapgit_version.intf.abap +++ b/src/zif_abapgit_version.intf.abap @@ -2,6 +2,6 @@ INTERFACE zif_abapgit_version PUBLIC . CONSTANTS c_xml_version TYPE string VALUE 'v1.0.0' ##NO_TEXT. - CONSTANTS c_abap_version TYPE string VALUE '1.130.0' ##NO_TEXT. + CONSTANTS c_abap_version TYPE string VALUE '1.131.0' ##NO_TEXT. ENDINTERFACE. diff --git a/test/abap_transpile.json b/test/abap_transpile.json index d62a3a1ab..5ebc942bc 100644 --- a/test/abap_transpile.json +++ b/test/abap_transpile.json @@ -164,6 +164,8 @@ {"object": "ZCL_ABAPGIT_DIFF", "class": "ltcl_diff", "method": "diff14", "note": "fm RS_CMP_COMPUTE_DELTA + Void type: RSWSOURCET"}, {"object": "ZCL_ABAPGIT_DIFF", "class": "ltcl_diff", "method": "diff15", "note": "fm RS_CMP_COMPUTE_DELTA + Void type: RSWSOURCET"}, {"object": "ZCL_ABAPGIT_DIFF", "class": "ltcl_diff", "method": "diff16", "note": "fm RS_CMP_COMPUTE_DELTA + Void type: RSWSOURCET"}, + {"object": "ZCL_ABAPGIT_DIFF", "class": "ltcl_diff", "method": "diff17", "note": "fm RS_CMP_COMPUTE_DELTA + Void type: RSWSOURCET"}, + {"object": "ZCL_ABAPGIT_DIFF", "class": "ltcl_diff", "method": "diff18", "note": "fm RS_CMP_COMPUTE_DELTA + Void type: RSWSOURCET"}, {"object": "ZCL_ABAPGIT_DIFF", "class": "ltcl_diff", "method": "map_beacons", "note": "fm RS_CMP_COMPUTE_DELTA + Void type: RSWSOURCET"}, {"object": "ZCL_ABAPGIT_USER_RECORD", "class": "ltcl_user_record", "method": "test_invalid_user", "note": "Void type: BAPIADDR3"},