From 1a9d1b3d085735848bc98333b6ffaf9cdbe3e604 Mon Sep 17 00:00:00 2001 From: Christian Guenter Date: Tue, 16 Jul 2019 11:38:21 +0000 Subject: [PATCH] Patch: delete all lines removes the file --- src/ui/zcl_abapgit_gui_page_diff.clas.abap | 57 +++++++++++++++++----- 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/src/ui/zcl_abapgit_gui_page_diff.clas.abap b/src/ui/zcl_abapgit_gui_page_diff.clas.abap index b1892ae0d..48a90b562 100644 --- a/src/ui/zcl_abapgit_gui_page_diff.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_diff.clas.abap @@ -2,11 +2,11 @@ CLASS zcl_abapgit_gui_page_diff DEFINITION PUBLIC INHERITING FROM zcl_abapgit_gui_page FINAL - CREATE PUBLIC . + CREATE PUBLIC. PUBLIC SECTION. - INTERFACES zif_abapgit_gui_page_hotkey . + INTERFACES zif_abapgit_gui_page_hotkey. TYPES: BEGIN OF ty_file_diff, @@ -18,16 +18,16 @@ CLASS zcl_abapgit_gui_page_diff DEFINITION o_diff TYPE REF TO zcl_abapgit_diff, changed_by TYPE xubname, type TYPE string, - END OF ty_file_diff . + END OF ty_file_diff. TYPES: - tt_file_diff TYPE STANDARD TABLE OF ty_file_diff . + tt_file_diff TYPE STANDARD TABLE OF ty_file_diff. CONSTANTS: BEGIN OF c_fstate, local TYPE char1 VALUE 'L', remote TYPE char1 VALUE 'R', both TYPE char1 VALUE 'B', - END OF c_fstate . + END OF c_fstate. METHODS constructor IMPORTING @@ -37,10 +37,10 @@ CLASS zcl_abapgit_gui_page_diff DEFINITION !io_stage TYPE REF TO zcl_abapgit_stage OPTIONAL !iv_patch_mode TYPE abap_bool DEFAULT abap_false RAISING - zcx_abapgit_exception . + zcx_abapgit_exception. METHODS zif_abapgit_gui_event_handler~on_event - REDEFINITION . + REDEFINITION. PROTECTED SECTION. METHODS: render_content REDEFINITION, @@ -117,7 +117,7 @@ CLASS zcl_abapgit_gui_page_diff DEFINITION IMPORTING it_postdata TYPE cnht_post_data_tab RAISING - zcx_abapgit_exception . + zcx_abapgit_exception. METHODS apply_patch_all IMPORTING iv_patch TYPE string @@ -150,6 +150,11 @@ CLASS zcl_abapgit_gui_page_diff DEFINITION VALUE(rs_diff) TYPE zif_abapgit_definitions=>ty_diff RAISING 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 IMPORTING iv_patch TYPE string @@ -199,10 +204,21 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION. lv_patch = lo_git_add_patch->get_patch_binary( ). - mo_stage->add( - iv_path = -path - iv_filename = -filename - iv_data = lv_patch ). + IF -lstate = 'D' + AND are_all_lines_patched( lt_diff ) = abap_true. + + mo_stage->rm( + iv_path = -path + iv_filename = -filename ). + + ELSE. + + mo_stage->add( + iv_path = -path + iv_filename = -filename + iv_data = lv_patch ). + + ENDIF. ENDLOOP. @@ -1051,4 +1067,21 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION. INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions. ENDMETHOD. + + + METHOD are_all_lines_patched. + + DATA: lv_patch_count TYPE i. + + FIELD-SYMBOLS: TYPE zif_abapgit_definitions=>ty_diff. + + LOOP AT it_diff ASSIGNING + 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.