diff --git a/src/ui/zabapgit_css_common.w3mi.data.css b/src/ui/zabapgit_css_common.w3mi.data.css index af5fa9213..a44ea6831 100644 --- a/src/ui/zabapgit_css_common.w3mi.data.css +++ b/src/ui/zabapgit_css_common.w3mi.data.css @@ -86,6 +86,32 @@ span.separator { margin-right: auto; } +span.boxed { + border-radius: 3px; + padding: 4px 7px; + margin-left: 0.2em; + margin-right: 0.2em; + font-size: smaller; +} +span.boxed i.icon { + padding-right: 5px; +} +.red-filled-set { + border-width: 0px; + color: hsl(0, 78%, 93%); + background-color: hsl(0, 78%, 65%); +} +.green-filled-set { + border-width: 0px; + color: hsl(120, 45%, 90%); + background-color: hsl(120, 27%, 60%); +} +.yellow-filled-set { + border-width: 0px; + color: hsl(45, 99%, 90%); + background-color: hsl(45, 100%, 46%); +} + /* PANELS */ div.panel { border-radius: 3px; diff --git a/src/ui/zabapgit_icon_font.w3mi.data.woff b/src/ui/zabapgit_icon_font.w3mi.data.woff index bb44988e8..fecc98902 100644 Binary files a/src/ui/zabapgit_icon_font.w3mi.data.woff and b/src/ui/zabapgit_icon_font.w3mi.data.woff differ diff --git a/src/ui/zabapgit_icon_font_css.w3mi.data.css b/src/ui/zabapgit_icon_font_css.w3mi.data.css index df35a8c72..9f8f9eb40 100644 --- a/src/ui/zabapgit_icon_font_css.w3mi.data.css +++ b/src/ui/zabapgit_icon_font_css.w3mi.data.css @@ -1,71 +1,72 @@ -@font-face { - font-family: "ag-icons"; - font-weight: normal; - font-style: normal; - src: url("../font/ag-icons.woff") format("woff"); -} - -.icon { - line-height: 1; -} - -.icon:before { - font-family: ag-icons !important; - font-style: normal; - font-weight: normal !important; - - display: inline-block; - text-decoration: none; - text-align: center; - vertical-align: text-top; - /* width: 1.1em; */ - /* padding-right: 0.2em */ - - /* For safety - reset parent styles, that can break glyph codes*/ - font-variant: normal; - text-transform: none; -} - -.icon.large { font-size: 200%; } - -.icon-abapgit:before { content: "\f101"; } -.icon-abaplint:before { content: "\f102"; } -.icon-arrow-circle-up:before { content: "\f103"; } -.icon-bars:before { content: "\f104"; } -.icon-bolt:before { content: "\f105"; } -.icon-box:before { content: "\f106"; } -.icon-briefcase:before { content: "\f107"; } -.icon-check:before { content: "\f108"; } -.icon-chevron-down:before { content: "\f109"; } -.icon-chevron-left:before { content: "\f10a"; } -.icon-chevron-right:before { content: "\f10b"; } -.icon-chevron-up:before { content: "\f10c"; } -.icon-circle-solid:before { content: "\f10d"; } -.icon-cloud-commit:before { content: "\f10e"; } -.icon-cloud-solid:before { content: "\f10f"; } -.icon-cloud-upload-alt:before { content: "\f110"; } -.icon-code-branch:before { content: "\f111"; } -.icon-code-commit:before { content: "\f112"; } -.icon-cog:before { content: "\f113"; } -.icon-edit-solid:before { content: "\f114"; } -.icon-exclamation-circle:before { content: "\f115"; } -.icon-exclamation-triangle:before { content: "\f116"; } -.icon-file-alt:before { content: "\f117"; } -.icon-file-code:before { content: "\f118"; } -.icon-file-image:before { content: "\f119"; } -.icon-file:before { content: "\f11a"; } -.icon-fire-alt:before { content: "\f11b"; } -.icon-folder:before { content: "\f11c"; } -.icon-git-alt:before { content: "\f11d"; } -.icon-info-circle-solid:before { content: "\f11e"; } -.icon-lock:before { content: "\f11f"; } -.icon-plug:before { content: "\f120"; } -.icon-question-circle-solid:before { content: "\f121"; } -.icon-server-solid:before { content: "\f122"; } -.icon-sliders-h:before { content: "\f123"; } -.icon-snowflake:before { content: "\f124"; } -.icon-star:before { content: "\f125"; } -.icon-times-solid:before { content: "\f126"; } -.icon-tools-solid:before { content: "\f127"; } -.icon-truck-solid:before { content: "\f128"; } -.icon-user-solid:before { content: "\f129"; } +@font-face { + font-family: "ag-icons"; + font-weight: normal; + font-style: normal; + src: url("../font/ag-icons.woff") format("woff"); +} + +.icon { + line-height: 1; +} + +.icon:before { + font-family: ag-icons !important; + font-style: normal; + font-weight: normal !important; + + display: inline-block; + text-decoration: none; + text-align: center; + vertical-align: text-top; + /* width: 1.1em; */ + /* padding-right: 0.2em */ + + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; +} + +.icon.large { font-size: 200%; } + +.icon-abapgit:before { content: "\f101"; } +.icon-abaplint:before { content: "\f102"; } +.icon-arrow-circle-up:before { content: "\f103"; } +.icon-bars:before { content: "\f104"; } +.icon-bolt:before { content: "\f105"; } +.icon-box:before { content: "\f106"; } +.icon-briefcase:before { content: "\f107"; } +.icon-bug-solid:before { content: "\f108"; } +.icon-check:before { content: "\f109"; } +.icon-chevron-down:before { content: "\f10a"; } +.icon-chevron-left:before { content: "\f10b"; } +.icon-chevron-right:before { content: "\f10c"; } +.icon-chevron-up:before { content: "\f10d"; } +.icon-circle-solid:before { content: "\f10e"; } +.icon-cloud-commit:before { content: "\f10f"; } +.icon-cloud-solid:before { content: "\f110"; } +.icon-cloud-upload-alt:before { content: "\f111"; } +.icon-code-branch:before { content: "\f112"; } +.icon-code-commit:before { content: "\f113"; } +.icon-cog:before { content: "\f114"; } +.icon-edit-solid:before { content: "\f115"; } +.icon-exclamation-circle:before { content: "\f116"; } +.icon-exclamation-triangle:before { content: "\f117"; } +.icon-file-alt:before { content: "\f118"; } +.icon-file-code:before { content: "\f119"; } +.icon-file-image:before { content: "\f11a"; } +.icon-file:before { content: "\f11b"; } +.icon-fire-alt:before { content: "\f11c"; } +.icon-folder:before { content: "\f11d"; } +.icon-git-alt:before { content: "\f11e"; } +.icon-info-circle-solid:before { content: "\f11f"; } +.icon-lock:before { content: "\f120"; } +.icon-plug:before { content: "\f121"; } +.icon-question-circle-solid:before { content: "\f122"; } +.icon-server-solid:before { content: "\f123"; } +.icon-sliders-h:before { content: "\f124"; } +.icon-snowflake:before { content: "\f125"; } +.icon-star:before { content: "\f126"; } +.icon-times-solid:before { content: "\f127"; } +.icon-tools-solid:before { content: "\f128"; } +.icon-truck-solid:before { content: "\f129"; } +.icon-user-solid:before { content: "\f12a"; } diff --git a/src/ui/zcl_abapgit_gui_chunk_lib.clas.abap b/src/ui/zcl_abapgit_gui_chunk_lib.clas.abap index 40353d7a1..f9b32d633 100644 --- a/src/ui/zcl_abapgit_gui_chunk_lib.clas.abap +++ b/src/ui/zcl_abapgit_gui_chunk_lib.clas.abap @@ -158,6 +158,12 @@ CLASS zcl_abapgit_gui_chunk_lib DEFINITION VALUE(ri_html) TYPE REF TO zif_abapgit_html RAISING zcx_abapgit_exception . + CLASS-METHODS render_sci_result + IMPORTING + ii_html TYPE REF TO zif_abapgit_html + iv_sci_result TYPE zif_abapgit_definitions=>ty_sci_result. + + PROTECTED SECTION. CLASS-METHODS render_repo_top_commit_hash @@ -185,7 +191,7 @@ ENDCLASS. -CLASS zcl_abapgit_gui_chunk_lib IMPLEMENTATION. +CLASS ZCL_ABAPGIT_GUI_CHUNK_LIB IMPLEMENTATION. METHOD advanced_submenu. @@ -931,6 +937,28 @@ CLASS zcl_abapgit_gui_chunk_lib IMPLEMENTATION. ENDMETHOD. + METHOD render_sci_result. + + DATA lv_icon TYPE string. + + lv_icon = ii_html->icon( + iv_name = 'bug-solid' + iv_hint = 'Code inspector result' ). + + CASE iv_sci_result. + WHEN zif_abapgit_definitions=>c_sci_result-passed. + ii_html->add( |{ lv_icon }PASSED| ). + WHEN zif_abapgit_definitions=>c_sci_result-failed. + ii_html->add( |{ lv_icon }FAILED| ). + WHEN zif_abapgit_definitions=>c_sci_result-warning. + ii_html->add( |{ lv_icon }WARN| ). + WHEN OTHERS. " Including NO_RUN + RETURN. + ENDCASE. + + ENDMETHOD. + + METHOD render_transport. DATA: diff --git a/src/ui/zcl_abapgit_gui_page_code_insp.clas.abap b/src/ui/zcl_abapgit_gui_page_code_insp.clas.abap index 92b48989f..9c9f9d1c6 100644 --- a/src/ui/zcl_abapgit_gui_page_code_insp.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_code_insp.clas.abap @@ -12,6 +12,10 @@ CLASS zcl_abapgit_gui_page_code_insp DEFINITION PUBLIC FINAL CREATE PUBLIC RAISING zcx_abapgit_exception, + is_nothing_to_display + RETURNING + VALUE(rv_yes) TYPE abap_bool, + zif_abapgit_gui_event_handler~on_event REDEFINITION, @@ -60,7 +64,7 @@ ENDCLASS. -CLASS zcl_abapgit_gui_page_code_insp IMPLEMENTATION. +CLASS ZCL_ABAPGIT_GUI_PAGE_CODE_INSP IMPLEMENTATION. METHOD ask_user_for_check_variant. @@ -163,6 +167,11 @@ CLASS zcl_abapgit_gui_page_code_insp IMPLEMENTATION. ENDMETHOD. + METHOD is_nothing_to_display. + rv_yes = boolc( lines( mt_result ) = 0 ). + ENDMETHOD. + + METHOD is_stage_allowed. rv_is_stage_allowed = boolc( NOT ( mo_repo->get_local_settings( )-block_commit = abap_true @@ -220,7 +229,8 @@ CLASS zcl_abapgit_gui_page_code_insp IMPLEMENTATION. METHOD zif_abapgit_gui_event_handler~on_event. - DATA: lo_repo_online TYPE REF TO zcl_abapgit_repo_online. + DATA lo_repo_online TYPE REF TO zcl_abapgit_repo_online. + DATA lv_sci_result TYPE zif_abapgit_definitions=>ty_sci_result. CASE ii_event->mv_action. WHEN c_actions-stage. @@ -231,9 +241,22 @@ CLASS zcl_abapgit_gui_page_code_insp IMPLEMENTATION. " we need to refresh as the source might have changed lo_repo_online->refresh( ). + READ TABLE mt_result TRANSPORTING NO FIELDS WITH KEY kind = 'E'. + IF sy-subrc = 0. + lv_sci_result = zif_abapgit_definitions=>c_sci_result-failed. + ELSE. + READ TABLE mt_result TRANSPORTING NO FIELDS WITH KEY kind = 'W'. + IF sy-subrc = 0. + lv_sci_result = zif_abapgit_definitions=>c_sci_result-warning. + ELSE. + lv_sci_result = zif_abapgit_definitions=>c_sci_result-passed. + ENDIF. + ENDIF. + CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_stage EXPORTING - io_repo = lo_repo_online. + io_repo = lo_repo_online + iv_sci_result = lv_sci_result. rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page. ELSE. diff --git a/src/ui/zcl_abapgit_gui_page_commit.clas.abap b/src/ui/zcl_abapgit_gui_page_commit.clas.abap index c91389f0d..ebb5f9576 100644 --- a/src/ui/zcl_abapgit_gui_page_commit.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_commit.clas.abap @@ -16,6 +16,7 @@ CLASS zcl_abapgit_gui_page_commit DEFINITION IMPORTING io_repo TYPE REF TO zcl_abapgit_repo_online io_stage TYPE REF TO zcl_abapgit_stage + iv_sci_result TYPE zif_abapgit_definitions=>ty_sci_result DEFAULT zif_abapgit_definitions=>c_sci_result-no_run RAISING zcx_abapgit_exception. @@ -38,6 +39,7 @@ CLASS zcl_abapgit_gui_page_commit DEFINITION DATA mo_repo TYPE REF TO zcl_abapgit_repo_online . DATA mo_stage TYPE REF TO zcl_abapgit_stage . DATA ms_commit TYPE zif_abapgit_services_git=>ty_commit_fields . + DATA mv_sci_result TYPE zif_abapgit_definitions=>ty_sci_result. METHODS render_menu RETURNING @@ -91,6 +93,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_COMMIT IMPLEMENTATION. mo_repo = io_repo. mo_stage = io_stage. + mv_sci_result = iv_sci_result. ms_control-page_title = 'Commit'. ENDMETHOD. @@ -337,6 +340,15 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_COMMIT IMPLEMENTATION. iv_opt = zif_abapgit_html=>c_html_opt-cancel ). ri_html->add( '
' ). + + IF mv_sci_result <> zif_abapgit_definitions=>c_sci_result-no_run. + ri_html->add( '' ). + zcl_abapgit_gui_chunk_lib=>render_sci_result( + ii_html = ri_html + iv_sci_result = mv_sci_result ). + ri_html->add( '' ). + ENDIF. + ri_html->add( lo_toolbar->render( ) ). ri_html->add( '
' ). diff --git a/src/ui/zcl_abapgit_gui_page_stage.clas.abap b/src/ui/zcl_abapgit_gui_page_stage.clas.abap index 4e09000fd..9f954b9ac 100644 --- a/src/ui/zcl_abapgit_gui_page_stage.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_stage.clas.abap @@ -13,13 +13,15 @@ CLASS zcl_abapgit_gui_page_stage DEFINITION stage_filter TYPE string VALUE 'stage_filter', END OF c_action. - METHODS: - constructor - IMPORTING - io_repo TYPE REF TO zcl_abapgit_repo_online - iv_seed TYPE string OPTIONAL - RAISING zcx_abapgit_exception, - zif_abapgit_gui_event_handler~on_event REDEFINITION. + METHODS constructor + IMPORTING + io_repo TYPE REF TO zcl_abapgit_repo_online + iv_seed TYPE string OPTIONAL + iv_sci_result TYPE zif_abapgit_definitions=>ty_sci_result DEFAULT zif_abapgit_definitions=>c_sci_result-no_run + RAISING + zcx_abapgit_exception. + + METHODS zif_abapgit_gui_event_handler~on_event REDEFINITION. PROTECTED SECTION. METHODS: @@ -39,6 +41,7 @@ CLASS zcl_abapgit_gui_page_stage DEFINITION DATA ms_files TYPE zif_abapgit_definitions=>ty_stage_files . DATA mv_seed TYPE string . " Unique page id to bind JS sessionStorage DATA mv_filter_value TYPE string . + DATA mv_sci_result TYPE zif_abapgit_definitions=>ty_sci_result. METHODS check_selected IMPORTING @@ -119,7 +122,7 @@ ENDCLASS. -CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION. +CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION. METHOD build_menu. @@ -193,6 +196,7 @@ CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION. ms_control-page_title = 'Stage'. mo_repo = io_repo. mv_seed = iv_seed. + mv_sci_result = iv_sci_result. IF mv_seed IS INITIAL. " Generate based on time unless obtained from diff page GET TIME STAMP FIELD lv_ts. @@ -403,6 +407,9 @@ CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION. ri_html->add( '| ). + zcl_abapgit_gui_chunk_lib=>render_sci_result( + ii_html = ri_html + iv_sci_result = mv_sci_result ). ri_html->add( '' ). ri_html->add( '' ). @@ -791,7 +798,8 @@ CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION. CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_commit EXPORTING io_repo = mo_repo - io_stage = lo_stage. + io_stage = lo_stage + iv_sci_result = mv_sci_result. rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page. @@ -802,7 +810,8 @@ CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION. CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_commit EXPORTING io_repo = mo_repo - io_stage = lo_stage. + io_stage = lo_stage + iv_sci_result = mv_sci_result. rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page. diff --git a/src/ui/zcl_abapgit_gui_router.clas.abap b/src/ui/zcl_abapgit_gui_router.clas.abap index 265cff0d3..51a39fc8e 100644 --- a/src/ui/zcl_abapgit_gui_router.clas.abap +++ b/src/ui/zcl_abapgit_gui_router.clas.abap @@ -376,7 +376,19 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION. EXPORTING io_repo = lo_repo. - ri_page = lo_code_inspector_page. + IF lo_code_inspector_page->is_nothing_to_display( ) = abap_true. + " force refresh on stage, to make sure the latest local and remote files are used + lo_repo->refresh( ). + CREATE OBJECT lo_stage_page + EXPORTING + io_repo = lo_repo + iv_seed = lv_seed + iv_sci_result = zif_abapgit_definitions=>c_sci_result-passed. + ri_page = lo_stage_page. + ELSE. + ri_page = lo_code_inspector_page. + ENDIF. + ELSEIF lo_repo->get_selected_branch( ) CP zif_abapgit_definitions=>c_git_branch-tags. lv_show_create_branch_popup = abap_true. lv_question_title = 'Staging on a tag'. diff --git a/src/zif_abapgit_definitions.intf.abap b/src/zif_abapgit_definitions.intf.abap index 41e53edf2..32c90e51d 100644 --- a/src/zif_abapgit_definitions.intf.abap +++ b/src/zif_abapgit_definitions.intf.abap @@ -358,6 +358,14 @@ INTERFACE zif_abapgit_definitions TYPES: ty_deserialization_step_tt TYPE STANDARD TABLE OF ty_deserialization_step WITH DEFAULT KEY . + TYPES ty_sci_result TYPE c LENGTH 1. + CONSTANTS: + BEGIN OF c_sci_result, + no_run TYPE ty_sci_result VALUE '', + failed TYPE ty_sci_result VALUE 'F', + warning TYPE ty_sci_result VALUE 'W', + passed TYPE ty_sci_result VALUE 'P', + END OF c_sci_result. CONSTANTS: BEGIN OF c_git_branch_type, branch TYPE ty_git_branch_type VALUE 'HD',