Merge branch 'main' into mbtools/html_pre

This commit is contained in:
Marc Bernard 2024-12-18 09:54:16 -05:00 committed by GitHub
commit a1458167f6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 150 additions and 74 deletions

View File

@ -25,9 +25,9 @@
"devDependencies": {
"@abaplint/cli": "^2.113.82",
"@abaplint/database-sqlite": "^2.10.20",
"@abaplint/runtime": "^2.10.22",
"@abaplint/runtime": "^2.10.23",
"express": "^4.21.2",
"@abaplint/transpiler-cli": "^2.10.22",
"@abaplint/transpiler-cli": "^2.10.23",
"globals": "^15.13.0",
"abapmerge": "^0.16.6",
"c8": "^10.1.3",

View File

@ -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.

View File

@ -81,6 +81,26 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
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 +109,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 <ls_system_language_filter> 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 <ls_system_language_filter>.
<ls_system_language_filter>-sign = 'E'.
<ls_system_language_filter>-option = 'EQ'.
<ls_system_language_filter>-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 <ls_system_language_filter>.
<ls_system_language_filter>-sign = 'E'.
<ls_system_language_filter>-option = 'EQ'.
<ls_system_language_filter>-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 +247,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 <ls_system_language_filter> 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 <ls_system_language_filter>.
<ls_system_language_filter>-sign = 'E'.
<ls_system_language_filter>-option = 'EQ'.
<ls_system_language_filter>-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 <ls_system_language_filter>.
<ls_system_language_filter>-sign = 'E'.
<ls_system_language_filter>-option = 'EQ'.
<ls_system_language_filter>-low = lv_pseudo_translation_language.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_environment~is_variant_maintenance.
@ -212,30 +260,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 ##FM_SUBRC_OK.
" If SPBT_INITIALIZE fails, check transactions RZ12, SM50, SM21, SARFC
ENDMETHOD.
ENDCLASS.

View File

@ -39,5 +39,8 @@ INTERFACE zif_abapgit_environment
iv_group TYPE clike
RETURNING
VALUE(rv_free_work_processes) TYPE i.
METHODS get_available_user_sessions
RETURNING
VALUE(rv_sessions) TYPE i.
ENDINTERFACE.

View File

@ -280,6 +280,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 +320,17 @@ 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.

View File

@ -70,12 +70,16 @@ CLASS ltd_environment DEFINITION FINAL FOR TESTING
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_is_merged TYPE abap_bool,
mv_available_sessions TYPE i,
mv_free_work_processes TYPE i.
ENDCLASS.
@ -89,6 +93,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.
@ -116,11 +124,16 @@ CLASS ltd_environment IMPLEMENTATION.
ENDMETHOD.
METHOD set_is_merged.
me->mv_is_merged = iv_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.
@ -255,6 +268,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 +281,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 +408,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 +444,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.