abapGit/src/zabapgit_stage.prog.abap
2016-09-23 22:12:36 +03:00

196 lines
5.3 KiB
ABAP

*&---------------------------------------------------------------------*
*& Include ZABAPGIT_STAGE
*&---------------------------------------------------------------------*
"! keep the list of staged files, independent of repository and branch
CLASS lcl_stage DEFINITION FINAL.
PUBLIC SECTION.
TYPES: ty_method TYPE c LENGTH 1.
CONSTANTS: BEGIN OF c_method,
add TYPE ty_method VALUE 'A',
rm TYPE ty_method VALUE 'R',
ignore TYPE ty_method VALUE 'I',
skip TYPE ty_method VALUE '?',
END OF c_method.
TYPES: BEGIN OF ty_stage,
file TYPE ty_file,
method TYPE ty_method,
END OF ty_stage.
TYPES: ty_stage_tt TYPE SORTED TABLE OF ty_stage
WITH UNIQUE KEY file-path file-filename.
CLASS-METHODS method_description
IMPORTING iv_method TYPE ty_method
RETURNING VALUE(rv_description) TYPE string
RAISING lcx_exception.
METHODS:
constructor
IMPORTING iv_branch_name TYPE string
iv_branch_sha1 TYPE ty_sha1
iv_merge_source TYPE ty_sha1 OPTIONAL,
get_branch_name
RETURNING VALUE(rv_branch) TYPE string,
get_branch_sha1
RETURNING VALUE(rv_branch) TYPE ty_sha1,
add
IMPORTING iv_path TYPE ty_file-path
iv_filename TYPE ty_file-filename
iv_data TYPE xstring
RAISING lcx_exception,
reset
IMPORTING iv_path TYPE ty_file-path
iv_filename TYPE ty_file-filename
RAISING lcx_exception,
reset_all
RAISING lcx_exception,
rm
IMPORTING iv_path TYPE ty_file-path
iv_filename TYPE ty_file-filename
RAISING lcx_exception,
ignore
IMPORTING iv_path TYPE ty_file-path
iv_filename TYPE ty_file-filename
RAISING lcx_exception,
lookup
IMPORTING iv_path TYPE ty_file-path
iv_filename TYPE ty_file-filename
RETURNING VALUE(rv_method) TYPE ty_method,
get_merge_source
RETURNING VALUE(rv_source) TYPE ty_sha1,
count
RETURNING VALUE(rv_count) TYPE i,
get_all
RETURNING VALUE(rt_stage) TYPE ty_stage_tt.
PRIVATE SECTION.
DATA: mt_stage TYPE ty_stage_tt,
mv_branch_name TYPE string,
mv_branch_sha1 TYPE ty_sha1,
mv_merge_source TYPE ty_sha1.
METHODS:
append
IMPORTING iv_path TYPE ty_file-path
iv_filename TYPE ty_file-filename
iv_method TYPE ty_method
iv_data TYPE xstring OPTIONAL
RAISING lcx_exception.
ENDCLASS. "lcl_stage DEFINITION
CLASS lcl_stage IMPLEMENTATION.
METHOD constructor.
mv_branch_name = iv_branch_name.
mv_branch_sha1 = iv_branch_sha1.
mv_merge_source = iv_merge_source.
ENDMETHOD.
METHOD get_branch_name.
rv_branch = mv_branch_name.
ENDMETHOD.
METHOD get_merge_source.
rv_source = mv_merge_source.
ENDMETHOD.
METHOD get_branch_sha1.
rv_branch = mv_branch_sha1.
ENDMETHOD.
METHOD lookup.
DATA ls_stage LIKE LINE OF mt_stage.
READ TABLE mt_stage INTO ls_stage
WITH KEY file-path = iv_path
file-filename = iv_filename.
IF sy-subrc = 0.
rv_method = ls_stage-method.
ENDIF.
ENDMETHOD. "lookup
METHOD get_all.
rt_stage = mt_stage.
ENDMETHOD. "get_all
METHOD append.
DATA: ls_stage LIKE LINE OF mt_stage.
FIELD-SYMBOLS: <ls_stage> LIKE LINE OF mt_stage.
READ TABLE mt_stage WITH KEY
file-path = iv_path
file-filename = iv_filename
ASSIGNING <ls_stage>.
IF sy-subrc = 0.
<ls_stage>-file-data = iv_data.
<ls_stage>-method = iv_method.
ELSE.
ls_stage-file-path = iv_path.
ls_stage-file-filename = iv_filename.
ls_stage-file-data = iv_data.
ls_stage-method = iv_method.
INSERT ls_stage INTO TABLE mt_stage.
ENDIF.
ENDMETHOD. "append
METHOD method_description.
CASE iv_method.
WHEN c_method-add.
rv_description = 'add'.
WHEN c_method-rm.
rv_description = 'rm'.
WHEN c_method-ignore.
rv_description = 'ignore' ##NO_TEXT.
WHEN OTHERS.
lcx_exception=>raise( 'unknown staging method type' ).
ENDCASE.
ENDMETHOD. "method_description
METHOD add.
append( iv_path = iv_path
iv_filename = iv_filename
iv_method = c_method-add
iv_data = iv_data ).
ENDMETHOD. "add
METHOD reset.
DELETE mt_stage WHERE file-path = iv_path
AND file-filename = iv_filename.
ASSERT sy-subrc = 0.
ENDMETHOD. "reset
METHOD reset_all.
CLEAR mt_stage.
ENDMETHOD. "reset_all
METHOD rm.
append( iv_path = iv_path
iv_filename = iv_filename
iv_method = c_method-rm ).
ENDMETHOD. "rm
METHOD ignore.
append( iv_path = iv_path
iv_filename = iv_filename
iv_method = c_method-ignore ).
ENDMETHOD. "ignore
METHOD count.
rv_count = lines( mt_stage ).
ENDMETHOD. "count
ENDCLASS.