background push, split commits by changed by user

#245
This commit is contained in:
larshp 2016-07-09 07:51:15 +00:00
parent 2b7b1290a9
commit f288cddef8
4 changed files with 112 additions and 28 deletions

View File

@ -3,7 +3,7 @@ REPORT zabapgit LINE-SIZE 100.
* See http://www.abapgit.org
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
gc_abap_version TYPE string VALUE 'v1.15.7'. "#EC NOTEXT
gc_abap_version TYPE string VALUE 'v1.15.8'. "#EC NOTEXT
********************************************************************************
* The MIT License (MIT)

View File

@ -9,10 +9,18 @@ CLASS lcl_background DEFINITION FINAL.
RAISING lcx_exception.
PRIVATE SECTION.
CLASS-METHODS: push
IMPORTING io_repo TYPE REF TO lcl_repo_online
is_settings TYPE lcl_persistence_background=>ty_background
RAISING lcx_exception.
CLASS-METHODS:
push
IMPORTING io_repo TYPE REF TO lcl_repo_online
is_settings TYPE lcl_persistence_background=>ty_background
RAISING lcx_exception,
push_fixed
IMPORTING io_repo TYPE REF TO lcl_repo_online
is_settings TYPE lcl_persistence_background=>ty_background
RAISING lcx_exception,
push_auto
IMPORTING io_repo TYPE REF TO lcl_repo_online
RAISING lcx_exception.
ENDCLASS.
@ -20,43 +28,50 @@ CLASS lcl_background IMPLEMENTATION.
METHOD push.
DATA: ls_comment TYPE ty_comment,
ls_files TYPE ty_stage_files,
lo_stage TYPE REF TO lcl_stage.
FIELD-SYMBOLS: <ls_file> LIKE LINE OF ls_files-local.
ls_files = lcl_stage_logic=>get( io_repo ).
IF lines( ls_files-local ) = 0.
IF lines( lcl_stage_logic=>get( io_repo )-local ) = 0.
WRITE: / 'nothing to stage' ##NO_TEXT.
RETURN.
ENDIF.
CASE is_settings-amethod.
WHEN lcl_persistence_background=>c_amethod-fixed.
ls_comment-username = is_settings-aname.
ls_comment-email = is_settings-amail.
ls_comment-comment = 'abapGit background mode' ##NO_TEXT.
push_fixed( io_repo = io_repo
is_settings = is_settings ).
WHEN lcl_persistence_background=>c_amethod-auto.
* todo
* see https://github.com/larshp/abapGit/issues/245
ASSERT 0 = 1.
push_auto( io_repo ).
WHEN OTHERS.
* illegal value
ASSERT 0 = 1.
_raise 'unknown push method'.
ENDCASE.
ENDMETHOD.
METHOD push_fixed.
DATA: ls_comment TYPE ty_comment,
ls_files TYPE ty_stage_files,
lo_stage TYPE REF TO lcl_stage.
FIELD-SYMBOLS: <ls_local> LIKE LINE OF ls_files-local.
ls_files = lcl_stage_logic=>get( io_repo ).
ASSERT lines( ls_files-local ) > 0.
ls_comment-username = is_settings-aname.
ls_comment-email = is_settings-amail.
ls_comment-comment = 'abapGit background mode' ##NO_TEXT.
CREATE OBJECT lo_stage
EXPORTING
iv_branch_name = io_repo->get_branch_name( )
iv_branch_sha1 = io_repo->get_sha1_remote( ).
LOOP AT ls_files-local ASSIGNING <ls_file>.
WRITE: / 'stage', <ls_file>-file-path, <ls_file>-file-filename ##NO_TEXT.
lo_stage->add( iv_path = <ls_file>-file-path
iv_filename = <ls_file>-file-filename
iv_data = <ls_file>-file-data ).
LOOP AT ls_files-local ASSIGNING <ls_local>.
WRITE: / 'stage', <ls_local>-file-path, <ls_local>-file-filename ##NO_TEXT.
lo_stage->add( iv_path = <ls_local>-file-path
iv_filename = <ls_local>-file-filename
iv_data = <ls_local>-file-data ).
ENDLOOP.
io_repo->push( is_comment = ls_comment
@ -64,6 +79,57 @@ CLASS lcl_background IMPLEMENTATION.
ENDMETHOD.
METHOD push_auto.
DATA: ls_comment TYPE ty_comment,
ls_files TYPE ty_stage_files,
lo_stage TYPE REF TO lcl_stage.
FIELD-SYMBOLS: <ls_local> LIKE LINE OF ls_files-local.
ls_files = lcl_stage_logic=>get( io_repo ).
DO.
READ TABLE ls_files-local INDEX 1 ASSIGNING <ls_local>.
IF sy-subrc <> 0.
EXIT.
ENDIF.
CLEAR ls_comment.
ls_comment-username = lcl_objects=>changed_by( <ls_local>-item ).
ls_comment-email = |{ ls_comment-username }@localhost|.
ls_comment-comment = 'abapGit background mode' ##NO_TEXT.
CREATE OBJECT lo_stage
EXPORTING
iv_branch_name = io_repo->get_branch_name( )
iv_branch_sha1 = io_repo->get_sha1_remote( ).
LOOP AT ls_files-local ASSIGNING <ls_local>.
IF lcl_objects=>changed_by( <ls_local>-item ) = ls_comment-username.
WRITE: / 'stage',
ls_comment-username,
<ls_local>-file-path,
<ls_local>-file-filename ##NO_TEXT.
lo_stage->add( iv_path = <ls_local>-file-path
iv_filename = <ls_local>-file-filename
iv_data = <ls_local>-file-data ).
ENDIF.
ENDLOOP.
io_repo->push( is_comment = ls_comment
io_stage = lo_stage ).
ls_files = lcl_stage_logic=>get( io_repo ).
ENDDO.
ENDMETHOD.
METHOD run.
DATA: lo_per TYPE REF TO lcl_persistence_background,

View File

@ -279,12 +279,25 @@ CLASS lcl_objects IMPLEMENTATION.
DATA: li_obj TYPE REF TO lif_object.
li_obj = create_object( is_item = is_item
li_obj = create_object( is_item = is_item
iv_language = gc_english ).
li_obj->jump( ).
ENDMETHOD. "jump
METHOD changed_by.
DATA: li_obj TYPE REF TO lif_object.
li_obj = create_object( is_item = is_item
iv_language = gc_english ).
rv_user = li_obj->changed_by( ).
ENDMETHOD.
METHOD delete.
DATA: ls_item TYPE ty_item,

View File

@ -1424,6 +1424,11 @@ CLASS lcl_objects DEFINITION FINAL.
IMPORTING is_item TYPE ty_item
RAISING lcx_exception.
CLASS-METHODS changed_by
IMPORTING is_item TYPE ty_item
RETURNING VALUE(rv_user) TYPE xubname
RAISING lcx_exception.
CLASS-METHODS is_supported
IMPORTING is_item TYPE ty_item
RETURNING VALUE(rv_bool) TYPE abap_bool.