mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
file state refactoring
This commit is contained in:
parent
02a0014967
commit
d36467dd93
|
@ -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',
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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">■</span>'.
|
||||
WHEN 'U'. "Unchanged
|
||||
|
@ -583,7 +585,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
|
|||
rv_html = rv_html && '<span class="none">■</span>'.
|
||||
ENDCASE.
|
||||
|
||||
CASE iv_state+1(1). " Remote
|
||||
CASE iv_r. " Remote
|
||||
WHEN 'C'. "Changed
|
||||
rv_html = rv_html && '<span class="changed">■</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> </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> </div>| ).
|
||||
* ENDIF.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user