diff --git a/abaplint.json b/abaplint.json index 6c2a1bdc9..bf8190854 100644 --- a/abaplint.json +++ b/abaplint.json @@ -125,6 +125,9 @@ }, "double_space": true, "downport": false, + "add_test_attributes": true, + "implicit_start_of_selection": true, + "empty_event": true, "dynpro_checks": false, "easy_to_find_messages": false, "empty_line_in_statement": { diff --git a/package.json b/package.json index 2ccf41c18..56b4a13a1 100644 --- a/package.json +++ b/package.json @@ -23,14 +23,14 @@ ] }, "devDependencies": { - "@abaplint/cli": "^2.112.14", + "@abaplint/cli": "^2.113.6", "@abaplint/database-sqlite": "^2.8.25", - "@abaplint/runtime": "^2.10.9", + "@abaplint/runtime": "^2.10.11", "express": "^4.19.2", - "@abaplint/transpiler-cli": "^2.10.9", + "@abaplint/transpiler-cli": "^2.10.11", "globals": "^15.9.0", "abapmerge": "^0.16.0", "c8": "^10.1.2", - "eslint": "^9.9.0" + "eslint": "^9.9.1" } } diff --git a/src/objects/zcl_abapgit_object_jobd.clas.abap b/src/objects/zcl_abapgit_object_jobd.clas.abap index c4208b2a7..04945ceac 100644 --- a/src/objects/zcl_abapgit_object_jobd.clas.abap +++ b/src/objects/zcl_abapgit_object_jobd.clas.abap @@ -74,6 +74,7 @@ CLASS zcl_abapgit_object_jobd IMPLEMENTATION. DATA: lr_job_definition TYPE REF TO data, lo_job_definition TYPE REF TO object, + lx_error TYPE REF TO cx_root, lv_name TYPE ty_jd_name. FIELD-SYMBOLS: TYPE any, @@ -105,8 +106,8 @@ CLASS zcl_abapgit_object_jobd IMPLEMENTATION. EXPORTING im_jd_attributes = . - CATCH cx_root. - zcx_abapgit_exception=>raise( |Error deserializing JOBD| ). + CATCH cx_root INTO lx_error. + zcx_abapgit_exception=>raise_with_text( lx_error ). ENDTRY. zcl_abapgit_objects_activation=>add_item( ms_item ). @@ -240,7 +241,7 @@ CLASS zcl_abapgit_object_jobd IMPLEMENTATION. ASSIGN COMPONENT 'CREATED_TIME' OF STRUCTURE TO . CLEAR . - ASSIGN COMPONENT 'CHANGED_BY' OF STRUCTURE TO . + ASSIGN COMPONENT 'CHANGEDBY' OF STRUCTURE TO . CLEAR . ASSIGN COMPONENT 'CHANGED_DATE' OF STRUCTURE TO . diff --git a/src/objects/zcl_abapgit_object_sfpf.clas.abap b/src/objects/zcl_abapgit_object_sfpf.clas.abap index b6775aa08..29564ada8 100644 --- a/src/objects/zcl_abapgit_object_sfpf.clas.abap +++ b/src/objects/zcl_abapgit_object_sfpf.clas.abap @@ -282,10 +282,10 @@ CLASS zcl_abapgit_object_sfpf IMPLEMENTATION. DATA: lv_name TYPE fpname. + " Check for any state SELECT SINGLE name FROM fplayout INTO lv_name - WHERE name = ms_item-obj_name - AND state = 'A'. + WHERE name = ms_item-obj_name. rv_bool = boolc( sy-subrc = 0 ). ENDMETHOD. diff --git a/src/objects/zcl_abapgit_objects_program.clas.abap b/src/objects/zcl_abapgit_objects_program.clas.abap index bc41b44e0..e861123c9 100644 --- a/src/objects/zcl_abapgit_objects_program.clas.abap +++ b/src/objects/zcl_abapgit_objects_program.clas.abap @@ -375,7 +375,7 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION. ENDLOOP. - IF ls_dynpro-header-type = 'N'. + IF ls_dynpro-header-type = 'N' AND ls_dynpro-nat_header IS NOT INITIAL. DELETE FROM d021t WHERE prog = ls_dynpro-header-program AND dynr = ls_dynpro-header-screen ##SUBRC_OK. INSERT d021t FROM TABLE ls_dynpro-nat_texts ##SUBRC_OK. @@ -853,7 +853,8 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION. -header = ls_header. -flow_logic = lt_flow_logic. - IF ls_header-type = 'N'. + READ TABLE lt_fieldlist_int TRANSPORTING NO FIELDS WITH KEY fill = 'X'. + IF ls_header-type = 'N' AND sy-subrc = 0. " In particular for dynpros with splitter -nat_header = . CLEAR: -nat_header-dgen, -nat_header-tgen. diff --git a/src/repo/zcl_abapgit_repo_srv.clas.abap b/src/repo/zcl_abapgit_repo_srv.clas.abap index 7d8e3191f..d58536cdd 100644 --- a/src/repo/zcl_abapgit_repo_srv.clas.abap +++ b/src/repo/zcl_abapgit_repo_srv.clas.abap @@ -55,6 +55,7 @@ CLASS zcl_abapgit_repo_srv DEFINITION !is_meta TYPE zif_abapgit_persistence=>ty_repo_xml RAISING zcx_abapgit_exception . + METHODS validate_sub_super_packages IMPORTING !iv_package TYPE devclass @@ -65,6 +66,13 @@ CLASS zcl_abapgit_repo_srv DEFINITION !ev_reason TYPE string RAISING zcx_abapgit_exception . + + METHODS validate_package_korrflag + IMPORTING + !iv_package TYPE devclass + !iv_ign_subpkg TYPE abap_bool DEFAULT abap_false + RAISING + zcx_abapgit_exception. ENDCLASS. @@ -219,6 +227,35 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION. ENDMETHOD. + METHOD validate_package_korrflag. + + DATA: + li_package TYPE REF TO zif_abapgit_sap_package, + lv_korrflag TYPE abap_bool, + lv_package TYPE devclass, + lt_packages TYPE zif_abapgit_sap_package=>ty_devclass_tt. + + li_package = zcl_abapgit_factory=>get_sap_package( iv_package ). + IF li_package->exists( ) = abap_false. + " Skip dangling repository + RETURN. + ENDIF. + + lv_korrflag = li_package->are_changes_recorded_in_tr_req( ). + + IF iv_ign_subpkg = abap_false. + lt_packages = li_package->list_subpackages( ). + LOOP AT lt_packages INTO lv_package. + li_package = zcl_abapgit_factory=>get_sap_package( lv_package ). + IF li_package->exists( ) = abap_true AND li_package->are_changes_recorded_in_tr_req( ) <> lv_korrflag. + zcx_abapgit_exception=>raise( 'Mix of transportable and non-transportable packages is not supported' ). + ENDIF. + ENDLOOP. + ENDIF. + + ENDMETHOD. + + METHOD validate_sub_super_packages. DATA: @@ -709,6 +746,11 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION. ENDIF. ENDIF. + " Check if package hierarchy is a mix of transportable and local packages + validate_package_korrflag( + iv_package = iv_package + iv_ign_subpkg = iv_ign_subpkg ). + ENDMETHOD. diff --git a/src/syntax/zcl_abapgit_syntax_factory.clas.abap b/src/syntax/zcl_abapgit_syntax_factory.clas.abap index f24868e77..6f1e62929 100644 --- a/src/syntax/zcl_abapgit_syntax_factory.clas.abap +++ b/src/syntax/zcl_abapgit_syntax_factory.clas.abap @@ -25,7 +25,7 @@ CLASS zcl_abapgit_syntax_factory IMPLEMENTATION. " Create instance of highlighter dynamically dependent on syntax type IF iv_filename CP '*.abap'. CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_abap. - ELSEIF iv_filename CP '*.xml' OR iv_filename CP '*.html'. + ELSEIF iv_filename CP '*.xml' OR iv_filename CP '*.html' OR iv_filename CP '*.xdp'. CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_xml. ELSEIF iv_filename CP '*.css'. CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_css.