mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 11:46:38 +08:00
Block commit/push if code inspection has errors
- new local setting to set check variant - new local setting to block pull if code inspector check fails - check is executed before staging - new page to display code inspector results
This commit is contained in:
parent
307c1395d2
commit
ea798193d0
|
@ -20,9 +20,11 @@ INTERFACE zif_abapgit_persistence PUBLIC.
|
|||
|
||||
TYPES:
|
||||
BEGIN OF ty_local_settings,
|
||||
ignore_subpackages TYPE abap_bool,
|
||||
write_protected TYPE abap_bool,
|
||||
only_local_objects TYPE abap_bool,
|
||||
ignore_subpackages TYPE abap_bool,
|
||||
write_protected TYPE abap_bool,
|
||||
only_local_objects TYPE abap_bool,
|
||||
code_inspector_check_variant TYPE sci_chkv ,
|
||||
block_commit TYPE abap_bool,
|
||||
END OF ty_local_settings.
|
||||
|
||||
TYPES: ty_local_checksum_tt TYPE STANDARD TABLE OF ty_local_checksum WITH DEFAULT KEY.
|
||||
|
|
271
src/ui/zcl_abapgit_gui_page_code_insp.clas.abap
Normal file
271
src/ui/zcl_abapgit_gui_page_code_insp.clas.abap
Normal file
|
@ -0,0 +1,271 @@
|
|||
CLASS zcl_abapgit_gui_page_code_insp DEFINITION PUBLIC FINAL CREATE PUBLIC
|
||||
INHERITING FROM zcl_abapgit_gui_page.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS:
|
||||
constructor
|
||||
IMPORTING
|
||||
io_repo TYPE REF TO zcl_abapgit_repo
|
||||
RAISING
|
||||
zcx_abapgit_exception,
|
||||
|
||||
zif_abapgit_gui_page~on_event
|
||||
REDEFINITION,
|
||||
|
||||
zif_abapgit_gui_page~render
|
||||
REDEFINITION.
|
||||
|
||||
|
||||
PROTECTED SECTION.
|
||||
DATA: mo_repo TYPE REF TO zcl_abapgit_repo_online.
|
||||
|
||||
METHODS:
|
||||
render_content REDEFINITION.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_actions,
|
||||
stage TYPE string VALUE 'stage' ##NO_TEXT,
|
||||
rerun TYPE string VALUE 'rerun' ##NO_TEXT,
|
||||
END OF c_actions.
|
||||
|
||||
DATA:
|
||||
mt_result TYPE scit_alvlist.
|
||||
|
||||
METHODS:
|
||||
build_menu
|
||||
RETURNING
|
||||
VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar,
|
||||
|
||||
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,
|
||||
jump
|
||||
IMPORTING
|
||||
is_item TYPE zif_abapgit_definitions=>ty_item
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS zcl_abapgit_gui_page_code_insp IMPLEMENTATION.
|
||||
|
||||
|
||||
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_definitions=>gc_html_opt-crossout.
|
||||
ENDIF.
|
||||
|
||||
ro_menu->add( iv_txt = 'Stage'
|
||||
iv_act = c_actions-stage
|
||||
iv_cur = abap_false
|
||||
iv_opt = lv_opt ) ##NO_TEXT.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD constructor.
|
||||
super->constructor( ).
|
||||
mo_repo ?= io_repo.
|
||||
ms_control-page_title = 'Code Inspector'.
|
||||
run_code_inspector( ).
|
||||
ENDMETHOD. " constructor.
|
||||
|
||||
|
||||
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.
|
||||
|
||||
DATA: lv_check_variant TYPE sci_chkv,
|
||||
lv_class TYPE string.
|
||||
FIELD-SYMBOLS: <ls_result> TYPE scir_alvlist.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
lv_check_variant = mo_repo->get_local_settings( )-code_inspector_check_variant.
|
||||
|
||||
IF lv_check_variant IS INITIAL.
|
||||
ro_html->add( |No check variant maintained in repo settings.| ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( '<div class="toc"><br/>' ).
|
||||
|
||||
ro_html->add( |Code inspector check variant: {
|
||||
mo_repo->get_local_settings( )-code_inspector_check_variant
|
||||
}<br/>| ).
|
||||
|
||||
IF lines( mt_result ) = 0.
|
||||
ro_html->add( '<br/><div class="success">No code inspector findings</div>' ).
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( |<br/>| ).
|
||||
|
||||
LOOP AT mt_result ASSIGNING <ls_result>.
|
||||
|
||||
ro_html->add( '<div>' ).
|
||||
ro_html->add_a( iv_txt = |{ <ls_result>-objtype } { <ls_result>-objname }|
|
||||
iv_act = |{ <ls_result>-objtype }{ <ls_result>-objname }|
|
||||
iv_typ = zif_abapgit_definitions=>gc_action_type-sapevent ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
CASE <ls_result>-kind.
|
||||
WHEN 'E'.
|
||||
lv_class = 'error'.
|
||||
WHEN 'W'.
|
||||
lv_class = 'warning'.
|
||||
WHEN OTHERS.
|
||||
lv_class = 'grey'.
|
||||
ENDCASE.
|
||||
|
||||
ro_html->add( |<div class="{ lv_class }">Line { <ls_result>-line ALPHA = OUT }: { <ls_result>-text }</div><br>| ).
|
||||
ENDLOOP.
|
||||
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD. "render_content
|
||||
|
||||
|
||||
METHOD run_code_inspector.
|
||||
|
||||
mt_result = mo_repo->run_code_inspector( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_gui_page~on_event.
|
||||
|
||||
DATA: lo_repo_online TYPE REF TO zcl_abapgit_repo_online,
|
||||
ls_item TYPE zif_abapgit_definitions=>ty_item.
|
||||
|
||||
lo_repo_online ?= mo_repo.
|
||||
|
||||
CASE iv_action.
|
||||
WHEN c_actions-stage.
|
||||
|
||||
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 = zif_abapgit_definitions=>gc_event_state-new_page.
|
||||
|
||||
ELSE.
|
||||
|
||||
ei_page = me.
|
||||
ev_state = zif_abapgit_definitions=>gc_event_state-no_more_act.
|
||||
|
||||
ENDIF.
|
||||
|
||||
WHEN c_actions-rerun.
|
||||
|
||||
run_code_inspector( ).
|
||||
|
||||
ei_page = me.
|
||||
ev_state = zif_abapgit_definitions=>gc_event_state-re_render.
|
||||
|
||||
WHEN OTHERS.
|
||||
|
||||
ls_item-obj_type = iv_action(4).
|
||||
ls_item-obj_name = iv_action+4(*).
|
||||
|
||||
jump( ls_item ).
|
||||
|
||||
* zcl_abapgit_objects=>jump( ls_item ).
|
||||
|
||||
ev_state = zif_abapgit_definitions=>gc_event_state-no_more_act.
|
||||
|
||||
ENDCASE.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_gui_page~render.
|
||||
|
||||
ms_control-page_menu = build_menu( ).
|
||||
ro_html = super->zif_abapgit_gui_page~render( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD jump.
|
||||
|
||||
DATA: lo_test TYPE REF TO cl_ci_test_root,
|
||||
li_code_inspector TYPE REF TO zif_abapgit_code_inspector,
|
||||
ls_info TYPE scir_rest,
|
||||
lo_result TYPE REF TO cl_ci_result_root,
|
||||
lv_check_variant_name TYPE sci_chkv,
|
||||
lv_package TYPE devclass,
|
||||
lv_srcid TYPE scr_source_id.
|
||||
|
||||
FIELD-SYMBOLS: <ls_result> TYPE scir_alvlist.
|
||||
|
||||
READ TABLE mt_result WITH KEY objtype = is_item-obj_type
|
||||
objname = is_item-obj_name
|
||||
ASSIGNING <ls_result>.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
lv_package = mo_repo->get_package( ).
|
||||
lv_check_variant_name = mo_repo->get_local_settings( )-code_inspector_check_variant.
|
||||
|
||||
li_code_inspector = zcl_abapgit_factory=>get_code_inspector(
|
||||
iv_package = lv_package
|
||||
iv_check_variant_name = lv_check_variant_name ).
|
||||
|
||||
" see SCI_LCL_DYNP_530 / HANDLE_DOUBLE_CLICK
|
||||
|
||||
MOVE-CORRESPONDING <ls_result> TO ls_info.
|
||||
|
||||
lo_test = cl_ci_tests=>get_test_ref( <ls_result>-test ).
|
||||
lo_result = lo_test->get_result_node( <ls_result>-kind ).
|
||||
|
||||
lv_srcid = li_code_inspector->get_inspection( )->objs->objectsinf-srcid.
|
||||
|
||||
lo_result->set_srcid(
|
||||
p_info = ls_info
|
||||
p_srcid = lv_srcid ).
|
||||
|
||||
lo_result->set_info( ls_info ).
|
||||
lo_result->if_ci_test~navigate( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
19
src/ui/zcl_abapgit_gui_page_code_insp.clas.xml
Normal file
19
src/ui/zcl_abapgit_gui_page_code_insp.clas.xml
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_ABAPGIT_GUI_PAGE_CODE_INSP</CLSNAME>
|
||||
<VERSION>1</VERSION>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>GUI - Syntax check page</DESCRIPT>
|
||||
<EXPOSURE>2</EXPOSURE>
|
||||
<STATE>1</STATE>
|
||||
<CLSFINAL>X</CLSFINAL>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -45,12 +45,14 @@ CLASS zcl_abapgit_gui_page_repo_sett DEFINITION
|
|||
|
||||
METHODS render_content
|
||||
REDEFINITION .
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_SETT IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_gui_page_repo_sett IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD constructor.
|
||||
|
@ -137,6 +139,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_SETT IMPLEMENTATION.
|
|||
ls_settings TYPE zif_abapgit_persistence=>ty_repo-local_settings.
|
||||
|
||||
|
||||
|
||||
ls_settings = mo_repo->get_local_settings( ).
|
||||
|
||||
io_html->add( '<h2>Local settings</h2>' ).
|
||||
|
@ -159,6 +162,19 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_SETT IMPLEMENTATION.
|
|||
ENDIF.
|
||||
io_html->add( |Only local objects <input name="only_local_objects" type="checkbox"{ lv_checked }><br>| ).
|
||||
|
||||
io_html->add( '<br>' ).
|
||||
io_html->add( 'Code inspector check variant: <input name="check_variant" type="text" size="30" value="' &&
|
||||
ls_settings-code_inspector_check_variant && '">' ).
|
||||
io_html->add( '<br>' ).
|
||||
|
||||
CLEAR lv_checked.
|
||||
IF ls_settings-block_commit = abap_true.
|
||||
lv_checked = | checked|.
|
||||
ENDIF.
|
||||
io_html->add( |Block commit commit/push if code inspection has erros: |
|
||||
&& |<input name="block_commit" type="checkbox"{ lv_checked }><br>| ).
|
||||
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
@ -200,8 +216,9 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_SETT IMPLEMENTATION.
|
|||
|
||||
METHOD save_local_settings.
|
||||
|
||||
DATA: ls_settings TYPE zif_abapgit_persistence=>ty_repo-local_settings,
|
||||
ls_post_field LIKE LINE OF it_post_fields.
|
||||
DATA: ls_settings TYPE zif_abapgit_persistence=>ty_repo-local_settings,
|
||||
ls_post_field LIKE LINE OF it_post_fields,
|
||||
lv_check_variant TYPE sci_chkv.
|
||||
|
||||
|
||||
ls_settings = mo_repo->get_local_settings( ).
|
||||
|
@ -227,6 +244,26 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_SETT IMPLEMENTATION.
|
|||
ls_settings-only_local_objects = abap_false.
|
||||
ENDIF.
|
||||
|
||||
READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'check_variant'.
|
||||
ASSERT sy-subrc = 0.
|
||||
lv_check_variant = to_upper( ls_post_field-value ).
|
||||
IF ls_post_field-value IS NOT INITIAL.
|
||||
zcl_abapgit_code_inspector=>validate_check_variant( lv_check_variant ).
|
||||
ENDIF.
|
||||
ls_settings-code_inspector_check_variant = lv_check_variant.
|
||||
|
||||
READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'block_commit' value = 'on'.
|
||||
IF sy-subrc = 0.
|
||||
ls_settings-block_commit = abap_true.
|
||||
ELSE.
|
||||
ls_settings-block_commit = abap_false.
|
||||
ENDIF.
|
||||
|
||||
IF ls_settings-block_commit = abap_true
|
||||
AND ls_settings-code_inspector_check_variant IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( |If block commit is active, a check variant has to be maintained.| ).
|
||||
ENDIF.
|
||||
|
||||
mo_repo->set_local_settings( ls_settings ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
@ -241,4 +278,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_SETT IMPLEMENTATION.
|
|||
ENDCASE.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
ENDCLASS.
|
||||
|
|
|
@ -16,7 +16,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_GUI_PAGE_SYNTAX IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_gui_page_syntax IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD constructor.
|
||||
|
@ -28,11 +28,13 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SYNTAX IMPLEMENTATION.
|
|||
|
||||
METHOD render_content.
|
||||
|
||||
DATA: lt_result TYPE scit_alvlist,
|
||||
ls_result LIKE LINE OF lt_result.
|
||||
DATA: li_syntax_check TYPE REF TO zif_abapgit_code_inspector,
|
||||
lt_result TYPE scit_alvlist,
|
||||
ls_result LIKE LINE OF lt_result.
|
||||
|
||||
li_syntax_check = zcl_abapgit_factory=>get_syntax_check( iv_package = mo_repo->get_package( ) ).
|
||||
|
||||
lt_result = zcl_abapgit_syntax_check=>run( mo_repo->get_package( ) ).
|
||||
lt_result = li_syntax_check->run( ).
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
ro_html->add( '<div class="toc">' ).
|
||||
|
|
|
@ -128,10 +128,11 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION.
|
|||
|
||||
METHOD get_page_stage.
|
||||
|
||||
DATA: lo_repo TYPE REF TO zcl_abapgit_repo_online,
|
||||
lv_key TYPE zif_abapgit_persistence=>ty_repo-key,
|
||||
lv_seed TYPE string,
|
||||
lo_stage_page TYPE REF TO zcl_abapgit_gui_page_stage.
|
||||
DATA: lo_repo TYPE REF TO zcl_abapgit_repo_online,
|
||||
lv_key TYPE zif_abapgit_persistence=>ty_repo-key,
|
||||
lv_seed TYPE string,
|
||||
lo_stage_page TYPE REF TO zcl_abapgit_gui_page_stage,
|
||||
lo_code_inspector_page TYPE REF TO zcl_abapgit_gui_page_code_insp.
|
||||
|
||||
FIND FIRST OCCURRENCE OF '=' IN iv_getdata.
|
||||
IF sy-subrc <> 0. " Not found ? -> just repo key in params
|
||||
|
@ -145,15 +146,27 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION.
|
|||
|
||||
lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( lv_key ).
|
||||
|
||||
" force refresh on stage, to make sure the latest local and remote files are used
|
||||
lo_repo->refresh( ).
|
||||
IF lo_repo->get_local_settings( )-code_inspector_check_variant IS NOT INITIAL.
|
||||
|
||||
CREATE OBJECT lo_stage_page
|
||||
EXPORTING
|
||||
io_repo = lo_repo
|
||||
iv_seed = lv_seed.
|
||||
CREATE OBJECT lo_code_inspector_page
|
||||
EXPORTING
|
||||
io_repo = lo_repo.
|
||||
|
||||
ri_page = lo_stage_page.
|
||||
ri_page = lo_code_inspector_page.
|
||||
|
||||
ELSE.
|
||||
|
||||
" 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.
|
||||
|
||||
ri_page = lo_stage_page.
|
||||
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "get_page_stage
|
||||
|
||||
|
@ -266,6 +279,11 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION.
|
|||
EXPORTING
|
||||
io_repo = zcl_abapgit_repo_srv=>get_instance( )->get( lv_key ).
|
||||
ev_state = zif_abapgit_definitions=>gc_event_state-new_page.
|
||||
WHEN zif_abapgit_definitions=>gc_action-repo_code_inspector.
|
||||
CREATE OBJECT ei_page TYPE zcl_abapgit_gui_page_code_insp
|
||||
EXPORTING
|
||||
io_repo = zcl_abapgit_repo_srv=>get_instance( )->get( lv_key ).
|
||||
ev_state = zif_abapgit_definitions=>gc_event_state-new_page.
|
||||
WHEN zif_abapgit_definitions=>gc_action-repo_purge. " Repo remove & purge all objects
|
||||
zcl_abapgit_services_repo=>purge( lv_key ).
|
||||
ev_state = zif_abapgit_definitions=>gc_event_state-re_render.
|
||||
|
|
|
@ -199,6 +199,8 @@ CLASS zcl_abapgit_gui_view_repo IMPLEMENTATION.
|
|||
ENDIF.
|
||||
lo_tb_advanced->add( iv_txt = 'Syntax Check'
|
||||
iv_act = |{ zif_abapgit_definitions=>gc_action-repo_syntax_check }?{ lv_key }| ).
|
||||
lo_tb_advanced->add( iv_txt = 'Run Code Inspector'
|
||||
iv_act = |{ zif_abapgit_definitions=>gc_action-repo_code_inspector }?{ lv_key }| ).
|
||||
lo_tb_advanced->add( iv_txt = 'Repo settings'
|
||||
iv_act = |{ zif_abapgit_definitions=>gc_action-repo_settings }?{ lv_key }| ).
|
||||
|
||||
|
|
|
@ -1160,4 +1160,5 @@ CLASS zcl_abapgit_popups IMPLEMENTATION.
|
|||
ENDIF.
|
||||
|
||||
ENDMETHOD. "run_page_class_popup
|
||||
|
||||
ENDCLASS.
|
||||
|
|
|
@ -73,6 +73,9 @@ CLASS zcl_abapgit_services_git DEFINITION
|
|||
zcx_abapgit_exception
|
||||
zcx_abapgit_cancel.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
|
|
@ -156,6 +156,6 @@ INTERFACE zif_abapgit_popups
|
|||
VALUE(rv_transport) TYPE trkorr
|
||||
RAISING
|
||||
zcx_abapgit_exception
|
||||
zcx_abapgit_cancel .
|
||||
zcx_abapgit_cancel.
|
||||
|
||||
ENDINTERFACE.
|
||||
|
|
|
@ -15,7 +15,9 @@ CLASS zcl_abapgit_log DEFINITION PUBLIC CREATE PUBLIC.
|
|||
has_rc "For unit tests mainly
|
||||
IMPORTING iv_rc TYPE balsort
|
||||
RETURNING VALUE(rv_yes) TYPE abap_bool,
|
||||
show.
|
||||
show
|
||||
IMPORTING
|
||||
iv_header_text TYPE csequence DEFAULT 'Log'.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES: BEGIN OF ty_log,
|
||||
|
@ -42,7 +44,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS zcl_abapgit_log IMPLEMENTATION.
|
||||
CLASS ZCL_ABAPGIT_LOG IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD add.
|
||||
|
@ -142,7 +144,7 @@ CLASS zcl_abapgit_log IMPLEMENTATION.
|
|||
|
||||
CREATE OBJECT lo_form_header
|
||||
EXPORTING
|
||||
text = |Log|.
|
||||
text = iv_header_text.
|
||||
|
||||
lo_alv->set_top_of_list( lo_form_header ).
|
||||
|
||||
|
|
|
@ -48,6 +48,7 @@ input:focus, textarea:focus {
|
|||
.attention { color: red !important; }
|
||||
.error { color: #d41919 !important; }
|
||||
.warning { color: #efb301 !important; }
|
||||
.success { color: green !important; }
|
||||
.blue { color: #5e8dc9 !important; }
|
||||
.red { color: red !important; }
|
||||
.white { color: white !important; }
|
||||
|
|
232
src/zcl_abapgit_code_inspector.clas.abap
Normal file
232
src/zcl_abapgit_code_inspector.clas.abap
Normal file
|
@ -0,0 +1,232 @@
|
|||
CLASS zcl_abapgit_code_inspector DEFINITION
|
||||
PUBLIC
|
||||
CREATE PROTECTED
|
||||
GLOBAL FRIENDS zcl_abapgit_factory.
|
||||
|
||||
PUBLIC SECTION.
|
||||
INTERFACES:
|
||||
zif_abapgit_code_inspector.
|
||||
|
||||
METHODS:
|
||||
constructor
|
||||
IMPORTING
|
||||
iv_package TYPE devclass
|
||||
iv_check_variant_name TYPE sci_chkv OPTIONAL
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
CLASS-METHODS:
|
||||
validate_check_variant
|
||||
IMPORTING
|
||||
iv_check_variant_name TYPE sci_chkv
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
PROTECTED SECTION.
|
||||
TYPES:
|
||||
ty_tdevc_tt TYPE STANDARD TABLE OF tdevc WITH DEFAULT KEY .
|
||||
|
||||
DATA:
|
||||
mv_package TYPE devclass.
|
||||
|
||||
METHODS:
|
||||
create_variant
|
||||
RETURNING
|
||||
VALUE(ro_variant) TYPE REF TO cl_ci_checkvariant
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA:
|
||||
mv_check_variant_name TYPE sci_chkv,
|
||||
mo_inspection TYPE REF TO cl_ci_inspection.
|
||||
|
||||
METHODS:
|
||||
find_all_subpackages
|
||||
IMPORTING
|
||||
iv_package TYPE devclass
|
||||
RETURNING
|
||||
VALUE(rt_packages) TYPE ty_tdevc_tt,
|
||||
|
||||
create_objectset
|
||||
RETURNING
|
||||
VALUE(ro_set) TYPE REF TO cl_ci_objectset,
|
||||
|
||||
run_inspection
|
||||
IMPORTING
|
||||
io_inspection TYPE REF TO cl_ci_inspection
|
||||
RETURNING
|
||||
VALUE(rt_list) TYPE scit_alvlist,
|
||||
|
||||
create_inspection
|
||||
IMPORTING
|
||||
io_set TYPE REF TO cl_ci_objectset
|
||||
io_variant TYPE REF TO cl_ci_checkvariant
|
||||
RETURNING
|
||||
VALUE(ro_inspection) TYPE REF TO cl_ci_inspection.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS zcl_abapgit_code_inspector IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD constructor.
|
||||
|
||||
mv_package = iv_package.
|
||||
mv_check_variant_name = iv_check_variant_name.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD create_inspection.
|
||||
|
||||
cl_ci_inspection=>create(
|
||||
EXPORTING
|
||||
p_user = sy-uname
|
||||
p_name = ''
|
||||
RECEIVING
|
||||
p_ref = ro_inspection
|
||||
EXCEPTIONS
|
||||
locked = 1
|
||||
error_in_enqueue = 2
|
||||
not_authorized = 3
|
||||
OTHERS = 4 ).
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
ro_inspection->set(
|
||||
p_chkv = io_variant
|
||||
p_objs = io_set ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD create_objectset.
|
||||
|
||||
DATA: lt_objs TYPE scit_objs,
|
||||
lt_packages TYPE ty_tdevc_tt.
|
||||
|
||||
|
||||
lt_packages = find_all_subpackages( mv_package ).
|
||||
IF lines( lt_packages ) = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
SELECT object AS objtype obj_name AS objname
|
||||
FROM tadir
|
||||
INTO CORRESPONDING FIELDS OF TABLE lt_objs
|
||||
FOR ALL ENTRIES IN lt_packages
|
||||
WHERE devclass = lt_packages-devclass
|
||||
AND delflag = abap_false
|
||||
AND pgmid = 'R3TR'. "#EC CI_GENBUFF
|
||||
|
||||
ro_set = cl_ci_objectset=>save_from_list( lt_objs ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD create_variant.
|
||||
|
||||
IF mv_check_variant_name IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( |No check variant supplied.| ).
|
||||
ENDIF.
|
||||
|
||||
cl_ci_checkvariant=>get_ref(
|
||||
EXPORTING
|
||||
p_user = ''
|
||||
p_name = mv_check_variant_name
|
||||
RECEIVING
|
||||
p_ref = ro_variant
|
||||
EXCEPTIONS
|
||||
chkv_not_exists = 1
|
||||
missing_parameter = 2
|
||||
OTHERS = 3 ).
|
||||
|
||||
CASE sy-subrc.
|
||||
WHEN 1.
|
||||
zcx_abapgit_exception=>raise( |Check variant { mv_check_variant_name } doesn't exist| ).
|
||||
WHEN 2.
|
||||
zcx_abapgit_exception=>raise( |Parameter missing for check variant { mv_check_variant_name }| ).
|
||||
ENDCASE.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD find_all_subpackages.
|
||||
|
||||
* TODO, in the future, move this method to the ABAPGIT global package class
|
||||
|
||||
DATA: ls_package LIKE LINE OF rt_packages,
|
||||
lt_found LIKE rt_packages,
|
||||
lt_sub LIKE rt_packages.
|
||||
|
||||
|
||||
SELECT SINGLE * FROM tdevc INTO ls_package WHERE devclass = iv_package.
|
||||
ASSERT sy-subrc = 0.
|
||||
APPEND ls_package TO rt_packages.
|
||||
|
||||
SELECT * FROM tdevc APPENDING TABLE lt_sub
|
||||
WHERE parentcl = ls_package-devclass.
|
||||
|
||||
LOOP AT lt_sub INTO ls_package.
|
||||
lt_found = find_all_subpackages( ls_package-devclass ).
|
||||
APPEND LINES OF lt_found TO rt_packages.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD run_inspection.
|
||||
|
||||
io_inspection->run(
|
||||
EXCEPTIONS
|
||||
invalid_check_version = 1
|
||||
OTHERS = 2 ).
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
io_inspection->plain_list(
|
||||
IMPORTING
|
||||
p_list = rt_list ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_code_inspector~run.
|
||||
|
||||
DATA: lo_set TYPE REF TO cl_ci_objectset,
|
||||
lo_variant TYPE REF TO cl_ci_checkvariant.
|
||||
|
||||
lo_set = create_objectset( ).
|
||||
lo_variant = create_variant( ).
|
||||
|
||||
mo_inspection = create_inspection(
|
||||
io_set = lo_set
|
||||
io_variant = lo_variant ).
|
||||
|
||||
rt_list = run_inspection( mo_inspection ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD validate_check_variant.
|
||||
|
||||
cl_ci_checkvariant=>get_ref(
|
||||
EXPORTING
|
||||
p_user = ''
|
||||
p_name = iv_check_variant_name
|
||||
EXCEPTIONS
|
||||
chkv_not_exists = 1
|
||||
missing_parameter = 2
|
||||
OTHERS = 3 ).
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_exception=>raise( |No valid check variant { iv_check_variant_name }| ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_code_inspector~get_inspection.
|
||||
ro_inspection = mo_inspection.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
18
src/zcl_abapgit_code_inspector.clas.xml
Normal file
18
src/zcl_abapgit_code_inspector.clas.xml
Normal file
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_ABAPGIT_CODE_INSPECTOR</CLSNAME>
|
||||
<VERSION>1</VERSION>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>abapGit Code Inspector</DESCRIPT>
|
||||
<EXPOSURE>1</EXPOSURE>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -42,15 +42,19 @@ CLASS zcl_abapgit_dot_abapgit DEFINITION
|
|||
METHODS get_starting_folder
|
||||
RETURNING
|
||||
VALUE(rv_path) TYPE string .
|
||||
|
||||
METHODS get_folder_logic
|
||||
RETURNING
|
||||
VALUE(rv_logic) TYPE string .
|
||||
|
||||
METHODS set_folder_logic
|
||||
IMPORTING
|
||||
!iv_logic TYPE string .
|
||||
|
||||
METHODS set_starting_folder
|
||||
IMPORTING
|
||||
!iv_path TYPE string .
|
||||
|
||||
METHODS get_master_language
|
||||
RETURNING
|
||||
VALUE(rv_language) TYPE spras .
|
||||
|
@ -77,7 +81,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_DOT_ABAPGIT IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_dot_abapgit IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD add_ignore.
|
||||
|
@ -276,4 +280,5 @@ CLASS ZCL_ABAPGIT_DOT_ABAPGIT IMPLEMENTATION.
|
|||
ASSERT sy-subrc = 0.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
|
|
@ -14,7 +14,25 @@ CLASS zcl_abapgit_factory DEFINITION
|
|||
IMPORTING
|
||||
iv_package TYPE devclass
|
||||
RETURNING
|
||||
VALUE(ri_sap_package) TYPE REF TO zif_abapgit_sap_package.
|
||||
VALUE(ri_sap_package) TYPE REF TO zif_abapgit_sap_package,
|
||||
|
||||
get_code_inspector
|
||||
IMPORTING
|
||||
iv_package TYPE devclass
|
||||
iv_check_variant_name TYPE sci_chkv
|
||||
RETURNING
|
||||
VALUE(ri_code_inspector) TYPE REF TO zif_abapgit_code_inspector
|
||||
RAISING
|
||||
zcx_abapgit_exception,
|
||||
|
||||
get_syntax_check
|
||||
IMPORTING
|
||||
iv_package TYPE devclass
|
||||
RETURNING
|
||||
VALUE(ri_syntax_check) TYPE REF TO zif_abapgit_code_inspector
|
||||
raising
|
||||
zcx_abapgit_exception.
|
||||
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES:
|
||||
|
@ -23,11 +41,27 @@ CLASS zcl_abapgit_factory DEFINITION
|
|||
instance TYPE REF TO zif_abapgit_sap_package,
|
||||
END OF ty_sap_package,
|
||||
tty_sap_package TYPE HASHED TABLE OF ty_sap_package
|
||||
WITH UNIQUE KEY package.
|
||||
WITH UNIQUE KEY package,
|
||||
|
||||
BEGIN OF ty_code_inspector,
|
||||
package TYPE devclass,
|
||||
check_variant_name TYPE sci_chkv,
|
||||
instance TYPE REF TO zif_abapgit_code_inspector,
|
||||
END OF ty_code_inspector,
|
||||
tty_code_inspector TYPE HASHED TABLE OF ty_code_inspector
|
||||
WITH UNIQUE KEY package check_variant_name,
|
||||
BEGIN OF ty_syntax_check,
|
||||
package TYPE devclass,
|
||||
instance TYPE REF TO zif_abapgit_code_inspector,
|
||||
END OF ty_syntax_check,
|
||||
tty_syntax_check TYPE HASHED TABLE OF ty_syntax_check
|
||||
WITH UNIQUE KEY package.
|
||||
|
||||
CLASS-DATA:
|
||||
mi_tadir TYPE REF TO zif_abapgit_tadir,
|
||||
mt_sap_package TYPE tty_sap_package.
|
||||
mi_tadir TYPE REF TO zif_abapgit_tadir,
|
||||
mt_sap_package TYPE tty_sap_package,
|
||||
mt_code_inspector TYPE tty_code_inspector,
|
||||
mt_syntax_check TYPE tty_syntax_check.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
@ -69,4 +103,55 @@ CLASS zcl_abapgit_factory IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_code_inspector.
|
||||
|
||||
DATA: ls_code_inspector LIKE LINE OF mt_code_inspector.
|
||||
FIELD-SYMBOLS: <ls_code_inspector> TYPE zcl_abapgit_factory=>ty_code_inspector.
|
||||
|
||||
READ TABLE mt_code_inspector ASSIGNING <ls_code_inspector>
|
||||
WITH TABLE KEY package = iv_package
|
||||
check_variant_name = iv_check_variant_name.
|
||||
IF sy-subrc <> 0.
|
||||
ls_code_inspector-package = iv_package.
|
||||
ls_code_inspector-check_variant_name = iv_check_variant_name.
|
||||
|
||||
CREATE OBJECT ls_code_inspector-instance TYPE zcl_abapgit_code_inspector
|
||||
EXPORTING
|
||||
iv_package = iv_package
|
||||
iv_check_variant_name = iv_check_variant_name.
|
||||
|
||||
INSERT ls_code_inspector
|
||||
INTO TABLE mt_code_inspector
|
||||
ASSIGNING <ls_code_inspector>.
|
||||
|
||||
ENDIF.
|
||||
|
||||
ri_code_inspector = <ls_code_inspector>-instance.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_syntax_check.
|
||||
|
||||
DATA: ls_syntax_check LIKE LINE OF mt_syntax_check.
|
||||
FIELD-SYMBOLS: <ls_syntax_check> TYPE zcl_abapgit_factory=>ty_syntax_check.
|
||||
|
||||
READ TABLE mt_syntax_check ASSIGNING <ls_syntax_check>
|
||||
WITH TABLE KEY package = iv_package.
|
||||
IF sy-subrc <> 0.
|
||||
ls_syntax_check-package = iv_package.
|
||||
|
||||
CREATE OBJECT ls_syntax_check-instance TYPE zcl_abapgit_syntax_check
|
||||
EXPORTING
|
||||
iv_package = iv_package.
|
||||
|
||||
INSERT ls_syntax_check
|
||||
INTO TABLE mt_syntax_check
|
||||
ASSIGNING <ls_syntax_check>.
|
||||
|
||||
ENDIF.
|
||||
|
||||
ri_syntax_check = <ls_syntax_check>-instance.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
|
|
@ -13,7 +13,18 @@ CLASS zcl_abapgit_injector DEFINITION
|
|||
set_sap_package
|
||||
IMPORTING
|
||||
iv_package TYPE devclass
|
||||
ii_sap_package TYPE REF TO zif_abapgit_sap_package.
|
||||
ii_sap_package TYPE REF TO zif_abapgit_sap_package,
|
||||
|
||||
set_code_inspector
|
||||
IMPORTING
|
||||
iv_package TYPE devclass
|
||||
iv_check_variant_name TYPE sci_chkv OPTIONAL
|
||||
ii_code_inspector TYPE REF TO zif_abapgit_code_inspector,
|
||||
|
||||
set_syntax_check
|
||||
IMPORTING
|
||||
iv_package TYPE devclass
|
||||
ii_syntax_check TYPE REF TO zif_abapgit_code_inspector.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
@ -49,4 +60,50 @@ CLASS zcl_abapgit_injector IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD set_code_inspector.
|
||||
|
||||
DATA: ls_code_inspector LIKE LINE OF zcl_abapgit_factory=>mt_code_inspector.
|
||||
FIELD-SYMBOLS: <ls_code_inspector> LIKE LINE OF zcl_abapgit_factory=>mt_code_inspector.
|
||||
|
||||
READ TABLE zcl_abapgit_factory=>mt_code_inspector
|
||||
ASSIGNING <ls_code_inspector>
|
||||
WITH TABLE KEY package = iv_package
|
||||
check_variant_name = iv_check_variant_name.
|
||||
IF sy-subrc <> 0.
|
||||
|
||||
ls_code_inspector-package = iv_package.
|
||||
ls_code_inspector-check_variant_name = iv_check_variant_name.
|
||||
|
||||
INSERT ls_code_inspector
|
||||
INTO TABLE zcl_abapgit_factory=>mt_code_inspector
|
||||
ASSIGNING <ls_code_inspector>.
|
||||
|
||||
ENDIF.
|
||||
|
||||
<ls_code_inspector>-instance = ii_code_inspector.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD set_syntax_check.
|
||||
|
||||
DATA: ls_syntax_check LIKE LINE OF zcl_abapgit_factory=>mt_syntax_check.
|
||||
FIELD-SYMBOLS: <ls_syntax_check> LIKE LINE OF zcl_abapgit_factory=>mt_syntax_check.
|
||||
|
||||
READ TABLE zcl_abapgit_factory=>mt_syntax_check
|
||||
ASSIGNING <ls_syntax_check>
|
||||
WITH TABLE KEY package = iv_package.
|
||||
IF sy-subrc <> 0.
|
||||
|
||||
ls_syntax_check-package = iv_package.
|
||||
|
||||
INSERT ls_syntax_check
|
||||
INTO TABLE zcl_abapgit_factory=>mt_syntax_check
|
||||
ASSIGNING <ls_syntax_check>.
|
||||
|
||||
ENDIF.
|
||||
|
||||
<ls_syntax_check>-instance = ii_syntax_check.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
|
|
@ -76,7 +76,11 @@ CLASS zcl_abapgit_repo_online DEFINITION
|
|||
VALUE(rt_unnecessary_local_objects) TYPE zif_abapgit_definitions=>ty_tadir_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
METHODS run_code_inspector
|
||||
RETURNING
|
||||
VALUE(rt_list) TYPE scit_alvlist
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS deserialize
|
||||
REDEFINITION .
|
||||
METHODS get_files_remote
|
||||
|
@ -87,11 +91,12 @@ CLASS zcl_abapgit_repo_online DEFINITION
|
|||
REDEFINITION .
|
||||
PRIVATE SECTION.
|
||||
DATA:
|
||||
mt_objects TYPE zif_abapgit_definitions=>ty_objects_tt,
|
||||
mv_branch TYPE zif_abapgit_definitions=>ty_sha1,
|
||||
mv_initialized TYPE abap_bool,
|
||||
mo_branches TYPE REF TO zcl_abapgit_git_branch_list,
|
||||
mt_status TYPE zif_abapgit_definitions=>ty_results_tt.
|
||||
mt_objects TYPE zif_abapgit_definitions=>ty_objects_tt,
|
||||
mv_branch TYPE zif_abapgit_definitions=>ty_sha1,
|
||||
mv_initialized TYPE abap_bool,
|
||||
mo_branches TYPE REF TO zcl_abapgit_git_branch_list,
|
||||
mt_status TYPE zif_abapgit_definitions=>ty_results_tt,
|
||||
mv_code_inspector_successful TYPE abap_bool.
|
||||
|
||||
METHODS:
|
||||
handle_stage_ignore
|
||||
|
@ -107,7 +112,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_repo_online IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD actualize_head_branch.
|
||||
|
@ -305,11 +310,16 @@ CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION.
|
|||
|
||||
handle_stage_ignore( io_stage ).
|
||||
|
||||
IF ms_data-local_settings-block_commit = abap_true
|
||||
AND mv_code_inspector_successful = abap_false.
|
||||
zcx_abapgit_exception=>raise( |A successful code inspection is required| ).
|
||||
ENDIF.
|
||||
|
||||
zcl_abapgit_git_porcelain=>push( EXPORTING is_comment = is_comment
|
||||
io_repo = me
|
||||
io_stage = io_stage
|
||||
IMPORTING ev_branch = lv_branch
|
||||
et_updated_files = lt_updated_files ).
|
||||
io_repo = me
|
||||
io_stage = io_stage
|
||||
IMPORTING ev_branch = lv_branch
|
||||
et_updated_files = lt_updated_files ).
|
||||
|
||||
IF io_stage->get_branch_sha1( ) = get_sha1_local( ).
|
||||
* pushing to the branch currently represented by this repository object
|
||||
|
@ -325,6 +335,8 @@ CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION.
|
|||
set( iv_sha1 = lv_branch ).
|
||||
ENDIF.
|
||||
|
||||
CLEAR: mv_code_inspector_successful.
|
||||
|
||||
ENDMETHOD. "push
|
||||
|
||||
|
||||
|
@ -427,6 +439,33 @@ CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION.
|
|||
ENDMETHOD. " reset_status.
|
||||
|
||||
|
||||
METHOD run_code_inspector.
|
||||
|
||||
DATA: li_code_inspector TYPE REF TO zif_abapgit_code_inspector,
|
||||
lv_check_variant TYPE string.
|
||||
|
||||
lv_check_variant = get_local_settings( )-code_inspector_check_variant.
|
||||
|
||||
IF lv_check_variant IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( |No check variant maintained in repo settings.| ).
|
||||
ENDIF.
|
||||
|
||||
li_code_inspector = zcl_abapgit_factory=>get_code_inspector(
|
||||
iv_package = get_package( )
|
||||
iv_check_variant_name = |{ lv_check_variant }| ).
|
||||
|
||||
rt_list = li_code_inspector->run( ).
|
||||
|
||||
DELETE rt_list WHERE kind = 'N'.
|
||||
|
||||
READ TABLE rt_list TRANSPORTING NO FIELDS
|
||||
WITH KEY kind = 'E'.
|
||||
|
||||
mv_code_inspector_successful = boolc( sy-subrc = 0 ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD set_branch_name.
|
||||
|
||||
IF ms_data-local_settings-write_protected = abap_true.
|
||||
|
|
241
src/zcl_abapgit_repo_online.clas.testclasses.abap
Normal file
241
src/zcl_abapgit_repo_online.clas.testclasses.abap
Normal file
|
@ -0,0 +1,241 @@
|
|||
*"* use this source file for your ABAP unit test classes
|
||||
CLASS ltd_code_inspector DEFINITION FOR TESTING.
|
||||
|
||||
PUBLIC SECTION.
|
||||
INTERFACES:
|
||||
zif_abapgit_code_inspector PARTIALLY IMPLEMENTED.
|
||||
|
||||
METHODS:
|
||||
constructor
|
||||
IMPORTING
|
||||
iv_package TYPE devclass.
|
||||
PRIVATE SECTION.
|
||||
DATA mv_package TYPE devclass.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltd_code_inspector IMPLEMENTATION.
|
||||
|
||||
METHOD constructor.
|
||||
|
||||
mv_package = iv_package.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_code_inspector~run.
|
||||
|
||||
DATA: ls_list LIKE LINE OF rt_list.
|
||||
|
||||
IF mv_package = '$DUMMY'.
|
||||
|
||||
ls_list-kind = 'E'.
|
||||
INSERT ls_list INTO TABLE rt_list.
|
||||
|
||||
ENDIF.
|
||||
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_run_code_inspection DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA:
|
||||
mo_repo_online TYPE REF TO zcl_abapgit_repo_online,
|
||||
mv_error_text TYPE string,
|
||||
mt_act_list TYPE scit_alvlist.
|
||||
|
||||
METHODS:
|
||||
exception_when_no_check_var FOR TESTING RAISING cx_static_check,
|
||||
exception_when_error FOR TESTING RAISING cx_static_check,
|
||||
no_exception_when_no_error FOR TESTING RAISING cx_static_check,
|
||||
push_not_possible_if_ci_req FOR TESTING RAISING cx_static_check,
|
||||
|
||||
given_online_repo
|
||||
IMPORTING
|
||||
iv_package TYPE devclass
|
||||
RAISING
|
||||
zcx_abapgit_exception,
|
||||
|
||||
given_check_variant
|
||||
IMPORTING
|
||||
iv_check_variant TYPE string,
|
||||
|
||||
given_mock_code_inspector
|
||||
IMPORTING
|
||||
iv_package TYPE devclass
|
||||
iv_check_variant TYPE sci_chkv ,
|
||||
|
||||
given_block_commit
|
||||
IMPORTING
|
||||
iv_block_commit TYPE abap_bool,
|
||||
|
||||
when_push,
|
||||
|
||||
then_exception_text_is
|
||||
IMPORTING
|
||||
iv_exp_error_text TYPE csequence,
|
||||
|
||||
when_run_code_inspector,
|
||||
|
||||
then_ci_detected_an_error,
|
||||
|
||||
then_no_exception_is_raised.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS zcl_abapgit_repo_online DEFINITION LOCAL FRIENDS ltcl_run_code_inspection.
|
||||
|
||||
CLASS ltcl_run_code_inspection IMPLEMENTATION.
|
||||
|
||||
METHOD exception_when_no_check_var.
|
||||
|
||||
given_online_repo( iv_package = '$DUMMY' ).
|
||||
given_check_variant( || ).
|
||||
when_run_code_inspector( ).
|
||||
then_exception_text_is( |No check variant maintained in repo settings.| ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD exception_when_error.
|
||||
|
||||
|
||||
given_online_repo( '$DUMMY' ).
|
||||
given_check_variant( |variant| ).
|
||||
given_mock_code_inspector( iv_package = '$DUMMY'
|
||||
iv_check_variant = |variant| ).
|
||||
|
||||
when_run_code_inspector( ).
|
||||
then_ci_detected_an_error( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD no_exception_when_no_error.
|
||||
|
||||
DATA: lx_error TYPE REF TO zcx_abapgit_exception.
|
||||
|
||||
given_online_repo( '$PACKAGE' ).
|
||||
given_check_variant( |variant| ).
|
||||
given_mock_code_inspector( iv_package = '$PACKAGE'
|
||||
iv_check_variant = |variant| ).
|
||||
when_run_code_inspector( ).
|
||||
then_no_exception_is_raised( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD given_online_repo.
|
||||
|
||||
DATA: ls_data TYPE zif_abapgit_persistence=>ty_repo.
|
||||
|
||||
ls_data-key = 'dummmy'.
|
||||
ls_data-package = iv_package.
|
||||
|
||||
CREATE OBJECT mo_repo_online
|
||||
EXPORTING
|
||||
is_data = ls_data.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD given_check_variant.
|
||||
mo_repo_online->ms_data-local_settings-code_inspector_check_variant = iv_check_variant.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD given_mock_code_inspector.
|
||||
|
||||
DATA: lo_mock_code_inspector TYPE REF TO ltd_code_inspector.
|
||||
|
||||
CREATE OBJECT lo_mock_code_inspector
|
||||
EXPORTING
|
||||
iv_package = iv_package.
|
||||
|
||||
zcl_abapgit_injector=>set_code_inspector( iv_package = iv_package
|
||||
iv_check_variant_name = iv_check_variant
|
||||
ii_code_inspector = lo_mock_code_inspector ).
|
||||
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD push_not_possible_if_ci_req.
|
||||
|
||||
given_online_repo( '$PACKAGE' ).
|
||||
given_check_variant( |variant| ).
|
||||
given_block_commit( abap_true ).
|
||||
when_push( ).
|
||||
then_exception_text_is( |A successful code inspection is required| ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD given_block_commit.
|
||||
|
||||
mo_repo_online->ms_data-local_settings-block_commit = abap_true.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD when_push.
|
||||
|
||||
DATA: ls_comment TYPE zif_abapgit_definitions=>ty_comment,
|
||||
lo_stage TYPE REF TO zcl_abapgit_stage,
|
||||
lx_error TYPE REF TO zcx_abapgit_exception.
|
||||
|
||||
CREATE OBJECT lo_stage
|
||||
EXPORTING
|
||||
iv_branch_name = 'refs/master'
|
||||
iv_branch_sha1 = 'dummy'.
|
||||
|
||||
TRY.
|
||||
mo_repo_online->push( is_comment = ls_comment
|
||||
io_stage = lo_stage ).
|
||||
|
||||
CATCH zcx_abapgit_exception INTO lx_error.
|
||||
mv_error_text = lx_error->get_text( ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD then_exception_text_is.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = iv_exp_error_text
|
||||
act = mv_error_text ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD when_run_code_inspector.
|
||||
|
||||
DATA: lx_error TYPE REF TO zcx_abapgit_exception.
|
||||
|
||||
TRY.
|
||||
mt_act_list = mo_repo_online->run_code_inspector( ).
|
||||
CATCH zcx_abapgit_exception INTO lx_error.
|
||||
mv_error_text = lx_error->get_text( ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD then_ci_detected_an_error.
|
||||
|
||||
READ TABLE mt_act_list TRANSPORTING NO FIELDS
|
||||
WITH KEY kind = 'E'.
|
||||
cl_abap_unit_assert=>assert_subrc( exp = 0 ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD then_no_exception_is_raised.
|
||||
|
||||
cl_abap_unit_assert=>assert_initial( mv_error_text ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
|
@ -13,6 +13,7 @@
|
|||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
|
|
|
@ -1,44 +1,12 @@
|
|||
CLASS zcl_abapgit_syntax_check DEFINITION
|
||||
PUBLIC
|
||||
CREATE PUBLIC .
|
||||
INHERITING FROM zcl_abapgit_code_inspector
|
||||
GLOBAL FRIENDS zcl_abapgit_factory.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
CLASS-METHODS run
|
||||
IMPORTING
|
||||
!iv_package TYPE devclass
|
||||
RETURNING
|
||||
VALUE(rt_list) TYPE scit_alvlist .
|
||||
PROTECTED SECTION.
|
||||
METHODS:
|
||||
create_variant REDEFINITION.
|
||||
|
||||
TYPES:
|
||||
ty_tdevc_tt TYPE STANDARD TABLE OF tdevc WITH DEFAULT KEY .
|
||||
|
||||
CLASS-METHODS find_all_subpackages
|
||||
IMPORTING
|
||||
!iv_package TYPE devclass
|
||||
RETURNING
|
||||
VALUE(rt_packages) TYPE ty_tdevc_tt .
|
||||
CLASS-METHODS create_inspection
|
||||
IMPORTING
|
||||
!io_set TYPE REF TO cl_ci_objectset
|
||||
!io_variant TYPE REF TO cl_ci_checkvariant
|
||||
RETURNING
|
||||
VALUE(ro_inspection) TYPE REF TO cl_ci_inspection .
|
||||
CLASS-METHODS create_objectset
|
||||
IMPORTING
|
||||
!iv_package TYPE devclass
|
||||
RETURNING
|
||||
VALUE(ro_set) TYPE REF TO cl_ci_objectset .
|
||||
CLASS-METHODS create_variant
|
||||
RETURNING
|
||||
VALUE(ro_variant) TYPE REF TO cl_ci_checkvariant .
|
||||
CLASS-METHODS run_inspection
|
||||
IMPORTING
|
||||
!io_inspection TYPE REF TO cl_ci_inspection
|
||||
RETURNING
|
||||
VALUE(rt_list) TYPE scit_alvlist .
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
@ -46,58 +14,11 @@ ENDCLASS.
|
|||
CLASS ZCL_ABAPGIT_SYNTAX_CHECK IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD create_inspection.
|
||||
|
||||
cl_ci_inspection=>create(
|
||||
EXPORTING
|
||||
p_user = sy-uname
|
||||
p_name = ''
|
||||
RECEIVING
|
||||
p_ref = ro_inspection
|
||||
EXCEPTIONS
|
||||
locked = 1
|
||||
error_in_enqueue = 2
|
||||
not_authorized = 3
|
||||
OTHERS = 4 ).
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
ro_inspection->set(
|
||||
p_chkv = io_variant
|
||||
p_objs = io_set ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD create_objectset.
|
||||
|
||||
DATA: lt_objs TYPE scit_objs,
|
||||
lt_packages TYPE ty_tdevc_tt.
|
||||
|
||||
|
||||
lt_packages = find_all_subpackages( iv_package ).
|
||||
IF lines( lt_packages ) = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
SELECT object AS objtype obj_name AS objname
|
||||
FROM tadir
|
||||
INTO CORRESPONDING FIELDS OF TABLE lt_objs
|
||||
FOR ALL ENTRIES IN lt_packages
|
||||
WHERE devclass = lt_packages-devclass
|
||||
AND delflag = abap_false
|
||||
AND pgmid = 'R3TR'. "#EC CI_GENBUFF
|
||||
|
||||
ro_set = cl_ci_objectset=>save_from_list( lt_objs ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD create_variant.
|
||||
|
||||
DATA: lt_variant TYPE sci_tstvar,
|
||||
ls_variant LIKE LINE OF lt_variant.
|
||||
|
||||
|
||||
cl_ci_checkvariant=>create(
|
||||
EXPORTING
|
||||
p_user = sy-uname
|
||||
|
@ -123,62 +44,4 @@ CLASS ZCL_ABAPGIT_SYNTAX_CHECK IMPLEMENTATION.
|
|||
ASSERT sy-subrc = 0.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD find_all_subpackages.
|
||||
|
||||
* TODO, in the future, move this method to the ABAPGIT global package class
|
||||
|
||||
DATA: ls_package LIKE LINE OF rt_packages,
|
||||
lt_found LIKE rt_packages,
|
||||
lt_sub LIKE rt_packages.
|
||||
|
||||
|
||||
SELECT SINGLE * FROM tdevc INTO ls_package WHERE devclass = iv_package.
|
||||
ASSERT sy-subrc = 0.
|
||||
APPEND ls_package TO rt_packages.
|
||||
|
||||
SELECT * FROM tdevc APPENDING TABLE lt_sub
|
||||
WHERE parentcl = ls_package-devclass.
|
||||
|
||||
LOOP AT lt_sub INTO ls_package.
|
||||
lt_found = find_all_subpackages( ls_package-devclass ).
|
||||
APPEND LINES OF lt_found TO rt_packages.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD run.
|
||||
|
||||
DATA: lo_set TYPE REF TO cl_ci_objectset,
|
||||
lo_inspection TYPE REF TO cl_ci_inspection,
|
||||
lo_variant TYPE REF TO cl_ci_checkvariant.
|
||||
|
||||
|
||||
lo_set = create_objectset( iv_package ).
|
||||
lo_variant = create_variant( ).
|
||||
|
||||
lo_inspection = create_inspection(
|
||||
io_set = lo_set
|
||||
io_variant = lo_variant ).
|
||||
|
||||
rt_list = run_inspection( lo_inspection ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD run_inspection.
|
||||
|
||||
io_inspection->run(
|
||||
EXCEPTIONS
|
||||
invalid_check_version = 1
|
||||
OTHERS = 2 ).
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
io_inspection->plain_list(
|
||||
IMPORTING
|
||||
p_list = rt_list ).
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
15
src/zif_abapgit_code_inspector.intf.abap
Normal file
15
src/zif_abapgit_code_inspector.intf.abap
Normal file
|
@ -0,0 +1,15 @@
|
|||
INTERFACE zif_abapgit_code_inspector
|
||||
PUBLIC.
|
||||
|
||||
METHODS:
|
||||
run
|
||||
RETURNING
|
||||
VALUE(rt_list) TYPE scit_alvlist
|
||||
RAISING
|
||||
zcx_abapgit_exception,
|
||||
|
||||
get_inspection
|
||||
RETURNING
|
||||
VALUE(ro_inspection) TYPE REF TO cl_ci_inspection.
|
||||
|
||||
ENDINTERFACE.
|
16
src/zif_abapgit_code_inspector.intf.xml
Normal file
16
src/zif_abapgit_code_inspector.intf.xml
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?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_CODE_INSPECTOR</CLSNAME>
|
||||
<VERSION>1</VERSION>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>abapGit Code Inspector</DESCRIPT>
|
||||
<EXPOSURE>2</EXPOSURE>
|
||||
<STATE>1</STATE>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOINTERF>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -395,6 +395,7 @@ INTERFACE zif_abapgit_definitions PUBLIC.
|
|||
repo_toggle_fav TYPE string VALUE 'repo_toggle_fav',
|
||||
repo_transport_to_branch TYPE string VALUE 'repo_transport_to_branch',
|
||||
repo_syntax_check TYPE string VALUE 'repo_syntax_check',
|
||||
repo_code_inspector TYPE string VALUE 'repo_code_inspector',
|
||||
|
||||
abapgit_home TYPE string VALUE 'abapgit_home',
|
||||
abapgit_wiki TYPE string VALUE 'abapgit_wiki',
|
||||
|
|
|
@ -10,11 +10,11 @@ INTERFACE zif_abapgit_dot_abapgit PUBLIC.
|
|||
ty_requirement_tt TYPE STANDARD TABLE OF ty_requirement WITH DEFAULT KEY .
|
||||
TYPES:
|
||||
BEGIN OF ty_dot_abapgit,
|
||||
master_language TYPE spras,
|
||||
starting_folder TYPE string,
|
||||
folder_logic TYPE string,
|
||||
ignore TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
|
||||
requirements TYPE ty_requirement_tt,
|
||||
master_language TYPE spras,
|
||||
starting_folder TYPE string,
|
||||
folder_logic TYPE string,
|
||||
ignore TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
|
||||
requirements TYPE ty_requirement_tt,
|
||||
END OF ty_dot_abapgit .
|
||||
|
||||
CONSTANTS:
|
||||
|
|
Loading…
Reference in New Issue
Block a user