Delete obsolete longtexts on pull (#5751)

* Delete obsolete longtexts on pull

Longtexts that exist in the system but not in the remote repository are deleted when pulling.

Closes #5202

* Refactor

* Constant

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Marc Bernard 2022-09-23 09:57:44 -04:00 committed by GitHub
parent c1a631fba3
commit f1c1aad740
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 65 additions and 11 deletions

View File

@ -162,8 +162,11 @@ CLASS zcl_abapgit_longtexts IMPLEMENTATION.
METHOD zif_abapgit_longtexts~deserialize.
DATA: lt_longtexts TYPE ty_longtexts,
lt_dokil TYPE zif_abapgit_definitions=>ty_dokil_tt,
lv_no_main_lang TYPE dokil-masterlang.
FIELD-SYMBOLS: <ls_longtext> TYPE ty_longtext.
FIELD-SYMBOLS: <ls_longtext> TYPE ty_longtext,
<ls_dokil> TYPE dokil.
ii_xml->read(
EXPORTING
@ -187,6 +190,38 @@ CLASS zcl_abapgit_longtexts IMPLEMENTATION.
ENDLOOP.
" Read existing texts and check if they were deserialized above
" If not, delete the texts
SELECT * FROM dokil
INTO TABLE lt_dokil
WHERE id = iv_longtext_id
AND object = iv_object_name.
LOOP AT lt_dokil ASSIGNING <ls_dokil>.
READ TABLE lt_longtexts TRANSPORTING NO FIELDS WITH KEY
dokil-id = <ls_dokil>-id
dokil-langu = <ls_dokil>-langu
dokil-object = <ls_dokil>-object
dokil-typ = <ls_dokil>-typ.
IF sy-subrc <> 0.
CALL FUNCTION 'DOCU_DEL'
EXPORTING
id = <ls_dokil>-id
langu = <ls_dokil>-langu
object = <ls_dokil>-object
typ = <ls_dokil>-typ
EXCEPTIONS
ret_code = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDIF.
ENDLOOP.
ENDMETHOD.

View File

@ -23,6 +23,8 @@ INTERFACE zif_abapgit_longtexts
METHODS deserialize
IMPORTING
!iv_longtext_name TYPE string DEFAULT 'LONGTEXTS'
!iv_object_name TYPE sobj_name
!iv_longtext_id TYPE dokil-id
!ii_xml TYPE REF TO zif_abapgit_xml_input
!iv_main_language TYPE sy-langu
RAISING

View File

@ -60,6 +60,8 @@ CLASS zcl_abapgit_object_doct IMPLEMENTATION.
mi_longtexts->deserialize(
iv_longtext_name = c_name
iv_object_name = ms_item-obj_name
iv_longtext_id = c_id
ii_xml = io_xml
iv_main_language = mv_language ).

View File

@ -303,7 +303,8 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION.
is_dd01v = ls_dd01v
it_dd07v = lt_dd07v ).
deserialize_longtexts( io_xml ).
deserialize_longtexts( ii_xml = io_xml
iv_longtext_id = c_longtext_id_doma ).
zcl_abapgit_objects_activation=>add_item( ms_item ).

View File

@ -143,6 +143,8 @@ CLASS zcl_abapgit_object_dsys IMPLEMENTATION.
WHEN 'v2.0.0'.
zcl_abapgit_factory=>get_longtexts( )->deserialize(
ii_xml = io_xml
iv_object_name = mv_doc_object
iv_longtext_id = c_id
iv_main_language = mv_language ).
WHEN OTHERS.

View File

@ -206,7 +206,8 @@ CLASS zcl_abapgit_object_dtel IMPLEMENTATION.
deserialize_texts( ii_xml = io_xml
is_dd04v = ls_dd04v ).
deserialize_longtexts( io_xml ).
deserialize_longtexts( ii_xml = io_xml
iv_longtext_id = c_longtext_id_dtel ).
zcl_abapgit_objects_activation=>add_item( ms_item ).

View File

@ -17,6 +17,8 @@ CLASS zcl_abapgit_object_msag DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ty_t100s TYPE STANDARD TABLE OF t100
WITH NON-UNIQUE DEFAULT KEY .
CONSTANTS c_longtext_id_msag TYPE dokil-id VALUE 'NA'.
METHODS serialize_texts
IMPORTING
!ii_xml TYPE REF TO zif_abapgit_xml_output
@ -55,7 +57,7 @@ CLASS zcl_abapgit_object_msag IMPLEMENTATION.
CLEAR lv_key_s.
CALL FUNCTION 'DOCU_OBJECT_NAME_CONCATENATE'
EXPORTING
docu_id = 'NA'
docu_id = c_longtext_id_msag
element = iv_message_id
addition = ' '
IMPORTING
@ -65,7 +67,7 @@ CLASS zcl_abapgit_object_msag IMPLEMENTATION.
CALL FUNCTION 'DOKU_DELETE_ALL'
EXPORTING
doku_id = 'NA'
doku_id = c_longtext_id_msag
doku_object = lv_key_s
generic_use = 'X'
suppress_authority = space
@ -182,7 +184,7 @@ CLASS zcl_abapgit_object_msag IMPLEMENTATION.
SELECT * FROM dokil
INTO TABLE lt_dokil
FOR ALL ENTRIES IN lt_doku_object_names
WHERE id = 'NA'
WHERE id = c_longtext_id_msag
AND object = lt_doku_object_names-table_line
AND masterlang = abap_true
ORDER BY PRIMARY KEY.
@ -191,7 +193,7 @@ CLASS zcl_abapgit_object_msag IMPLEMENTATION.
SELECT * FROM dokil
INTO TABLE lt_dokil
FOR ALL ENTRIES IN lt_doku_object_names
WHERE id = 'NA'
WHERE id = c_longtext_id_msag
AND object = lt_doku_object_names-table_line
AND langu IN lt_language_filter
ORDER BY PRIMARY KEY.
@ -402,7 +404,8 @@ CLASS zcl_abapgit_object_msag IMPLEMENTATION.
AND msgnr = ls_t100u-msgnr. "#EC CI_SUBRC
ENDLOOP.
deserialize_longtexts( io_xml ).
deserialize_longtexts( ii_xml = io_xml
iv_longtext_id = c_longtext_id_msag ).
deserialize_texts( io_xml ).

View File

@ -263,7 +263,8 @@ CLASS zcl_abapgit_object_prog IMPLEMENTATION.
deserialize_texts( io_xml ).
deserialize_lxe_texts( io_xml ).
deserialize_longtexts( io_xml ).
deserialize_longtexts( ii_xml = io_xml
iv_longtext_id = c_longtext_id_prog ).
ENDIF.

View File

@ -836,7 +836,8 @@ CLASS zcl_abapgit_object_tabl IMPLEMENTATION.
deserialize_texts( io_xml = io_xml
is_dd02v = ls_dd02v ).
deserialize_longtexts( io_xml ).
deserialize_longtexts( ii_xml = io_xml
iv_longtext_id = c_longtext_id_tabl ).
io_xml->read( EXPORTING iv_name = c_s_dataname-tabl_extras
CHANGING cg_data = ls_extras ).

View File

@ -859,10 +859,13 @@ CLASS zcl_abapgit_object_wdyn IMPLEMENTATION.
add_with_inactive_parts( ).
deserialize_longtexts( io_xml ).
deserialize_longtexts(
ii_xml = io_xml
iv_longtext_id = c_longtext_id_wd ).
deserialize_longtexts(
ii_xml = io_xml
iv_longtext_id = c_longtext_id_wc
iv_longtext_name = c_longtext_name_wc ).
ENDMETHOD.

View File

@ -55,6 +55,7 @@ CLASS zcl_abapgit_objects_super DEFINITION
METHODS deserialize_longtexts
IMPORTING
!ii_xml TYPE REF TO zif_abapgit_xml_input
!iv_longtext_id TYPE dokil-id OPTIONAL
!iv_longtext_name TYPE string DEFAULT 'LONGTEXTS'
RAISING
zcx_abapgit_exception .
@ -218,6 +219,8 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION.
zcl_abapgit_factory=>get_longtexts( )->deserialize(
ii_xml = ii_xml
iv_longtext_name = iv_longtext_name
iv_object_name = ms_item-obj_name
iv_longtext_id = iv_longtext_id
iv_main_language = mv_language ).
ENDMETHOD.