add interface ZIF_ABAPGIT_MERGE (#4160)

* move merge types to merge class

this will make the God interface defintions smaller

also reducing INTF -> CLAS references

and making it easier to add an interface for the merge class in the future

* add interface ZIF_ABAPGIT_MERGE
This commit is contained in:
Lars Hvam 2020-11-12 08:57:34 +01:00 committed by GitHub
parent 3d26041779
commit 8226aefcfe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 107 additions and 86 deletions

View File

@ -22,7 +22,7 @@ CLASS zcl_abapgit_gui_page_merge DEFINITION
PRIVATE SECTION.
DATA mo_repo TYPE REF TO zcl_abapgit_repo_online .
DATA mo_merge TYPE REF TO zcl_abapgit_merge .
DATA mi_merge TYPE REF TO zif_abapgit_merge .
CONSTANTS:
BEGIN OF c_actions,
merge TYPE string VALUE 'merge' ##NO_TEXT,
@ -71,30 +71,30 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MERGE IMPLEMENTATION.
io_repo->select_branch( |{ zif_abapgit_definitions=>c_git_branch-heads_prefix }{ iv_target }| ).
CREATE OBJECT mo_merge
CREATE OBJECT mi_merge TYPE zcl_abapgit_merge
EXPORTING
io_repo = io_repo
iv_source_branch = iv_source.
mo_merge->run( ).
mi_merge->run( ).
ms_control-page_title = 'Merge'.
ms_control-page_menu = build_menu( mo_merge->has_conflicts( ) ).
ms_control-page_menu = build_menu( mi_merge->has_conflicts( ) ).
ENDMETHOD.
METHOD render_content.
DATA: ls_merge TYPE zif_abapgit_definitions=>ty_merge,
DATA: ls_merge TYPE zif_abapgit_merge=>ty_merge,
lt_files LIKE ls_merge-stree,
ls_result LIKE LINE OF ls_merge-result.
FIELD-SYMBOLS: <ls_file> LIKE LINE OF lt_files.
ls_merge = mo_merge->get_result( ).
ls_merge = mi_merge->get_result( ).
"If now exists no conflicts anymore, conflicts button should disappear
ms_control-page_menu = build_menu( mo_merge->has_conflicts( ) ).
ms_control-page_menu = build_menu( mi_merge->has_conflicts( ) ).
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
@ -201,11 +201,11 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MERGE IMPLEMENTATION.
CASE ii_event->mv_action.
WHEN c_actions-merge.
IF mo_merge->has_conflicts( ) = abap_true.
IF mi_merge->has_conflicts( ) = abap_true.
zcx_abapgit_exception=>raise( 'conflicts exists' ).
ENDIF.
IF mo_merge->get_result( )-stage->count( ) = 0.
IF mi_merge->get_result( )-stage->count( ) = 0.
zcx_abapgit_exception=>raise( 'nothing to merge' ).
ENDIF.
@ -214,14 +214,14 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MERGE IMPLEMENTATION.
CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_code_insp
EXPORTING
io_repo = mo_repo
io_stage = mo_merge->get_result( )-stage.
io_stage = mi_merge->get_result( )-stage.
ELSE.
CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_commit
EXPORTING
io_repo = mo_repo
io_stage = mo_merge->get_result( )-stage.
io_stage = mi_merge->get_result( )-stage.
ENDIF.
@ -233,7 +233,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MERGE IMPLEMENTATION.
EXPORTING
io_repo = mo_repo
io_merge_page = me
io_merge = mo_merge.
io_merge = mi_merge.
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page.
WHEN OTHERS.

View File

@ -10,7 +10,7 @@ CLASS zcl_abapgit_gui_page_merge_res DEFINITION
IMPORTING
io_repo TYPE REF TO zcl_abapgit_repo_online
io_merge_page TYPE REF TO zcl_abapgit_gui_page_merge
io_merge TYPE REF TO zcl_abapgit_merge
io_merge TYPE REF TO zif_abapgit_merge
RAISING
zcx_abapgit_exception.
@ -46,13 +46,13 @@ CLASS zcl_abapgit_gui_page_merge_res DEFINITION
selection TYPE string VALUE 'selection' ##NO_TEXT,
merge TYPE string VALUE 'merge' ##NO_TEXT,
END OF c_merge_mode .
DATA mo_merge TYPE REF TO zcl_abapgit_merge .
DATA mo_merge TYPE REF TO zif_abapgit_merge .
DATA mo_merge_page TYPE REF TO zcl_abapgit_gui_page_merge .
DATA mo_repo TYPE REF TO zcl_abapgit_repo_online .
DATA ms_diff_file TYPE ty_file_diff .
DATA mv_current_conflict_index TYPE sy-tabix .
DATA mv_merge_mode TYPE string .
DATA mt_conflicts TYPE zif_abapgit_definitions=>ty_merge_conflict_tt .
DATA mt_conflicts TYPE zif_abapgit_merge=>ty_merge_conflict_tt .
METHODS apply_merged_content
IMPORTING
@ -117,7 +117,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MERGE_RES IMPLEMENTATION.
lv_new_file_content TYPE xstring.
FIELD-SYMBOLS:
<ls_conflict> TYPE zif_abapgit_definitions=>ty_merge_conflict.
<ls_conflict> TYPE zif_abapgit_merge=>ty_merge_conflict.
lv_merge_content = ii_event->form_data( )->get( 'MERGE_CONTENT' ).
@ -248,7 +248,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MERGE_RES IMPLEMENTATION.
METHOD render_diff.
DATA: lv_target_content TYPE string.
FIELD-SYMBOLS: <ls_conflict> TYPE zif_abapgit_definitions=>ty_merge_conflict.
FIELD-SYMBOLS: <ls_conflict> TYPE zif_abapgit_merge=>ty_merge_conflict.
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
@ -474,7 +474,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MERGE_RES IMPLEMENTATION.
METHOD resolve_diff.
DATA: lv_offs TYPE i.
FIELD-SYMBOLS: <ls_conflict> TYPE zif_abapgit_definitions=>ty_merge_conflict.
FIELD-SYMBOLS: <ls_conflict> TYPE zif_abapgit_merge=>ty_merge_conflict.
CLEAR ms_diff_file.
@ -523,7 +523,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MERGE_RES IMPLEMENTATION.
METHOD zif_abapgit_gui_event_handler~on_event.
FIELD-SYMBOLS: <ls_conflict> TYPE zif_abapgit_definitions=>ty_merge_conflict.
FIELD-SYMBOLS: <ls_conflict> TYPE zif_abapgit_merge=>ty_merge_conflict.
CASE ii_event->mv_action.
WHEN c_actions-apply_merge

View File

@ -4,6 +4,7 @@ CLASS zcl_abapgit_merge DEFINITION
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES zif_abapgit_merge.
METHODS constructor
IMPORTING
@ -11,26 +12,6 @@ CLASS zcl_abapgit_merge DEFINITION
!iv_source_branch TYPE string
RAISING
zcx_abapgit_exception .
METHODS get_conflicts
RETURNING
VALUE(rt_conflicts) TYPE zif_abapgit_definitions=>ty_merge_conflict_tt .
METHODS get_result
RETURNING
VALUE(rs_merge) TYPE zif_abapgit_definitions=>ty_merge .
METHODS get_source_branch
RETURNING
VALUE(rv_source_branch) TYPE string .
METHODS has_conflicts
RETURNING
VALUE(rv_conflicts_exists) TYPE abap_bool .
METHODS resolve_conflict
IMPORTING
!is_conflict TYPE zif_abapgit_definitions=>ty_merge_conflict
RAISING
zcx_abapgit_exception .
METHODS run
RAISING
zcx_abapgit_exception .
PROTECTED SECTION.
PRIVATE SECTION.
@ -40,8 +21,8 @@ CLASS zcl_abapgit_merge DEFINITION
ty_visit_tt TYPE STANDARD TABLE OF zif_abapgit_definitions=>ty_sha1 WITH DEFAULT KEY .
DATA mo_repo TYPE REF TO zcl_abapgit_repo_online .
DATA ms_merge TYPE zif_abapgit_definitions=>ty_merge .
DATA mt_conflicts TYPE zif_abapgit_definitions=>ty_merge_conflict_tt .
DATA ms_merge TYPE zif_abapgit_merge=>ty_merge .
DATA mt_conflicts TYPE zif_abapgit_merge=>ty_merge_conflict_tt .
DATA mt_objects TYPE zif_abapgit_definitions=>ty_objects_tt .
DATA mv_source_branch TYPE string .
@ -352,37 +333,49 @@ CLASS ZCL_ABAPGIT_MERGE IMPLEMENTATION.
ENDMETHOD.
METHOD get_conflicts.
METHOD visit.
IF NOT iv_parent IS INITIAL.
READ TABLE ct_visit FROM iv_parent TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
APPEND iv_parent TO ct_visit.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_merge~get_conflicts.
rt_conflicts = mt_conflicts.
ENDMETHOD.
METHOD get_result.
METHOD zif_abapgit_merge~get_result.
rs_merge = ms_merge.
ENDMETHOD.
METHOD get_source_branch.
METHOD zif_abapgit_merge~get_source_branch.
rv_source_branch = mv_source_branch.
ENDMETHOD.
METHOD has_conflicts.
METHOD zif_abapgit_merge~has_conflicts.
rv_conflicts_exists = boolc( lines( mt_conflicts ) > 0 ).
ENDMETHOD.
METHOD resolve_conflict.
METHOD zif_abapgit_merge~resolve_conflict.
FIELD-SYMBOLS: <ls_conflict> TYPE zif_abapgit_definitions=>ty_merge_conflict,
FIELD-SYMBOLS: <ls_conflict> TYPE zif_abapgit_merge=>ty_merge_conflict,
<ls_result> LIKE LINE OF ms_merge-result.
IF is_conflict-result_sha1 IS NOT INITIAL
@ -415,7 +408,7 @@ CLASS ZCL_ABAPGIT_MERGE IMPLEMENTATION.
ENDMETHOD.
METHOD run.
METHOD zif_abapgit_merge~run.
DATA: lt_asource TYPE ty_ancestor_tt,
lt_atarget TYPE ty_ancestor_tt.
@ -444,16 +437,4 @@ CLASS ZCL_ABAPGIT_MERGE IMPLEMENTATION.
calculate_result( ).
ENDMETHOD.
METHOD visit.
IF NOT iv_parent IS INITIAL.
READ TABLE ct_visit FROM iv_parent TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
APPEND iv_parent TO ct_visit.
ENDIF.
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -301,32 +301,6 @@ INTERFACE zif_abapgit_definitions
time TYPE string,
body TYPE string,
END OF ty_ancestor .
TYPES:
BEGIN OF ty_merge,
repo TYPE REF TO zcl_abapgit_repo_online,
source TYPE ty_git_branch,
target TYPE ty_git_branch,
common TYPE ty_ancestor,
stree TYPE ty_expanded_tt,
ttree TYPE ty_expanded_tt,
ctree TYPE ty_expanded_tt,
result TYPE ty_expanded_tt,
stage TYPE REF TO zcl_abapgit_stage,
conflict TYPE string,
END OF ty_merge .
TYPES:
BEGIN OF ty_merge_conflict,
path TYPE string,
filename TYPE string,
source_sha1 TYPE ty_sha1,
source_data TYPE xstring,
target_sha1 TYPE ty_sha1,
target_data TYPE xstring,
result_sha1 TYPE ty_sha1,
result_data TYPE xstring,
END OF ty_merge_conflict .
TYPES:
ty_merge_conflict_tt TYPE STANDARD TABLE OF ty_merge_conflict WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_repo_item,
obj_type TYPE tadir-object,

View File

@ -0,0 +1,51 @@
INTERFACE zif_abapgit_merge PUBLIC .
TYPES:
BEGIN OF ty_merge,
repo TYPE REF TO zcl_abapgit_repo_online,
source TYPE zif_abapgit_definitions=>ty_git_branch,
target TYPE zif_abapgit_definitions=>ty_git_branch,
common TYPE zif_abapgit_definitions=>ty_ancestor,
stree TYPE zif_abapgit_definitions=>ty_expanded_tt,
ttree TYPE zif_abapgit_definitions=>ty_expanded_tt,
ctree TYPE zif_abapgit_definitions=>ty_expanded_tt,
result TYPE zif_abapgit_definitions=>ty_expanded_tt,
stage TYPE REF TO zcl_abapgit_stage,
conflict TYPE string,
END OF ty_merge .
TYPES:
BEGIN OF ty_merge_conflict,
path TYPE string,
filename TYPE string,
source_sha1 TYPE zif_abapgit_definitions=>ty_sha1,
source_data TYPE xstring,
target_sha1 TYPE zif_abapgit_definitions=>ty_sha1,
target_data TYPE xstring,
result_sha1 TYPE zif_abapgit_definitions=>ty_sha1,
result_data TYPE xstring,
END OF ty_merge_conflict .
TYPES:
ty_merge_conflict_tt TYPE STANDARD TABLE OF ty_merge_conflict WITH DEFAULT KEY .
METHODS get_conflicts
RETURNING
VALUE(rt_conflicts) TYPE ty_merge_conflict_tt .
METHODS get_result
RETURNING
VALUE(rs_merge) TYPE ty_merge .
METHODS get_source_branch
RETURNING
VALUE(rv_source_branch) TYPE string .
METHODS has_conflicts
RETURNING
VALUE(rv_conflicts_exists) TYPE abap_bool .
METHODS resolve_conflict
IMPORTING
!is_conflict TYPE ty_merge_conflict
RAISING
zcx_abapgit_exception .
METHODS run
RAISING
zcx_abapgit_exception .
ENDINTERFACE.

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_INTF" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOINTERF>
<CLSNAME>ZIF_ABAPGIT_MERGE</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - Merge</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<UNICODE>X</UNICODE>
</VSEOINTERF>
</asx:values>
</asx:abap>
</abapGit>