file state refactoring

This commit is contained in:
sbcgua 2016-11-06 18:42:18 +02:00
parent 02a0014967
commit d36467dd93
4 changed files with 96 additions and 81 deletions

View File

@ -59,7 +59,8 @@ TYPES: BEGIN OF ty_repo_file,
path TYPE string,
filename TYPE string,
is_changed TYPE abap_bool,
new TYPE char1,
rstate TYPE char1,
lstate TYPE char1,
END OF ty_repo_file.
TYPES tt_repo_files TYPE STANDARD TABLE OF ty_repo_file WITH DEFAULT KEY.
@ -97,20 +98,23 @@ TYPES: ty_tadir_tt TYPE STANDARD TABLE OF ty_tadir WITH DEFAULT KEY.
TYPES: BEGIN OF ty_result,
obj_type TYPE tadir-object,
obj_name TYPE tadir-obj_name,
match TYPE sap_bool,
path TYPE string,
filename TYPE string,
package TYPE devclass,
path TYPE string,
new TYPE char1,
match TYPE sap_bool,
rstate TYPE char1,
lstate TYPE char1,
END OF ty_result.
TYPES: ty_results_tt TYPE STANDARD TABLE OF ty_result WITH DEFAULT KEY.
TYPES: ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY.
CONSTANTS: BEGIN OF gc_new,
local TYPE char1 VALUE 'L',
remote TYPE char1 VALUE 'R',
END OF gc_new.
CONSTANTS: BEGIN OF gc_state, " https://git-scm.com/docs/git-status
unchanged TYPE char1 VALUE '',
added TYPE char1 VALUE 'A',
modified TYPE char1 VALUE 'M',
deleted TYPE char1 VALUE 'D', "For future use
END OF gc_state.
CONSTANTS: BEGIN OF gc_chmod,
file TYPE ty_chmod VALUE '100644',

View File

@ -22,16 +22,23 @@ CLASS lcl_file_status DEFINITION FINAL
CLASS-METHODS compare_files
IMPORTING it_repo TYPE ty_files_tt
is_gen TYPE ty_file
is_file TYPE ty_file
RETURNING VALUE(rv_match) TYPE sap_bool.
CLASS-METHODS calculate_status
CLASS-METHODS calculate_status_old
IMPORTING it_local TYPE ty_files_item_tt
it_remote TYPE ty_files_tt
it_tadir TYPE ty_tadir_tt
iv_starting_folder TYPE string
RETURNING VALUE(rt_results) TYPE ty_results_tt.
CLASS-METHODS calculate_status_new
IMPORTING it_local TYPE ty_files_item_tt
it_remote TYPE ty_files_tt
it_cur_state TYPE ty_file_signatures_tt
iv_starting_folder TYPE string
RETURNING VALUE(rt_results) TYPE ty_results_tt.
ENDCLASS. "lcl_file_status DEFINITION
*----------------------------------------------------------------------*
@ -42,9 +49,9 @@ CLASS lcl_file_status IMPLEMENTATION.
METHOD compare_files.
READ TABLE it_repo WITH KEY
path = is_gen-path
filename = is_gen-filename
sha1 = is_gen-sha1
path = is_file-path
filename = is_file-filename
sha1 = is_file-sha1
TRANSPORTING NO FIELDS.
rv_match = boolc( sy-subrc = 0 ).
@ -66,7 +73,7 @@ CLASS lcl_file_status IMPLEMENTATION.
lo_dot_abapgit = io_repo->get_dot_abapgit( ).
lt_tadir = lcl_tadir=>read( io_repo->get_package( ) ).
rt_results = calculate_status(
rt_results = calculate_status_old(
it_local = lt_local
it_remote = lt_remote
it_tadir = lt_tadir
@ -81,7 +88,7 @@ CLASS lcl_file_status IMPLEMENTATION.
" of it will be implemented
IF <ls_result>-path = gc_root_dir AND <ls_result>-filename = gc_dot_abapgit.
<ls_result>-match = abap_true.
<ls_result>-new = space.
CLEAR: <ls_result>-lstate, <ls_result>-rstate.
CONTINUE.
ENDIF.
@ -100,7 +107,10 @@ CLASS lcl_file_status IMPLEMENTATION.
ENDMETHOD. "status
METHOD calculate_status.
METHOD calculate_status_new.
ENDMETHOD. "calculate_status_new.
METHOD calculate_status_old.
DATA: lv_pre TYPE tadir-obj_name,
lt_files TYPE ty_files_tt,
@ -114,15 +124,12 @@ CLASS lcl_file_status IMPLEMENTATION.
<ls_tadir> LIKE LINE OF it_tadir,
<ls_result> LIKE LINE OF rt_results,
<ls_local> LIKE LINE OF it_local,
<ls_gen> LIKE LINE OF lt_files.
<ls_file> LIKE LINE OF lt_files.
LOOP AT it_remote ASSIGNING <ls_remote>.
lcl_progress=>show( iv_key = 'Status'
iv_current = sy-tabix
iv_total = lines( it_remote )
iv_text = <ls_remote>-filename ) ##NO_TEXT.
" Guess object type and name
SPLIT <ls_remote>-filename AT '.' INTO lv_pre lv_type lv_ext.
TRANSLATE lv_pre TO UPPER CASE.
TRANSLATE lv_type TO UPPER CASE.
@ -131,7 +138,7 @@ CLASS lcl_file_status IMPLEMENTATION.
CONTINUE. " current loop
ENDIF.
* handle namespaces
" handle namespaces
REPLACE ALL OCCURRENCES OF '#' IN lv_pre WITH '/'.
CLEAR ls_result.
@ -142,24 +149,25 @@ CLASS lcl_file_status IMPLEMENTATION.
ls_item-obj_type = lv_type.
ls_item-obj_name = lv_pre.
" Add corresponding local files
CLEAR lt_files.
LOOP AT it_local ASSIGNING <ls_local>
WHERE item-obj_type = ls_item-obj_type AND item-obj_name = ls_item-obj_name.
APPEND <ls_local>-file TO lt_files.
ENDLOOP.
" item does not exist locally
IF lt_files[] IS INITIAL.
* item does not exist locally
ls_result-filename = <ls_remote>-filename.
ls_result-new = gc_new-remote.
ls_result-rstate = gc_state-added.
APPEND ls_result TO rt_results.
CONTINUE. " current loop
ENDIF.
LOOP AT lt_files ASSIGNING <ls_gen>.
ls_result-filename = <ls_gen>-filename.
LOOP AT lt_files ASSIGNING <ls_file>.
ls_result-filename = <ls_file>-filename.
ls_result-match = compare_files( it_repo = it_remote
is_gen = <ls_gen> ).
is_file = <ls_file> ).
APPEND ls_result TO rt_results.
ENDLOOP.
ENDLOOP.
@ -171,7 +179,7 @@ CLASS lcl_file_status IMPLEMENTATION.
IF sy-subrc <> 0.
CLEAR ls_result.
ls_result-match = abap_false.
ls_result-new = gc_new-remote.
ls_result-rstate = gc_state-added.
ls_result-filename = <ls_remote>-filename.
APPEND ls_result TO rt_results.
ENDIF.
@ -202,7 +210,7 @@ CLASS lcl_file_status IMPLEMENTATION.
ls_result-match = abap_false.
ls_result-obj_type = <ls_tadir>-object.
ls_result-obj_name = <ls_tadir>-obj_name.
ls_result-new = gc_new-local.
ls_result-lstate = gc_state-added.
APPEND ls_result TO rt_results.
ENDIF.
@ -211,8 +219,8 @@ CLASS lcl_file_status IMPLEMENTATION.
AND obj_name = <ls_tadir>-obj_name
AND path IS INITIAL.
* new file added locally to existing object
<ls_result>-path = iv_starting_folder && <ls_tadir>-path.
<ls_result>-new = gc_new-local.
<ls_result>-path = iv_starting_folder && <ls_tadir>-path.
<ls_result>-lstate = gc_state-added.
ENDLOOP.
ENDLOOP.
@ -237,6 +245,6 @@ CLASS lcl_file_status IMPLEMENTATION.
DELETE ADJACENT DUPLICATES FROM rt_results
COMPARING obj_type obj_name filename.
ENDMETHOD. "calculate_status
ENDMETHOD. "calculate_status_old
ENDCLASS. "lcl_file_status IMPLEMENTATION

View File

@ -1776,6 +1776,13 @@ CLASS ltcl_file_status IMPLEMENTATION.
<remote>-sha1 = &2.
END-OF-DEFINITION.
DEFINE _append_state.
APPEND INITIAL LINE TO lt_state ASSIGNING <state>.
<remote>-path = '/'.
<remote>-filename = &1.
<remote>-sha1 = &2.
END-OF-DEFINITION.
DEFINE _append_tadir.
APPEND INITIAL LINE TO lt_tadir ASSIGNING <tadir>.
<tadir>-object = &1.
@ -1788,9 +1795,10 @@ CLASS ltcl_file_status IMPLEMENTATION.
<result>-obj_type = &1.
<result>-obj_name = &2.
<result>-match = &3.
<result>-new = &4.
<result>-package = &5.
<result>-filename = &6.
<result>-lstate = &4.
<result>-rstate = &5.
<result>-package = &6.
<result>-filename = &7.
<result>-path = '/'.
END-OF-DEFINITION.
@ -1798,6 +1806,7 @@ CLASS ltcl_file_status IMPLEMENTATION.
DATA: lt_local TYPE ty_files_item_tt,
lt_remote TYPE ty_files_tt,
lt_state TYPE ty_file_signatures_tt,
lt_tadir TYPE ty_tadir_tt,
lt_results TYPE ty_results_tt,
lt_results_exp TYPE ty_results_tt.
@ -1805,44 +1814,58 @@ CLASS ltcl_file_status IMPLEMENTATION.
FIELD-SYMBOLS: <local> LIKE LINE OF lt_local,
<remote> LIKE LINE OF lt_remote,
<result> LIKE LINE OF lt_results,
<state> LIKE LINE OF lt_state,
<tadir> LIKE LINE OF lt_tadir.
" TYPE NAME FILE SHA1
"STATE FILE SHA1
_append_state 'zdoma1.doma.xml' 'D1'.
_append_state 'zdoma2.doma.xml' 'D2'.
_append_state 'zdoma3.doma.xml' 'D3'.
_append_state 'zclass1.clas.xml' 'C1_F1'.
_append_state 'zclass1.clas.testclasses.abap' 'C1_F3'.
_append_state 'zdoma5.doma.xml' 'D5'.
_append_state 'zdoma6.doma.xml' 'D6'.
"LOCAL TYPE NAME FILE SHA1
_append_local 'DOMA' 'ZDOMA1' 'zdoma1.doma.xml' 'D1'.
_append_local 'DOMA' 'ZDOMA2' 'zdoma2.doma.xml' 'D2_CHANGED'.
_append_local 'DOMA' 'ZDOMA2' 'zdoma2.doma.xml' 'D2_CHANGED_L'.
_append_local 'DOMA' 'ZDOMA3' 'zdoma3.doma.xml' 'D3'.
_append_local 'CLAS' 'ZCLASS1' 'zclass1.clas.xml' 'C1_F1'.
_append_local 'CLAS' 'ZCLASS1' 'zclass1.clas.testclasses.abap' 'C1_F3'.
_append_local 'DOMA' 'ZDOMA5' 'zdoma5.doma.xml' 'D5'.
_append_local 'DOMA' 'ZDOMA6' 'zdoma6.doma.xml' 'D6_CHANGED_L'.
" FILE SHA1
"REMOTE FILE SHA1
_append_remote 'zdoma1.doma.xml' 'D1'.
_append_remote 'zdoma2.doma.xml' 'D2'.
_append_remote 'zdoma3.doma.xml' 'D3_CHANGED'.
_append_remote 'zdoma3.doma.xml' 'D3_CHANGED_R'.
_append_remote 'zclass1.clas.xml' 'C1_F1'.
_append_remote 'zclass1.clas.abap' 'C1_F2'.
_append_remote 'zdoma4.doma.xml' 'D4'.
_append_remote 'zdoma6.doma.xml' 'D6_CHANGED_R'.
_append_remote 'textfile.txt' 'T1'.
" TYPE NAME
"TADIR TYPE NAME
_append_tadir 'DOMA' 'ZDOMA1'.
_append_tadir 'DOMA' 'ZDOMA2'.
_append_tadir 'DOMA' 'ZDOMA3'.
_append_tadir 'CLAS' 'ZCLASS1'.
_append_tadir 'DOMA' 'ZDOMA5'.
_append_tadir 'DOMA' 'ZDOMA6'.
" TYPE NAME MATCH NEW PKG FILE
_append_result '' '' '' 'R' '' 'textfile.txt'.
_append_result 'CLAS' 'ZCLASS1' '' 'R' '$Z$' 'zclass1.clas.abap'.
_append_result 'CLAS' 'ZCLASS1' '' 'L' '$Z$' 'zclass1.clas.testclasses.abap'.
_append_result 'CLAS' 'ZCLASS1' 'X' '' '$Z$' 'zclass1.clas.xml'.
_append_result 'DOMA' 'ZDOMA1' 'X' '' '$Z$' 'zdoma1.doma.xml'.
_append_result 'DOMA' 'ZDOMA2' '' '' '$Z$' 'zdoma2.doma.xml'.
_append_result 'DOMA' 'ZDOMA3' '' '' '$Z$' 'zdoma3.doma.xml'.
_append_result 'DOMA' 'ZDOMA4' '' 'R' '$Z$' 'zdoma4.doma.xml'.
_append_result 'DOMA' 'ZDOMA5' '' 'L' '$Z$' 'zdoma5.doma.xml'.
"EXP RESULT TYPE NAME MATCH LST RST PKG FILE
_append_result '' '' '' '' 'A' '' 'textfile.txt'.
_append_result 'CLAS' 'ZCLASS1' '' 'R' 'L' '$Z$' 'zclass1.clas.abap'.
_append_result 'CLAS' 'ZCLASS1' '' 'L' 'R' '$Z$' 'zclass1.clas.testclasses.abap'.
_append_result 'CLAS' 'ZCLASS1' 'X' '' '' '$Z$' 'zclass1.clas.xml'.
_append_result 'DOMA' 'ZDOMA1' 'X' '' '' '$Z$' 'zdoma1.doma.xml'.
_append_result 'DOMA' 'ZDOMA2' '' 'M' '' '$Z$' 'zdoma2.doma.xml'.
_append_result 'DOMA' 'ZDOMA3' '' '' 'M' '$Z$' 'zdoma3.doma.xml'.
_append_result 'DOMA' 'ZDOMA4' '' '' 'A' '$Z$' 'zdoma4.doma.xml'.
_append_result 'DOMA' 'ZDOMA5' '' 'A' '' '$Z$' 'zdoma5.doma.xml'.
_append_result 'DOMA' 'ZDOMA6' '' 'M' 'M' '$Z$' 'zdoma6.doma.xml'.
lt_results = lcl_file_status=>calculate_status(
lt_results = lcl_file_status=>calculate_status_old(
it_local = lt_local
it_remote = lt_remote
it_tadir = lt_tadir

View File

@ -195,11 +195,12 @@ CLASS lcl_repo_content_browser IMPLEMENTATION.
IF <status>-filename IS NOT INITIAL.
ls_file-path = <status>-path.
ls_file-filename = <status>-filename.
ls_file-is_changed = boolc( <status>-match = abap_false OR <status>-new <> space ).
ls_file-new = <status>-new.
ls_file-is_changed = boolc( <status>-match = abap_false ). " TODO refactor
ls_file-rstate = <status>-rstate.
ls_file-lstate = <status>-lstate.
APPEND ls_file TO <ls_repo_item>-files.
IF ls_file-is_changed = abap_true OR ls_file-new IS NOT INITIAL.
IF ls_file-is_changed = abap_true.
<ls_repo_item>-sortkey = c_sortkey-changed. " Changed files
<ls_repo_item>-changes = <ls_repo_item>-changes + 1.
ENDIF.
@ -270,7 +271,8 @@ CLASS lcl_gui_view_repo_content DEFINITION FINAL INHERITING FROM lcl_gui_page_su
IMPORTING is_item TYPE lcl_repo_content_browser=>ty_repo_item
RETURNING VALUE(rv_html) TYPE string,
render_state
IMPORTING iv_state TYPE char2
IMPORTING iv_l TYPE char1
iv_r TYPE char1
RETURNING VALUE(rv_html) TYPE string,
render_empty_package
RETURNING VALUE(rv_html) TYPE string,
@ -574,7 +576,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
rv_html = '<span class="state-block">'.
CASE iv_state(1). " Local
CASE iv_l. " Local
WHEN 'C'. "Changed
rv_html = rv_html && '<span class="changed">&#x25A0;</span>'.
WHEN 'U'. "Unchanged
@ -583,7 +585,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
rv_html = rv_html && '<span class="none">&#x25A0;</span>'.
ENDCASE.
CASE iv_state+1(1). " Remote
CASE iv_r. " Remote
WHEN 'C'. "Changed
rv_html = rv_html && '<span class="changed">&#x25A0;</span>'.
WHEN 'U'. "Unchanged
@ -677,7 +679,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
ro_html->add_anchor(
iv_txt = |diff|
iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ).
ro_html->add( render_state( 'C_' ) ).
ro_html->add( render_state( iv_l = 'C' iv_r = '_' ) ).
ro_html->add( '</div>' ).
ELSEIF is_item-changes > 0.
@ -709,34 +711,12 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
iv_txt = |diff|
iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ).
CASE ls_file-new.
WHEN gc_new-remote.
ro_html->add( render_state( '_C' ) ).
WHEN gc_new-local.
ro_html->add( render_state( 'C_' ) ).
WHEN OTHERS.
ro_html->add( render_state( 'CC' ) ).
ENDCASE.
ro_html->add( render_state( iv_l = ls_file-lstate iv_r = ls_file-rstate ) ).
ro_html->add( '</div>' ).
ELSE.
ro_html->add( |<div>&nbsp;</div>| ).
ENDIF.
* IF ls_file-new = gc_new-remote.
* ro_html->add( '<div class="grey">new @remote</div>' ).
* ELSEIF ls_file-new = gc_new-local.
* ro_html->add( '<div class="grey">new @local</div>' ).
* ELSEIF ls_file-is_changed = abap_true.
* ro_html->add( '<div>' ).
* ro_html->add_anchor(
* iv_txt = 'diff'
* iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ).
* ro_html->add( '</div>' ).
* ELSE.
* ro_html->add( |<div>&nbsp;</div>| ).
* ENDIF.
ENDLOOP.
ENDIF.