diff --git a/src/objects/zcl_abapgit_object_pinf.clas.abap b/src/objects/zcl_abapgit_object_pinf.clas.abap index 04c19e51e..2461520a5 100644 --- a/src/objects/zcl_abapgit_object_pinf.clas.abap +++ b/src/objects/zcl_abapgit_object_pinf.clas.abap @@ -36,8 +36,9 @@ CLASS zcl_abapgit_object_pinf DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje zcx_abapgit_exception . METHODS update_elements IMPORTING - is_pinf TYPE ty_pinf - ii_interface TYPE REF TO lif_package_interface_facade + !iv_package TYPE devclass + !is_pinf TYPE ty_pinf + !ii_interface TYPE REF TO lif_package_interface_facade RAISING zcx_abapgit_exception . METHODS load @@ -185,33 +186,34 @@ CLASS zcl_abapgit_object_pinf IMPLEMENTATION. METHOD update_elements. DATA: lt_existing TYPE ty_elements, + ls_element LIKE LINE OF is_pinf-elements, lt_add TYPE scomeldata, lv_index TYPE i, lv_found TYPE abap_bool, ls_attr TYPE scomeldtln. - FIELD-SYMBOLS: LIKE LINE OF lt_existing, - LIKE LINE OF is_pinf-elements. + FIELD-SYMBOLS LIKE LINE OF lt_existing. ii_interface->set_elements_changeable( abap_true ). lt_existing = ii_interface->get_elements( ). - LOOP AT is_pinf-elements ASSIGNING . + LOOP AT is_pinf-elements INTO ls_element. lv_found = abap_false. LOOP AT lt_existing ASSIGNING . lv_index = sy-tabix. ->get_all_attributes( IMPORTING e_element_data = ls_attr ). - IF -elem_type = ls_attr-elem_type - AND -elem_key = ls_attr-elem_key. + IF ls_element-elem_type = ls_attr-elem_type + AND ls_element-elem_key = ls_attr-elem_key. DELETE lt_existing INDEX lv_index. CONTINUE. " current loop ENDIF. ENDLOOP. IF lv_found = abap_false. - APPEND TO lt_add. + ls_element-elem_pack = iv_package. + APPEND ls_element TO lt_add. ENDIF. ENDLOOP. @@ -280,6 +282,7 @@ CLASS zcl_abapgit_object_pinf IMPLEMENTATION. ii_interface = li_interface ). update_elements( + iv_package = iv_package is_pinf = ls_pinf ii_interface = li_interface ). @@ -358,7 +361,8 @@ CLASS zcl_abapgit_object_pinf IMPLEMENTATION. ls_pinf-attributes = li_interface->get_all_attributes( ). "Delete the package name if it comes from the same package - IF ls_pinf-attributes-tadir_devc = ls_pinf-attributes-pack_name. + IF ls_pinf-attributes-tadir_devc = ls_pinf-attributes-pack_name OR + ms_item-devclass = ls_pinf-attributes-pack_name. CLEAR ls_pinf-attributes-pack_name. ENDIF. diff --git a/src/objects/zcl_abapgit_object_pinf.clas.locals_imp.abap b/src/objects/zcl_abapgit_object_pinf.clas.locals_imp.abap index 3336b2988..8cd3508d0 100644 --- a/src/objects/zcl_abapgit_object_pinf.clas.locals_imp.abap +++ b/src/objects/zcl_abapgit_object_pinf.clas.locals_imp.abap @@ -158,9 +158,15 @@ CLASS lcl_package_interface_facade IMPLEMENTATION. METHOD lif_package_interface_facade~add_elements. + DATA: + lt_mismatched TYPE scomeldata, + ls_mismatched LIKE LINE OF lt_mismatched. + mi_interface->add_elements( EXPORTING i_elements_data = it_elements_data + IMPORTING + e_mismatched_elem_data = lt_mismatched EXCEPTIONS object_invalid = 1 intern_err = 2 @@ -170,6 +176,11 @@ CLASS lcl_package_interface_facade IMPLEMENTATION. zcx_abapgit_exception=>raise_t100( ). ENDIF. + LOOP AT lt_mismatched INTO ls_mismatched. + zcx_abapgit_exception=>raise( |Object { ls_mismatched-elem_type } { ls_mismatched-elem_key } | && + |from different package { ls_mismatched-elem_pack }| ). + ENDLOOP. + ENDMETHOD. METHOD lif_package_interface_facade~set_all_attributes.