From c72d04ea80624522a99ffb10c333c7759e2a0720 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Sun, 5 Aug 2018 08:08:41 +0200 Subject: [PATCH] Refactor background to use log object instead of WRITE (#1753) * LOG: extra ADD_* methods Methods ADD_ERROR, ADD_INFO, and ADD_WARNING added to log class * refactor background to use log object refactor background to use log object instead of WRITE --- .../zcl_abapgit_background.clas.abap | 5 + .../zcl_abapgit_background_push_au.clas.abap | 25 ++-- .../zcl_abapgit_background_push_fi.clas.abap | 26 ++-- .../zif_abapgit_background.intf.abap | 13 +- src/utils/zcl_abapgit_log.clas.abap | 127 +++++++++++++----- 5 files changed, 132 insertions(+), 64 deletions(-) diff --git a/src/background/zcl_abapgit_background.clas.abap b/src/background/zcl_abapgit_background.clas.abap index 91df2b544..1c9ce068b 100644 --- a/src/background/zcl_abapgit_background.clas.abap +++ b/src/background/zcl_abapgit_background.clas.abap @@ -74,6 +74,7 @@ CLASS ZCL_ABAPGIT_BACKGROUND IMPLEMENTATION. lo_repo TYPE REF TO zcl_abapgit_repo_online, lt_list TYPE zcl_abapgit_persist_background=>tt_background, li_background TYPE REF TO zif_abapgit_background, + lo_log TYPE REF TO zcl_abapgit_log, lv_repo_name TYPE string. FIELD-SYMBOLS: LIKE LINE OF lt_list. @@ -108,11 +109,15 @@ CLASS ZCL_ABAPGIT_BACKGROUND IMPLEMENTATION. iv_username = -username iv_password = -password ). + CREATE OBJECT lo_log. CREATE OBJECT li_background TYPE (-method). li_background->run( io_repo = lo_repo + io_log = lo_log it_settings = -settings ). + + lo_log->write( ). ENDLOOP. IF lines( lt_list ) = 0. diff --git a/src/background/zcl_abapgit_background_push_au.clas.abap b/src/background/zcl_abapgit_background_push_au.clas.abap index a7129390e..cd39f26ff 100644 --- a/src/background/zcl_abapgit_background_push_au.clas.abap +++ b/src/background/zcl_abapgit_background_push_au.clas.abap @@ -8,6 +8,8 @@ CLASS zcl_abapgit_background_push_au DEFINITION INTERFACES zif_abapgit_background . PROTECTED SECTION. + DATA mo_log TYPE REF TO zcl_abapgit_log . + METHODS build_comment IMPORTING !is_files TYPE zif_abapgit_definitions=>ty_stage_files @@ -142,10 +144,10 @@ CLASS ZCL_ABAPGIT_BACKGROUND_PUSH_AU IMPLEMENTATION. changed_by = lv_changed_by TRANSPORTING NO FIELDS. IF sy-subrc = 0. - WRITE: / 'stage' ##NO_TEXT, - ls_comment-committer-name, - -file-path, - -file-filename. + mo_log->add_info( |stage: { + ls_comment-committer-name } { + -file-path } { + -file-filename }| ). lo_stage->add( iv_path = -file-path iv_filename = -file-filename @@ -157,9 +159,9 @@ CLASS ZCL_ABAPGIT_BACKGROUND_PUSH_AU IMPLEMENTATION. WHERE filename = -file-filename AND path <> -file-path AND filename <> 'package.devc.xml'. - WRITE: / 'rm' ##NO_TEXT, - -path, - -filename. + mo_log->add_info( |rm: { + -path } { + -filename }| ). * rm old file when object has moved lo_stage->rm( @@ -200,9 +202,9 @@ CLASS ZCL_ABAPGIT_BACKGROUND_PUSH_AU IMPLEMENTATION. LOOP AT is_files-remote ASSIGNING . - WRITE: / 'removed' ##NO_TEXT, - -path, - -filename. + mo_log->add_info( |removed: { + -path } { + -filename }| ). lo_stage->rm( iv_path = -path iv_filename = -filename ). @@ -237,10 +239,11 @@ CLASS ZCL_ABAPGIT_BACKGROUND_PUSH_AU IMPLEMENTATION. DATA: ls_files TYPE zif_abapgit_definitions=>ty_stage_files. + mo_log = io_log. ls_files = zcl_abapgit_stage_logic=>get( io_repo ). IF lines( ls_files-local ) = 0 AND lines( ls_files-remote ) = 0. - WRITE: / 'Nothing to stage' ##NO_TEXT. + io_log->add_info( 'Nothing to stage' ) ##NO_TEXT. RETURN. ENDIF. diff --git a/src/background/zcl_abapgit_background_push_fi.clas.abap b/src/background/zcl_abapgit_background_push_fi.clas.abap index ca2457892..4061e756a 100644 --- a/src/background/zcl_abapgit_background_push_fi.clas.abap +++ b/src/background/zcl_abapgit_background_push_fi.clas.abap @@ -8,10 +8,12 @@ CLASS zcl_abapgit_background_push_fi DEFINITION INTERFACES zif_abapgit_background . PROTECTED SECTION. - CONSTANTS: BEGIN OF gc_settings, - name TYPE string VALUE 'NAME', - email TYPE string VALUE 'EMAIL', - END OF gc_settings. + CONSTANTS: + BEGIN OF gc_settings, + name TYPE string VALUE 'NAME', + email TYPE string VALUE 'EMAIL', + END OF gc_settings . + DATA mo_log TYPE REF TO zcl_abapgit_log . METHODS build_comment IMPORTING @@ -81,9 +83,9 @@ CLASS ZCL_ABAPGIT_BACKGROUND_PUSH_FI IMPLEMENTATION. iv_branch_sha1 = io_repo->get_sha1_remote( ). LOOP AT ls_files-local ASSIGNING . - WRITE: / 'stage' ##NO_TEXT, - -file-path, - -file-filename. + mo_log->add_info( |stage: { + -file-path } { + -file-filename }| ). lo_stage->add( iv_path = -file-path iv_filename = -file-filename iv_data = -file-data ). @@ -91,9 +93,9 @@ CLASS ZCL_ABAPGIT_BACKGROUND_PUSH_FI IMPLEMENTATION. LOOP AT ls_files-remote ASSIGNING . - WRITE: / 'removed' ##NO_TEXT, - -path, - -filename. + mo_log->add_info( |removed: { + -path } { + -filename }| ). lo_stage->rm( iv_path = -path iv_filename = -filename ). @@ -146,11 +148,11 @@ CLASS ZCL_ABAPGIT_BACKGROUND_PUSH_FI IMPLEMENTATION. lv_name TYPE string, lv_email TYPE string. - + mo_log = io_log. ls_files = zcl_abapgit_stage_logic=>get( io_repo ). IF lines( ls_files-local ) = 0 AND lines( ls_files-remote ) = 0. - WRITE: / 'Nothing to stage' ##NO_TEXT. + io_log->add_info( 'Nothing to stage' ). RETURN. ENDIF. diff --git a/src/background/zif_abapgit_background.intf.abap b/src/background/zif_abapgit_background.intf.abap index 1381fe7a2..24bc28291 100644 --- a/src/background/zif_abapgit_background.intf.abap +++ b/src/background/zif_abapgit_background.intf.abap @@ -1,12 +1,14 @@ INTERFACE zif_abapgit_background PUBLIC . - TYPES: BEGIN OF ty_settings, - key TYPE string, - value TYPE string, - END OF ty_settings. - TYPES: ty_settings_tt TYPE STANDARD TABLE OF ty_settings WITH DEFAULT KEY. + TYPES: + BEGIN OF ty_settings, + key TYPE string, + value TYPE string, + END OF ty_settings . + TYPES: + ty_settings_tt TYPE STANDARD TABLE OF ty_settings WITH DEFAULT KEY . CLASS-METHODS get_description RETURNING @@ -17,6 +19,7 @@ INTERFACE zif_abapgit_background METHODS run IMPORTING !io_repo TYPE REF TO zcl_abapgit_repo_online + !io_log TYPE REF TO zcl_abapgit_log !it_settings TYPE ty_settings_tt OPTIONAL RAISING zcx_abapgit_exception . diff --git a/src/utils/zcl_abapgit_log.clas.abap b/src/utils/zcl_abapgit_log.clas.abap index 5818803df..bcab2b328 100644 --- a/src/utils/zcl_abapgit_log.clas.abap +++ b/src/utils/zcl_abapgit_log.clas.abap @@ -1,45 +1,62 @@ -CLASS zcl_abapgit_log DEFINITION PUBLIC CREATE PUBLIC. +CLASS zcl_abapgit_log DEFINITION + PUBLIC + CREATE PUBLIC . PUBLIC SECTION. - METHODS: - add - IMPORTING - iv_msg TYPE csequence - iv_type TYPE symsgty DEFAULT 'E' - iv_rc TYPE balsort OPTIONAL, - count - RETURNING VALUE(rv_count) TYPE i, - to_html - RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html, - clear, - has_rc "For unit tests mainly - IMPORTING iv_rc TYPE balsort - RETURNING VALUE(rv_yes) TYPE abap_bool, - show - IMPORTING - iv_header_text TYPE csequence DEFAULT 'Log'. - PRIVATE SECTION. - TYPES: BEGIN OF ty_log, - msg TYPE string, - type TYPE symsgty, - rc TYPE balsort, - END OF ty_log, - BEGIN OF ty_log_out, - type TYPE icon_d, - msg TYPE string, - END OF ty_log_out, - tty_log_out TYPE STANDARD TABLE OF ty_log_out - WITH NON-UNIQUE DEFAULT KEY. + METHODS add + IMPORTING + !iv_msg TYPE csequence + !iv_type TYPE symsgty DEFAULT 'E' + !iv_rc TYPE balsort OPTIONAL . + METHODS add_error + IMPORTING + !iv_msg TYPE csequence . + METHODS add_info + IMPORTING + !iv_msg TYPE csequence . + METHODS add_warning + IMPORTING + !iv_msg TYPE csequence . + METHODS clear . + METHODS count + RETURNING + VALUE(rv_count) TYPE i . + METHODS has_rc + IMPORTING + !iv_rc TYPE balsort + RETURNING + VALUE(rv_yes) TYPE abap_bool . + METHODS show + IMPORTING + !iv_header_text TYPE csequence DEFAULT 'Log' . + METHODS to_html + RETURNING + VALUE(ro_html) TYPE REF TO zcl_abapgit_html . + METHODS write . + PROTECTED SECTION. + TYPES: + BEGIN OF ty_log, + msg TYPE string, + type TYPE symsgty, + rc TYPE balsort, + END OF ty_log . + TYPES: + BEGIN OF ty_log_out, + type TYPE icon_d, + msg TYPE string, + END OF ty_log_out . + TYPES: + tty_log_out TYPE STANDARD TABLE OF ty_log_out + WITH NON-UNIQUE DEFAULT KEY . - DATA: mt_log TYPE STANDARD TABLE OF ty_log WITH DEFAULT KEY. - - METHODS: - prepare_log_for_display - RETURNING - VALUE(rt_log_out) TYPE zcl_abapgit_log=>tty_log_out. + DATA: + mt_log TYPE STANDARD TABLE OF ty_log WITH DEFAULT KEY . + METHODS prepare_log_for_display + RETURNING + VALUE(rt_log_out) TYPE zcl_abapgit_log=>tty_log_out . ENDCLASS. @@ -59,6 +76,30 @@ CLASS ZCL_ABAPGIT_LOG IMPLEMENTATION. ENDMETHOD. + METHOD add_error. + + add( iv_msg = iv_msg + iv_type = 'E' ). + + ENDMETHOD. + + + METHOD add_info. + + add( iv_msg = iv_msg + iv_type = 'I' ). + + ENDMETHOD. + + + METHOD add_warning. + + add( iv_msg = iv_msg + iv_type = 'W' ). + + ENDMETHOD. + + METHOD clear. CLEAR mt_log. ENDMETHOD. @@ -70,6 +111,8 @@ CLASS ZCL_ABAPGIT_LOG IMPLEMENTATION. METHOD has_rc. +* todo, this method is only used in unit tests + READ TABLE mt_log WITH KEY rc = iv_rc TRANSPORTING NO FIELDS. rv_yes = boolc( sy-subrc = 0 ). ENDMETHOD. @@ -190,4 +233,16 @@ CLASS ZCL_ABAPGIT_LOG IMPLEMENTATION. ENDLOOP. ENDMETHOD. + + + METHOD write. + + DATA: ls_log LIKE LINE OF mt_log. + + + LOOP AT mt_log INTO ls_log. + WRITE: / |{ ls_log-type }: { ls_log-msg }|. + ENDLOOP. + + ENDMETHOD. ENDCLASS.