Merge branch 'master'

Conflicts:
	src/zabapgit_page_main.prog.abap
	src/zabapgit_repo_impl.prog.abap
This commit is contained in:
sbcgua 2016-10-14 10:38:20 +03:00
commit 0540063a5d
59 changed files with 804 additions and 98 deletions

View File

@ -3,7 +3,7 @@ REPORT zabapgit LINE-SIZE 100.
* See http://www.abapgit.org
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
gc_abap_version TYPE string VALUE 'v1.17.20'. "#EC NOTEXT
gc_abap_version TYPE string VALUE 'v1.18.4'. "#EC NOTEXT
********************************************************************************
* The MIT License (MIT)
@ -36,6 +36,7 @@ SELECTION-SCREEN END OF SCREEN 1001.
INCLUDE zabapgit_password_dialog. " !!! Contains SELECTION SCREEN
INCLUDE zabapgit_definitions.
INCLUDE zabapgit_macros.
INCLUDE zabapgit_exceptions.
INCLUDE zabapgit_zlib.
INCLUDE zabapgit_html.

View File

@ -28,6 +28,7 @@ TYPES: BEGIN OF ty_comment,
TYPES: BEGIN OF ty_item,
obj_type TYPE tadir-object,
obj_name TYPE tadir-obj_name,
devclass TYPE devclass,
END OF ty_item.
TYPES: BEGIN OF ty_file_item,
@ -159,6 +160,7 @@ CONSTANTS: BEGIN OF gc_action,
zip_export TYPE string VALUE 'zip_export',
zip_package TYPE string VALUE 'zip_package',
zip_transport TYPE string VALUE 'zip_transport',
zip_object TYPE string VALUE 'zip_object',
git_pull TYPE string VALUE 'git_pull',
git_reset TYPE string VALUE 'git_reset',

View File

@ -95,7 +95,8 @@ CLASS lcl_file_status IMPLEMENTATION.
ls_item-obj_name = lv_pre.
CLEAR lt_files.
LOOP AT lt_local ASSIGNING <ls_local> WHERE item = ls_item.
LOOP AT lt_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.

View File

@ -126,7 +126,7 @@ CLASS lcl_gui IMPLEMENTATION.
WHEN gc_event_state-no_more_act.
" Do nothing, handling completed
WHEN OTHERS.
lcx_exception=>raise( 'Unknown action' ).
lcx_exception=>raise( |Unknown action: { action }| ).
ENDCASE.
CATCH lcx_exception INTO lx_exception.

View File

@ -158,6 +158,9 @@ CLASS lcl_gui_router IMPLEMENTATION.
WHEN gc_action-zip_transport. " Export transport as ZIP
lcl_transport=>zip( ).
ev_state = gc_event_state-no_more_act.
WHEN gc_action-zip_object. " Export object as ZIP
lcl_zip=>export_object( ).
ev_state = gc_event_state-no_more_act.
" Remote origin manipulations
WHEN gc_action-repo_remote_attach. " Remote attach

View File

@ -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

View File

@ -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

View File

@ -121,6 +121,49 @@ ENDCLASS. "lcl_object_intf DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_object_clas IMPLEMENTATION.
METHOD lif_object~has_changed_since.
DATA: lv_clsname TYPE seoclsname,
lv_program TYPE program,
lt_incl TYPE seoincl_t.
FIELD-SYMBOLS <incl> LIKE LINE OF lt_incl.
lv_clsname = ms_item-obj_name.
CASE ms_item-obj_type.
WHEN 'CLAS'.
TRY.
CALL METHOD cl_oo_classname_service=>('GET_ALL_CLASS_INCLUDES')
EXPORTING
class_name = lv_clsname
RECEIVING
result = lt_incl.
CATCH cx_sy_dyn_call_illegal_method.
* method does not exist in 702, just report everything as changed
rv_changed = abap_true.
ENDTRY.
LOOP AT lt_incl ASSIGNING <incl>.
rv_changed = check_prog_changed_since(
iv_program = <incl>
iv_timestamp = iv_timestamp
iv_skip_gui = abap_true ).
IF rv_changed = abap_true.
RETURN.
ENDIF.
ENDLOOP.
WHEN 'INTF'.
lv_program = cl_oo_classname_service=>get_interfacepool_name( lv_clsname ).
rv_changed = check_prog_changed_since(
iv_program = lv_program
iv_timestamp = iv_timestamp
iv_skip_gui = abap_true ).
WHEN OTHERS.
lcx_exception=>raise( 'class delete, unknown type' ).
ENDCASE.
ENDMETHOD. "lif_object~has_changed_since
METHOD lif_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD. "lif_object~get_metadata

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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
@ -111,6 +127,18 @@ CLASS lcl_object_dtel IMPLEMENTATION.
ls_dd04v-as4date,
ls_dd04v-as4time.
IF ls_dd04v-refkind = 'D'.
* clear values inherited from domain
CLEAR: ls_dd04v-datatype,
ls_dd04v-leng,
ls_dd04v-decimals,
ls_dd04v-outputlen,
ls_dd04v-lowercase,
ls_dd04v-signflag,
ls_dd04v-convexit,
ls_dd04v-entitytab.
ENDIF.
io_xml->add( iv_name = 'DD04V'
ig_data = ls_dd04v ).
io_xml->add( iv_name = 'TPARA'

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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: <ls_func> LIKE LINE OF lt_functab,
<include_name> LIKE LINE OF lt_includes.
lt_includes = includes( ). " Main prog also included here
LOOP AT lt_includes ASSIGNING <include_name>.
rv_changed = check_prog_changed_since(
iv_program = <include_name>
iv_timestamp = iv_timestamp ).
IF rv_changed = abap_true.
RETURN.
ENDIF.
ENDLOOP.
lt_functab = functions( ).
LOOP AT lt_functab ASSIGNING <ls_func>.
rv_changed = check_prog_changed_since(
iv_program = <ls_func>-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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -13,6 +13,11 @@ CLASS lcl_object_nrob DEFINITION INHERITING FROM lcl_objects_super FINAL.
INTERFACES lif_object.
ALIASES mo_files FOR lif_object~mo_files.
PRIVATE SECTION.
METHODS:
delete_intervals IMPORTING iv_object TYPE inri-object
RAISING lcx_exception.
ENDCLASS. "lcl_object_nrob DEFINITION
*----------------------------------------------------------------------*
@ -22,6 +27,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,
@ -59,6 +68,7 @@ CLASS lcl_object_nrob IMPLEMENTATION.
METHOD lif_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-late_deser = abap_true.
ENDMETHOD. "lif_object~get_metadata
METHOD lif_object~exists.
@ -161,6 +171,73 @@ CLASS lcl_object_nrob IMPLEMENTATION.
ENDMETHOD. "deserialize
METHOD delete_intervals.
DATA: lv_error TYPE c LENGTH 1,
ls_error TYPE inrer,
lt_list TYPE STANDARD TABLE OF inriv WITH DEFAULT KEY,
lt_error_iv TYPE STANDARD TABLE OF inriv WITH DEFAULT KEY.
FIELD-SYMBOLS: <ls_list> LIKE LINE OF lt_list.
CALL FUNCTION 'NUMBER_RANGE_INTERVAL_LIST'
EXPORTING
object = iv_object
TABLES
interval = lt_list
EXCEPTIONS
nr_range_nr1_not_found = 1
nr_range_nr1_not_intern = 2
nr_range_nr2_must_be_space = 3
nr_range_nr2_not_extern = 4
nr_range_nr2_not_found = 5
object_not_found = 6
subobject_must_be_space = 7
subobject_not_found = 8
OTHERS = 9.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from NUMBER_RANGE_INTERVAL_LIST' ).
ENDIF.
IF lines( lt_list ) = 0.
RETURN.
ENDIF.
LOOP AT lt_list ASSIGNING <ls_list>.
CLEAR <ls_list>-nrlevel.
<ls_list>-procind = 'D'.
ENDLOOP.
CALL FUNCTION 'NUMBER_RANGE_INTERVAL_UPDATE'
EXPORTING
object = iv_object
IMPORTING
error = ls_error
error_occured = lv_error
TABLES
error_iv = lt_error_iv
interval = lt_list
EXCEPTIONS
object_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0 OR lv_error = abap_true.
lcx_exception=>raise( 'error from NUMBER_RANGE_INTERVAL_UPDATE' ).
ENDIF.
CALL FUNCTION 'NUMBER_RANGE_UPDATE_CLOSE'
EXPORTING
object = iv_object
EXCEPTIONS
no_changes_made = 1
object_not_initialized = 2
OTHERS = 3.
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from NUMBER_RANGE_UPDATE_CLOSE' ).
ENDIF.
ENDMETHOD.
METHOD lif_object~delete.
DATA: lv_object TYPE tnro-object.
@ -168,6 +245,8 @@ CLASS lcl_object_nrob IMPLEMENTATION.
lv_object = ms_item-obj_name.
delete_intervals( lv_object ).
CALL FUNCTION 'NUMBER_RANGE_OBJECT_DELETE'
EXPORTING
language = mv_language

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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
@ -87,6 +102,8 @@ CLASS lcl_object_shlp IMPLEMENTATION.
lt_dd32p TYPE TABLE OF dd32p,
lt_dd33v TYPE TABLE OF dd33v.
FIELD-SYMBOLS: <ls_dd32p> LIKE LINE OF lt_dd32p.
lv_name = ms_item-obj_name.
@ -115,6 +132,21 @@ CLASS lcl_object_shlp IMPLEMENTATION.
ls_dd30v-as4date,
ls_dd30v-as4time.
LOOP AT lt_dd32p ASSIGNING <ls_dd32p>.
* clear information inherited from domain
CLEAR: <ls_dd32p>-domname,
<ls_dd32p>-headlen,
<ls_dd32p>-scrlen1,
<ls_dd32p>-scrlen2,
<ls_dd32p>-datatype,
<ls_dd32p>-leng,
<ls_dd32p>-outputlen,
<ls_dd32p>-decimals,
<ls_dd32p>-lowercase,
<ls_dd32p>-signflag,
<ls_dd32p>-convexit.
ENDLOOP.
io_xml->add( iv_name = 'DD30V'
ig_data = ls_dd30v ).
io_xml->add( ig_data = lt_dd31v

View File

@ -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.

View File

@ -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.
@ -188,7 +192,7 @@ CLASS lcl_object_smim IMPLEMENTATION.
permission_failure = 4
OTHERS = 5 ).
IF sy-subrc <> 0.
lcx_exception=>raise( 'error from mime api->get' ).
lcx_exception=>raise( 'error from mime api->get:' && sy-msgv1 ).
ENDIF.
lv_filename = get_filename( lv_url ).

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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 <ls_index> 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 <ls_index>.
_object_check_timestamp <ls_index>-as4date <ls_index>-as4time.
ENDLOOP.
ENDMETHOD. "lif_object~has_changed_since
METHOD lif_object~changed_by.
SELECT SINGLE as4user FROM dd02l INTO rv_user
@ -92,9 +129,12 @@ CLASS lcl_object_tabl IMPLEMENTATION.
lt_dd12v TYPE dd12vtab,
lt_dd17v TYPE dd17vtab,
lt_dd35v TYPE TABLE OF dd35v,
lv_index LIKE sy-index,
lt_dd36m TYPE dd36mttyp.
FIELD-SYMBOLS: <ls_dd12v> LIKE LINE OF lt_dd12v,
<ls_dd05m> LIKE LINE OF lt_dd05m,
<ls_dd36m> LIKE LINE OF lt_dd36m,
<ls_dd03p> LIKE LINE OF lt_dd03p.
@ -139,6 +179,11 @@ CLASS lcl_object_tabl IMPLEMENTATION.
<ls_dd12v>-as4time.
ENDLOOP.
* remove nested structures
DELETE lt_dd03p WHERE depth <> '00'.
* remove fields from .INCLUDEs
DELETE lt_dd03p WHERE adminfield <> '0'.
LOOP AT lt_dd03p ASSIGNING <ls_dd03p> WHERE NOT rollname IS INITIAL.
CLEAR: <ls_dd03p>-ddlanguage,
<ls_dd03p>-dtelmaster,
@ -163,6 +208,8 @@ CLASS lcl_object_tabl IMPLEMENTATION.
<ls_dd03p>-datatype,
<ls_dd03p>-leng,
<ls_dd03p>-outputlen,
<ls_dd03p>-deffdname,
<ls_dd03p>-convexit,
<ls_dd03p>-entitytab,
<ls_dd03p>-dommaster,
<ls_dd03p>-domname3l.
@ -180,6 +227,26 @@ CLASS lcl_object_tabl IMPLEMENTATION.
ENDIF.
ENDLOOP.
* remove foreign keys inherited from .INCLUDEs
DELETE lt_dd08v WHERE noinherit = 'N'.
LOOP AT lt_dd05m ASSIGNING <ls_dd05m>.
lv_index = sy-tabix.
READ TABLE lt_dd08v WITH KEY fieldname = <ls_dd05m>-fieldname TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
DELETE lt_dd05m INDEX lv_index.
ENDIF.
ENDLOOP.
* remove inherited search helps
DELETE lt_dd35v WHERE shlpinher = abap_true.
LOOP AT lt_dd36m ASSIGNING <ls_dd36m>.
lv_index = sy-tabix.
READ TABLE lt_dd35v WITH KEY fieldname = <ls_dd36m>-fieldname TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
DELETE lt_dd36m INDEX lv_index.
ENDIF.
ENDLOOP.
io_xml->add( iv_name = 'DD02V'
ig_data = ls_dd02v ).
io_xml->add( iv_name = 'DD09L'

View File

@ -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.

View File

@ -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.

View File

@ -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
@ -113,6 +128,10 @@ CLASS lcl_object_ttyp IMPLEMENTATION.
ls_dd40v-as4date,
ls_dd40v-as4time.
IF NOT ls_dd40v-rowkind IS INITIAL.
CLEAR ls_dd40v-typelen.
ENDIF.
io_xml->add( iv_name = 'DD40V'
ig_data = ls_dd40v ).
io_xml->add( iv_name = 'DD42V'

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -230,7 +230,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 +439,7 @@ ENDCLASS. "lcl_objects_files IMPLEMENTATION
CLASS lcl_objects_super DEFINITION ABSTRACT.
PUBLIC SECTION.
METHODS:
constructor
IMPORTING
@ -497,6 +502,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 +715,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 +769,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 +1325,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: <ls_screen> LIKE LINE OF lt_screens,
<ls_eudb> 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 <ls_screen>.
_object_check_timestamp <ls_screen>-dgen <ls_screen>-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 <ls_eudb>.
_object_check_timestamp <ls_eudb>-vdatum <ls_eudb>-vzeit.
ENDLOOP.
ENDMETHOD. "check_prog_changed_since
ENDCLASS. "lcl_objects_program IMPLEMENTATION
*----------------------------------------------------------------------*
@ -1435,6 +1500,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.

View File

@ -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.

View File

@ -193,7 +193,7 @@ CLASS lcl_branch_overview IMPLEMENTATION.
SPLIT ls_raw-body AT gc_newline INTO ls_commit-message lv_trash.
* unix time stamps are in same time zone, so ignore the zone,
FIND REGEX '^([\w\s]+) <(.*)> (\d{10}) .\d{4}$' IN ls_raw-author
FIND REGEX '^([\w\s\.@]+) <(.*)> (\d{10}) .\d{4}$' IN ls_raw-author
SUBMATCHES
ls_commit-author
ls_commit-email

View File

@ -170,6 +170,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
lo_betasub->add( iv_txt = 'Database util' iv_act = gc_action-go_db ) ##NO_TEXT.
lo_betasub->add( iv_txt = 'Package to zip' iv_act = gc_action-zip_package ) ##NO_TEXT.
lo_betasub->add( iv_txt = 'Transport to zip' iv_act = gc_action-zip_transport ) ##NO_TEXT.
lo_betasub->add( iv_txt = 'Object to zip' iv_act = gc_action-zip_object ) ##NO_TEXT.
lo_betasub->add( iv_txt = 'Page playground' iv_act = gc_action-go_playground ) ##NO_TEXT.
lo_betasub->add( iv_txt = 'Debug info' iv_act = gc_action-go_debuginfo ) ##NO_TEXT.

View File

@ -20,7 +20,8 @@ CLASS lcl_gui_page_stage DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
PRIVATE SECTION.
DATA: mo_repo TYPE REF TO lcl_repo_online,
ms_files TYPE ty_stage_files,
mo_stage TYPE REF TO lcl_stage.
mo_stage TYPE REF TO lcl_stage,
mv_ts TYPE timestamp.
METHODS:
render_list
@ -56,6 +57,8 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
iv_branch_name = io_repo->get_branch_name( )
iv_branch_sha1 = io_repo->get_sha1_remote( ).
GET TIME STAMP FIELD mv_ts.
ENDMETHOD.
METHOD lif_gui_page~on_event.
@ -228,7 +231,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
CREATE OBJECT ro_html.
ro_html->add( '<div class="paddings">' ).
ro_html->add_anchor( iv_act = 'commit();'
ro_html->add_anchor( iv_act = |commit('{ c_action-stage_commit }');|
iv_typ = gc_action_type-onclick
iv_id = 'act_commit'
iv_style = 'display: none'
@ -279,12 +282,51 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
CREATE OBJECT ro_html.
" Hook global click listener on table, global action counter
_add 'document.getElementById("stage_tab").addEventListener("click", onEvent);'.
" Globals & initialization
ro_html->add( |var gPageID = "stage{ mv_ts }";| ).
_add 'var gChoiceCount = 0;'.
_add 'setHook();'.
" Hook global click listener on table, global action counter
_add 'function setHook() {'.
_add ' var stageTab = document.getElementById("stage_tab");'.
_add ' if (stageTab.addEventListener) {'.
_add ' stageTab.addEventListener("click", onEvent);'.
_add ' } else {'.
_add ' stageTab.attachEvent("onclick", onEvent);'. " <IE9 crutch
_add ' }'.
_add ' window.onbeforeunload = onPageUnload;'.
_add ' window.onload = onPageLoad;'.
_add '}'.
" Store table state on leaving the page
_add 'function onPageUnload() {'.
_add ' var data = collectData();'.
_add ' window.sessionStorage.setItem(gPageID, JSON.stringify(data));'.
_add '}'.
" Re-store table state on entering the page
_add 'function onPageLoad() {'.
_add ' var data = JSON.parse(window.sessionStorage.getItem(gPageID));'.
_add ' var stage = document.getElementById("stage_tab");'.
_add ' for (var i = stage.rows.length - 1; i >= 0; i--) {'.
_add ' var tr = stage.rows[i];'.
_add ' if (tr.parentNode.tagName == "THEAD") continue;'.
_add ' var context = tr.parentNode.className;'.
_add ' var cmd = data[tr.cells[1].innerText];'.
_add ' if (!cmd) continue;'.
_add ' formatTR(tr, cmd, context);'.
_add ' if (countChoiceImpact(cmd) > 0) gChoiceCount++;'.
_add ' }'.
_add ' updateMenu();'.
_add '}'.
" Event handler, change status
_add 'function onEvent(event) {'.
_add ' if (!event.target) {'. " <IE9 crutch
_add ' if (event.srcElement) event.target = event.srcElement;'.
_add ' else return;'.
_add ' }'.
_add ' if (event.target.tagName != "A") return;'.
_add ' var td = event.target.parentNode;'.
_add ' if (!td || td.tagName != "TD" || td.className != "cmd") return;'.
@ -292,15 +334,23 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
_add ' var tr = td.parentNode;'.
_add ' var context = tr.parentNode.className;'.
_add ' switch (cmd) {'.
_add ' case "add": cmd = "A"; gChoiceCount++; break;'.
_add ' case "remove": cmd = "R"; gChoiceCount++; break;'.
_add ' case "ignore": cmd = "I"; gChoiceCount++; break;'.
_add ' case "reset": cmd = "?"; gChoiceCount--; break;'.
_add ' case "add": cmd = "A"; break;'.
_add ' case "remove": cmd = "R"; break;'.
_add ' case "ignore": cmd = "I"; break;'.
_add ' case "reset": cmd = "?"; break;'.
_add ' }'.
_add ' formatTR(tr, cmd, context);'.
_add ' gChoiceCount += countChoiceImpact(cmd);'.
_add ' updateMenu();'.
_add '}'.
" Update action counter -> affects menu update after
_add 'function countChoiceImpact(cmd) {'.
_add ' if ("ARI".indexOf(cmd) > -1) return 1;'.
_add ' else if ("?".indexOf(cmd) > -1) return -1;'.
_add ' else alert("Unknown command");'.
_add '}'.
" Re-format table line
_add 'function formatTR(tr, cmd, context) {'.
_add ' var cmdReset = "<a>reset</a>"; '.
@ -324,9 +374,9 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
_add '}'.
" Commit change to the server
_add 'function commit() {'.
_add 'function commit(action) {'.
_add ' var data = collectData();'.
ro_html->add( | submitForm(data, "{ c_action-stage_commit }");| ).
_add ' submitForm(data, action);'.
_add '}'.
" Extract data from the table

View File

@ -18,7 +18,10 @@ CLASS lcl_popups DEFINITION.
CLASS-METHODS:
popup_package_export
RETURNING VALUE(rv_package) TYPE devclass
RAISING lcx_exception,
RAISING lcx_exception,
popup_object
RETURNING VALUE(rs_tadir) TYPE tadir
RAISING lcx_exception,
create_branch_popup
EXPORTING ev_name TYPE string
ev_cancel TYPE abap_bool
@ -43,19 +46,19 @@ CLASS lcl_popups DEFINITION.
iv_freeze_package TYPE abap_bool OPTIONAL
iv_freeze_url TYPE abap_bool OPTIONAL
iv_title TYPE clike DEFAULT 'Clone repository ...'
RETURNING VALUE(rs_popup) TYPE ty_popup
RETURNING VALUE(rs_popup) TYPE ty_popup
RAISING lcx_exception ##NO_TEXT,
popup_to_confirm
IMPORTING
titlebar TYPE clike
text_question TYPE clike
text_button_1 TYPE clike DEFAULT 'Yes'
icon_button_1 TYPE ICON-NAME DEFAULT space
text_button_2 TYPE clike DEFAULT 'No'
icon_button_2 TYPE ICON-NAME DEFAULT space
default_button TYPE char1 DEFAULT '1'
display_cancel_button TYPE char1 DEFAULT abap_true
RETURNING VALUE(rv_answer) TYPE char1
titlebar TYPE clike
text_question TYPE clike
text_button_1 TYPE clike DEFAULT 'Yes'
icon_button_1 TYPE icon-name DEFAULT space
text_button_2 TYPE clike DEFAULT 'No'
icon_button_2 TYPE icon-name DEFAULT space
default_button TYPE char1 DEFAULT '1'
display_cancel_button TYPE char1 DEFAULT abap_true
RETURNING VALUE(rv_answer) TYPE char1
RAISING lcx_exception.
ENDCLASS.
@ -72,6 +75,51 @@ CLASS lcl_popups IMPLEMENTATION.
END-OF-DEFINITION.
METHOD popup_object.
DATA: lv_returncode TYPE c,
lt_fields TYPE TABLE OF sval.
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
" TAB FLD LABEL DEF ATTR
_add_dialog_fld 'TADIR' 'OBJECT' 'Type' '' ''.
_add_dialog_fld 'TADIR' 'OBJ_NAME' 'Name' '' ''.
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
no_value_check = abap_true
popup_title = 'Object' "#EC NOTEXT
IMPORTING
returncode = lv_returncode
TABLES
fields = lt_fields
EXCEPTIONS
error_in_fields = 1
OTHERS = 2.
IF sy-subrc <> 0.
lcx_exception=>raise( 'Error from POPUP_GET_VALUES' ).
ENDIF.
IF lv_returncode = 'A'.
RETURN.
ENDIF.
READ TABLE lt_fields INDEX 1 ASSIGNING <ls_field>.
ASSERT sy-subrc = 0.
TRANSLATE <ls_field>-value TO UPPER CASE.
rs_tadir-object = <ls_field>-value.
READ TABLE lt_fields INDEX 2 ASSIGNING <ls_field>.
ASSERT sy-subrc = 0.
TRANSLATE <ls_field>-value TO UPPER CASE.
rs_tadir-obj_name = <ls_field>-value.
rs_tadir = lcl_tadir=>read_single( iv_object = rs_tadir-object
iv_obj_name = rs_tadir-obj_name ).
ENDMETHOD.
METHOD popup_package_export.
DATA: lv_returncode TYPE c,

View File

@ -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

View File

@ -62,13 +62,15 @@ CLASS lcl_repo_online IMPLEMENTATION.
set( iv_sha1 = mv_branch ).
CLEAR mt_status. " Reset status
COMMIT WORK AND WAIT.
ENDMETHOD. "deserialize
METHOD refresh.
super->refresh( ).
super->refresh( iv_drop_cache ).
CLEAR mt_status.
lcl_progress=>show( iv_key = 'Fetch'
@ -369,7 +371,7 @@ CLASS lcl_repo IMPLEMENTATION.
lcl_objects=>deserialize( me ).
CLEAR mt_local.
CLEAR: mt_local, mv_last_serialization.
set( it_checksums = build_local_checksums( ) ).
@ -385,12 +387,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: <ls_file> LIKE LINE OF lt_files,
<ls_return> LIKE LINE OF rt_files,
<ls_cache> LIKE LINE OF lt_cache,
<ls_tadir> 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.
@ -405,16 +412,34 @@ CLASS lcl_repo IMPLEMENTATION.
<ls_return>-file-sha1 = lcl_hash=>sha1( iv_type = gc_type-blob
iv_data = <ls_return>-file-data ).
lt_cache = mt_local.
lt_tadir = lcl_tadir=>read( get_package( ) ).
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
ls_item-obj_type = <ls_tadir>-object.
ls_item-obj_name = <ls_tadir>-obj_name.
ls_item-devclass = <ls_tadir>-devclass.
IF mv_last_serialization IS NOT INITIAL. " Try to fetch from cache
READ TABLE lt_cache TRANSPORTING NO FIELDS
WITH KEY item = ls_item. " type+name+package key
" There is something in cache and the object is unchanged
IF sy-subrc = 0
AND abap_false = lcl_objects=>has_changed_since( is_item = ls_item
iv_timestamp = mv_last_serialization ).
LOOP AT lt_cache ASSIGNING <ls_cache> WHERE item = ls_item.
APPEND <ls_cache> TO rt_files.
ENDLOOP.
CONTINUE.
ENDIF.
ENDIF.
lcl_progress=>show( iv_key = 'Serialize'
iv_current = sy-tabix
iv_total = lines( lt_tadir )
iv_text = <ls_tadir>-obj_name ) ##NO_TEXT.
ls_item-obj_type = <ls_tadir>-object.
ls_item-obj_name = <ls_tadir>-obj_name.
lt_files = lcl_objects=>serialize(
is_item = ls_item
iv_language = get_master_language( )
@ -429,7 +454,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.
@ -453,9 +480,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

View File

@ -963,21 +963,11 @@ CLASS lcl_progress DEFINITION FINAL.
iv_text TYPE csequence.
PRIVATE SECTION.
TYPES: BEGIN OF ty_stack,
key TYPE string,
current TYPE i,
total TYPE i,
text TYPE string,
END OF ty_stack.
CLASS-DATA:
gt_stack TYPE STANDARD TABLE OF ty_stack WITH DEFAULT KEY.
CLASS-METHODS:
calc_pct
RETURNING VALUE(rv_pct) TYPE i,
build_text
RETURNING VALUE(rv_text) TYPE string.
IMPORTING iv_current TYPE i
iv_total TYPE i
RETURNING VALUE(rv_pct) TYPE i.
ENDCLASS.
@ -988,66 +978,24 @@ CLASS lcl_progress IMPLEMENTATION.
DATA: lv_pct TYPE i,
lv_text TYPE string.
FIELD-SYMBOLS: <ls_stack> LIKE LINE OF gt_stack.
* assumption:
* all callers must end with calling this method with iv_current = iv_total
* to clear the progress of that sub element
ASSERT lines( gt_stack ) < 10.
READ TABLE gt_stack INDEX lines( gt_stack ) ASSIGNING <ls_stack>.
IF sy-subrc <> 0 OR <ls_stack>-key <> iv_key.
APPEND INITIAL LINE TO gt_stack ASSIGNING <ls_stack>.
ENDIF.
<ls_stack>-key = iv_key.
<ls_stack>-current = iv_current.
<ls_stack>-total = iv_total.
<ls_stack>-text = iv_text.
lv_pct = calc_pct( ).
lv_text = build_text( ).
lv_pct = calc_pct( iv_current = iv_current
iv_total = iv_total ).
CONCATENATE iv_key '-' iv_text INTO lv_text SEPARATED BY space.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = lv_pct
text = lv_text.
IF iv_current = iv_total.
DELETE gt_stack INDEX lines( gt_stack ).
ENDIF.
ENDMETHOD.
METHOD build_text.
FIELD-SYMBOLS: <ls_stack> LIKE LINE OF gt_stack.
LOOP AT gt_stack ASSIGNING <ls_stack>.
IF sy-tabix = 1.
rv_text = |{ <ls_stack>-key } { <ls_stack>-text }|.
ELSE.
rv_text = |{ rv_text } - { <ls_stack>-key } { <ls_stack>-text }|.
IF <ls_stack>-current <> 1 AND <ls_stack>-total <> 1.
rv_text = |{ rv_text } ({ <ls_stack>-current }/{ <ls_stack>-total })|.
ENDIF.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD calc_pct.
DATA: lv_f TYPE f.
FIELD-SYMBOLS: <ls_stack> LIKE LINE OF gt_stack.
READ TABLE gt_stack ASSIGNING <ls_stack> INDEX 1.
ASSERT sy-subrc = 0.
lv_f = ( <ls_stack>-current / <ls_stack>-total ) * 100.
lv_f = ( iv_current / iv_total ) * 100.
rv_pct = lv_f.
IF rv_pct = 100.

View File

@ -22,6 +22,9 @@ CLASS lcl_zip DEFINITION FINAL.
CLASS-METHODS export_package
RAISING lcx_exception lcx_cancel.
CLASS-METHODS export_object
RAISING lcx_exception lcx_cancel.
PRIVATE SECTION.
CLASS-METHODS file_upload
RETURNING VALUE(rv_xstr) TYPE xstring
@ -455,4 +458,32 @@ CLASS lcl_zip IMPLEMENTATION.
ENDMETHOD. "export_package
METHOD export_object.
DATA: lo_repo TYPE REF TO lcl_repo_offline,
ls_data TYPE lcl_persistence_repo=>ty_repo,
lt_tadir TYPE scts_tadir,
ls_tadir TYPE tadir.
ls_tadir = lcl_popups=>popup_object( ).
IF ls_tadir IS INITIAL.
RAISE EXCEPTION TYPE lcx_cancel.
ENDIF.
ls_data-key = 'TZIP'.
ls_data-package = ls_tadir-devclass.
ls_data-master_language = sy-langu.
CREATE OBJECT lo_repo
EXPORTING
is_data = ls_data.
APPEND ls_tadir TO lt_tadir.
lcl_zip=>export( io_repo = lo_repo
it_filter = lt_tadir ).
ENDMETHOD. "export_package
ENDCLASS. "lcl_zip IMPLEMENTATION