Merge pull request #455 from sbcgua/master

W3xx v2 serializer, fix for .abapgit state
This commit is contained in:
Lars Hvam 2016-11-23 08:18:44 +01:00 committed by GitHub
commit c3aa440597
7 changed files with 148 additions and 72 deletions

View File

@ -8,9 +8,11 @@ Legend
+ : added + : added
- : removed - : removed
2016-11-?? 2016-11-22
------------------ ------------------
+ supported object list @debugpage + supported object list @debugpage
+ New favorites bar. All repos are displayed in dropdown burger-button. A repo can be "starred" to appear in favbar.
! W3xx serialization change (v2.0.0). Now data file is stored as a separate file instead of base64 field in XML.
* Fixed bug in diff page: change counters values * Fixed bug in diff page: change counters values
2016-11-12 2016-11-12

View File

@ -35,9 +35,12 @@ CLASS lcl_dot_abapgit DEFINITION CREATE PRIVATE FINAL FRIENDS ltcl_dot_abapgit.
* set_starting_folder * set_starting_folder
* IMPORTING iv_path TYPE string, * IMPORTING iv_path TYPE string,
get_master_language get_master_language
RETURNING VALUE(rv_language) TYPE spras. RETURNING VALUE(rv_language) TYPE spras,
* set_master_language * set_master_language
* IMPORTING iv_language TYPE spras. * IMPORTING iv_language TYPE spras.
get_signature
RETURNING VALUE(rs_signature) TYPE ty_file_signature
RAISING lcx_exception.
PRIVATE SECTION. PRIVATE SECTION.
TYPES: BEGIN OF ty_dot_abapgit, TYPES: BEGIN OF ty_dot_abapgit,
@ -207,4 +210,13 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
* ms_data-master_language = iv_language. * ms_data-master_language = iv_language.
* ENDMETHOD. * ENDMETHOD.
METHOD get_signature.
rs_signature-path = gc_root_dir.
rs_signature-filename = gc_dot_abapgit.
rs_signature-sha1 = lcl_hash=>sha1( iv_type = gc_type-blob
iv_data = serialize( ) ).
ENDMETHOD. "get_signature
ENDCLASS. ENDCLASS.

View File

@ -12,8 +12,26 @@ CLASS lcl_object_w3super DEFINITION INHERITING FROM lcl_objects_super ABSTRACT.
PUBLIC SECTION. PUBLIC SECTION.
INTERFACES lif_object. INTERFACES lif_object.
TYPES: ty_wwwparams_tt TYPE STANDARD TABLE OF wwwparams WITH DEFAULT KEY.
METHODS:
constructor
IMPORTING
is_item TYPE ty_item
iv_language TYPE spras.
PROTECTED SECTION.
METHODS get_metadata REDEFINITION.
PRIVATE SECTION. PRIVATE SECTION.
METHODS init_key RETURNING VALUE(rs_key) TYPE wwwdatatab.
DATA ms_key TYPE wwwdatatab.
METHODS get_ext
IMPORTING it_params TYPE ty_wwwparams_tt
RETURNING VALUE(rv_ext) TYPE string
RAISING lcx_exception.
ENDCLASS. "lcl_object_W3SUPER DEFINITION ENDCLASS. "lcl_object_W3SUPER DEFINITION
@ -24,6 +42,12 @@ ENDCLASS. "lcl_object_W3SUPER DEFINITION
*----------------------------------------------------------------------* *----------------------------------------------------------------------*
CLASS lcl_object_w3super IMPLEMENTATION. CLASS lcl_object_w3super IMPLEMENTATION.
METHOD constructor.
super->constructor( is_item = is_item iv_language = iv_language ).
ms_key-relid = ms_item-obj_type+2(2).
ms_key-objid = ms_item-obj_name.
ENDMETHOD. " constructor.
METHOD lif_object~has_changed_since. METHOD lif_object~has_changed_since.
rv_changed = abap_true. rv_changed = abap_true.
ENDMETHOD. "lif_object~has_changed_since ENDMETHOD. "lif_object~has_changed_since
@ -32,13 +56,8 @@ CLASS lcl_object_w3super IMPLEMENTATION.
rv_user = c_user_unknown. " todo rv_user = c_user_unknown. " todo
ENDMETHOD. ENDMETHOD.
METHOD init_key.
rs_key-relid = ms_item-obj_type+2(2).
rs_key-objid = ms_item-obj_name.
ENDMETHOD. " init_key
METHOD lif_object~jump. METHOD lif_object~jump.
" No idea how to just to SMW0 " No idea how to jump to SMW0
lcx_exception=>raise( 'Please go to SMW0 for W3MI object' ). lcx_exception=>raise( 'Please go to SMW0 for W3MI object' ).
ENDMETHOD. "jump ENDMETHOD. "jump
@ -46,18 +65,17 @@ CLASS lcl_object_w3super IMPLEMENTATION.
rs_metadata = get_metadata( ). rs_metadata = get_metadata( ).
ENDMETHOD. "lif_object~get_metadata ENDMETHOD. "lif_object~get_metadata
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" METHOD get_metadata. "Redefinition
" W3xx EXISTS rs_metadata = super->get_metadata( ).
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" rs_metadata-version = 'v2.0.0'. " Seriazation v2, separate data file
ENDMETHOD. " get_metadata. "Redefinition
METHOD lif_object~exists. METHOD lif_object~exists.
DATA ls_key TYPE wwwdatatab.
ls_key = init_key( ). SELECT SINGLE objid INTO ms_key-objid
SELECT SINGLE objid INTO ls_key-objid
FROM wwwdata FROM wwwdata
WHERE relid = ls_key-relid WHERE relid = ms_key-relid
AND objid = ls_key-objid AND objid = ms_key-objid
AND srtf2 = 0. AND srtf2 = 0.
IF sy-subrc IS NOT INITIAL. IF sy-subrc IS NOT INITIAL.
@ -68,26 +86,19 @@ CLASS lcl_object_w3super IMPLEMENTATION.
ENDMETHOD. "lif_object~exists ENDMETHOD. "lif_object~exists
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" W3xx SERIALIZE
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
METHOD lif_object~serialize. METHOD lif_object~serialize.
DATA ls_key TYPE wwwdatatab.
DATA lt_w3mime TYPE STANDARD TABLE OF w3mime. DATA lt_w3mime TYPE STANDARD TABLE OF w3mime.
DATA lt_w3html TYPE STANDARD TABLE OF w3html. DATA lt_w3html TYPE STANDARD TABLE OF w3html.
DATA lt_w3params TYPE STANDARD TABLE OF wwwparams. DATA lt_w3params TYPE STANDARD TABLE OF wwwparams.
DATA lv_xstring TYPE xstring. DATA lv_xstring TYPE xstring.
DATA ls_wwwparam LIKE LINE OF lt_w3params. DATA ls_wwwparam LIKE LINE OF lt_w3params.
DATA lv_size TYPE int4. DATA lv_size TYPE int4.
DATA lv_base64str TYPE string.
DATA lo_utility TYPE REF TO cl_http_utility.
ls_key = init_key( ). SELECT SINGLE * INTO CORRESPONDING FIELDS OF ms_key
SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_key
FROM wwwdata FROM wwwdata
WHERE relid = ls_key-relid WHERE relid = ms_key-relid
AND objid = ls_key-objid AND objid = ms_key-objid
AND srtf2 = 0. AND srtf2 = 0.
IF sy-subrc IS NOT INITIAL. IF sy-subrc IS NOT INITIAL.
@ -96,7 +107,7 @@ CLASS lcl_object_w3super IMPLEMENTATION.
CALL FUNCTION 'WWWDATA_IMPORT' CALL FUNCTION 'WWWDATA_IMPORT'
EXPORTING EXPORTING
key = ls_key key = ms_key
TABLES TABLES
mime = lt_w3mime mime = lt_w3mime
html = lt_w3html html = lt_w3html
@ -110,8 +121,8 @@ CLASS lcl_object_w3super IMPLEMENTATION.
CALL FUNCTION 'WWWPARAMS_READ_ALL' CALL FUNCTION 'WWWPARAMS_READ_ALL'
EXPORTING EXPORTING
type = ls_key-relid type = ms_key-relid
objid = ls_key-objid objid = ms_key-objid
TABLES TABLES
params = lt_w3params params = lt_w3params
EXCEPTIONS EXCEPTIONS
@ -128,7 +139,7 @@ CLASS lcl_object_w3super IMPLEMENTATION.
lv_size = ls_wwwparam-value. lv_size = ls_wwwparam-value.
CASE ls_key-relid. CASE ms_key-relid.
WHEN 'MI'. WHEN 'MI'.
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING EXPORTING
@ -155,53 +166,54 @@ CLASS lcl_object_w3super IMPLEMENTATION.
lcx_exception=>raise( 'Cannot convert W3xx to xstring' ). lcx_exception=>raise( 'Cannot convert W3xx to xstring' ).
ENDIF. ENDIF.
CREATE OBJECT lo_utility.
lv_base64str = lo_utility->encode_x_base64( lv_xstring ).
io_xml->add( iv_name = 'NAME' io_xml->add( iv_name = 'NAME'
ig_data = ls_key-objid ). ig_data = ms_key-objid ).
io_xml->add( iv_name = 'TEXT' io_xml->add( iv_name = 'TEXT'
ig_data = ls_key-text ). ig_data = ms_key-text ).
io_xml->add( iv_name = 'DATA'
ig_data = lv_base64str ).
io_xml->add( iv_name = 'PARAMS' io_xml->add( iv_name = 'PARAMS'
ig_data = lt_w3params ). ig_data = lt_w3params ).
" Seriazation v2, separate data file. 'extra' added to prevent conflict with .xml
lif_object~mo_files->add_raw( iv_data = lv_xstring
iv_extra = 'data'
iv_ext = get_ext( lt_w3params ) ).
ENDMETHOD. "serialize ENDMETHOD. "serialize
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" W3xx DESERIALIZE
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
METHOD lif_object~deserialize. METHOD lif_object~deserialize.
DATA ls_key TYPE wwwdatatab.
DATA lv_base64str TYPE string. DATA lv_base64str TYPE string.
DATA lt_w3params TYPE STANDARD TABLE OF wwwparams. DATA lt_w3params TYPE STANDARD TABLE OF wwwparams.
DATA lv_xstring TYPE xstring. DATA lv_xstring TYPE xstring.
DATA lo_utility TYPE REF TO cl_http_utility.
DATA lt_w3mime TYPE STANDARD TABLE OF w3mime. DATA lt_w3mime TYPE STANDARD TABLE OF w3mime.
DATA lt_w3html TYPE STANDARD TABLE OF w3html. DATA lt_w3html TYPE STANDARD TABLE OF w3html.
DATA lv_size TYPE int4. DATA lv_size TYPE int4.
DATA lv_tadir_obj TYPE tadir-object. DATA lv_tadir_obj TYPE tadir-object.
ls_key = init_key( ).
io_xml->read( EXPORTING iv_name = 'TEXT' io_xml->read( EXPORTING iv_name = 'TEXT'
CHANGING cg_data = ls_key-text ). CHANGING cg_data = ms_key-text ).
io_xml->read( EXPORTING iv_name = 'DATA'
CHANGING cg_data = lv_base64str ).
io_xml->read( EXPORTING iv_name = 'PARAMS' io_xml->read( EXPORTING iv_name = 'PARAMS'
CHANGING cg_data = lt_w3params ). CHANGING cg_data = lt_w3params ).
CREATE OBJECT lo_utility. CASE io_xml->get_metadata( )-version.
lv_xstring = lo_utility->decode_x_base64( lv_base64str ). WHEN 'v1.0.0'.
io_xml->read( EXPORTING iv_name = 'DATA'
CHANGING cg_data = lv_base64str ).
lv_xstring = cl_http_utility=>decode_x_base64( lv_base64str ).
WHEN 'v2.0.0'.
lv_xstring = lif_object~mo_files->read_raw( iv_extra = 'data'
iv_ext = get_ext( lt_w3params ) ).
WHEN OTHERS.
lcx_exception=>raise( 'W3xx: Unknown serializer version' ).
CASE ls_key-relid. ENDCASE.
CASE ms_key-relid.
WHEN 'MI'. WHEN 'MI'.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING EXPORTING
@ -248,14 +260,14 @@ CLASS lcl_object_w3super IMPLEMENTATION.
lcx_exception=>raise( 'Cannot update W3xx params' ). lcx_exception=>raise( 'Cannot update W3xx params' ).
ENDIF. ENDIF.
ls_key-tdate = sy-datum. ms_key-tdate = sy-datum.
ls_key-ttime = sy-uzeit. ms_key-ttime = sy-uzeit.
ls_key-chname = sy-uname. ms_key-chname = sy-uname.
ls_key-devclass = iv_package. ms_key-devclass = iv_package.
CALL FUNCTION 'WWWDATA_EXPORT' CALL FUNCTION 'WWWDATA_EXPORT'
EXPORTING EXPORTING
key = ls_key key = ms_key
TABLES TABLES
mime = lt_w3mime mime = lt_w3mime
html = lt_w3html html = lt_w3html
@ -267,14 +279,14 @@ CLASS lcl_object_w3super IMPLEMENTATION.
lcx_exception=>raise( 'Cannot upload W3xx data' ). lcx_exception=>raise( 'Cannot upload W3xx data' ).
ENDIF. ENDIF.
CONCATENATE 'W3' ls_key-relid INTO lv_tadir_obj. CONCATENATE 'W3' ms_key-relid INTO lv_tadir_obj.
CALL FUNCTION 'TR_TADIR_INTERFACE' CALL FUNCTION 'TR_TADIR_INTERFACE'
EXPORTING EXPORTING
wi_tadir_pgmid = 'R3TR' wi_tadir_pgmid = 'R3TR'
wi_tadir_object = lv_tadir_obj wi_tadir_object = lv_tadir_obj
wi_tadir_devclass = iv_package wi_tadir_devclass = iv_package
wi_tadir_obj_name = ls_key-objid wi_tadir_obj_name = ms_key-objid
wi_test_modus = space wi_test_modus = space
EXCEPTIONS EXCEPTIONS
tadir_entry_not_existing = 1 tadir_entry_not_existing = 1
@ -309,17 +321,11 @@ CLASS lcl_object_w3super IMPLEMENTATION.
ENDMETHOD. "lif_object~deserialize ENDMETHOD. "lif_object~deserialize
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" W3xx DELETE
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
METHOD lif_object~delete. METHOD lif_object~delete.
DATA ls_key TYPE wwwdatatab.
ls_key = init_key( ).
CALL FUNCTION 'WWWDATA_DELETE' CALL FUNCTION 'WWWDATA_DELETE'
EXPORTING EXPORTING
key = ls_key key = ms_key
EXCEPTIONS EXCEPTIONS
wrong_object_type = 1 wrong_object_type = 1
delete_error = 2. delete_error = 2.
@ -330,7 +336,7 @@ CLASS lcl_object_w3super IMPLEMENTATION.
CALL FUNCTION 'WWWPARAMS_DELETE_ALL' CALL FUNCTION 'WWWPARAMS_DELETE_ALL'
EXPORTING EXPORTING
key = ls_key key = ms_key
EXCEPTIONS EXCEPTIONS
delete_error = 1. delete_error = 1.
@ -340,6 +346,21 @@ CLASS lcl_object_w3super IMPLEMENTATION.
ENDMETHOD. "lif_object~delete ENDMETHOD. "lif_object~delete
METHOD get_ext.
FIELD-SYMBOLS <param> LIKE LINE OF it_params.
READ TABLE it_params ASSIGNING <param> WITH KEY name = 'fileextension'.
IF sy-subrc > 0.
lcx_exception=>raise( |W3xx: Cannot find file ext for { ms_key-objid }| ).
ENDIF.
rv_ext = <param>-value.
SHIFT rv_ext LEFT DELETING LEADING '.'.
ENDMETHOD. " get_ext.
ENDCLASS. "lcl_object_W3SUPER IMPLEMENTATION ENDCLASS. "lcl_object_W3SUPER IMPLEMENTATION
*----------------------------------------------------------------------* *----------------------------------------------------------------------*

View File

@ -230,6 +230,16 @@ CLASS lcl_objects_files DEFINITION FINAL.
RAISING lcx_exception, RAISING lcx_exception,
add add
IMPORTING is_file TYPE ty_file, IMPORTING is_file TYPE ty_file,
add_raw
IMPORTING iv_extra TYPE clike OPTIONAL
iv_ext TYPE string
iv_data TYPE xstring
RAISING lcx_exception,
read_raw
IMPORTING iv_extra TYPE clike OPTIONAL
iv_ext TYPE string
RETURNING VALUE(rv_data) TYPE xstring
RAISING lcx_exception,
get_files get_files
RETURNING VALUE(rt_files) TYPE ty_files_tt, RETURNING VALUE(rt_files) TYPE ty_files_tt,
set_files set_files
@ -501,6 +511,32 @@ CLASS lcl_objects_files IMPLEMENTATION.
ENDMETHOD. " read_file. ENDMETHOD. " read_file.
METHOD add_raw.
DATA: ls_file TYPE ty_file.
ls_file-path = '/'.
ls_file-data = iv_data.
ls_file-filename = filename( iv_extra = iv_extra
iv_ext = iv_ext ).
APPEND ls_file TO mt_files.
ENDMETHOD. "add_raw
METHOD read_raw.
DATA: lv_filename TYPE string,
lv_data TYPE xstring.
lv_filename = filename( iv_extra = iv_extra
iv_ext = iv_ext ).
read_file( EXPORTING iv_filename = lv_filename
IMPORTING ev_data = rv_data ).
ENDMETHOD. "read_raw
ENDCLASS. "lcl_objects_files IMPLEMENTATION ENDCLASS. "lcl_objects_files IMPLEMENTATION
*----------------------------------------------------------------------* *----------------------------------------------------------------------*

View File

@ -260,12 +260,15 @@ CLASS lcl_repo_online IMPLEMENTATION.
lt_local = get_files_local( ). lt_local = get_files_local( ).
lv_branch_equal = boolc( get_sha1_remote( ) = get_sha1_local( ) ). lv_branch_equal = boolc( get_sha1_remote( ) = get_sha1_local( ) ).
DELETE lt_local WHERE item IS INITIAL. DELETE lt_local " Remove non-code related files except .abapgit
WHERE item IS INITIAL
AND NOT ( file-path = gc_root_dir AND file-filename = gc_dot_abapgit ).
SORT lt_local BY item. SORT lt_local BY item.
SORT lt_remote BY path filename. SORT lt_remote BY path filename.
LOOP AT lt_local ASSIGNING <ls_local>. LOOP AT lt_local ASSIGNING <ls_local>.
IF ls_last_item <> <ls_local>-item. " New item reached ? IF ls_last_item <> <ls_local>-item OR sy-tabix = 1. " First or New item reached ?
APPEND INITIAL LINE TO lt_checksums ASSIGNING <ls_checksum>. APPEND INITIAL LINE TO lt_checksums ASSIGNING <ls_checksum>.
<ls_checksum>-item = <ls_local>-item. <ls_checksum>-item = <ls_local>-item.
ls_last_item = <ls_local>-item. ls_last_item = <ls_local>-item.
@ -472,6 +475,7 @@ CLASS lcl_repo IMPLEMENTATION.
ENDIF. ENDIF.
lt_updated_files = lcl_objects=>deserialize( me ). lt_updated_files = lcl_objects=>deserialize( me ).
APPEND mo_dot_abapgit->get_signature( ) TO lt_updated_files.
CLEAR: mt_local, mv_last_serialization. CLEAR: mt_local, mv_last_serialization.

View File

@ -1792,6 +1792,7 @@ CLASS ltcl_path IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
ENDCLASS. "ltcl_path ENDCLASS. "ltcl_path
CLASS ltcl_file_status DEFINITION CLASS ltcl_file_status DEFINITION