diff --git a/src/ui/zcl_abapgit_gui_page_stage.clas.abap b/src/ui/zcl_abapgit_gui_page_stage.clas.abap index e4fcaf884..ed3ba16bd 100644 --- a/src/ui/zcl_abapgit_gui_page_stage.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_stage.clas.abap @@ -23,35 +23,47 @@ CLASS zcl_abapgit_gui_page_stage DEFINITION scripts REDEFINITION. PRIVATE SECTION. - DATA: mo_repo TYPE REF TO zcl_abapgit_repo_online, - ms_files TYPE zif_abapgit_definitions=>ty_stage_files, - mv_seed TYPE string. " Unique page id to bind JS sessionStorage - METHODS: - render_list - RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html, + TYPES: + BEGIN OF ty_changed_by, + item TYPE zif_abapgit_definitions=>ty_item, + name TYPE xubname, + END OF ty_changed_by . + TYPES: + ty_changed_by_tt TYPE SORTED TABLE OF ty_changed_by WITH UNIQUE KEY item. - render_file - IMPORTING iv_context TYPE string - is_file TYPE zif_abapgit_definitions=>ty_file - is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL - RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html, - - render_actions - RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html, - - read_last_changed_by - IMPORTING is_file TYPE zif_abapgit_definitions=>ty_file - RETURNING VALUE(rv_user) TYPE xubname, - - process_stage_list - IMPORTING it_postdata TYPE cnht_post_data_tab - io_stage TYPE REF TO zcl_abapgit_stage - RAISING zcx_abapgit_exception, - - build_menu - RETURNING VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar. + DATA mo_repo TYPE REF TO zcl_abapgit_repo_online . + DATA ms_files TYPE zif_abapgit_definitions=>ty_stage_files . + DATA mv_seed TYPE string . " Unique page id to bind JS sessionStorage + METHODS find_changed_by + IMPORTING + !it_local TYPE zif_abapgit_definitions=>ty_files_item_tt + RETURNING + VALUE(rt_changed_by) TYPE ty_changed_by_tt . + METHODS render_list + RETURNING + VALUE(ro_html) TYPE REF TO zcl_abapgit_html . + METHODS render_file + IMPORTING + !iv_context TYPE string + !is_file TYPE zif_abapgit_definitions=>ty_file + !is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL + !iv_changed_by TYPE xubname OPTIONAL + RETURNING + VALUE(ro_html) TYPE REF TO zcl_abapgit_html . + METHODS render_actions + RETURNING + VALUE(ro_html) TYPE REF TO zcl_abapgit_html . + METHODS process_stage_list + IMPORTING + !it_postdata TYPE cnht_post_data_tab + !io_stage TYPE REF TO zcl_abapgit_stage + RAISING + zcx_abapgit_exception . + METHODS build_menu + RETURNING + VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar . ENDCLASS. @@ -92,6 +104,29 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION. ENDMETHOD. + METHOD find_changed_by. + + DATA: ls_local LIKE LINE OF it_local, + ls_changed_by LIKE LINE OF rt_changed_by. + + FIELD-SYMBOLS: LIKE LINE OF rt_changed_by. + + + LOOP AT it_local INTO ls_local WHERE NOT item IS INITIAL. + ls_changed_by-item = ls_local-item. + INSERT ls_changed_by INTO TABLE rt_changed_by. + ENDLOOP. + + LOOP AT rt_changed_by ASSIGNING . + TRY. + -name = to_lower( zcl_abapgit_objects=>changed_by( -item ) ). + CATCH zcx_abapgit_exception. + ENDTRY. + ENDLOOP. + + ENDMETHOD. + + METHOD process_stage_list. DATA: lv_string TYPE string, @@ -142,23 +177,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION. ENDMETHOD. "process_stage_list - METHOD read_last_changed_by. - DATA: ls_local_file TYPE zif_abapgit_definitions=>ty_file_item, - lt_files_local TYPE zif_abapgit_definitions=>ty_files_item_tt. - TRY. - lt_files_local = mo_repo->get_files_local( ). - READ TABLE lt_files_local INTO ls_local_file WITH KEY file = is_file. - IF sy-subrc = 0. - rv_user = zcl_abapgit_objects=>changed_by( ls_local_file-item ). - ENDIF. - CATCH zcx_abapgit_exception. - CLEAR rv_user. "Should not raise errors if user last changed by was not found - ENDTRY. - - rv_user = to_lower( rv_user ). - ENDMETHOD. - - METHOD render_actions. DATA: lv_local_count TYPE i, @@ -212,7 +230,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION. ro_html->add( '' ). - ENDMETHOD. "render_content + ENDMETHOD. METHOD render_file. @@ -239,7 +257,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION. iv_act = |{ zif_abapgit_definitions=>gc_action-go_diff }?{ lv_param }| ). ro_html->add( |{ is_item-obj_type }| ). ro_html->add( |{ lv_filename }| ). - ro_html->add( |{ read_last_changed_by( is_file ) }| ). + ro_html->add( |{ iv_changed_by }| ). WHEN 'remote'. ro_html->add( '-' ). " Dummy for object type ro_html->add( |{ lv_filename }| ). @@ -255,6 +273,9 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION. METHOD render_list. + DATA: lt_changed_by TYPE ty_changed_by_tt, + ls_changed_by LIKE LINE OF lt_changed_by. + FIELD-SYMBOLS: LIKE LINE OF ms_files-remote, LIKE LINE OF ms_files-local. @@ -262,6 +283,8 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION. ro_html->add( '' ). + lt_changed_by = find_changed_by( ms_files-local ). + " Local changes LOOP AT ms_files-local ASSIGNING . AT FIRST. @@ -277,10 +300,13 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION. ro_html->add( '' ). ENDAT. + READ TABLE lt_changed_by INTO ls_changed_by WITH KEY item = -item. "#EC CI_SUBRC + ro_html->add( render_file( iv_context = 'local' - is_file = -file - is_item = -item ) ). " TODO Refactor, unify structure + is_file = -file + is_item = -item + iv_changed_by = ls_changed_by-name ) ). AT LAST. ro_html->add(''). @@ -343,8 +369,11 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF ms_files-local. + CREATE OBJECT lo_stage. + CLEAR: ei_page, ev_state. + CASE iv_action. WHEN c_action-stage_all. LOOP AT ms_files-local ASSIGNING .