diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index 075f6415e..914c242e9 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -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. diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap index 0f64bbb3c..ee79b7b5a 100644 --- a/src/zabapgit_objects_impl.prog.abap +++ b/src/zabapgit_objects_impl.prog.abap @@ -22,7 +22,7 @@ CLASS lcl_objects IMPLEMENTATION. 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 . diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index 9a4bf77c5..7e987ddff 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -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. diff --git a/src/zabapgit_repo.prog.abap b/src/zabapgit_repo.prog.abap index 6dee4476e..8d680bee6 100644 --- a/src/zabapgit_repo.prog.abap +++ b/src/zabapgit_repo.prog.abap @@ -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. diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 9b8cebb80..052f5725e 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -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: LIKE LINE OF lt_local, LIKE LINE OF rt_checksums, + LIKE LINE OF -files, LIKE LINE OF lt_local. - lt_local = get_files_local( ). + DELETE lt_local WHERE item IS INITIAL. - LOOP AT lt_local ASSIGNING WHERE NOT item IS INITIAL. + LOOP AT lt_local ASSIGNING . CLEAR lv_xstring. + APPEND INITIAL LINE TO rt_checksums ASSIGNING . LOOP AT lt_local ASSIGNING WHERE item = -item. CONCATENATE lv_xstring -file-data INTO lv_xstring IN BYTE MODE. + APPEND INITIAL LINE TO -files ASSIGNING . + MOVE-CORRESPONDING -file TO . ENDLOOP. - APPEND INITIAL LINE TO rt_checksums ASSIGNING . - -item = -item. ASSERT NOT lv_xstring IS INITIAL. + + -item = -item. -sha1 = lcl_hash=>sha1_raw( lv_xstring ). DELETE lt_local WHERE 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. diff --git a/src/zabapgit_view_repo.prog.abap b/src/zabapgit_view_repo.prog.abap index a25d2ed13..bf89e3f4c 100644 --- a/src/zabapgit_view_repo.prog.abap +++ b/src/zabapgit_view_repo.prog.abap @@ -312,6 +312,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 @@ -460,6 +463,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 }| ).