file sha1 at local checksums #407

This commit is contained in:
sbcgua 2016-11-06 13:52:51 +02:00
parent 85ecc3936a
commit 02a0014967
6 changed files with 31 additions and 10 deletions

View File

@ -8,13 +8,18 @@ TYPES: ty_type TYPE c LENGTH 6,
ty_bitbyte TYPE c LENGTH 8,
ty_sha1 TYPE c LENGTH 40.
TYPES: BEGIN OF ty_file,
TYPES: BEGIN OF ty_file_signature,
path TYPE string,
filename TYPE string,
data TYPE xstring,
sha1 TYPE ty_sha1,
END OF ty_file_signature.
TYPES: BEGIN OF ty_file.
INCLUDE TYPE ty_file_signature.
TYPES: data TYPE xstring,
END OF ty_file.
TYPES: ty_files_tt TYPE STANDARD TABLE OF ty_file WITH DEFAULT KEY.
TYPES: ty_file_signatures_tt TYPE STANDARD TABLE OF ty_file_signature WITH DEFAULT KEY.
TYPES: ty_string_tt TYPE STANDARD TABLE OF string WITH DEFAULT KEY.
TYPES: tt_w3urls TYPE STANDARD TABLE OF w3url WITH DEFAULT KEY.

View File

@ -22,7 +22,7 @@ CLASS lcl_objects IMPLEMENTATION.
<ls_result> LIKE LINE OF ct_results.
lt_before = io_repo->get_local_checksums( ).
lt_before = io_repo->get_local_checksums( ).
lt_current = io_repo->build_local_checksums( ).
LOOP AT ct_results ASSIGNING <ls_result>.

View File

@ -91,8 +91,9 @@ CLASS lcl_persistence_repo DEFINITION FINAL.
PUBLIC SECTION.
TYPES: BEGIN OF ty_local_checksum,
item TYPE ty_item,
sha1 TYPE ty_sha1,
item TYPE ty_item,
sha1 TYPE ty_sha1,
files TYPE ty_file_signatures_tt,
END OF ty_local_checksum.
TYPES: ty_local_checksum_tt TYPE STANDARD TABLE OF ty_local_checksum WITH DEFAULT KEY.

View File

@ -44,6 +44,8 @@ CLASS lcl_repo DEFINITION ABSTRACT FRIENDS lcl_repo_srv.
build_local_checksums
RETURNING VALUE(rt_checksums) TYPE lcl_persistence_repo=>ty_local_checksum_tt
RAISING lcx_exception,
refresh_local_checksums
RAISING lcx_exception,
is_offline
RETURNING VALUE(rv_offline) TYPE abap_bool
RAISING lcx_exception.

View File

@ -332,26 +332,30 @@ CLASS lcl_repo IMPLEMENTATION.
METHOD build_local_checksums.
DATA: lv_xstring TYPE xstring,
lt_local TYPE ty_files_item_tt.
lt_local TYPE SORTED TABLE OF ty_file_item WITH NON-UNIQUE KEY item.
FIELD-SYMBOLS: <ls_item> LIKE LINE OF lt_local,
<ls_checksum> LIKE LINE OF rt_checksums,
<ls_file_sig> LIKE LINE OF <ls_checksum>-files,
<ls_local> LIKE LINE OF lt_local.
lt_local = get_files_local( ).
DELETE lt_local WHERE item IS INITIAL.
LOOP AT lt_local ASSIGNING <ls_item> WHERE NOT item IS INITIAL.
LOOP AT lt_local ASSIGNING <ls_item>.
CLEAR lv_xstring.
APPEND INITIAL LINE TO rt_checksums ASSIGNING <ls_checksum>.
LOOP AT lt_local ASSIGNING <ls_local> WHERE item = <ls_item>-item.
CONCATENATE lv_xstring <ls_local>-file-data INTO lv_xstring IN BYTE MODE.
APPEND INITIAL LINE TO <ls_checksum>-files ASSIGNING <ls_file_sig>.
MOVE-CORRESPONDING <ls_local>-file TO <ls_file_sig>.
ENDLOOP.
APPEND INITIAL LINE TO rt_checksums ASSIGNING <ls_checksum>.
<ls_checksum>-item = <ls_item>-item.
ASSERT NOT lv_xstring IS INITIAL.
<ls_checksum>-item = <ls_item>-item.
<ls_checksum>-sha1 = lcl_hash=>sha1_raw( lv_xstring ).
DELETE lt_local WHERE item = <ls_item>-item.
@ -360,6 +364,10 @@ CLASS lcl_repo IMPLEMENTATION.
ENDMETHOD.
METHOD refresh_local_checksums.
set( it_checksums = build_local_checksums( ) ).
ENDMETHOD. "refresh_local_checksums
METHOD deserialize.
IF mo_dot_abapgit IS INITIAL.

View File

@ -320,6 +320,9 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
WHEN c_actions-toggle_changes. " Toggle changes only view
mv_changes_only = lcl_app=>user( )->toggle_changes_only( ).
ev_state = gc_event_state-re_render.
WHEN 'update_checksums'.
mo_repo->refresh_local_checksums( ).
ev_state = gc_event_state-re_render.
ENDCASE.
ENDMETHOD. "lif_gui_page~on_event
@ -468,6 +471,8 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
iv_act = |{ gc_action-repo_remote_change }?{ lv_key }| ).
lo_tb_advanced->add( iv_txt = 'Make off-line'
iv_act = |{ gc_action-repo_remote_detach }?{ lv_key }| ).
lo_tb_advanced->add( iv_txt = 'Update local checksums'
iv_act = |update_checksums| ).
ELSE.
lo_tb_advanced->add( iv_txt = 'Make on-line'
iv_act = |{ gc_action-repo_remote_attach }?{ lv_key }| ).