Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 11x 11x 11x 11x 1x 10x 10x 10x 10x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 21x 9x 13x 13x 13x 13x 13x 13x 13x 13x 13x 13x 13x 13x 9x 12x 12x 12x 12x 3x 3x 12x 12x 12x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 12x 4x 4x 4x 4x 4x 4x 4x 33x 29x 29x 29x 29x 29x 29x 29x 29x 12x 12x 12x 21x 1x 1x | CLASS zcl_abapgit_diff_diff3 DEFINITION PUBLIC.
PUBLIC SECTION.
CLASS-METHODS compute
IMPORTING
iv_new TYPE xstring
iv_old TYPE xstring
" todo
" iv_ignore_indentation TYPE abap_bool
" iv_ignore_comments TYPE abap_bool
" iv_ignore_case TYPE abap_bool
RETURNING
VALUE(rt_diff) TYPE zif_abapgit_definitions=>ty_diffs_tt
RAISING
zcx_abapgit_exception.
ENDCLASS.
CLASS zcl_abapgit_diff_diff3 IMPLEMENTATION.
METHOD compute.
* Beware: this is AI generated code -Hvam 2025-09-29
DATA: lv_new TYPE string,
lv_old TYPE string,
lv_new_last TYPE c LENGTH 1,
lv_old_last TYPE c LENGTH 1,
lt_new TYPE string_table,
lt_old TYPE string_table,
lt_comm TYPE zif_abapgit_diff3=>ty_comm_result_t,
lo_diff3 TYPE REF TO zif_abapgit_diff3,
ls_comm LIKE LINE OF lt_comm,
ls_diff TYPE zif_abapgit_definitions=>ty_diff,
lt_ins TYPE string_table,
lt_del TYPE string_table,
lv_line TYPE string,
lv_max TYPE i,
lv_new_idx TYPE i VALUE 0,
lv_old_idx TYPE i VALUE 0,
lv_i TYPE i.
CLEAR rt_diff.
lv_new = zcl_abapgit_convert=>xstring_to_string_utf8( iv_new ).
lv_old = zcl_abapgit_convert=>xstring_to_string_utf8( iv_old ).
IF lv_new IS NOT INITIAL.
lv_new_last = substring(
val = lv_new
off = strlen( lv_new ) - 1 ).
ENDIF.
IF lv_old IS NOT INITIAL.
lv_old_last = substring(
val = lv_old
off = strlen( lv_old ) - 1 ).
ENDIF.
IF lv_new_last = cl_abap_char_utilities=>newline
AND lv_old_last <> cl_abap_char_utilities=>newline
AND lv_old IS NOT INITIAL.
lv_old = lv_old && cl_abap_char_utilities=>form_feed.
ELSEIF lv_new_last <> cl_abap_char_utilities=>newline
AND lv_old_last = cl_abap_char_utilities=>newline
AND lv_new IS NOT INITIAL.
lv_new = lv_new && cl_abap_char_utilities=>form_feed.
ENDIF.
SPLIT lv_new AT cl_abap_char_utilities=>newline INTO TABLE lt_new.
SPLIT lv_old AT cl_abap_char_utilities=>newline INTO TABLE lt_old.
lo_diff3 = zcl_abapgit_diff3=>create( ).
lt_comm = lo_diff3->diff_comm(
it_buffer1 = lt_new
it_buffer2 = lt_old ).
LOOP AT lt_comm INTO ls_comm.
IF ls_comm-common IS NOT INITIAL.
LOOP AT ls_comm-common INTO lv_line.
lv_new_idx = lv_new_idx + 1.
lv_old_idx = lv_old_idx + 1.
CLEAR ls_diff.
lv_i = lv_new_idx.
ls_diff-new_num = lv_i.
lv_i = lv_old_idx.
ls_diff-old_num = lv_i.
ls_diff-new = lv_line.
ls_diff-old = lv_line.
ls_diff-result = zif_abapgit_definitions=>c_diff-unchanged.
APPEND ls_diff TO rt_diff.
ENDLOOP.
ELSE.
lt_ins = ls_comm-diff-buffer1.
lt_del = ls_comm-diff-buffer2.
lv_max = lines( lt_ins ).
IF lines( lt_del ) > lv_max.
lv_max = lines( lt_del ).
ENDIF.
DO lv_max TIMES.
CLEAR ls_diff.
IF sy-index <= lines( lt_del ) AND sy-index <= lines( lt_ins ).
lv_old_idx = lv_old_idx + 1.
lv_new_idx = lv_new_idx + 1.
lv_i = lv_new_idx.
ls_diff-new_num = lv_i.
lv_i = lv_old_idx.
ls_diff-old_num = lv_i.
READ TABLE lt_ins INDEX sy-index INTO lv_line.
IF sy-subrc = 0.
ls_diff-new = lv_line.
ENDIF.
READ TABLE lt_del INDEX sy-index INTO lv_line.
IF sy-subrc = 0.
ls_diff-old = lv_line.
ENDIF.
ls_diff-result = zif_abapgit_definitions=>c_diff-update.
ELSEIF sy-index <= lines( lt_del ).
lv_old_idx = lv_old_idx + 1.
READ TABLE lt_del INDEX sy-index INTO lv_line.
IF sy-subrc = 0.
ls_diff-old = lv_line.
ENDIF.
ls_diff-old_num = lv_old_idx.
ls_diff-result = zif_abapgit_definitions=>c_diff-delete.
ELSEIF sy-index <= lines( lt_ins ).
lv_new_idx = lv_new_idx + 1.
READ TABLE lt_ins INDEX sy-index INTO lv_line.
IF sy-subrc = 0.
ls_diff-new = lv_line.
ENDIF.
ls_diff-new_num = lv_new_idx.
ls_diff-result = zif_abapgit_definitions=>c_diff-insert.
ENDIF.
APPEND ls_diff TO rt_diff.
ENDDO.
ENDIF.
ENDLOOP.
ENDMETHOD.
ENDCLASS.
|