From 762dc7bc8975b3dcdaa81a7f6d2c4ce74e84dead Mon Sep 17 00:00:00 2001 From: sbcgua Date: Thu, 6 Oct 2016 08:24:49 +0300 Subject: [PATCH] serialization caching, basic objects #366 --- src/zabapgit_file_status.prog.abap | 25 ++++---- src/zabapgit_object_acid.prog.abap | 4 ++ src/zabapgit_object_auth.prog.abap | 4 ++ src/zabapgit_object_clas.prog.abap | 31 ++++++++++ src/zabapgit_object_doct.prog.abap | 4 ++ src/zabapgit_object_docv.prog.abap | 4 ++ src/zabapgit_object_doma.prog.abap | 16 +++++ src/zabapgit_object_dtel.prog.abap | 16 +++++ src/zabapgit_object_enho.prog.abap | 4 ++ src/zabapgit_object_enhs.prog.abap | 4 ++ src/zabapgit_object_enqu.prog.abap | 16 +++++ src/zabapgit_object_ensc.prog.abap | 4 ++ src/zabapgit_object_fugr.prog.abap | 32 ++++++++++ src/zabapgit_object_iarp.prog.abap | 4 ++ src/zabapgit_object_iasp.prog.abap | 4 ++ src/zabapgit_object_iatu.prog.abap | 4 ++ src/zabapgit_object_msag.prog.abap | 4 ++ src/zabapgit_object_nrob.prog.abap | 4 ++ src/zabapgit_object_para.prog.abap | 4 ++ src/zabapgit_object_pinf.prog.abap | 4 ++ src/zabapgit_object_prog.prog.abap | 8 +++ src/zabapgit_object_sfbf.prog.abap | 4 ++ src/zabapgit_object_sfbs.prog.abap | 4 ++ src/zabapgit_object_sfsw.prog.abap | 4 ++ src/zabapgit_object_shi3.prog.abap | 4 ++ src/zabapgit_object_shlp.prog.abap | 15 +++++ src/zabapgit_object_sicf.prog.abap | 4 ++ src/zabapgit_object_smim.prog.abap | 4 ++ src/zabapgit_object_splo.prog.abap | 4 ++ src/zabapgit_object_ssfo.prog.abap | 4 ++ src/zabapgit_object_ssst.prog.abap | 4 ++ src/zabapgit_object_susc.prog.abap | 4 ++ src/zabapgit_object_suso.prog.abap | 4 ++ src/zabapgit_object_tabl.prog.abap | 37 ++++++++++++ src/zabapgit_object_tobj.prog.abap | 4 ++ src/zabapgit_object_tran.prog.abap | 4 ++ src/zabapgit_object_ttyp.prog.abap | 15 +++++ src/zabapgit_object_type.prog.abap | 4 ++ src/zabapgit_object_vcls.prog.abap | 4 ++ src/zabapgit_object_view.prog.abap | 24 ++++++++ src/zabapgit_object_w3xx.prog.abap | 4 ++ src/zabapgit_object_wdya.prog.abap | 4 ++ src/zabapgit_object_wdyn.prog.abap | 4 ++ src/zabapgit_object_webi.prog.abap | 4 ++ src/zabapgit_object_xslt.prog.abap | 4 ++ src/zabapgit_objects.prog.abap | 93 ++++++++++++++++++++++++++++- src/zabapgit_objects_impl.prog.abap | 13 ++++ src/zabapgit_repo.prog.abap | 15 +++-- src/zabapgit_repo_impl.prog.abap | 57 ++++++++++++++---- 49 files changed, 519 insertions(+), 30 deletions(-) diff --git a/src/zabapgit_file_status.prog.abap b/src/zabapgit_file_status.prog.abap index 8ade9c97a..105c3b2dd 100644 --- a/src/zabapgit_file_status.prog.abap +++ b/src/zabapgit_file_status.prog.abap @@ -37,15 +37,12 @@ CLASS lcl_file_status IMPLEMENTATION. METHOD compare_files. READ TABLE it_repo WITH KEY - path = is_gen-path + path = is_gen-path filename = is_gen-filename - data = is_gen-data + sha1 = is_gen-sha1 TRANSPORTING NO FIELDS. - IF sy-subrc <> 0. - rv_match = abap_false. - ELSE. - rv_match = abap_true. - ENDIF. + + rv_match = boolc( sy-subrc = 0 ). ENDMETHOD. "compare_files @@ -70,7 +67,7 @@ CLASS lcl_file_status IMPLEMENTATION. lt_remote = io_repo->get_files_remote( ). - lt_local = io_repo->get_files_local( io_log ). + lt_local = io_repo->get_files_local( io_log ). LOOP AT lt_remote ASSIGNING . lcl_progress=>show( iv_key = 'Status' @@ -112,8 +109,8 @@ CLASS lcl_file_status IMPLEMENTATION. LOOP AT lt_files ASSIGNING . ls_result-filename = -filename. - ls_result-match = compare_files( it_repo = lt_remote - is_gen = ). + ls_result-match = compare_files( it_repo = lt_remote + is_gen = ). APPEND ls_result TO rt_results. ENDLOOP. ENDLOOP. @@ -124,7 +121,7 @@ CLASS lcl_file_status IMPLEMENTATION. TRANSPORTING NO FIELDS. IF sy-subrc <> 0. IF io_repo->get_dot_abapgit( )->is_ignored( - iv_path = -path + iv_path = -path iv_filename = -filename ) = abap_true. CONTINUE. ENDIF. @@ -149,7 +146,7 @@ CLASS lcl_file_status IMPLEMENTATION. LOOP AT lt_tadir ASSIGNING . READ TABLE rt_results WITH KEY obj_type = -object - obj_name = -obj_name + obj_name = -obj_name TRANSPORTING NO FIELDS. IF sy-subrc <> 0. ls_item-obj_type = -object. @@ -168,8 +165,8 @@ CLASS lcl_file_status IMPLEMENTATION. LOOP AT rt_results ASSIGNING WHERE obj_type = -object - AND obj_name = -obj_name - AND path IS INITIAL. + AND obj_name = -obj_name + AND path IS INITIAL. * new file added locally to existing object -path = io_repo->get_dot_abapgit( )->get_starting_folder( ) && -path. -new = gc_new-local. diff --git a/src/zabapgit_object_acid.prog.abap b/src/zabapgit_object_acid.prog.abap index a840bd035..10607a865 100644 --- a/src/zabapgit_object_acid.prog.abap +++ b/src/zabapgit_object_acid.prog.abap @@ -27,6 +27,10 @@ ENDCLASS. "lcl_object_acid DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_acid IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~get_metadata. rs_metadata = get_metadata( ). ENDMETHOD. "lif_object~get_metadata diff --git a/src/zabapgit_object_auth.prog.abap b/src/zabapgit_object_auth.prog.abap index de8abb6ff..b0a07c348 100644 --- a/src/zabapgit_object_auth.prog.abap +++ b/src/zabapgit_object_auth.prog.abap @@ -22,6 +22,10 @@ ENDCLASS. "lcl_object_auth DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_auth IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~get_metadata. rs_metadata = get_metadata( ). ENDMETHOD. "lif_object~get_metadata diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap index 899fc66e3..f34e54856 100644 --- a/src/zabapgit_object_clas.prog.abap +++ b/src/zabapgit_object_clas.prog.abap @@ -121,6 +121,37 @@ ENDCLASS. "lcl_object_intf DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_clas IMPLEMENTATION. + METHOD lif_object~has_changed_since. + + DATA: lv_clsname TYPE seoclsname, + lt_incl TYPE seoincl_t. + + FIELD-SYMBOLS LIKE LINE OF lt_incl. + + lv_clsname = ms_item-obj_name. + + CASE ms_item-obj_type. + WHEN 'CLAS'. + lt_incl = cl_oo_classname_service=>get_all_class_includes( lv_clsname ). + WHEN 'INTF'. + APPEND INITIAL LINE TO lt_incl ASSIGNING . + = cl_oo_classname_service=>get_interfacepool_name( lv_clsname ). + WHEN OTHERS. + lcx_exception=>raise( 'class delete, unknown type' ). + ENDCASE. + + LOOP AT lt_incl ASSIGNING . + rv_changed = check_prog_changed_since( + iv_program = + iv_timestamp = iv_timestamp + iv_skip_gui = abap_true ). + IF rv_changed = abap_true. + RETURN. + ENDIF. + ENDLOOP. + + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~get_metadata. rs_metadata = get_metadata( ). ENDMETHOD. "lif_object~get_metadata diff --git a/src/zabapgit_object_doct.prog.abap b/src/zabapgit_object_doct.prog.abap index 68d6a8a4d..93558019a 100644 --- a/src/zabapgit_object_doct.prog.abap +++ b/src/zabapgit_object_doct.prog.abap @@ -32,6 +32,10 @@ ENDCLASS. "lcl_object_msag DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_doct IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~get_metadata. rs_metadata = get_metadata( ). rs_metadata-delete_tadir = abap_true. diff --git a/src/zabapgit_object_docv.prog.abap b/src/zabapgit_object_docv.prog.abap index 3b17f0345..b5a316fba 100644 --- a/src/zabapgit_object_docv.prog.abap +++ b/src/zabapgit_object_docv.prog.abap @@ -31,6 +31,10 @@ ENDCLASS. "lcl_object_msag DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_docv IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = read( )-head-tdluser. ENDMETHOD. "lif_object~changed_by diff --git a/src/zabapgit_object_doma.prog.abap b/src/zabapgit_object_doma.prog.abap index cce6ddc68..470930905 100644 --- a/src/zabapgit_object_doma.prog.abap +++ b/src/zabapgit_object_doma.prog.abap @@ -22,6 +22,22 @@ ENDCLASS. "lcl_object_doma DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_doma IMPLEMENTATION. + METHOD lif_object~has_changed_since. + + DATA: lv_date TYPE dats, + lv_time TYPE tims, + lv_ts TYPE timestamp. + + SELECT SINGLE as4date as4time FROM dd01l + INTO (lv_date, lv_time) + WHERE domname = ms_item-obj_name + AND as4local = 'A' + AND as4vers = '0000'. + + object_check_timestamp lv_date lv_time. + + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. SELECT SINGLE as4user FROM dd01l INTO rv_user diff --git a/src/zabapgit_object_dtel.prog.abap b/src/zabapgit_object_dtel.prog.abap index 22f1f0baa..3ff6e942b 100644 --- a/src/zabapgit_object_dtel.prog.abap +++ b/src/zabapgit_object_dtel.prog.abap @@ -22,6 +22,22 @@ ENDCLASS. "lcl_object_dtel DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_dtel IMPLEMENTATION. + METHOD lif_object~has_changed_since. + + DATA: lv_date TYPE dats, + lv_time TYPE tims, + lv_ts TYPE timestamp. + + SELECT SINGLE as4date as4time FROM dd04l + INTO (lv_date, lv_time) + WHERE rollname = ms_item-obj_name + AND as4local = 'A' + AND as4vers = '0000'. + + object_check_timestamp lv_date lv_time. + + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. SELECT SINGLE as4user FROM dd04l INTO rv_user diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index d895fb6cd..a089cd30f 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -43,6 +43,10 @@ ENDCLASS. "lcl_object_enho DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_enho IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~get_metadata. rs_metadata = get_metadata( ). ENDMETHOD. "lif_object~get_metadata diff --git a/src/zabapgit_object_enhs.prog.abap b/src/zabapgit_object_enhs.prog.abap index 10d60f91b..1a5eebb78 100644 --- a/src/zabapgit_object_enhs.prog.abap +++ b/src/zabapgit_object_enhs.prog.abap @@ -17,6 +17,10 @@ ENDCLASS. "lcl_object_enhs *----------------------------------------------------------------------* CLASS lcl_object_enhs IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. diff --git a/src/zabapgit_object_enqu.prog.abap b/src/zabapgit_object_enqu.prog.abap index 1177b01fc..26a7512ce 100644 --- a/src/zabapgit_object_enqu.prog.abap +++ b/src/zabapgit_object_enqu.prog.abap @@ -22,6 +22,22 @@ ENDCLASS. "lcl_object_dtel DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_enqu IMPLEMENTATION. + METHOD lif_object~has_changed_since. + + DATA: lv_date TYPE dats, + lv_time TYPE tims, + lv_ts TYPE timestamp. + + SELECT SINGLE as4date as4time FROM dd25l + INTO (lv_date, lv_time) + WHERE viewname = ms_item-obj_name + AND as4local = 'A' + AND as4vers = '0000'. + + object_check_timestamp lv_date lv_time. + + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. diff --git a/src/zabapgit_object_ensc.prog.abap b/src/zabapgit_object_ensc.prog.abap index 2379dd1f6..730d7a48c 100644 --- a/src/zabapgit_object_ensc.prog.abap +++ b/src/zabapgit_object_ensc.prog.abap @@ -14,6 +14,10 @@ ENDCLASS. "lcl_object_ensc *----------------------------------------------------------------------* CLASS lcl_object_ensc IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. diff --git a/src/zabapgit_object_fugr.prog.abap b/src/zabapgit_object_fugr.prog.abap index 2deffaf72..d8f0f107b 100644 --- a/src/zabapgit_object_fugr.prog.abap +++ b/src/zabapgit_object_fugr.prog.abap @@ -84,6 +84,38 @@ CLASS lcl_object_fugr IMPLEMENTATION. * function group SIFP * function group SUNI + METHOD lif_object~has_changed_since. + + DATA: lt_functab TYPE ty_rs38l_incl_tt, + lt_includes TYPE rso_t_objnm. + + FIELD-SYMBOLS: LIKE LINE OF lt_functab, + LIKE LINE OF lt_includes. + + lt_includes = includes( ). " Main prog also included here + + LOOP AT lt_includes ASSIGNING . + rv_changed = check_prog_changed_since( + iv_program = + iv_timestamp = iv_timestamp ). + IF rv_changed = abap_true. + RETURN. + ENDIF. + ENDLOOP. + + lt_functab = functions( ). + + LOOP AT lt_functab ASSIGNING . + rv_changed = check_prog_changed_since( + iv_program = -include + iv_timestamp = iv_timestamp ). + IF rv_changed = abap_true. + RETURN. + ENDIF. + ENDLOOP. + + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. diff --git a/src/zabapgit_object_iarp.prog.abap b/src/zabapgit_object_iarp.prog.abap index 356326b09..66ae8b2f3 100644 --- a/src/zabapgit_object_iarp.prog.abap +++ b/src/zabapgit_object_iarp.prog.abap @@ -33,6 +33,10 @@ ENDCLASS. "lcl_object_dtel DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_iarp IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. diff --git a/src/zabapgit_object_iasp.prog.abap b/src/zabapgit_object_iasp.prog.abap index add9d0522..f1a345829 100644 --- a/src/zabapgit_object_iasp.prog.abap +++ b/src/zabapgit_object_iasp.prog.abap @@ -33,6 +33,10 @@ ENDCLASS. "lcl_object_dtel DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_iasp IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. diff --git a/src/zabapgit_object_iatu.prog.abap b/src/zabapgit_object_iatu.prog.abap index 9cddad81e..f0b5a4a7e 100644 --- a/src/zabapgit_object_iatu.prog.abap +++ b/src/zabapgit_object_iatu.prog.abap @@ -33,6 +33,10 @@ ENDCLASS. "lcl_object_iatu DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_iatu IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. diff --git a/src/zabapgit_object_msag.prog.abap b/src/zabapgit_object_msag.prog.abap index 9a6f05607..c846270d1 100644 --- a/src/zabapgit_object_msag.prog.abap +++ b/src/zabapgit_object_msag.prog.abap @@ -22,6 +22,10 @@ ENDCLASS. "lcl_object_msag DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_msag IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. SELECT SINGLE lastuser FROM t100a INTO rv_user diff --git a/src/zabapgit_object_nrob.prog.abap b/src/zabapgit_object_nrob.prog.abap index e3934a7ff..d40c52598 100644 --- a/src/zabapgit_object_nrob.prog.abap +++ b/src/zabapgit_object_nrob.prog.abap @@ -22,6 +22,10 @@ ENDCLASS. "lcl_object_nrob DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_nrob IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. DATA: lv_objectid TYPE cdhdr-objectid, diff --git a/src/zabapgit_object_para.prog.abap b/src/zabapgit_object_para.prog.abap index 968f87445..4523cc560 100644 --- a/src/zabapgit_object_para.prog.abap +++ b/src/zabapgit_object_para.prog.abap @@ -22,6 +22,10 @@ ENDCLASS. "lcl_object_para DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_para IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. * looks like "changed by user" is not stored in the database rv_user = c_user_unknown. diff --git a/src/zabapgit_object_pinf.prog.abap b/src/zabapgit_object_pinf.prog.abap index bcf4b7a61..857d750f2 100644 --- a/src/zabapgit_object_pinf.prog.abap +++ b/src/zabapgit_object_pinf.prog.abap @@ -47,6 +47,10 @@ ENDCLASS. "lcl_object_PINF DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_pinf IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. SELECT SINGLE changed_by FROM intf INTO rv_user diff --git a/src/zabapgit_object_prog.prog.abap b/src/zabapgit_object_prog.prog.abap index 03961ac65..d04c51d5b 100644 --- a/src/zabapgit_object_prog.prog.abap +++ b/src/zabapgit_object_prog.prog.abap @@ -28,6 +28,14 @@ ENDCLASS. "lcl_object_prog DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_prog IMPLEMENTATION. + METHOD lif_object~has_changed_since. + + rv_changed = check_prog_changed_since( + iv_program = ms_item-obj_name + iv_timestamp = iv_timestamp ). + + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. SELECT SINGLE unam FROM reposrc INTO rv_user WHERE progname = ms_item-obj_name diff --git a/src/zabapgit_object_sfbf.prog.abap b/src/zabapgit_object_sfbf.prog.abap index 22700d2cc..4af733532 100644 --- a/src/zabapgit_object_sfbf.prog.abap +++ b/src/zabapgit_object_sfbf.prog.abap @@ -27,6 +27,10 @@ ENDCLASS. "lcl_object_SFBF DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_sfbf IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = get( )->get_header_data( )-changedby. diff --git a/src/zabapgit_object_sfbs.prog.abap b/src/zabapgit_object_sfbs.prog.abap index fe506fbd3..e3e4c28da 100644 --- a/src/zabapgit_object_sfbs.prog.abap +++ b/src/zabapgit_object_sfbs.prog.abap @@ -27,6 +27,10 @@ ENDCLASS. "lcl_object_SFBS DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_sfbs IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = get( )->get_header_data( )-changedby. diff --git a/src/zabapgit_object_sfsw.prog.abap b/src/zabapgit_object_sfsw.prog.abap index e3808237d..cff1206f2 100644 --- a/src/zabapgit_object_sfsw.prog.abap +++ b/src/zabapgit_object_sfsw.prog.abap @@ -27,6 +27,10 @@ ENDCLASS. "lcl_object_sfsw DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_sfsw IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = get( )->get_header_data( )-changedby. diff --git a/src/zabapgit_object_shi3.prog.abap b/src/zabapgit_object_shi3.prog.abap index 4201d8f6d..e1b2bce82 100644 --- a/src/zabapgit_object_shi3.prog.abap +++ b/src/zabapgit_object_shi3.prog.abap @@ -54,6 +54,10 @@ ENDCLASS. "lcl_object_shi3 DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_shi3 IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. diff --git a/src/zabapgit_object_shlp.prog.abap b/src/zabapgit_object_shlp.prog.abap index b2e9287b4..8ae9d7e04 100644 --- a/src/zabapgit_object_shlp.prog.abap +++ b/src/zabapgit_object_shlp.prog.abap @@ -22,6 +22,21 @@ ENDCLASS. "lcl_object_dtel DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_shlp IMPLEMENTATION. + METHOD lif_object~has_changed_since. + + DATA: lv_date TYPE dats, + lv_time TYPE tims, + lv_ts TYPE timestamp. + + SELECT SINGLE as4date as4time FROM dd30l + INTO (lv_date, lv_time) + WHERE shlpname = ms_item-obj_name + AND as4local = 'A'. + + object_check_timestamp lv_date lv_time. + + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. SELECT SINGLE as4user FROM dd30l INTO rv_user diff --git a/src/zabapgit_object_sicf.prog.abap b/src/zabapgit_object_sicf.prog.abap index f52120d69..343a4e4f4 100644 --- a/src/zabapgit_object_sicf.prog.abap +++ b/src/zabapgit_object_sicf.prog.abap @@ -62,6 +62,10 @@ ENDCLASS. "lcl_object_sicf DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_sicf IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. DATA: ls_icfservice TYPE icfservice. diff --git a/src/zabapgit_object_smim.prog.abap b/src/zabapgit_object_smim.prog.abap index 4155ca697..4995e81c8 100644 --- a/src/zabapgit_object_smim.prog.abap +++ b/src/zabapgit_object_smim.prog.abap @@ -42,6 +42,10 @@ ENDCLASS. "lcl_object_smim DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_smim IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. DATA: lv_loio TYPE sdok_docid. diff --git a/src/zabapgit_object_splo.prog.abap b/src/zabapgit_object_splo.prog.abap index a16c253c9..784192728 100644 --- a/src/zabapgit_object_splo.prog.abap +++ b/src/zabapgit_object_splo.prog.abap @@ -22,6 +22,10 @@ ENDCLASS. "lcl_object_splo DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_splo IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. SELECT SINGLE chgname1 FROM tsp1d INTO rv_user diff --git a/src/zabapgit_object_ssfo.prog.abap b/src/zabapgit_object_ssfo.prog.abap index f56418b96..fc0c3b8cd 100644 --- a/src/zabapgit_object_ssfo.prog.abap +++ b/src/zabapgit_object_ssfo.prog.abap @@ -22,6 +22,10 @@ ENDCLASS. "lcl_object_dtel DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_ssfo IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. SELECT SINGLE lastuser FROM stxfadm INTO rv_user diff --git a/src/zabapgit_object_ssst.prog.abap b/src/zabapgit_object_ssst.prog.abap index 47d16a37b..97a64a3c9 100644 --- a/src/zabapgit_object_ssst.prog.abap +++ b/src/zabapgit_object_ssst.prog.abap @@ -27,6 +27,10 @@ ENDCLASS. "lcl_object_ssst DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_ssst IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. SELECT SINGLE lastuser FROM stxsadm INTO rv_user diff --git a/src/zabapgit_object_susc.prog.abap b/src/zabapgit_object_susc.prog.abap index 863dc6cfb..165a100f0 100644 --- a/src/zabapgit_object_susc.prog.abap +++ b/src/zabapgit_object_susc.prog.abap @@ -22,6 +22,10 @@ ENDCLASS. "lcl_object_susc DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_susc IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. diff --git a/src/zabapgit_object_suso.prog.abap b/src/zabapgit_object_suso.prog.abap index 06f9e0d12..208c75eb8 100644 --- a/src/zabapgit_object_suso.prog.abap +++ b/src/zabapgit_object_suso.prog.abap @@ -22,6 +22,10 @@ ENDCLASS. "lcl_object_suso DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_suso IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. diff --git a/src/zabapgit_object_tabl.prog.abap b/src/zabapgit_object_tabl.prog.abap index 8f130178a..c90dcc67e 100644 --- a/src/zabapgit_object_tabl.prog.abap +++ b/src/zabapgit_object_tabl.prog.abap @@ -22,6 +22,43 @@ ENDCLASS. "lcl_object_dtel DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_tabl IMPLEMENTATION. + METHOD lif_object~has_changed_since. + + DATA: lv_date TYPE dats, + lv_time TYPE tims, + lv_ts TYPE timestamp, + lt_indexes TYPE STANDARD TABLE OF dd09l. + + FIELD-SYMBOLS LIKE LINE OF lt_indexes. + + SELECT SINGLE as4date as4time FROM dd02l " Table + INTO (lv_date, lv_time) + WHERE tabname = ms_item-obj_name + AND as4local = 'A' + AND as4vers = '0000'. + + object_check_timestamp lv_date lv_time. + + SELECT SINGLE as4date as4time FROM dd09l " Table tech settings + INTO (lv_date, lv_time) + WHERE tabname = ms_item-obj_name + AND as4local = 'A' + AND as4vers = '0000'. + + object_check_timestamp lv_date lv_time. + + SELECT as4date as4time FROM dd12l " Table tech settings + INTO CORRESPONDING FIELDS OF TABLE lt_indexes + WHERE sqltab = ms_item-obj_name + AND as4local = 'A' + AND as4vers = '0000' ##TOO_MANY_ITAB_FIELDS. + + LOOP AT lt_indexes ASSIGNING . + object_check_timestamp -as4date -as4time. + ENDLOOP. + + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. SELECT SINGLE as4user FROM dd02l INTO rv_user diff --git a/src/zabapgit_object_tobj.prog.abap b/src/zabapgit_object_tobj.prog.abap index 2dd8e159c..39198e726 100644 --- a/src/zabapgit_object_tobj.prog.abap +++ b/src/zabapgit_object_tobj.prog.abap @@ -22,6 +22,10 @@ ENDCLASS. "lcl_object_tobj DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_tobj IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. diff --git a/src/zabapgit_object_tran.prog.abap b/src/zabapgit_object_tran.prog.abap index eba7dc246..a483192f2 100644 --- a/src/zabapgit_object_tran.prog.abap +++ b/src/zabapgit_object_tran.prog.abap @@ -47,6 +47,10 @@ ENDCLASS. "lcl_object_TRAN DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_tran IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. diff --git a/src/zabapgit_object_ttyp.prog.abap b/src/zabapgit_object_ttyp.prog.abap index 1c7ca97ab..f4dbf3057 100644 --- a/src/zabapgit_object_ttyp.prog.abap +++ b/src/zabapgit_object_ttyp.prog.abap @@ -22,6 +22,21 @@ ENDCLASS. "lcl_object_dtel DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_ttyp IMPLEMENTATION. + METHOD lif_object~has_changed_since. + + DATA: lv_date TYPE dats, + lv_time TYPE tims, + lv_ts TYPE timestamp. + + SELECT SINGLE as4date as4time FROM dd40l + INTO (lv_date, lv_time) + WHERE typename = ms_item-obj_name + AND as4local = 'A'. + + object_check_timestamp lv_date lv_time. + + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. SELECT SINGLE as4user FROM dd40l INTO rv_user diff --git a/src/zabapgit_object_type.prog.abap b/src/zabapgit_object_type.prog.abap index b03973692..5a47d8ed9 100644 --- a/src/zabapgit_object_type.prog.abap +++ b/src/zabapgit_object_type.prog.abap @@ -35,6 +35,10 @@ ENDCLASS. "lcl_object_type DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_type IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. diff --git a/src/zabapgit_object_vcls.prog.abap b/src/zabapgit_object_vcls.prog.abap index 49fce52fc..e6ad172aa 100644 --- a/src/zabapgit_object_vcls.prog.abap +++ b/src/zabapgit_object_vcls.prog.abap @@ -26,6 +26,10 @@ ENDCLASS. "lcl_object_vcls DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_vcls IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. diff --git a/src/zabapgit_object_view.prog.abap b/src/zabapgit_object_view.prog.abap index 987bf43f2..8655d6518 100644 --- a/src/zabapgit_object_view.prog.abap +++ b/src/zabapgit_object_view.prog.abap @@ -22,6 +22,30 @@ ENDCLASS. "lcl_object_dtel DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_view IMPLEMENTATION. + METHOD lif_object~has_changed_since. + + DATA: lv_date TYPE dats, + lv_time TYPE tims, + lv_ts TYPE timestamp. + + SELECT SINGLE as4date as4time FROM dd25l " View + INTO (lv_date, lv_time) + WHERE viewname = ms_item-obj_name + AND as4local = 'A' + AND as4vers = '0000'. + + object_check_timestamp lv_date lv_time. + + SELECT SINGLE as4date as4time FROM dd09l " Table tech settings + INTO (lv_date, lv_time) + WHERE tabname = ms_item-obj_name + AND as4local = 'A' + AND as4vers = '0000'. + + object_check_timestamp lv_date lv_time. + + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. SELECT SINGLE as4user FROM dd25l INTO rv_user diff --git a/src/zabapgit_object_w3xx.prog.abap b/src/zabapgit_object_w3xx.prog.abap index 6c4b83b37..c69b5355c 100644 --- a/src/zabapgit_object_w3xx.prog.abap +++ b/src/zabapgit_object_w3xx.prog.abap @@ -24,6 +24,10 @@ ENDCLASS. "lcl_object_W3SUPER DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_w3super IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. diff --git a/src/zabapgit_object_wdya.prog.abap b/src/zabapgit_object_wdya.prog.abap index 47953fccd..954f78795 100644 --- a/src/zabapgit_object_wdya.prog.abap +++ b/src/zabapgit_object_wdya.prog.abap @@ -34,6 +34,10 @@ ENDCLASS. "lcl_object_wdya DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_wdya IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. diff --git a/src/zabapgit_object_wdyn.prog.abap b/src/zabapgit_object_wdyn.prog.abap index 53e05e70a..42f603e28 100644 --- a/src/zabapgit_object_wdyn.prog.abap +++ b/src/zabapgit_object_wdyn.prog.abap @@ -68,6 +68,10 @@ ENDCLASS. "lcl_object_wdyn DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_wdyn IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. diff --git a/src/zabapgit_object_webi.prog.abap b/src/zabapgit_object_webi.prog.abap index 8c4026924..d74dc4d56 100644 --- a/src/zabapgit_object_webi.prog.abap +++ b/src/zabapgit_object_webi.prog.abap @@ -62,6 +62,10 @@ ENDCLASS. "lcl_object_SFBS DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_webi IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. "lif_object~changed_by diff --git a/src/zabapgit_object_xslt.prog.abap b/src/zabapgit_object_xslt.prog.abap index 5afd418da..93ec498cd 100644 --- a/src/zabapgit_object_xslt.prog.abap +++ b/src/zabapgit_object_xslt.prog.abap @@ -28,6 +28,10 @@ ENDCLASS. "lcl_object_xslt DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_xslt IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index d4c687a2e..7fe59078a 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -2,6 +2,26 @@ *& Include ZABAPGIT_OBJECTS *&---------------------------------------------------------------------* +* Macros + +DEFINE object_check_timestamp. + IF sy-subrc = 0 AND &1 IS NOT INITIAL AND &2 IS NOT INITIAL. + cl_abap_tstmp=>systemtstmp_syst2utc( + EXPORTING syst_date = &1 + syst_time = &2 + IMPORTING utc_tstmp = lv_ts ). + IF lv_ts < iv_timestamp. + rv_changed = abap_false. " Unchanged + ELSE. + rv_changed = abap_true. + RETURN. + ENDIF. + ELSE. " Not found? => changed + rv_changed = abap_true. + RETURN. + ENDIF. +END-OF-DEFINITION. + *----------------------------------------------------------------------* * CLASS lcl_objects_activation DEFINITION *----------------------------------------------------------------------* @@ -230,7 +250,11 @@ INTERFACE lif_object. jump RAISING lcx_exception, get_metadata - RETURNING VALUE(rs_metadata) TYPE ty_metadata. + RETURNING VALUE(rs_metadata) TYPE ty_metadata, + has_changed_since + IMPORTING iv_timestamp TYPE timestamp + RETURNING VALUE(rv_changed) TYPE abap_bool + RAISING lcx_exception. DATA: mo_files TYPE REF TO lcl_objects_files. @@ -435,6 +459,7 @@ ENDCLASS. "lcl_objects_files IMPLEMENTATION CLASS lcl_objects_super DEFINITION ABSTRACT. PUBLIC SECTION. + METHODS: constructor IMPORTING @@ -497,6 +522,10 @@ ENDCLASS. "lcl_objects_bridge DEFINITION *----------------------------------------------------------------------* CLASS lcl_objects_bridge IMPLEMENTATION. + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + METHOD lif_object~get_metadata. CALL METHOD mo_plugin->('ZIF_ABAPGIT_PLUGIN~GET_METADATA') @@ -706,6 +735,7 @@ CLASS lcl_objects_program DEFINITION INHERITING FROM lcl_objects_super. RAISING lcx_exception. PROTECTED SECTION. + TYPES: ty_spaces_tt TYPE STANDARD TABLE OF i WITH DEFAULT KEY. TYPES: BEGIN OF ty_tpool. @@ -759,6 +789,12 @@ CLASS lcl_objects_program DEFINITION INHERITING FROM lcl_objects_super. is_cua TYPE ty_cua RAISING lcx_exception. + METHODS check_prog_changed_since + IMPORTING iv_program TYPE programm + iv_timestamp TYPE timestamp + iv_skip_gui TYPE abap_bool DEFAULT abap_false + RETURNING VALUE(rv_changed) TYPE abap_bool. + CLASS-METHODS: add_tpool IMPORTING it_tpool TYPE textpool_table @@ -1309,6 +1345,55 @@ CLASS lcl_objects_program IMPLEMENTATION. ENDMETHOD. "deserialize_cua + METHOD check_prog_changed_since. + + DATA: lv_date TYPE dats, + lv_time TYPE tims, + lv_ts TYPE timestamp, + lt_screens TYPE STANDARD TABLE OF d020s, + lt_eudb TYPE STANDARD TABLE OF eudb. + + FIELD-SYMBOLS: LIKE LINE OF lt_screens, + LIKE LINE OF lt_eudb. + + SELECT SINGLE udat utime FROM reposrc " Program + INTO (lv_date, lv_time) + WHERE progname = iv_program + AND r3state = 'A'. + + object_check_timestamp lv_date lv_time. + + SELECT SINGLE udat utime FROM repotext " Program text pool + INTO (lv_date, lv_time) + WHERE progname = iv_program + AND r3state = 'A'. + + object_check_timestamp lv_date lv_time. + + IF iv_skip_gui = abap_true. + RETURN. + ENDIF. + + SELECT dgen tgen FROM d020s " Screens + INTO CORRESPONDING FIELDS OF TABLE lt_screens + WHERE prog = iv_program ##TOO_MANY_ITAB_FIELDS. + + LOOP AT lt_screens ASSIGNING . + object_check_timestamp -dgen -tgen. + ENDLOOP. + + SELECT vdatum vzeit FROM eudb " GUI + INTO CORRESPONDING FIELDS OF TABLE lt_eudb + WHERE relid = 'CU' + AND name = iv_program + AND srtf2 = 0 ##TOO_MANY_ITAB_FIELDS. + + LOOP AT lt_eudb ASSIGNING . + object_check_timestamp -vdatum -vzeit. + ENDLOOP. + + ENDMETHOD. "check_prog_changed_since + ENDCLASS. "lcl_objects_program IMPLEMENTATION *----------------------------------------------------------------------* @@ -1435,6 +1520,12 @@ CLASS lcl_objects DEFINITION FINAL. RETURNING VALUE(rv_user) TYPE xubname RAISING lcx_exception. + CLASS-METHODS has_changed_since + IMPORTING is_item TYPE ty_item + iv_timestamp TYPE timestamp + RETURNING VALUE(rv_changed) TYPE abap_bool + RAISING lcx_exception. + CLASS-METHODS is_supported IMPORTING is_item TYPE ty_item RETURNING VALUE(rv_bool) TYPE abap_bool. diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap index 92e8809d3..0bc5a7209 100644 --- a/src/zabapgit_objects_impl.prog.abap +++ b/src/zabapgit_objects_impl.prog.abap @@ -172,6 +172,19 @@ CLASS lcl_objects IMPLEMENTATION. ENDMETHOD. "create_object + METHOD has_changed_since. + rv_changed = abap_true. " Assume changed + + IF is_supported( is_item ) = abap_false. + RETURN. " Will requre serialize which will log the error + ENDIF. + + rv_changed = create_object( + is_item = is_item + iv_language = gc_english )->has_changed_since( iv_timestamp ). + + ENDMETHOD. "has_changed_since + METHOD is_supported. TRY. diff --git a/src/zabapgit_repo.prog.abap b/src/zabapgit_repo.prog.abap index 43288f1da..6dee4476e 100644 --- a/src/zabapgit_repo.prog.abap +++ b/src/zabapgit_repo.prog.abap @@ -38,7 +38,9 @@ CLASS lcl_repo DEFINITION ABSTRACT FRIENDS lcl_repo_srv. deserialize RAISING lcx_exception, refresh + IMPORTING iv_drop_cache TYPE abap_bool DEFAULT abap_false RAISING lcx_exception, + refresh_local, " For testing purposes, maybe removed later build_local_checksums RETURNING VALUE(rt_checksums) TYPE lcl_persistence_repo=>ty_local_checksum_tt RAISING lcx_exception, @@ -48,10 +50,12 @@ CLASS lcl_repo DEFINITION ABSTRACT FRIENDS lcl_repo_srv. PROTECTED SECTION. - DATA: mt_local TYPE ty_files_item_tt, - mt_remote TYPE ty_files_tt, - mo_dot_abapgit TYPE REF TO lcl_dot_abapgit, - ms_data TYPE lcl_persistence_repo=>ty_repo. + DATA: mt_local TYPE ty_files_item_tt, + mt_remote TYPE ty_files_tt, + mo_dot_abapgit TYPE REF TO lcl_dot_abapgit, + mv_do_local_refresh TYPE abap_bool, + mv_last_serialization TYPE timestamp, + ms_data TYPE lcl_persistence_repo=>ty_repo. METHODS: find_dot_abapgit @@ -121,7 +125,8 @@ CLASS lcl_repo_online DEFINITION INHERITING FROM lcl_repo FINAL. mt_objects TYPE ty_objects_tt, mv_branch TYPE ty_sha1, mv_initialized TYPE abap_bool, - mo_branches TYPE REF TO lcl_git_branch_list. + mo_branches TYPE REF TO lcl_git_branch_list, + mt_status TYPE ty_results_tt. METHODS: handle_stage_ignore diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 21e8c5e8b..98498831c 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -42,8 +42,11 @@ CLASS lcl_repo_online IMPLEMENTATION. initialize( ). - rt_results = lcl_file_status=>status( io_repo = me - io_log = io_log ). + IF lines( mt_status ) = 0. + mt_status = lcl_file_status=>status( io_repo = me + io_log = io_log ). + ENDIF. + rt_results = mt_status. ENDMETHOD. "status @@ -65,7 +68,8 @@ CLASS lcl_repo_online IMPLEMENTATION. METHOD refresh. - super->refresh( ). + super->refresh( iv_drop_cache ). + CLEAR mt_status. lcl_progress=>show( iv_key = 'Fetch' iv_current = 1 @@ -365,7 +369,7 @@ CLASS lcl_repo IMPLEMENTATION. lcl_objects=>deserialize( me ). - CLEAR mt_local. + CLEAR: mt_local, mv_last_serialization. set( it_checksums = build_local_checksums( ) ). @@ -381,12 +385,17 @@ CLASS lcl_repo IMPLEMENTATION. ls_item TYPE ty_item, lt_files TYPE ty_files_tt. + DATA: lt_cache TYPE SORTED TABLE OF ty_file_item + WITH NON-UNIQUE KEY item. + FIELD-SYMBOLS: LIKE LINE OF lt_files, LIKE LINE OF rt_files, + LIKE LINE OF lt_cache, LIKE LINE OF lt_tadir. - IF lines( mt_local ) > 0. + " Serialization happened before and no refresh request + IF mv_last_serialization IS NOT INITIAL AND mv_do_local_refresh = abap_false. rt_files = mt_local. RETURN. ENDIF. @@ -401,16 +410,32 @@ CLASS lcl_repo IMPLEMENTATION. -file-sha1 = lcl_hash=>sha1( iv_type = gc_type-blob iv_data = -file-data ). + lt_cache = mt_local. lt_tadir = lcl_tadir=>read( get_package( ) ). LOOP AT lt_tadir ASSIGNING . + + ls_item-obj_type = -object. + ls_item-obj_name = -obj_name. + + IF mv_last_serialization IS NOT INITIAL. " Try to fetch from cache + READ TABLE lt_cache TRANSPORTING NO FIELDS + WITH KEY item = ls_item. + IF sy-subrc = 0 " There is something in cache and the object is unchanged + AND abap_false = lcl_objects=>has_changed_since( is_item = ls_item + iv_timestamp = mv_last_serialization ). + LOOP AT lt_cache ASSIGNING WHERE item = ls_item. + APPEND TO rt_files. + ENDLOOP. + + CONTINUE. + ENDIF. + ENDIF. + lcl_progress=>show( iv_key = 'Serialize' iv_current = sy-tabix iv_total = lines( lt_tadir ) iv_text = -obj_name ) ##NO_TEXT. - ls_item-obj_type = -object. - ls_item-obj_name = -obj_name. - lt_files = lcl_objects=>serialize( is_item = ls_item iv_language = get_master_language( ) @@ -425,7 +450,9 @@ CLASS lcl_repo IMPLEMENTATION. ENDLOOP. ENDLOOP. - mt_local = rt_files. + GET TIME STAMP FIELD mv_last_serialization. + mt_local = rt_files. + mv_do_local_refresh = abap_false. " Fulfill refresh ENDMETHOD. @@ -449,9 +476,19 @@ CLASS lcl_repo IMPLEMENTATION. ENDMETHOD. METHOD refresh. - CLEAR mt_local. + + mv_do_local_refresh = abap_true. + + IF iv_drop_cache = abap_true. + CLEAR: mv_last_serialization, mt_local. + ENDIF. + ENDMETHOD. "refresh + METHOD refresh_local. " For testing purposes, maybe removed later + mv_do_local_refresh = abap_true. + ENDMETHOD. "refresh_local + METHOD get_package. rv_package = ms_data-package. ENDMETHOD. "get_package