CLASS zcl_abapgit_background_push_fi DEFINITION PUBLIC FINAL CREATE PUBLIC . PUBLIC SECTION. INTERFACES zif_abapgit_background . PROTECTED SECTION. CONSTANTS: BEGIN OF c_settings, name TYPE string VALUE 'NAME', email TYPE string VALUE 'EMAIL', END OF c_settings . DATA mo_log TYPE REF TO zcl_abapgit_log . METHODS build_comment IMPORTING !is_files TYPE zif_abapgit_definitions=>ty_stage_files RETURNING VALUE(rv_comment) TYPE string . METHODS push_fixed IMPORTING !io_repo TYPE REF TO zcl_abapgit_repo_online !iv_name TYPE string !iv_email TYPE string RAISING zcx_abapgit_exception . PRIVATE SECTION. ENDCLASS. CLASS ZCL_ABAPGIT_BACKGROUND_PUSH_FI IMPLEMENTATION. METHOD build_comment. DATA: lt_objects TYPE STANDARD TABLE OF string WITH DEFAULT KEY, lv_str TYPE string. FIELD-SYMBOLS: LIKE LINE OF is_files-local. LOOP AT is_files-local ASSIGNING . lv_str = |{ -item-obj_type } { -item-obj_name }|. APPEND lv_str TO lt_objects. ENDLOOP. SORT lt_objects AS TEXT. DELETE ADJACENT DUPLICATES FROM lt_objects. IF lines( lt_objects ) = 1. rv_comment = |BG: { lv_str }|. ELSE. rv_comment = 'BG: Multiple objects' ##NO_TEXT. LOOP AT lt_objects INTO lv_str. CONCATENATE rv_comment zif_abapgit_definitions=>c_newline lv_str INTO rv_comment. ENDLOOP. ENDIF. ENDMETHOD. METHOD push_fixed. DATA: ls_comment TYPE zif_abapgit_definitions=>ty_comment, ls_files TYPE zif_abapgit_definitions=>ty_stage_files, lo_stage TYPE REF TO zcl_abapgit_stage. FIELD-SYMBOLS: LIKE LINE OF ls_files-local, LIKE LINE OF ls_files-remote. ls_files = zcl_abapgit_factory=>get_stage_logic( )->get( io_repo ). ASSERT lines( ls_files-local ) > 0 OR lines( ls_files-remote ) > 0. CREATE OBJECT lo_stage. LOOP AT ls_files-local ASSIGNING . mo_log->add_info( |stage: { -file-path } { -file-filename }| ). lo_stage->add( iv_path = -file-path iv_filename = -file-filename iv_data = -file-data ). ENDLOOP. LOOP AT ls_files-remote ASSIGNING . mo_log->add_info( |removed: { -path } { -filename }| ). lo_stage->rm( iv_path = -path iv_filename = -filename ). ENDLOOP. ls_comment-committer-name = iv_name. ls_comment-committer-email = iv_email. ls_comment-comment = build_comment( ls_files ). io_repo->push( is_comment = ls_comment io_stage = lo_stage ). ENDMETHOD. METHOD zif_abapgit_background~get_description. rv_description = 'Automatic push, fixed author' ##NO_TEXT. ENDMETHOD. METHOD zif_abapgit_background~get_settings. DATA: ls_setting LIKE LINE OF ct_settings. READ TABLE ct_settings WITH KEY key = c_settings-name INTO ls_setting. IF sy-subrc <> 0. ls_setting-key = c_settings-name. ls_setting-value = 'foobar'. APPEND ls_setting TO ct_settings. ENDIF. READ TABLE ct_settings WITH KEY key = c_settings-email INTO ls_setting. IF sy-subrc <> 0. ls_setting-key = c_settings-email. ls_setting-value = 'foobar@localhost'. APPEND ls_setting TO ct_settings. ENDIF. ENDMETHOD. METHOD zif_abapgit_background~run. DATA: ls_files TYPE zif_abapgit_definitions=>ty_stage_files, ls_setting LIKE LINE OF it_settings, lv_name TYPE string, lv_email TYPE string. mo_log = io_log. ls_files = zcl_abapgit_factory=>get_stage_logic( )->get( io_repo ). IF lines( ls_files-local ) = 0 AND lines( ls_files-remote ) = 0. io_log->add_info( 'Nothing to stage' ). RETURN. ENDIF. READ TABLE it_settings WITH KEY key = c_settings-name INTO ls_setting. "#EC CI_SUBRC lv_name = ls_setting-value. READ TABLE it_settings WITH KEY key = c_settings-email INTO ls_setting. "#EC CI_SUBRC lv_email = ls_setting-value. push_fixed( io_repo = io_repo iv_name = lv_name iv_email = lv_email ). ENDMETHOD. ENDCLASS.