diff --git a/changelog.txt b/changelog.txt
index 741bbe4e7..175ca1a4c 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -8,6 +8,14 @@ Legend
+ : added
- : removed
+2017-09-11 v1.41.2
+------------------
+* FUGR table maintenance, namespaces
+* SICF show error message when deleting root node
+* DDLS better error messages
+* ENHS allow transport popup
++ experimental, optional opt-in: CLAS deserialization performance
+
2017-09-03 v1.41.1
------------------
* DDLS changed_by
diff --git a/docs/ref-dot-abapgit.md b/docs/ref-dot-abapgit.md
index b0fdbf5ac..abbd77734 100644
--- a/docs/ref-dot-abapgit.md
+++ b/docs/ref-dot-abapgit.md
@@ -31,9 +31,12 @@ Example: abapGit own .abapgit.xml
# Description
+## Location
+The `.abapgit.xml` file must be located in the root folder of the git repository.
+
## Master Language
-The language in which all documentation and dictionary elements texts will be created. Follows SAP `sy-langu` values.
+The language in which all documentation and dictionary elements texts will be created. Follows SAP `sy-langu` values. Note that this implies that all objects in a repository will/should have the same master language.
## Starting Folder
@@ -69,4 +72,4 @@ will give folder structure /zsomething/zhello/
## Ignore
-Files which abapGit will not download into your ABAP system.
\ No newline at end of file
+Files which abapGit will not download into your ABAP system.
diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap
index db306e460..8aae714e6 100644
--- a/src/zabapgit_definitions.prog.abap
+++ b/src/zabapgit_definitions.prog.abap
@@ -7,7 +7,7 @@ TYPE-POOLS seop.
INTERFACE lif_defs.
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
- gc_abap_version TYPE string VALUE 'v1.41.1'. "#EC NOTEXT
+ gc_abap_version TYPE string VALUE 'v1.41.2'. "#EC NOTEXT
TYPES: ty_type TYPE c LENGTH 6,
ty_bitbyte TYPE c LENGTH 8,
diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap
index 0f58fa619..35991602c 100644
--- a/src/zabapgit_object_clas.prog.abap
+++ b/src/zabapgit_object_clas.prog.abap
@@ -18,32 +18,27 @@ CLASS lcl_object_clas DEFINITION INHERITING FROM lcl_objects_program.
iv_language TYPE spras.
PROTECTED SECTION.
- METHODS deserialize_abap
- IMPORTING io_xml TYPE REF TO lcl_xml_input
- iv_package TYPE devclass
- RAISING lcx_exception.
-
- METHODS deserialize_docu
- IMPORTING io_xml TYPE REF TO lcl_xml_input
- RAISING lcx_exception.
- DATA mo_object_oriented_object_fct TYPE REF TO lif_oo_object_fnc.
- PRIVATE SECTION.
- DATA mv_skip_testclass TYPE abap_bool.
-
- METHODS deserialize_tpool
- IMPORTING io_xml TYPE REF TO lcl_xml_input
- RAISING lcx_exception.
-
- METHODS deserialize_sotr
- IMPORTING io_xml TYPE REF TO lcl_xml_input
- iv_package TYPE devclass
- RAISING lcx_exception.
-
-
- METHODS serialize_xml
- IMPORTING io_xml TYPE REF TO lcl_xml_output
- RAISING lcx_exception.
+ DATA: mo_object_oriented_object_fct TYPE REF TO lif_oo_object_fnc,
+ mv_skip_testclass TYPE abap_bool.
+ METHODS:
+ deserialize_abap
+ IMPORTING io_xml TYPE REF TO lcl_xml_input
+ iv_package TYPE devclass
+ RAISING lcx_exception,
+ deserialize_docu
+ IMPORTING io_xml TYPE REF TO lcl_xml_input
+ RAISING lcx_exception,
+ deserialize_tpool
+ IMPORTING io_xml TYPE REF TO lcl_xml_input
+ RAISING lcx_exception,
+ deserialize_sotr
+ IMPORTING io_xml TYPE REF TO lcl_xml_input
+ iv_package TYPE devclass
+ RAISING lcx_exception,
+ serialize_xml
+ IMPORTING io_xml TYPE REF TO lcl_xml_output
+ RAISING lcx_exception.
ENDCLASS. "lcl_object_dtel DEFINITION
@@ -366,6 +361,7 @@ CLASS lcl_object_clas IMPLEMENTATION.
iv_package = iv_package
CHANGING
is_properties = ls_vseoclass ).
+
mo_object_oriented_object_fct->generate_locals(
is_key = ls_class_key
iv_force = seox_true
@@ -375,8 +371,8 @@ CLASS lcl_object_clas IMPLEMENTATION.
it_local_test_classes = lt_test_classes ).
mo_object_oriented_object_fct->deserialize_source(
- is_key = ls_class_key
- it_source = lt_source ).
+ is_key = ls_class_key
+ it_source = lt_source ).
io_xml->read( EXPORTING iv_name = 'DESCRIPTIONS'
CHANGING cg_data = lt_descriptions ).
@@ -385,7 +381,7 @@ CLASS lcl_object_clas IMPLEMENTATION.
is_key = ls_class_key
it_descriptions = lt_descriptions ).
- mo_object_oriented_object_fct->add_to_activation_list( is_item = ms_item ).
+ mo_object_oriented_object_fct->add_to_activation_list( ms_item ).
ENDMETHOD. "deserialize
METHOD lif_object~compare_to_remote_version.
@@ -396,7 +392,7 @@ CLASS lcl_object_clas IMPLEMENTATION.
super->constructor(
is_item = is_item
iv_language = iv_language ).
- mo_object_oriented_object_fct = lcl_oo_factory=>make( iv_object_type = ms_item-obj_type ).
+ mo_object_oriented_object_fct = lcl_oo_factory=>make( ms_item-obj_type ).
ENDMETHOD.
ENDCLASS. "lcl_object_CLAS IMPLEMENTATION
@@ -457,8 +453,9 @@ CLASS lcl_oo_class IMPLEMENTATION.
lcx_exception=>raise( 'error from generate_locals' ).
ENDIF.
ENDMETHOD.
+
METHOD lif_oo_object_fnc~insert_text_pool.
- DATA: lv_cp TYPE program.
+ DATA: lv_cp TYPE program.
lv_cp = cl_oo_classname_service=>get_classpool_name( iv_class_name ).
diff --git a/src/zabapgit_object_clas_new.prog.abap b/src/zabapgit_object_clas_new.prog.abap
new file mode 100644
index 000000000..4491372d4
--- /dev/null
+++ b/src/zabapgit_object_clas_new.prog.abap
@@ -0,0 +1,406 @@
+*&---------------------------------------------------------------------*
+*& Include ZABAPGIT_OBJECT_CLAS_NEW
+*&---------------------------------------------------------------------*
+
+* todo: refactoring
+* todo: testing, possible from master branch via experimental switch
+
+CLASS lcl_oo_class_new DEFINITION INHERITING FROM lcl_oo_class.
+
+ PUBLIC SECTION.
+ METHODS:
+ lif_oo_object_fnc~create REDEFINITION,
+ lif_oo_object_fnc~generate_locals REDEFINITION,
+ lif_oo_object_fnc~deserialize_source REDEFINITION.
+
+ PRIVATE SECTION.
+ CLASS-METHODS:
+ update_report
+ IMPORTING
+ iv_program TYPE programm
+ it_source TYPE string_table
+ RETURNING
+ VALUE(rv_updated) TYPE abap_bool,
+ generate_classpool
+ IMPORTING
+ iv_name TYPE seoclsname
+ RAISING
+ lcx_exception,
+ update_meta
+ IMPORTING
+ iv_name TYPE seoclsname
+ iv_exposure TYPE seoexpose
+ it_source TYPE rswsourcet
+ RAISING
+ lcx_exception,
+ determine_method_include
+ IMPORTING
+ iv_name TYPE seoclsname
+ iv_method TYPE seocpdname
+ RETURNING
+ VALUE(rv_program) TYPE programm
+ RAISING
+ lcx_exception,
+ init_scanner
+ IMPORTING
+ it_source TYPE lif_defs=>ty_string_tt
+ iv_name TYPE seoclsname
+ RETURNING
+ VALUE(ro_scanner) TYPE REF TO cl_oo_source_scanner_class.
+
+ENDCLASS.
+
+CLASS lcl_oo_class_new IMPLEMENTATION.
+
+ METHOD determine_method_include.
+
+ DATA: ls_mtdkey TYPE seocpdkey.
+
+
+ ls_mtdkey-clsname = iv_name.
+ ls_mtdkey-cpdname = iv_method.
+
+ cl_oo_classname_service=>get_method_include(
+ EXPORTING
+ mtdkey = ls_mtdkey
+ RECEIVING
+ result = rv_program
+ EXCEPTIONS
+ method_not_existing = 1 ).
+ IF sy-subrc = 0.
+ RETURN.
+ ENDIF.
+
+ CALL FUNCTION 'SEO_METHOD_GENERATE_INCLUDE'
+ EXPORTING
+ suppress_mtdkey_check = seox_true
+ mtdkey = ls_mtdkey
+ EXCEPTIONS
+ not_existing = 1
+ model_only = 2
+ include_existing = 3
+ method_imp_not_generated = 4
+ method_imp_not_initialised = 5
+ _internal_class_not_existing = 6
+ _internal_method_overflow = 7
+ cancelled = 8
+ method_is_abstract_implemented = 9
+ method_is_final_implemented = 10
+ internal_error_insert_report = 11
+ OTHERS = 12.
+ IF sy-subrc <> 0.
+ lcx_exception=>raise( 'error from SEO_METHOD_GENERATE_INCLUDE' ).
+ ENDIF.
+
+ rv_program = cl_oo_classname_service=>get_method_include( ls_mtdkey ).
+
+ ENDMETHOD.
+
+ METHOD lif_oo_object_fnc~create.
+* same as in super class, but with "version = seoc_version_active"
+
+ CALL FUNCTION 'SEO_CLASS_CREATE_COMPLETE'
+ EXPORTING
+ devclass = iv_package
+ overwrite = iv_overwrite
+ version = seoc_version_active
+ CHANGING
+ class = is_properties
+ EXCEPTIONS
+ existing = 1
+ is_interface = 2
+ db_error = 3
+ component_error = 4
+ no_access = 5
+ other = 6
+ OTHERS = 7.
+ IF sy-subrc <> 0.
+ lcx_exception=>raise( 'error from SEO_CLASS_CREATE_COMPLETE' ).
+ ENDIF.
+
+ ENDMETHOD.
+
+ METHOD init_scanner.
+
+ ro_scanner = cl_oo_source_scanner_class=>create_class_scanner(
+ clif_name = iv_name
+ source = it_source ).
+ ro_scanner->scan( ).
+
+ ENDMETHOD.
+
+ METHOD update_report.
+
+ DATA: lt_old TYPE string_table.
+
+ READ REPORT iv_program INTO lt_old.
+ ASSERT sy-subrc = 0. " include should have been created previously
+ IF lt_old <> it_source.
+ INSERT REPORT iv_program FROM it_source.
+ ASSERT sy-subrc = 0.
+ rv_updated = abap_true.
+ ELSE.
+ rv_updated = abap_false.
+ ENDIF.
+
+ ENDMETHOD.
+
+ METHOD lif_oo_object_fnc~generate_locals.
+
+ DATA: lv_program TYPE programm.
+
+
+ lv_program = cl_oo_classname_service=>get_ccdef_name( is_key-clsname ).
+ update_report( iv_program = lv_program
+ it_source = it_local_definitions ).
+
+ lv_program = cl_oo_classname_service=>get_ccimp_name( is_key-clsname ).
+ update_report( iv_program = lv_program
+ it_source = it_local_implementations ).
+
+ lv_program = cl_oo_classname_service=>get_ccmac_name( is_key-clsname ).
+ update_report( iv_program = lv_program
+ it_source = it_local_macros ).
+
+ IF lines( it_local_test_classes ) > 0.
+ lv_program = cl_oo_classname_service=>get_ccau_name( is_key-clsname ).
+ update_report( iv_program = lv_program
+ it_source = it_local_test_classes ).
+ ENDIF.
+
+ ENDMETHOD.
+
+ METHOD update_meta.
+
+ DATA: lo_update TYPE REF TO cl_oo_class_section_source,
+ ls_clskey TYPE seoclskey,
+ lv_scan_error TYPE seox_boolean.
+
+
+ ls_clskey-clsname = iv_name.
+
+ CREATE OBJECT lo_update
+ EXPORTING
+ clskey = ls_clskey
+ exposure = iv_exposure
+ state = 'A'
+ source = it_source
+ suppress_constrctr_generation = seox_true
+ EXCEPTIONS
+ class_not_existing = 1
+ read_source_error = 2
+ OTHERS = 3.
+ IF sy-subrc <> 0.
+ lcx_exception=>raise( 'error instantiating CL_OO_CLASS_SECTION_SOURCE' ).
+ ENDIF.
+
+ lo_update->set_dark_mode( seox_true ).
+ lo_update->set_amdp_support( abap_true ).
+ lo_update->scan_section_source(
+ RECEIVING
+ scan_error = lv_scan_error
+ EXCEPTIONS
+ scan_abap_source_error = 1
+ OTHERS = 2 ).
+ IF sy-subrc <> 0 OR lv_scan_error = abap_true.
+ lcx_exception=>raise( 'CLAS, error while scanning source' ).
+ ENDIF.
+
+* this will update the SEO* database tables
+ lo_update->revert_scan_result( ).
+
+ IF iv_exposure = seoc_exposure_public.
+ generate_classpool( iv_name ).
+ ENDIF.
+
+ ENDMETHOD.
+
+ METHOD generate_classpool.
+
+ DATA: ls_clskey TYPE seoclskey.
+
+ ls_clskey-clsname = iv_name.
+
+ CALL FUNCTION 'SEO_CLASS_GENERATE_CLASSPOOL'
+ EXPORTING
+ clskey = ls_clskey
+ suppress_corr = seox_true
+ EXCEPTIONS
+ not_existing = 1
+ model_only = 2
+ class_pool_not_generated = 3
+ class_stment_not_generated = 4
+ locals_not_generated = 5
+ macros_not_generated = 6
+ public_sec_not_generated = 7
+ protected_sec_not_generated = 8
+ private_sec_not_generated = 9
+ typeref_not_generated = 10
+ class_pool_not_initialised = 11
+ class_stment_not_initialised = 12
+ locals_not_initialised = 13
+ macros_not_initialised = 14
+ public_sec_not_initialised = 15
+ protected_sec_not_initialised = 16
+ private_sec_not_initialised = 17
+ typeref_not_initialised = 18
+ _internal_class_overflow = 19
+ OTHERS = 20.
+ IF sy-subrc <> 0.
+ lcx_exception=>raise( 'error from SEO_CLASS_GENERATE_CLASSPOOL' ).
+ ENDIF.
+
+ ENDMETHOD.
+
+ METHOD lif_oo_object_fnc~deserialize_source.
+
+ DATA: lv_updated TYPE abap_bool,
+ lv_program TYPE program,
+ lo_scanner TYPE REF TO cl_oo_source_scanner_class,
+ lt_methods TYPE cl_oo_source_scanner_class=>type_method_implementations,
+ lv_method LIKE LINE OF lt_methods,
+ lt_source TYPE seop_source_string.
+
+
+ lo_scanner = init_scanner(
+ it_source = it_source
+ iv_name = is_key-clsname ).
+
+* public
+ lt_source = lo_scanner->get_public_section_source( ).
+ lv_program = cl_oo_classname_service=>get_pubsec_name( is_key-clsname ).
+ lv_updated = update_report( iv_program = lv_program
+ it_source = lt_source ).
+ IF lv_updated = abap_true.
+ update_meta( iv_name = is_key-clsname
+ iv_exposure = seoc_exposure_public
+ it_source = lt_source ).
+ ENDIF.
+
+* protected
+ lt_source = lo_scanner->get_protected_section_source( ).
+ lv_program = cl_oo_classname_service=>get_prosec_name( is_key-clsname ).
+ lv_updated = update_report( iv_program = lv_program
+ it_source = lt_source ).
+ IF lv_updated = abap_true.
+ update_meta( iv_name = is_key-clsname
+ iv_exposure = seoc_exposure_protected
+ it_source = lt_source ).
+ ENDIF.
+
+* private
+ lt_source = lo_scanner->get_private_section_source( ).
+ lv_program = cl_oo_classname_service=>get_prisec_name( is_key-clsname ).
+ lv_updated = update_report( iv_program = lv_program
+ it_source = lt_source ).
+ IF lv_updated = abap_true.
+ update_meta( iv_name = is_key-clsname
+ iv_exposure = seoc_exposure_private
+ it_source = lt_source ).
+ ENDIF.
+
+* methods
+ lt_methods = lo_scanner->get_method_implementations( ).
+
+ LOOP AT lt_methods INTO lv_method.
+ TRY.
+ lt_source = lo_scanner->get_method_impl_source( lv_method ).
+ CATCH cx_oo_clif_component.
+ lcx_exception=>raise( 'error from GET_METHOD_IMPL_SOURCE' ).
+ ENDTRY.
+ lv_program = determine_method_include(
+ iv_name = is_key-clsname
+ iv_method = lv_method ).
+
+ update_report(
+ iv_program = lv_program
+ it_source = lt_source ).
+ ENDLOOP.
+
+ ENDMETHOD.
+
+ENDCLASS.
+
+CLASS lcl_object_clas_new DEFINITION INHERITING FROM lcl_object_clas.
+
+ PUBLIC SECTION.
+ METHODS: constructor
+ IMPORTING
+ is_item TYPE lif_defs=>ty_item
+ iv_language TYPE spras.
+
+ PROTECTED SECTION.
+ METHODS:
+ deserialize_abap REDEFINITION.
+
+ENDCLASS.
+
+CLASS lcl_object_clas_new IMPLEMENTATION.
+
+ METHOD constructor.
+ super->constructor( is_item = is_item
+ iv_language = iv_language ).
+
+ CREATE OBJECT mo_object_oriented_object_fct TYPE lcl_oo_class_new.
+ ENDMETHOD.
+
+ METHOD deserialize_abap.
+* same as in lcl_object_clas, but without "mo_object_oriented_object_fct->add_to_activation_list"
+
+ DATA: ls_vseoclass TYPE vseoclass,
+ lt_source TYPE seop_source_string,
+ lt_local_definitions TYPE seop_source_string,
+ lt_local_implementations TYPE seop_source_string,
+ lt_local_macros TYPE seop_source_string,
+ lt_test_classes TYPE seop_source_string,
+ lt_descriptions TYPE lif_defs=>ty_seocompotx_tt,
+ ls_class_key TYPE seoclskey.
+
+
+ lt_source = mo_files->read_abap( ).
+
+ lt_local_definitions = mo_files->read_abap( iv_extra = 'locals_def'
+ iv_error = abap_false ). "#EC NOTEXT
+
+ lt_local_implementations = mo_files->read_abap( iv_extra = 'locals_imp'
+ iv_error = abap_false ). "#EC NOTEXT
+
+ lt_local_macros = mo_files->read_abap( iv_extra = 'macros'
+ iv_error = abap_false ). "#EC NOTEXT
+
+ lt_test_classes = mo_files->read_abap( iv_extra = 'testclasses'
+ iv_error = abap_false ). "#EC NOTEXT
+
+ ls_class_key-clsname = ms_item-obj_name.
+
+ io_xml->read( EXPORTING iv_name = 'VSEOCLASS'
+ CHANGING cg_data = ls_vseoclass ).
+
+ mo_object_oriented_object_fct->create(
+ EXPORTING
+ iv_package = iv_package
+ CHANGING
+ is_properties = ls_vseoclass ).
+
+ mo_object_oriented_object_fct->generate_locals(
+ is_key = ls_class_key
+ iv_force = seox_true
+ it_local_definitions = lt_local_definitions
+ it_local_implementations = lt_local_implementations
+ it_local_macros = lt_local_macros
+ it_local_test_classes = lt_test_classes ).
+
+ mo_object_oriented_object_fct->deserialize_source(
+ is_key = ls_class_key
+ it_source = lt_source ).
+
+ io_xml->read( EXPORTING iv_name = 'DESCRIPTIONS'
+ CHANGING cg_data = lt_descriptions ).
+
+ mo_object_oriented_object_fct->update_descriptions(
+ is_key = ls_class_key
+ it_descriptions = lt_descriptions ).
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/zabapgit_object_clas_new.prog.xml b/src/zabapgit_object_clas_new.prog.xml
new file mode 100644
index 000000000..7216bb678
--- /dev/null
+++ b/src/zabapgit_object_clas_new.prog.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+ ZABAPGIT_OBJECT_CLAS_NEW
+ A
+ X
+ I
+ E
+ X
+
+
+ -
+ R
+ Include ZABAPGIT_OBJECT_CLAS_NEW
+ 32
+
+
+
+
+
diff --git a/src/zabapgit_object_ddls.prog.abap b/src/zabapgit_object_ddls.prog.abap
index 7279125d2..a79e61e70 100644
--- a/src/zabapgit_object_ddls.prog.abap
+++ b/src/zabapgit_object_ddls.prog.abap
@@ -142,7 +142,7 @@ CLASS lcl_object_ddls IMPLEMENTATION.
EXPORTING
name = ms_item-obj_name.
CATCH cx_root.
- lcx_exception=>raise( 'DDLS error' ).
+ lcx_exception=>raise( 'DDLS error deleting' ).
ENDTRY.
ENDMETHOD. "delete
@@ -171,7 +171,7 @@ CLASS lcl_object_ddls IMPLEMENTATION.
IMPORTING
ddddlsrcv_wa = .
CATCH cx_root.
- lcx_exception=>raise( 'DDLS error' ).
+ lcx_exception=>raise( 'DDLS error reading' ).
ENDTRY.
ASSIGN COMPONENT 'AS4USER' OF STRUCTURE TO .
@@ -233,7 +233,7 @@ CLASS lcl_object_ddls IMPLEMENTATION.
devclass = iv_package
prid = 0.
CATCH cx_root.
- lcx_exception=>raise( 'DDLS error' ).
+ lcx_exception=>raise( 'DDLS error writing TADIR' ).
ENDTRY.
lcl_objects_activation=>add_item( ms_item ).
diff --git a/src/zabapgit_object_fugr.prog.abap b/src/zabapgit_object_fugr.prog.abap
index 57af54833..948da37cf 100644
--- a/src/zabapgit_object_fugr.prog.abap
+++ b/src/zabapgit_object_fugr.prog.abap
@@ -430,11 +430,12 @@ CLASS lcl_object_fugr IMPLEMENTATION.
cnam TYPE reposrc-cnam,
END OF ty_reposrc.
- DATA: lt_reposrc TYPE STANDARD TABLE OF ty_reposrc WITH DEFAULT KEY,
- ls_reposrc LIKE LINE OF lt_reposrc,
- lv_program TYPE program,
- lv_tabix LIKE sy-tabix,
- lt_functab TYPE ty_rs38l_incl_tt.
+ DATA: lt_reposrc TYPE STANDARD TABLE OF ty_reposrc WITH DEFAULT KEY,
+ ls_reposrc LIKE LINE OF lt_reposrc,
+ lv_program TYPE program,
+ lv_offset_ns TYPE i,
+ lv_tabix LIKE sy-tabix,
+ lt_functab TYPE ty_rs38l_incl_tt.
FIELD-SYMBOLS: LIKE LINE OF rt_includes,
LIKE LINE OF lt_functab.
@@ -464,15 +465,15 @@ CLASS lcl_object_fugr IMPLEMENTATION.
* handle generated maintenance views
APPEND INITIAL LINE TO rt_includes ASSIGNING .
- if ms_item-obj_name(1) <> '/'.
+ IF ms_item-obj_name(1) <> '/'.
"FGroup name does not contain a namespace
= |L{ ms_item-obj_name }T00|.
- else.
+ ELSE.
"FGroup name contains a namespace
lv_offset_ns = find( val = ms_item-obj_name+1 sub = '/' ).
lv_offset_ns = lv_offset_ns + 2.
= |{ ms_item-obj_name(lv_offset_ns) }L{ ms_item-obj_name+lv_offset_ns }T00|.
- endif.
+ ENDIF.
IF lines( rt_includes ) > 0.
SELECT progname cnam FROM reposrc
diff --git a/src/zabapgit_object_serializing.prog.abap b/src/zabapgit_object_serializing.prog.abap
index 873d73425..b1bbe3978 100644
--- a/src/zabapgit_object_serializing.prog.abap
+++ b/src/zabapgit_object_serializing.prog.abap
@@ -8,6 +8,7 @@ INCLUDE zabapgit_object_acid.
INCLUDE zabapgit_object_auth.
INCLUDE zabapgit_object_oo_functions.
INCLUDE zabapgit_object_clas.
+INCLUDE zabapgit_object_clas_new.
INCLUDE zabapgit_object_cmpt.
INCLUDE zabapgit_object_dcls.
INCLUDE zabapgit_object_ddls.
diff --git a/src/zabapgit_object_sicf.prog.abap b/src/zabapgit_object_sicf.prog.abap
index 51a09b31e..fc4fd2a78 100644
--- a/src/zabapgit_object_sicf.prog.abap
+++ b/src/zabapgit_object_sicf.prog.abap
@@ -407,6 +407,11 @@ CLASS lcl_object_sicf IMPLEMENTATION.
RETURN.
ENDIF.
+ IF ls_icfservice-icfparguid CO '0'.
+* not supported by the SAP standard API
+ lcx_exception=>raise( 'SICF - cannot delete root node, delete node manually' ).
+ ENDIF.
+
cl_icf_tree=>if_icf_tree~delete_node(
EXPORTING
icfparguid = ls_icfservice-icfparguid
diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap
index 7f261aaef..0efc5a322 100644
--- a/src/zabapgit_objects_impl.prog.abap
+++ b/src/zabapgit_objects_impl.prog.abap
@@ -133,6 +133,11 @@ CLASS lcl_objects IMPLEMENTATION.
lv_class_name = class_name( is_item ).
ENDIF.
+ IF lcl_app=>settings( )->read( )->get_experimental_features( ) = abap_true
+ AND is_item-obj_type = 'CLAS'.
+ lv_class_name = 'LCL_OBJECT_CLAS_NEW'.
+ ENDIF.
+
TRY.
CREATE OBJECT ri_obj TYPE (lv_class_name)
EXPORTING
@@ -231,30 +236,23 @@ CLASS lcl_objects IMPLEMENTATION.
METHOD jump.
- DATA: li_obj TYPE REF TO lif_object,
- adt_jump_enabled TYPE abap_bool.
+ DATA: li_obj TYPE REF TO lif_object,
+ lv_adt_jump_enabled TYPE abap_bool.
li_obj = create_object( is_item = is_item
iv_language = lif_defs=>gc_english ).
- adt_jump_enabled = lcl_app=>settings( )->read( )->get_adt_jump_enabled( ).
-
- IF adt_jump_enabled = abap_true.
+ lv_adt_jump_enabled = lcl_app=>settings( )->read( )->get_adt_jump_enabled( ).
+ IF lv_adt_jump_enabled = abap_true.
TRY.
lcl_objects_super=>jump_adt( i_obj_name = is_item-obj_name
i_obj_type = is_item-obj_type ).
-
CATCH lcx_exception.
-
li_obj->jump( ).
-
ENDTRY.
-
ELSE.
-
li_obj->jump( ).
-
ENDIF.
ENDMETHOD. "jump
@@ -589,9 +587,7 @@ CLASS lcl_objects IMPLEMENTATION.
lt_remote = io_repo->get_files_remote( ).
lt_results = lcl_file_status=>status( io_repo ).
- DELETE lt_results WHERE
- match = abap_true. " Full match
-* OR rstate IS INITIAL. " no remote changes, only local
+ DELETE lt_results WHERE match = abap_true. " Full match
SORT lt_results BY obj_type ASCENDING obj_name ASCENDING.
DELETE ADJACENT DUPLICATES FROM lt_results COMPARING obj_type obj_name.
diff --git a/src/zabapgit_page_settings.prog.abap b/src/zabapgit_page_settings.prog.abap
index cf155e04a..42e207acb 100644
--- a/src/zabapgit_page_settings.prog.abap
+++ b/src/zabapgit_page_settings.prog.abap
@@ -164,6 +164,13 @@ CLASS lcl_gui_page_settings IMPLEMENTATION.
mo_settings->set_run_critical_tests( abap_false ).
ENDIF.
+ READ TABLE it_post_fields ASSIGNING WITH KEY name = 'experimental_features'.
+ IF sy-subrc = 0.
+ mo_settings->set_experimental_features( abap_true ).
+ ELSE.
+ mo_settings->set_experimental_features( abap_false ).
+ ENDIF.
+
READ TABLE it_post_fields ASSIGNING WITH KEY name = 'max_lines'.
IF sy-subrc = 0.
lv_i_param_value = -value.
@@ -263,16 +270,24 @@ CLASS lcl_gui_page_settings IMPLEMENTATION.
METHOD render_development_internals.
- DATA lv_checked TYPE string.
+ DATA: lv_critical_tests TYPE string,
+ lv_experimental TYPE string.
IF mo_settings->get_run_critical_tests( ) = abap_true.
- lv_checked = 'checked'.
+ lv_critical_tests = 'checked'.
+ ENDIF.
+
+ IF mo_settings->get_experimental_features( ) = abap_true.
+ lv_experimental = 'checked'.
ENDIF.
CREATE OBJECT ro_html.
ro_html->add( |abapGit Development Internals settings
| ).
- ro_html->add( ` Enable critical unit tests (see LTCL_DANGEROUS)` ).
+ ro_html->add( ` Enable critical unit tests (see LTCL_DANGEROUS)` ).
+ ro_html->add( |
| ).
+ ro_html->add( ` Enable experimental features` ).
ro_html->add( |
| ).
ro_html->add( |
| ).
diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap
index 2bb48a4d6..121077330 100644
--- a/src/zabapgit_persistence.prog.abap
+++ b/src/zabapgit_persistence.prog.abap
@@ -119,7 +119,7 @@ CLASS lcl_persistence_repo DEFINITION FINAL.
TYPES: BEGIN OF ty_repo,
key TYPE lcl_persistence_db=>ty_value.
- INCLUDE TYPE ty_repo_xml.
+ INCLUDE TYPE ty_repo_xml.
TYPES: END OF ty_repo.
TYPES: tt_repo TYPE STANDARD TABLE OF ty_repo WITH DEFAULT KEY.
TYPES: tt_repo_keys TYPE STANDARD TABLE OF ty_repo-key WITH DEFAULT KEY.
@@ -236,7 +236,7 @@ CLASS lcl_persist_background DEFINITION FINAL.
TYPES: BEGIN OF ty_background,
key TYPE lcl_persistence_db=>ty_value.
- INCLUDE TYPE ty_xml.
+ INCLUDE TYPE ty_xml.
TYPES: END OF ty_background.
TYPES: tt_background TYPE STANDARD TABLE OF ty_background WITH DEFAULT KEY.
@@ -284,59 +284,70 @@ CLASS lcl_settings DEFINITION FINAL.
CONSTANTS: c_commitmsg_body_size_dft TYPE i VALUE 72.
CONSTANTS: c_dbtype_settings TYPE lcl_persistence_db=>ty_type VALUE 'SETTINGS' ##NO_TEXT.
- METHODS set_proxy_url
+ METHODS: set_proxy_url
IMPORTING
- iv_url TYPE string.
- METHODS set_proxy_port
- IMPORTING
- iv_port TYPE string.
- METHODS set_proxy_authentication
- IMPORTING
- iv_auth TYPE abap_bool.
- METHODS get_proxy_url
- RETURNING
- VALUE(rv_proxy_url) TYPE string.
- METHODS get_proxy_port
- RETURNING
- VALUE(rv_port) TYPE string.
- METHODS get_proxy_authentication
- RETURNING
- VALUE(rv_auth) TYPE abap_bool.
- METHODS set_run_critical_tests
- IMPORTING
- iv_run TYPE abap_bool.
- METHODS
+ iv_url TYPE string,
+ set_proxy_port
+ IMPORTING
+ iv_port TYPE string,
+ set_proxy_authentication
+ IMPORTING
+ iv_auth TYPE abap_bool,
+ get_proxy_url
+ RETURNING
+ VALUE(rv_proxy_url) TYPE string,
+ get_proxy_port
+ RETURNING
+ VALUE(rv_port) TYPE string,
+ get_proxy_authentication
+ RETURNING
+ VALUE(rv_auth) TYPE abap_bool,
+ set_run_critical_tests
+ IMPORTING
+ iv_run TYPE abap_bool,
get_run_critical_tests
- RETURNING VALUE(rv_run) TYPE abap_bool.
- METHODS set_max_lines
- IMPORTING iv_lines TYPE i.
- METHODS get_max_lines
- RETURNING
- VALUE(rv_lines) TYPE i.
- METHODS set_adt_jump_enanbled
- IMPORTING iv_adt_jump_enabled TYPE abap_bool.
- METHODS get_adt_jump_enabled
- RETURNING
- VALUE(rv_adt_jump_enabled) TYPE abap_bool.
- METHODS set_commitmsg_comment_length
- IMPORTING iv_length TYPE i.
- METHODS get_commitmsg_comment_length
- RETURNING
- VALUE(rv_length) TYPE i.
- METHODS set_commitmsg_body_size
- IMPORTING iv_length TYPE i.
- METHODS get_commitmsg_body_size
- RETURNING
- VALUE(rv_length) TYPE i.
- METHODS get_settings_xml
- RETURNING VALUE(ev_settings_xml) TYPE string
- RAISING lcx_exception.
- METHODS set_xml_settings
- IMPORTING iv_settings_xml TYPE string
- RAISING lcx_exception.
- METHODS set_defaults.
-
-
+ RETURNING
+ VALUE(rv_run) TYPE abap_bool,
+ set_experimental_features
+ IMPORTING
+ iv_run TYPE abap_bool,
+ get_experimental_features
+ RETURNING
+ VALUE(rv_run) TYPE abap_bool,
+ set_max_lines
+ IMPORTING iv_lines TYPE i,
+ get_max_lines
+ RETURNING
+ VALUE(rv_lines) TYPE i,
+ set_adt_jump_enanbled
+ IMPORTING
+ iv_adt_jump_enabled TYPE abap_bool,
+ get_adt_jump_enabled
+ RETURNING
+ VALUE(rv_adt_jump_enabled) TYPE abap_bool,
+ set_commitmsg_comment_length
+ IMPORTING
+ iv_length TYPE i,
+ get_commitmsg_comment_length
+ RETURNING
+ VALUE(rv_length) TYPE i,
+ set_commitmsg_body_size
+ IMPORTING
+ iv_length TYPE i,
+ get_commitmsg_body_size
+ RETURNING
+ VALUE(rv_length) TYPE i,
+ get_settings_xml
+ RETURNING
+ VALUE(ev_settings_xml) TYPE string
+ RAISING
+ lcx_exception,
+ set_xml_settings
+ IMPORTING
+ iv_settings_xml TYPE string
+ RAISING
+ lcx_exception,
+ set_defaults.
PRIVATE SECTION.
TYPES: BEGIN OF ty_s_settings,
@@ -344,6 +355,7 @@ CLASS lcl_settings DEFINITION FINAL.
proxy_port TYPE string,
proxy_auth TYPE string,
run_critical_tests TYPE abap_bool,
+ experimental_features TYPE abap_bool,
max_lines TYPE i,
adt_jump_enabled TYPE abap_bool,
commitmsg_comment_length TYPE i,
@@ -1828,6 +1840,14 @@ CLASS lcl_settings IMPLEMENTATION.
rv_run = ms_settings-run_critical_tests.
ENDMETHOD.
+ METHOD set_experimental_features.
+ ms_settings-experimental_features = iv_run.
+ ENDMETHOD.
+
+ METHOD get_experimental_features.
+ rv_run = ms_settings-experimental_features.
+ ENDMETHOD.
+
METHOD get_max_lines.
rv_lines = ms_settings-max_lines.
ENDMETHOD.
@@ -1891,15 +1911,11 @@ CLASS lcl_settings IMPLEMENTATION.
CLEAR ms_settings.
set_proxy_authentication( abap_false ).
-
set_run_critical_tests( abap_false ).
-
+ set_experimental_features( abap_false ).
set_max_lines( 500 ).
-
set_adt_jump_enanbled( abap_false ).
-
set_commitmsg_comment_length( lcl_settings=>c_commitmsg_comment_length_dft ).
-
set_commitmsg_body_size( lcl_settings=>c_commitmsg_body_size_dft ).
ENDMETHOD.