mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 13:03:01 +08:00

* Hotkeys no longer depend on abapGit installation When this commit is applied hotkeys also work with the single abapGit report. Limitation is still that users only can override hotkeys with the installed abapGit repo. * Fix hotkey display when no user def. hotkeys * New: Override hotkeys within one file abapGit report When this commit is applied it's possible to override the default shortcut also in the one file abapGit report. It's no longer necessary to installe the full abapGit repo to use this feature * Extract is_merged + check in hotkey logic
320 lines
7.7 KiB
ABAP
320 lines
7.7 KiB
ABAP
CLASS zcl_abapgit_gui_page_code_insp DEFINITION PUBLIC FINAL CREATE PUBLIC
|
|
INHERITING FROM zcl_abapgit_gui_page_codi_base.
|
|
|
|
PUBLIC SECTION.
|
|
INTERFACES: zif_abapgit_gui_page_hotkey.
|
|
|
|
METHODS:
|
|
constructor
|
|
IMPORTING
|
|
io_repo TYPE REF TO zcl_abapgit_repo
|
|
io_stage TYPE REF TO zcl_abapgit_stage OPTIONAL
|
|
RAISING
|
|
zcx_abapgit_exception,
|
|
|
|
zif_abapgit_gui_event_handler~on_event
|
|
REDEFINITION,
|
|
|
|
zif_abapgit_gui_renderable~render
|
|
REDEFINITION.
|
|
|
|
PROTECTED SECTION.
|
|
|
|
METHODS:
|
|
render_content REDEFINITION.
|
|
|
|
PRIVATE SECTION.
|
|
CONSTANTS:
|
|
BEGIN OF c_actions,
|
|
stage TYPE string VALUE 'stage' ##NO_TEXT,
|
|
commit TYPE string VALUE 'commit' ##NO_TEXT,
|
|
rerun TYPE string VALUE 'rerun' ##NO_TEXT,
|
|
END OF c_actions.
|
|
|
|
DATA:
|
|
mo_stage TYPE REF TO zcl_abapgit_stage,
|
|
mv_check_variant TYPE sci_chkv.
|
|
|
|
METHODS:
|
|
build_menu
|
|
RETURNING
|
|
VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar
|
|
RAISING
|
|
zcx_abapgit_exception,
|
|
|
|
run_code_inspector
|
|
RAISING
|
|
zcx_abapgit_exception,
|
|
|
|
has_inspection_errors
|
|
RETURNING
|
|
VALUE(rv_has_inspection_errors) TYPE abap_bool,
|
|
|
|
is_stage_allowed
|
|
RETURNING
|
|
VALUE(rv_is_stage_allowed) TYPE abap_bool,
|
|
|
|
ask_user_for_check_variant
|
|
RETURNING
|
|
VALUE(rv_check_variant) TYPE sci_chkv
|
|
RAISING
|
|
zcx_abapgit_exception,
|
|
|
|
determine_check_variant
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS ZCL_ABAPGIT_GUI_PAGE_CODE_INSP IMPLEMENTATION.
|
|
|
|
|
|
METHOD ask_user_for_check_variant.
|
|
|
|
DATA: lt_return TYPE STANDARD TABLE OF ddshretval.
|
|
|
|
FIELD-SYMBOLS: <ls_return> LIKE LINE OF lt_return.
|
|
|
|
CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
|
|
EXPORTING
|
|
tabname = 'SCI_DYNP'
|
|
fieldname = 'CHKV'
|
|
TABLES
|
|
return_tab = lt_return
|
|
EXCEPTIONS
|
|
field_not_found = 1
|
|
no_help_for_field = 2
|
|
inconsistent_help = 3
|
|
no_values_found = 4
|
|
OTHERS = 5.
|
|
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
READ TABLE lt_return ASSIGNING <ls_return>
|
|
WITH KEY retfield = 'SCI_DYNP-CHKV'.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( |Please select a check variant.| ).
|
|
ENDIF.
|
|
|
|
rv_check_variant = <ls_return>-fieldval.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD build_menu.
|
|
|
|
DATA: lv_opt TYPE c LENGTH 1.
|
|
|
|
CREATE OBJECT ro_menu.
|
|
|
|
ro_menu->add( iv_txt = 'Re-Run'
|
|
iv_act = c_actions-rerun
|
|
iv_cur = abap_false ) ##NO_TEXT.
|
|
|
|
IF is_stage_allowed( ) = abap_false.
|
|
lv_opt = zif_abapgit_html=>c_html_opt-crossout.
|
|
ENDIF.
|
|
|
|
IF mo_repo->is_offline( ) = abap_true.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
IF mo_stage IS BOUND.
|
|
|
|
" Staging info already available, we can directly
|
|
" offer to commit
|
|
|
|
ro_menu->add( iv_txt = 'Commit'
|
|
iv_act = c_actions-commit
|
|
iv_cur = abap_false
|
|
iv_opt = lv_opt ) ##NO_TEXT.
|
|
|
|
ELSE.
|
|
|
|
ro_menu->add( iv_txt = 'Stage'
|
|
iv_act = c_actions-stage
|
|
iv_cur = abap_false
|
|
iv_opt = lv_opt ) ##NO_TEXT.
|
|
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD constructor.
|
|
super->constructor( ).
|
|
mo_repo = io_repo.
|
|
mo_stage = io_stage.
|
|
ms_control-page_title = 'Code Inspector'.
|
|
determine_check_variant( ).
|
|
run_code_inspector( ).
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD determine_check_variant.
|
|
|
|
mv_check_variant = mo_repo->get_local_settings( )-code_inspector_check_variant.
|
|
|
|
IF mv_check_variant IS INITIAL.
|
|
mv_check_variant = ask_user_for_check_variant( ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD has_inspection_errors.
|
|
|
|
READ TABLE mt_result TRANSPORTING NO FIELDS
|
|
WITH KEY kind = 'E'.
|
|
rv_has_inspection_errors = boolc( sy-subrc = 0 ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD is_stage_allowed.
|
|
|
|
rv_is_stage_allowed = boolc( NOT ( mo_repo->get_local_settings( )-block_commit = abap_true
|
|
AND has_inspection_errors( ) = abap_true ) ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD render_content.
|
|
|
|
CREATE OBJECT ro_html.
|
|
|
|
IF mv_check_variant IS INITIAL.
|
|
ro_html->add( zcl_abapgit_gui_chunk_lib=>render_error( iv_error = 'No check variant supplied.' ) ).
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
ro_html->add( '<div class="ci-head">' ).
|
|
ro_html->add( |Code inspector check variant: <span class="ci-variant">{ mv_check_variant }</span>| ).
|
|
ro_html->add( |<div class="float-right package-name">{
|
|
zcl_abapgit_html=>icon( 'box/grey70' ) }<span>{
|
|
mo_repo->get_package( ) }</span></div>| ).
|
|
ro_html->add( '</div>' ).
|
|
|
|
IF lines( mt_result ) = 0.
|
|
ro_html->add( '<div class="dummydiv success">' ).
|
|
ro_html->add( zcl_abapgit_html=>icon( 'check' ) ).
|
|
ro_html->add( 'No code inspector findings' ).
|
|
ro_html->add( '</div>' ).
|
|
ELSE.
|
|
render_result(
|
|
io_html = ro_html
|
|
it_result = mt_result ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD run_code_inspector.
|
|
|
|
DATA: li_code_inspector TYPE REF TO zif_abapgit_code_inspector.
|
|
|
|
li_code_inspector = zcl_abapgit_factory=>get_code_inspector( mo_repo->get_package( ) ).
|
|
|
|
mt_result = li_code_inspector->run(
|
|
iv_variant = |{ mv_check_variant }|
|
|
iv_save = abap_true ).
|
|
|
|
DELETE mt_result WHERE kind = 'N'.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_gui_page_hotkey~get_hotkey_actions.
|
|
|
|
DATA: ls_hotkey_action LIKE LINE OF rt_hotkey_actions.
|
|
|
|
ls_hotkey_action-name = |Stage|.
|
|
ls_hotkey_action-action = c_actions-stage.
|
|
ls_hotkey_action-hotkey = |s|.
|
|
INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions.
|
|
|
|
ls_hotkey_action-name = |Re-Run|.
|
|
ls_hotkey_action-action = c_actions-rerun.
|
|
ls_hotkey_action-hotkey = |r|.
|
|
INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_gui_event_handler~on_event.
|
|
|
|
DATA: lo_repo_online TYPE REF TO zcl_abapgit_repo_online.
|
|
|
|
CASE iv_action.
|
|
WHEN c_actions-stage.
|
|
|
|
lo_repo_online ?= mo_repo.
|
|
|
|
IF is_stage_allowed( ) = abap_true.
|
|
" we need to refresh as the source might have changed
|
|
lo_repo_online->refresh( ).
|
|
|
|
CREATE OBJECT ei_page TYPE zcl_abapgit_gui_page_stage
|
|
EXPORTING
|
|
io_repo = lo_repo_online.
|
|
ev_state = zcl_abapgit_gui=>c_event_state-new_page.
|
|
|
|
ELSE.
|
|
|
|
ei_page = me.
|
|
ev_state = zcl_abapgit_gui=>c_event_state-no_more_act.
|
|
|
|
ENDIF.
|
|
|
|
WHEN c_actions-commit.
|
|
|
|
lo_repo_online ?= mo_repo.
|
|
|
|
IF is_stage_allowed( ) = abap_true.
|
|
|
|
CREATE OBJECT ei_page TYPE zcl_abapgit_gui_page_commit
|
|
EXPORTING
|
|
io_repo = lo_repo_online
|
|
io_stage = mo_stage.
|
|
ev_state = zcl_abapgit_gui=>c_event_state-new_page.
|
|
|
|
ELSE.
|
|
|
|
ei_page = me.
|
|
ev_state = zcl_abapgit_gui=>c_event_state-no_more_act.
|
|
|
|
ENDIF.
|
|
|
|
WHEN c_actions-rerun.
|
|
|
|
run_code_inspector( ).
|
|
|
|
ei_page = me.
|
|
ev_state = zcl_abapgit_gui=>c_event_state-re_render.
|
|
WHEN OTHERS.
|
|
super->zif_abapgit_gui_event_handler~on_event(
|
|
EXPORTING
|
|
iv_action = iv_action
|
|
iv_prev_page = iv_prev_page
|
|
iv_getdata = iv_getdata
|
|
it_postdata = it_postdata
|
|
IMPORTING
|
|
ei_page = ei_page
|
|
ev_state = ev_state ).
|
|
ENDCASE.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_gui_renderable~render.
|
|
|
|
ms_control-page_menu = build_menu( ).
|
|
ro_html = super->zif_abapgit_gui_renderable~render( ).
|
|
|
|
ENDMETHOD.
|
|
ENDCLASS.
|