Patch: delete all lines removes the file

This commit is contained in:
Christian Guenter 2019-07-16 11:38:21 +00:00 committed by Lars Hvam
parent 1dbd4d1912
commit 1a9d1b3d08

View File

@ -2,11 +2,11 @@ CLASS zcl_abapgit_gui_page_diff DEFINITION
PUBLIC PUBLIC
INHERITING FROM zcl_abapgit_gui_page INHERITING FROM zcl_abapgit_gui_page
FINAL FINAL
CREATE PUBLIC . CREATE PUBLIC.
PUBLIC SECTION. PUBLIC SECTION.
INTERFACES zif_abapgit_gui_page_hotkey . INTERFACES zif_abapgit_gui_page_hotkey.
TYPES: TYPES:
BEGIN OF ty_file_diff, BEGIN OF ty_file_diff,
@ -18,16 +18,16 @@ CLASS zcl_abapgit_gui_page_diff DEFINITION
o_diff TYPE REF TO zcl_abapgit_diff, o_diff TYPE REF TO zcl_abapgit_diff,
changed_by TYPE xubname, changed_by TYPE xubname,
type TYPE string, type TYPE string,
END OF ty_file_diff . END OF ty_file_diff.
TYPES: TYPES:
tt_file_diff TYPE STANDARD TABLE OF ty_file_diff . tt_file_diff TYPE STANDARD TABLE OF ty_file_diff.
CONSTANTS: CONSTANTS:
BEGIN OF c_fstate, BEGIN OF c_fstate,
local TYPE char1 VALUE 'L', local TYPE char1 VALUE 'L',
remote TYPE char1 VALUE 'R', remote TYPE char1 VALUE 'R',
both TYPE char1 VALUE 'B', both TYPE char1 VALUE 'B',
END OF c_fstate . END OF c_fstate.
METHODS constructor METHODS constructor
IMPORTING IMPORTING
@ -37,10 +37,10 @@ CLASS zcl_abapgit_gui_page_diff DEFINITION
!io_stage TYPE REF TO zcl_abapgit_stage OPTIONAL !io_stage TYPE REF TO zcl_abapgit_stage OPTIONAL
!iv_patch_mode TYPE abap_bool DEFAULT abap_false !iv_patch_mode TYPE abap_bool DEFAULT abap_false
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception.
METHODS zif_abapgit_gui_event_handler~on_event METHODS zif_abapgit_gui_event_handler~on_event
REDEFINITION . REDEFINITION.
PROTECTED SECTION. PROTECTED SECTION.
METHODS: METHODS:
render_content REDEFINITION, render_content REDEFINITION,
@ -117,7 +117,7 @@ CLASS zcl_abapgit_gui_page_diff DEFINITION
IMPORTING IMPORTING
it_postdata TYPE cnht_post_data_tab it_postdata TYPE cnht_post_data_tab
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception.
METHODS apply_patch_all METHODS apply_patch_all
IMPORTING IMPORTING
iv_patch TYPE string iv_patch TYPE string
@ -150,6 +150,11 @@ CLASS zcl_abapgit_gui_page_diff DEFINITION
VALUE(rs_diff) TYPE zif_abapgit_definitions=>ty_diff VALUE(rs_diff) TYPE zif_abapgit_definitions=>ty_diff
RAISING RAISING
zcx_abapgit_exception. zcx_abapgit_exception.
METHODS are_all_lines_patched
IMPORTING
it_diff TYPE zif_abapgit_definitions=>ty_diffs_tt
RETURNING
VALUE(rv_are_all_lines_patched) TYPE abap_bool.
CLASS-METHODS get_patch_data CLASS-METHODS get_patch_data
IMPORTING IMPORTING
iv_patch TYPE string iv_patch TYPE string
@ -199,11 +204,22 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION.
lv_patch = lo_git_add_patch->get_patch_binary( ). lv_patch = lo_git_add_patch->get_patch_binary( ).
IF <ls_diff_file>-lstate = 'D'
AND are_all_lines_patched( lt_diff ) = abap_true.
mo_stage->rm(
iv_path = <ls_diff_file>-path
iv_filename = <ls_diff_file>-filename ).
ELSE.
mo_stage->add( mo_stage->add(
iv_path = <ls_diff_file>-path iv_path = <ls_diff_file>-path
iv_filename = <ls_diff_file>-filename iv_filename = <ls_diff_file>-filename
iv_data = lv_patch ). iv_data = lv_patch ).
ENDIF.
ENDLOOP. ENDLOOP.
IF lv_something_patched = abap_false. IF lv_something_patched = abap_false.
@ -1051,4 +1067,21 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION.
INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions. INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions.
ENDMETHOD. ENDMETHOD.
METHOD are_all_lines_patched.
DATA: lv_patch_count TYPE i.
FIELD-SYMBOLS: <ls_diff> TYPE zif_abapgit_definitions=>ty_diff.
LOOP AT it_diff ASSIGNING <ls_diff>
WHERE patch_flag = abap_true.
lv_patch_count = lv_patch_count + 1.
ENDLOOP.
rv_are_all_lines_patched = xsdbool( lv_patch_count = lines( it_diff ) ).
ENDMETHOD.
ENDCLASS. ENDCLASS.