Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PINF: Fix error when changing packages #5560

Merged
merged 3 commits into from May 19, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
22 changes: 13 additions & 9 deletions src/objects/zcl_abapgit_object_pinf.clas.abap
Expand Up @@ -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
Expand Down Expand Up @@ -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: <li_element> LIKE LINE OF lt_existing,
<ls_element> LIKE LINE OF is_pinf-elements.
FIELD-SYMBOLS <li_element> LIKE LINE OF lt_existing.

ii_interface->set_elements_changeable( abap_true ).

lt_existing = ii_interface->get_elements( ).

LOOP AT is_pinf-elements ASSIGNING <ls_element>.
LOOP AT is_pinf-elements INTO ls_element.

lv_found = abap_false.
LOOP AT lt_existing ASSIGNING <li_element>.
lv_index = sy-tabix.
<li_element>->get_all_attributes( IMPORTING e_element_data = ls_attr ).
IF <ls_element>-elem_type = ls_attr-elem_type
AND <ls_element>-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 <ls_element> TO lt_add.
ls_element-elem_pack = iv_package.
APPEND ls_element TO lt_add.
ENDIF.
ENDLOOP.

Expand Down Expand Up @@ -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 ).

Expand Down Expand Up @@ -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.

Expand Down
11 changes: 11 additions & 0 deletions src/objects/zcl_abapgit_object_pinf.clas.locals_imp.abap
Expand Up @@ -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
Expand All @@ -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.
Expand Down