anchor.diff:  
     ENDMETHOD.
   
  +
     METHOD delete_elements.
   
       DATA: lt_elements TYPE ty_elements.
  
positive.code: 
    ENDMETHOD.
  
    METHOD zif_abapgit_object~jump.
  
      CALL FUNCTION 'RS_TOOL_ACCESS'
  
negative.code:     ii_interface->save_elements( ).
  
    ENDMETHOD.
  
  
    METHOD update_attributes.
  
      DATA: ls_sign       TYPE scompisign,
            lv_changeable TYPE abap_bool.
  
  
      ii_interface->get_changeable( IMPORTING e_changeable = lv_changeable ).
      IF lv_changeable = abap_false.
  * at creation the object is already in change mode
        ii_interface->set_changeable( abap_true ).
      ENDIF.
  
      ls_sign-descript       = abap_true.
      ls_sign-pinftype       = abap_true.
      ls_sign-restricted     = abap_true.
      ls_sign-default_if     = abap_true.
      ls_sign-def_sever      = abap_true.
      ls_sign-acl_flag       = abap_true.
      ls_sign-pifstablty     = abap_true.
      ls_sign-release_status = abap_true.
  
      ii_interface->set_all_attributes(
        i_package_interface_data = is_pinf-attributes
        i_data_sign              = ls_sign ).
  
      set_default_package( iv_package ).
  * looks like setting "i_suppress_dialog = abap_true" will make
  * it fail for local($) packages
      ii_interface->save( ).
  
      ii_interface->set_changeable( abap_false ).
  
    ENDMETHOD.
  
  
    METHOD update_elements.
  
      DATA: lt_existing TYPE ty_elements,
            lt_add      TYPE scomeldata,
            lv_index    TYPE i,
            lv_found    TYPE abap_bool,
  *          ls_sign     TYPE scomelsign,
            ls_attr     TYPE scomeldtln.
  
      FIELD-SYMBOLS: <li_element> LIKE LINE OF lt_existing,
                     <ls_element> LIKE LINE OF is_pinf-elements.
  
  
  *    ls_sign-usag_restr                 = abap_true.
  *    ls_sign-stability                  = abap_true.
  *    ls_sign-no_check                   = abap_true.
  *    ls_sign-useastype                  = abap_true.
  *    ls_sign-asforgnkey                 = abap_true.
  *    ls_sign-deprecation_type           = abap_true. backport
  *    ls_sign-replacement_object_type    = abap_true. backport
  *    ls_sign-replacement_object_name    = abap_true. backport
  *    ls_sign-replacement_subobject_type = abap_true. backport
  *    ls_sign-replacement_subobject_name = abap_true. backport
  
      ii_interface->set_elements_changeable( abap_true ).
  
      ii_interface->get_elements( IMPORTING e_elements = lt_existing ).
  
      LOOP AT is_pinf-elements ASSIGNING <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.
            DELETE lt_existing INDEX lv_index.
            CONTINUE. " current loop
          ENDIF.
        ENDLOOP.
  
        IF lv_found = abap_false.
          APPEND <ls_element> TO lt_add.
        ENDIF.
      ENDLOOP.
  
      ii_interface->remove_elements( lt_existing ).
  
      ii_interface->add_elements( lt_add ).
  
      ii_interface->save_elements( ).
  
      ii_interface->set_elements_changeable( abap_false ).
  
    ENDMETHOD.
  
  
    METHOD zif_abapgit_object~changed_by.
  
      SELECT SINGLE changed_by FROM intf INTO rv_user
        WHERE intf_name = ms_item-obj_name.
      IF sy-subrc <> 0.
        rv_user = c_user_unknown.
      ENDIF.
  
    ENDMETHOD.
  
  
    METHOD zif_abapgit_object~compare_to_remote_version.
      CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
    ENDMETHOD.
  
  
    METHOD zif_abapgit_object~delete.
  
  