CLASS zcl_abapgit_gui_page_merge DEFINITION PUBLIC INHERITING FROM zcl_abapgit_gui_page FINAL CREATE PUBLIC . PUBLIC SECTION. METHODS constructor IMPORTING !io_repo TYPE REF TO zcl_abapgit_repo_online !iv_source TYPE string !iv_target TYPE string RAISING zcx_abapgit_exception . METHODS zif_abapgit_gui_page~on_event REDEFINITION. PROTECTED SECTION. METHODS render_content REDEFINITION. PRIVATE SECTION. DATA mo_repo TYPE REF TO zcl_abapgit_repo_online . DATA mo_merge TYPE REF TO zcl_abapgit_merge . CONSTANTS: BEGIN OF c_actions, merge TYPE string VALUE 'merge' ##NO_TEXT, res_conflicts TYPE string VALUE 'res_conflicts' ##NO_TEXT, END OF c_actions . METHODS build_menu IMPORTING VALUE(iv_with_conflict) TYPE boolean OPTIONAL RETURNING VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar . ENDCLASS. CLASS zcl_abapgit_gui_page_merge IMPLEMENTATION. METHOD build_menu. CREATE OBJECT ro_menu. ro_menu->add( iv_txt = 'Merge' iv_act = c_actions-merge iv_cur = abap_false ) ##NO_TEXT. IF iv_with_conflict EQ abap_true. ro_menu->add( iv_txt = 'Resolve Conflicts' iv_act = c_actions-res_conflicts ) ##NO_TEXT. ENDIF. ENDMETHOD. METHOD constructor. super->constructor( ). mo_repo = io_repo. CREATE OBJECT mo_merge EXPORTING io_repo = io_repo iv_source_branch = iv_source iv_target_branch = iv_target. mo_merge->run( ). ms_control-page_title = 'MERGE'. ms_control-page_menu = build_menu( iv_with_conflict = mo_merge->has_conflicts( ) ). ENDMETHOD. METHOD render_content. DEFINE _show_file. READ TABLE &1 ASSIGNING WITH KEY path = -path name = -name. IF sy-subrc = 0. IF -sha1 = ls_result-sha1. ro_html->add( |{ -path }{ -name }{ -sha1(7) }| ). ELSE. ro_html->add( |{ -path }{ -name }{ -sha1(7) }| ). ENDIF. ELSE. ro_html->add( '' ). ENDIF. END-OF-DEFINITION. DATA: ls_merge TYPE zif_abapgit_definitions=>ty_merge, lt_files LIKE ls_merge-stree, ls_result LIKE LINE OF ls_merge-result. FIELD-SYMBOLS: LIKE LINE OF lt_files, LIKE LINE OF lt_files. ls_merge = mo_merge->get_result( ). "If now exists no conflicts anymore, conflicts button should disappear ms_control-page_menu = build_menu( iv_with_conflict = mo_merge->has_conflicts( ) ). CREATE OBJECT ro_html. ro_html->add( '
' ). ro_html->add( zcl_abapgit_gui_chunk_lib=>render_repo_top( io_repo = mo_repo iv_show_package = abap_false iv_show_branch = abap_false ) ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '
Source' ). ro_html->add( ls_merge-source-name ). ro_html->add( '
Target' ). ro_html->add( ls_merge-target-name ). ro_html->add( '
Ancestor' ). ro_html->add( ls_merge-common-commit ). ro_html->add( '
' ). ro_html->add( '
' ). APPEND LINES OF ls_merge-stree TO lt_files. APPEND LINES OF ls_merge-ttree TO lt_files. APPEND LINES OF ls_merge-ctree TO lt_files. SORT lt_files BY path DESCENDING name ASCENDING. DELETE ADJACENT DUPLICATES FROM lt_files COMPARING path name. ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). LOOP AT lt_files ASSIGNING . CLEAR ls_result. READ TABLE ls_merge-result INTO ls_result WITH KEY path = -path name = -name. ro_html->add( '' ). _show_file ls_merge-stree. _show_file ls_merge-ttree. _show_file ls_merge-ctree. _show_file ls_merge-result. ro_html->add( '' ). ENDLOOP. ro_html->add( '
SourceTargetAncestorResult
' ). ro_html->add( '
' ). ro_html->add( '' ). ro_html->add( ls_merge-conflict ). ro_html->add( '' ). ro_html->add( '
' ). ENDMETHOD. "render_content METHOD zif_abapgit_gui_page~on_event. CASE iv_action. WHEN c_actions-merge. IF mo_merge->has_conflicts( ) EQ abap_true. zcx_abapgit_exception=>raise( 'conflicts exists' ). ENDIF. IF mo_merge->get_result( )-stage->count( ) EQ 0. zcx_abapgit_exception=>raise( 'nothing to merge' ). ENDIF. IF mo_repo->get_local_settings( )-code_inspector_check_variant IS NOT INITIAL. CREATE OBJECT ei_page TYPE zcl_abapgit_gui_page_code_insp EXPORTING io_repo = mo_repo io_stage = mo_merge->get_result( )-stage. ev_state = zif_abapgit_definitions=>gc_event_state-new_page. ELSE. CREATE OBJECT ei_page TYPE zcl_abapgit_gui_page_commit EXPORTING io_repo = mo_repo io_stage = mo_merge->get_result( )-stage. ev_state = zif_abapgit_definitions=>gc_event_state-new_page. ENDIF. WHEN c_actions-res_conflicts. CREATE OBJECT ei_page TYPE zcl_abapgit_gui_page_merge_res EXPORTING io_repo = mo_repo io_merge_page = me io_merge = mo_merge. ev_state = zif_abapgit_definitions=>gc_event_state-new_page. ENDCASE. ENDMETHOD. ENDCLASS.