diff --git a/changelog.txt b/changelog.txt index c08cff490..79a5a412b 100644 --- a/changelog.txt +++ b/changelog.txt @@ -8,9 +8,11 @@ Legend + : added - : removed -2016-11-?? +2016-11-22 ------------------ + 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 2016-11-12 diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 591659490..0f217ebb4 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -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.21.8'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.23.0'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index aba1cf1c1..67719c40a 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -167,6 +167,7 @@ CONSTANTS: BEGIN OF gc_action, repo_remote_detach TYPE string VALUE 'repo_remote_detach', repo_remote_change TYPE string VALUE 'repo_remote_change', repo_refresh_checksums TYPE string VALUE 'repo_refresh_checksums', + repo_toggle_fav TYPE string VALUE 'repo_toggle_fav', abapgit_home TYPE string VALUE 'abapgit_home', abapgit_install TYPE string VALUE 'abapgit_install', diff --git a/src/zabapgit_dot_abapgit.prog.abap b/src/zabapgit_dot_abapgit.prog.abap index 24c761ca4..36d823007 100644 --- a/src/zabapgit_dot_abapgit.prog.abap +++ b/src/zabapgit_dot_abapgit.prog.abap @@ -35,9 +35,12 @@ CLASS lcl_dot_abapgit DEFINITION CREATE PRIVATE FINAL FRIENDS ltcl_dot_abapgit. * set_starting_folder * IMPORTING iv_path TYPE string, get_master_language - RETURNING VALUE(rv_language) TYPE spras. + RETURNING VALUE(rv_language) TYPE spras, * set_master_language * IMPORTING iv_language TYPE spras. + get_signature + RETURNING VALUE(rs_signature) TYPE ty_file_signature + RAISING lcx_exception. PRIVATE SECTION. TYPES: BEGIN OF ty_dot_abapgit, @@ -207,4 +210,13 @@ CLASS lcl_dot_abapgit IMPLEMENTATION. * ms_data-master_language = iv_language. * 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. \ No newline at end of file diff --git a/src/zabapgit_gui_router.prog.abap b/src/zabapgit_gui_router.prog.abap index e37755aec..e148953cb 100644 --- a/src/zabapgit_gui_router.prog.abap +++ b/src/zabapgit_gui_router.prog.abap @@ -148,6 +148,9 @@ CLASS lcl_gui_router IMPLEMENTATION. WHEN gc_action-repo_refresh_checksums. " Rebuil local checksums lcl_services_repo=>refresh_local_checksums( lv_key ). ev_state = gc_event_state-re_render. + WHEN gc_action-repo_toggle_fav. " Toggle repo as favorite + lcl_services_repo=>toggle_favorite( lv_key ). + ev_state = gc_event_state-re_render. " ZIP services actions WHEN gc_action-zip_import. " Import repo from ZIP diff --git a/src/zabapgit_html.prog.abap b/src/zabapgit_html.prog.abap index 56506d677..784e91e9f 100644 --- a/src/zabapgit_html.prog.abap +++ b/src/zabapgit_html.prog.abap @@ -204,6 +204,7 @@ CLASS lcl_html_toolbar DEFINITION FINAL. iv_txt TYPE string io_sub TYPE REF TO lcl_html_toolbar OPTIONAL iv_act TYPE string OPTIONAL + iv_ico TYPE string OPTIONAL iv_opt TYPE c OPTIONAL iv_typ TYPE c DEFAULT gc_action_type-sapevent, count @@ -215,6 +216,8 @@ CLASS lcl_html_toolbar DEFINITION FINAL. iv_vertical TYPE abap_bool OPTIONAL iv_sort TYPE abap_bool OPTIONAL iv_as_angle TYPE abap_bool OPTIONAL + iv_with_icons TYPE abap_bool OPTIONAL + iv_add_minizone TYPE abap_bool OPTIONAL RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. @@ -222,6 +225,7 @@ CLASS lcl_html_toolbar DEFINITION FINAL. TYPES: BEGIN OF ty_item, txt TYPE string, act TYPE string, + ico TYPE string, sub TYPE REF TO lcl_html_toolbar, opt TYPE char1, typ TYPE char1, @@ -250,13 +254,14 @@ CLASS lcl_html_toolbar IMPLEMENTATION. ls_item-txt = iv_txt. ls_item-act = iv_act. + ls_item-ico = iv_ico. ls_item-sub = io_sub. ls_item-opt = iv_opt. ls_item-typ = iv_typ. APPEND ls_item TO mt_items. ENDMETHOD. "add - METHOD render. + METHOD render. "TODO refactor DATA: lv_class TYPE string, lv_is_drop TYPE abap_bool, @@ -292,13 +297,23 @@ CLASS lcl_html_toolbar IMPLEMENTATION. ENDIF. ro_html->add( |{ iv_as_droplist_with_label }| ). ENDIF. + + IF iv_add_minizone = abap_true. + ro_html->add( '
' ). + ENDIF. + ro_html->add( '' ). ENDIF. ro_html->add( '' ). diff --git a/src/zabapgit_http.prog.abap b/src/zabapgit_http.prog.abap index ba2f36952..51900ea66 100644 --- a/src/zabapgit_http.prog.abap +++ b/src/zabapgit_http.prog.abap @@ -307,7 +307,7 @@ CLASS lcl_http_digest IMPLEMENTATION. internal_error = 3 OTHERS = 4. IF sy-subrc <> 0. - BREAK-POINT. + lcx_exception=>raise( 'error from CALCULATE_HASH_FOR_RAW' ). ENDIF. rv_hash = lv_hash. diff --git a/src/zabapgit_object_fugr.prog.abap b/src/zabapgit_object_fugr.prog.abap index d8f0f107b..bfbe8a399 100644 --- a/src/zabapgit_object_fugr.prog.abap +++ b/src/zabapgit_object_fugr.prog.abap @@ -143,6 +143,7 @@ CLASS lcl_object_fugr IMPLEMENTATION. DATA: lv_include TYPE rs38l-include, lv_area TYPE rs38l-area, + lv_message TYPE string, lt_source TYPE TABLE OF abaptxt255. FIELD-SYMBOLS: LIKE LINE OF it_functions. @@ -208,7 +209,8 @@ CLASS lcl_object_fugr IMPLEMENTATION. canceled_in_corr = 10 OTHERS = 11. IF sy-subrc <> 0. - lcx_exception=>raise( 'error from RS_FUNCTIONMODULE_INSERT' ). + lcx_exception=>raise( |error from RS_FUNCTIONMODULE_INSERT: { + sy-subrc } { sy-msgid }{ sy-msgno }| ). ENDIF. INSERT REPORT lv_include FROM lt_source. diff --git a/src/zabapgit_object_tabl.prog.abap b/src/zabapgit_object_tabl.prog.abap index 6b1e4ce03..75dfaa72d 100644 --- a/src/zabapgit_object_tabl.prog.abap +++ b/src/zabapgit_object_tabl.prog.abap @@ -249,8 +249,10 @@ CLASS lcl_object_tabl IMPLEMENTATION. io_xml->add( iv_name = 'DD02V' ig_data = ls_dd02v ). - io_xml->add( iv_name = 'DD09L' - ig_data = ls_dd09l ). + IF NOT ls_dd09l IS INITIAL. + io_xml->add( iv_name = 'DD09L' + ig_data = ls_dd09l ). + ENDIF. io_xml->add( ig_data = lt_dd03p iv_name = 'DD03P_TABLE' ). io_xml->add( ig_data = lt_dd05m diff --git a/src/zabapgit_object_w3xx.prog.abap b/src/zabapgit_object_w3xx.prog.abap index c69b5355c..89b99283b 100644 --- a/src/zabapgit_object_w3xx.prog.abap +++ b/src/zabapgit_object_w3xx.prog.abap @@ -12,8 +12,26 @@ CLASS lcl_object_w3super DEFINITION INHERITING FROM lcl_objects_super ABSTRACT. PUBLIC SECTION. 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. - 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 @@ -24,6 +42,12 @@ ENDCLASS. "lcl_object_W3SUPER DEFINITION *----------------------------------------------------------------------* 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. rv_changed = abap_true. ENDMETHOD. "lif_object~has_changed_since @@ -32,13 +56,8 @@ CLASS lcl_object_w3super IMPLEMENTATION. rv_user = c_user_unknown. " todo 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. - " No idea how to just to SMW0 + " No idea how to jump to SMW0 lcx_exception=>raise( 'Please go to SMW0 for W3MI object' ). ENDMETHOD. "jump @@ -46,18 +65,17 @@ CLASS lcl_object_w3super IMPLEMENTATION. rs_metadata = get_metadata( ). ENDMETHOD. "lif_object~get_metadata - """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - " W3xx EXISTS - """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + METHOD get_metadata. "Redefinition + rs_metadata = super->get_metadata( ). + rs_metadata-version = 'v2.0.0'. " Seriazation v2, separate data file + ENDMETHOD. " get_metadata. "Redefinition + METHOD lif_object~exists. - DATA ls_key TYPE wwwdatatab. - ls_key = init_key( ). - - SELECT SINGLE objid INTO ls_key-objid + SELECT SINGLE objid INTO ms_key-objid FROM wwwdata - WHERE relid = ls_key-relid - AND objid = ls_key-objid + WHERE relid = ms_key-relid + AND objid = ms_key-objid AND srtf2 = 0. IF sy-subrc IS NOT INITIAL. @@ -68,26 +86,19 @@ CLASS lcl_object_w3super IMPLEMENTATION. ENDMETHOD. "lif_object~exists - """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - " W3xx SERIALIZE - """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" METHOD lif_object~serialize. - DATA ls_key TYPE wwwdatatab. + DATA lt_w3mime TYPE STANDARD TABLE OF w3mime. DATA lt_w3html TYPE STANDARD TABLE OF w3html. DATA lt_w3params TYPE STANDARD TABLE OF wwwparams. DATA lv_xstring TYPE xstring. DATA ls_wwwparam LIKE LINE OF lt_w3params. 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 ls_key + SELECT SINGLE * INTO CORRESPONDING FIELDS OF ms_key FROM wwwdata - WHERE relid = ls_key-relid - AND objid = ls_key-objid + WHERE relid = ms_key-relid + AND objid = ms_key-objid AND srtf2 = 0. IF sy-subrc IS NOT INITIAL. @@ -96,7 +107,7 @@ CLASS lcl_object_w3super IMPLEMENTATION. CALL FUNCTION 'WWWDATA_IMPORT' EXPORTING - key = ls_key + key = ms_key TABLES mime = lt_w3mime html = lt_w3html @@ -110,8 +121,8 @@ CLASS lcl_object_w3super IMPLEMENTATION. CALL FUNCTION 'WWWPARAMS_READ_ALL' EXPORTING - type = ls_key-relid - objid = ls_key-objid + type = ms_key-relid + objid = ms_key-objid TABLES params = lt_w3params EXCEPTIONS @@ -128,7 +139,7 @@ CLASS lcl_object_w3super IMPLEMENTATION. lv_size = ls_wwwparam-value. - CASE ls_key-relid. + CASE ms_key-relid. WHEN 'MI'. CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' EXPORTING @@ -155,53 +166,54 @@ CLASS lcl_object_w3super IMPLEMENTATION. lcx_exception=>raise( 'Cannot convert W3xx to xstring' ). ENDIF. - CREATE OBJECT lo_utility. - lv_base64str = lo_utility->encode_x_base64( lv_xstring ). - io_xml->add( iv_name = 'NAME' - ig_data = ls_key-objid ). + ig_data = ms_key-objid ). io_xml->add( iv_name = 'TEXT' - ig_data = ls_key-text ). - - io_xml->add( iv_name = 'DATA' - ig_data = lv_base64str ). + ig_data = ms_key-text ). io_xml->add( iv_name = 'PARAMS' 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 - """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - " W3xx DESERIALIZE - """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" METHOD lif_object~deserialize. - DATA ls_key TYPE wwwdatatab. DATA lv_base64str TYPE string. DATA lt_w3params TYPE STANDARD TABLE OF wwwparams. DATA lv_xstring TYPE xstring. - DATA lo_utility TYPE REF TO cl_http_utility. DATA lt_w3mime TYPE STANDARD TABLE OF w3mime. DATA lt_w3html TYPE STANDARD TABLE OF w3html. DATA lv_size TYPE int4. DATA lv_tadir_obj TYPE tadir-object. - ls_key = init_key( ). io_xml->read( EXPORTING iv_name = 'TEXT' - CHANGING cg_data = ls_key-text ). - - io_xml->read( EXPORTING iv_name = 'DATA' - CHANGING cg_data = lv_base64str ). + CHANGING cg_data = ms_key-text ). io_xml->read( EXPORTING iv_name = 'PARAMS' CHANGING cg_data = lt_w3params ). - CREATE OBJECT lo_utility. - lv_xstring = lo_utility->decode_x_base64( lv_base64str ). + CASE io_xml->get_metadata( )-version. + 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'. CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING @@ -248,14 +260,14 @@ CLASS lcl_object_w3super IMPLEMENTATION. lcx_exception=>raise( 'Cannot update W3xx params' ). ENDIF. - ls_key-tdate = sy-datum. - ls_key-ttime = sy-uzeit. - ls_key-chname = sy-uname. - ls_key-devclass = iv_package. + ms_key-tdate = sy-datum. + ms_key-ttime = sy-uzeit. + ms_key-chname = sy-uname. + ms_key-devclass = iv_package. CALL FUNCTION 'WWWDATA_EXPORT' EXPORTING - key = ls_key + key = ms_key TABLES mime = lt_w3mime html = lt_w3html @@ -267,14 +279,14 @@ CLASS lcl_object_w3super IMPLEMENTATION. lcx_exception=>raise( 'Cannot upload W3xx data' ). ENDIF. - CONCATENATE 'W3' ls_key-relid INTO lv_tadir_obj. + CONCATENATE 'W3' ms_key-relid INTO lv_tadir_obj. CALL FUNCTION 'TR_TADIR_INTERFACE' EXPORTING wi_tadir_pgmid = 'R3TR' wi_tadir_object = lv_tadir_obj wi_tadir_devclass = iv_package - wi_tadir_obj_name = ls_key-objid + wi_tadir_obj_name = ms_key-objid wi_test_modus = space EXCEPTIONS tadir_entry_not_existing = 1 @@ -309,17 +321,11 @@ CLASS lcl_object_w3super IMPLEMENTATION. ENDMETHOD. "lif_object~deserialize - """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - " W3xx DELETE - """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" METHOD lif_object~delete. - DATA ls_key TYPE wwwdatatab. - - ls_key = init_key( ). CALL FUNCTION 'WWWDATA_DELETE' EXPORTING - key = ls_key + key = ms_key EXCEPTIONS wrong_object_type = 1 delete_error = 2. @@ -330,7 +336,7 @@ CLASS lcl_object_w3super IMPLEMENTATION. CALL FUNCTION 'WWWPARAMS_DELETE_ALL' EXPORTING - key = ls_key + key = ms_key EXCEPTIONS delete_error = 1. @@ -340,6 +346,21 @@ CLASS lcl_object_w3super IMPLEMENTATION. ENDMETHOD. "lif_object~delete + METHOD get_ext. + + FIELD-SYMBOLS LIKE LINE OF it_params. + + READ TABLE it_params ASSIGNING WITH KEY name = 'fileextension'. + + IF sy-subrc > 0. + lcx_exception=>raise( |W3xx: Cannot find file ext for { ms_key-objid }| ). + ENDIF. + + rv_ext = -value. + SHIFT rv_ext LEFT DELETING LEADING '.'. + + ENDMETHOD. " get_ext. + ENDCLASS. "lcl_object_W3SUPER IMPLEMENTATION *----------------------------------------------------------------------* diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index d18b45734..7b1e4085c 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -230,6 +230,16 @@ CLASS lcl_objects_files DEFINITION FINAL. RAISING lcx_exception, add 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 RETURNING VALUE(rt_files) TYPE ty_files_tt, set_files @@ -501,6 +511,32 @@ CLASS lcl_objects_files IMPLEMENTATION. 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 *----------------------------------------------------------------------* diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap index 05696b421..c79517970 100644 --- a/src/zabapgit_objects_impl.prog.abap +++ b/src/zabapgit_objects_impl.prog.abap @@ -24,7 +24,9 @@ CLASS lcl_objects IMPLEMENTATION. lv_index = sy-tabix. IF -lstate IS NOT INITIAL - AND -lstate <> gc_state-deleted. + AND -lstate <> gc_state-deleted + AND NOT ( -lstate = gc_state-added + AND -rstate IS INITIAL ). lv_question = |It looks like object { -obj_type } { -obj_name } has been modified locally, overwrite object?|. @@ -617,7 +619,8 @@ CLASS lcl_objects IMPLEMENTATION. warning_overwrite( EXPORTING io_repo = io_repo CHANGING ct_results = lt_results ). - LOOP AT lt_results ASSIGNING WHERE obj_type IS NOT INITIAL. + LOOP AT lt_results ASSIGNING WHERE obj_type IS NOT INITIAL + AND NOT ( lstate = gc_state-added AND rstate IS INITIAL ). lcl_progress=>show( iv_key = 'Deserialize' iv_current = sy-tabix iv_total = lines( lt_results ) diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index 871464daf..0bbfad094 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -109,6 +109,15 @@ CLASS lcl_gui_page_super IMPLEMENTATION. ro_html->add( '' ). + IF abap_true = lcl_app=>user( )->is_favorite_repo( io_repo->get_key( ) ). + lv_icon = 'img/star' ##NO_TEXT. + ELSE. + lv_icon = 'img/star-grey' ##NO_TEXT. + ENDIF. + lv_icon = ||. + ro_html->add_anchor( iv_act = |{ gc_action-repo_toggle_fav }?{ io_repo->get_key( ) }| + iv_txt = lv_icon ). + IF lo_pback->exists( io_repo->get_key( ) ) = abap_true. ro_html->add( 'BG' ). ENDIF. @@ -370,6 +379,8 @@ CLASS lcl_gui_page_super IMPLEMENTATION. _add '.crossout { text-decoration: line-through !important; }'. _add '.right { text-align:right; }'. _add '.paddings { padding: 0.5em 0.5em; }'. + _add '.pad-sides { padding: 0 0.3em; }'. + _add '.pad4px { padding: 4px; }'. " Structure div styles: header, footer, toc _add '/* STRUCTURE DIVS, HEADER & FOOTER */'. @@ -433,7 +444,7 @@ CLASS lcl_gui_page_super IMPLEMENTATION. _add ' font-size: 12pt;'. _add '}'. - " Drop down styles + " Dropdown styles :mechanics _add '/*DROP DOWN*/'. _add '.dropdown {'. _add ' position: relative;'. @@ -456,20 +467,47 @@ CLASS lcl_gui_page_super IMPLEMENTATION. _add ' display: none;'. _add ' z-index: 1;'. _add ' position: absolute;'. - _add ' right: 0;'. -* _add ' top: 1.1em; /*IE7 woraround*/'. - _add ' background-color: #f9f9f9;'. + _add ' right: -12px;'. + _add ' top: 1em;'. + _add ' padding: 6px 10px 10px 10px;'. _add ' white-space: nowrap;'. -* _add ' min-width: 10em;'. - _add ' border-bottom: 1px solid lightgrey;'. _add '}'. + _add '.dropdown div.minizone {'. + _add ' display: none;'. + _add ' z-index: 1;'. + _add ' position: absolute;'. + _add ' padding: 0px;'. + _add ' width: 16px;'. + _add ' height: 16px;'. + _add ' bottom: 0px;'. + _add ' left: -16px;'. + _add '}'. + + _add '.dropdown:hover .dropdown_content { display: block; }'. + _add '.dropdown:hover .minizone { display: block; }'. + + " Dropdown styles :styling _add '.dropdown_content a {'. _add ' padding: 0.2em;'. + _add ' background-color: #f9f9f9;'. _add ' text-decoration: none;'. _add ' display: block;'. + _add ' border: none !important;'. _add '}'. + + + _add '.dropdown_content div.box {'. + _add ' border-bottom: 1px solid #C0C0C0;'. + _add ' border-right: 1px solid #C0C0C0;'. + _add ' background-color: #f9f9f9;'. + _add ' padding: 2px;'. + _add '}'. + + _add '.dropdown_content td { text-align: left; padding: 2px; }'. " TODO refactor + _add '.dropdown_content td a { padding: 0em 0.2em; }'. " TODO refactor + _add '.dropdown_content td.icon { padding: 0 3px 0 6px; }'. " TODO refactor + _add '.dropdown_content a:hover { background-color: #f1f1f1 }'. - _add '.dropdown:hover .dropdown_content { display: block; }'. _add '.dropdown:hover .dropbtn { color: #79a0d2; }'. " REPOSITORY diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap index 7d2c04b0b..61237c1f6 100644 --- a/src/zabapgit_page_main.prog.abap +++ b/src/zabapgit_page_main.prog.abap @@ -26,12 +26,7 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super. retrieve_active_repo RAISING lcx_exception, render_toc - IMPORTING it_list TYPE lcl_repo_srv=>ty_repo_tt - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper - RAISING lcx_exception, - render_toc_line - IMPORTING io_toolbar TYPE REF TO lcl_html_toolbar - iv_image_url TYPE string + IMPORTING it_repo_list TYPE lcl_repo_srv=>ty_repo_tt RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper RAISING lcx_exception, build_main_menu @@ -194,81 +189,100 @@ CLASS lcl_gui_page_main IMPLEMENTATION. METHOD render_toc. DATA: lo_pback TYPE REF TO lcl_persistence_background, - lo_repo LIKE LINE OF it_list, - lv_opt TYPE c LENGTH 1, - lo_online TYPE REF TO lcl_html_toolbar, - lo_offline TYPE REF TO lcl_html_toolbar, + lv_opt TYPE char1, + lv_key TYPE lcl_persistence_repo=>ty_repo-key, + lv_icon TYPE string, + lo_repo LIKE LINE OF it_repo_list, + lo_favbar TYPE REF TO lcl_html_toolbar, + lo_allbar TYPE REF TO lcl_html_toolbar, + lt_favorites TYPE lcl_persistence_user=>tt_favorites, lv_repo_title TYPE string. CREATE OBJECT ro_html. - CREATE OBJECT lo_online. - CREATE OBJECT lo_offline. + CREATE OBJECT lo_favbar. + CREATE OBJECT lo_allbar. CREATE OBJECT lo_pback. - IF lines( it_list ) = 0. - RETURN. - ENDIF. + lt_favorites = lcl_app=>user( )->get_favorites( ). - LOOP AT it_list INTO lo_repo. - IF mv_show = lo_repo->get_key( ). + LOOP AT it_repo_list INTO lo_repo. + lv_key = lo_repo->get_key( ). + IF lv_key = mv_show. lv_opt = gc_html_opt-emphas. ELSE. CLEAR lv_opt. ENDIF. - IF lo_repo->is_offline( ) = abap_true. - lo_offline->add( iv_txt = lo_repo->get_name( ) - iv_act = |{ c_actions-show }?{ lo_repo->get_key( ) }| - iv_opt = lv_opt ). - ELSE. - - lv_repo_title = lo_repo->get_name( ). - IF lo_pback->exists( lo_repo->get_key( ) ) = abap_true. - lv_repo_title = lv_repo_title && 'bg'. " Background marker - ENDIF. - - lo_online->add( iv_txt = lv_repo_title - iv_act = |{ c_actions-show }?{ lo_repo->get_key( ) }| - iv_opt = lv_opt ). - + lv_repo_title = lo_repo->get_name( ). + IF lo_pback->exists( lv_key ) = abap_true. + lv_repo_title = lv_repo_title && 'bg'. " Background marker ENDIF. + READ TABLE lt_favorites TRANSPORTING NO FIELDS + WITH KEY table_line = lv_key. + + IF sy-subrc = 0. + DELETE lt_favorites INDEX sy-tabix. " for later cleanup + lo_favbar->add( iv_txt = lv_repo_title + iv_act = |{ c_actions-show }?{ lv_key }| + iv_opt = lv_opt ). + ENDIF. + + IF lo_repo->is_offline( ) = abap_true. + lv_icon = ''. + ELSE. + lv_icon = ''. + ENDIF. + + lo_allbar->add( iv_txt = lv_repo_title + iv_act = |{ c_actions-show }?{ lv_key }| + iv_ico = lv_icon + iv_opt = lv_opt ). ENDLOOP. - ro_html->add( '
' ) ##NO_TEXT. + " Cleanup orphan favorites (for removed repos) + LOOP AT lt_favorites INTO lv_key. + lcl_app=>user( )->toggle_favorite( lv_key ). + ENDLOOP. - IF lo_online->count( ) > 0. - ro_html->add( render_toc_line( io_toolbar = lo_online - iv_image_url = 'img/repo_online' ) ). + " Render HTML + ro_html->add( '
' ) ##NO_TEXT. " TODO refactor html & css + ro_html->add( '
' ) ##NO_TEXT. + ro_html->add( '
' ) ##NO_TEXT. + +********************************************************************** + + ro_html->add( '' ). + ro_html->add( '' ). + + ro_html->add( '' ). - IF lo_offline->count( ) > 0. - ro_html->add( render_toc_line( io_toolbar = lo_offline - iv_image_url = 'img/repo_offline' ) ). - ENDIF. + ro_html->add( '' ). + ro_html->add( '
' ). " Maximize width + IF lo_favbar->count( ) > 0. + ro_html->add( lo_favbar->render( iv_sort = abap_true ) ). + ELSE. + ro_html->add( 'No favorites found. Please' + && ' click icon repo toolbar to add' + && ' it as favourite. Choose a repo there →' ). ENDIF. + ro_html->add( '' ). + ro_html->add( lo_allbar->render( + iv_as_droplist_with_label = '' + iv_sort = abap_true + iv_with_icons = abap_true + iv_add_minizone = abap_true ) ). + ro_html->add( '
' ). - ro_html->add( '
' ). +********************************************************************** + + ro_html->add( '
' ). + ro_html->add( '
' ). + ro_html->add( '
' ). ENDMETHOD. "render_toc - METHOD render_toc_line. - CREATE OBJECT ro_html. - - ro_html->add( '
' ). - - ro_html->add( '' ). - - ro_html->add( '' ). - - ro_html->add( '
' ). - ro_html->add( || ). - ro_html->add( '' ). - ro_html->add( io_toolbar->render( iv_sort = abap_true ) ). - ro_html->add( '
' ). - - ENDMETHOD. "render_toc_line - METHOD render_explore. DATA lo_toolbar TYPE REF TO lcl_html_toolbar. @@ -430,34 +444,12 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ls_image-url = 'img/repo_offline' ##NO_TEXT. ls_image-content = - 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBB' - && 'ZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/' - && 'eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+' - && 'IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2Jl' - && 'IFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAg' - && 'ICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5' - && 'LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9' - && 'IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHht' - && 'bG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3Vy' - && 'Y2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHht' - && 'cE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpkOTZmYmU4Yi0yMjEzLTZlNDct' - && 'ODZiZC05NGE1ZTM1ZmJiMzUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDQ2RTFD' - && 'MTA0OTkwMTFFNjlCMzk5MTg2OTAzMDVDRDIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5p' - && 'aWQ6NDQ2RTFDMEY0OTkwMTFFNjlCMzk5MTg2OTAzMDVDRDIiIHhtcDpDcmVhdG9yVG9v' - && 'bD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiPiA8eG1wTU06RGVy' - && 'aXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpkOTZmYmU4Yi0yMjEzLTZl' - && 'NDctODZiZC05NGE1ZTM1ZmJiMzUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6ZDk2' - && 'ZmJlOGItMjIxMy02ZTQ3LTg2YmQtOTRhNWUzNWZiYjM1Ii8+IDwvcmRmOkRlc2NyaXB0' - && 'aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+SXqL' - && 'ugAAAWVJREFUeNrEk7tKxEAYheeSm0RXUNBaEcTOB7CxsrBXwWIbEQuLiGAnhtQW6XwK' - && 'O1/CN/ARBLuwmrC5jOfEGVhFIbCFP3z7zyY7J+f8s5HGGDFPKTFnSbfIskwopTbDMFzW' - && 'Wi/hUg3e4bCWUmqsV8EE6xdeT5Kk3+c5ga7rbtDS6XTaosf2smFhE3Mq3/ffwCXWj3me' - && 'G4r0EdI0HaHd4smR53kxnEiC4ofG2ouiiALr+N0dWPs5gyOwyEhwIJumEXVdC3Y4E+67' - && 'HfgOOHARnMDYxvhzWE4MpSG0iwh9fAX7W+h7NrCAZYEoIgiCHtg2iCUI73EmZVmeF0Wx' - && '7RyMZwb5DSvIefCERNu2oqoqRoxx78SdwjM4BQFngI2EwtIOcIF86XcfBJsnPFIncAgu' - && 'fstNB3wqcaOwROAePCl7AkPrGGzQjdvnWSsrAwX27X9AzUa4Ag9gNEDgzPZXcN2/C//+' - && 'Nn4KMABcS6Z2qzb7wwAAAABJRU5ErkJggg=='. - + 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAVFBMVEUAAACAgICAgICA' + && 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA' + && 'gICAgICAgICAgICAgICAgICAgICAgICuaWnmAAAAG3RSTlMAAgQFBgsQFxweIiMtN3yI' + && 'nqOvt9Hp6/Hz9fktMNR/AAAAXElEQVQYV5WO2xJAMAxES1q3ugfF/v9/0qLyyL4k58xk' + && 'J0p9D7N5oeqZgSwy7fDZnHNdEE1gWK116tksl7hPimGFFPWYl7MU0zksRCl8TStKg1AJ' + && '0XNC8Zm4/c0BUVQHi0llOUYAAAAASUVORK5CYII='. APPEND ls_image TO rt_assets. ls_image-url = 'img/pkg' ##NO_TEXT. @@ -535,6 +527,38 @@ CLASS lcl_gui_page_main IMPLEMENTATION. && 'VAFeBlYOTiTAzoThewD5hBAcnWM4gwAAAABJRU5ErkJggg=='. APPEND ls_image TO rt_assets. + ls_image-url = 'img/burger' ##NO_TEXT. + ls_image-content = + 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAHlBMVEUAAABtktltktlt' + && 'ktltktltktltktltktltktltktk7ccVDAAAACXRSTlMAFDBLY2SFoPGv/DFMAAAAJ0lE' + && 'QVQIW2NggIHKmWAwmaETwpjGoBoKBo4MmIAkxXApuGK4dgwAAJa5IzLs+gRBAAAAAElF' + && 'TkSuQmCC'. + APPEND ls_image TO rt_assets. + + ls_image-url = 'img/star' ##NO_TEXT. + ls_image-content = + 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAilBMVEUAAABejclejcle' + && 'jclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejcle' + && 'jclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejcle' + && 'jclejclejclejclejclejclejclejclejcn2yvsVAAAALXRSTlMAAQIFBwkKCw0QERUY' + && 'HB4jLzEzNjg7PVdYYmRvd3mDm52eub7R0+Tr8fX3+/16wo8zAAAAcElEQVQYGW3BBxKC' + && 'MABFwYcQETv2hg1UVP79ryeTZBxw3MWL+JGltBgVtGRSSoORVOAE8Xi5zVU7rWfDCOaV' + && 'Gu59mLz0dTPUBg95eYjVK2VdOzjBW9YZL5FT4i2k5+YoKcY5VPsQkoumOLsu1mjFHx8o' + && 'ahA3YV7OfwAAAABJRU5ErkJggg=='. + APPEND ls_image TO rt_assets. + + ls_image-url = 'img/star-grey' ##NO_TEXT. + ls_image-content = + 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAilBMVEUAAADQ0NDQ0NDQ' + && '0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ' + && '0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ' + && '0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NC2QdifAAAALXRSTlMAAQIFBwkKCw0QERUY' + && 'HB4jLzEzNjg7PVdYYmRvd3mDm52eub7R0+Tr8fX3+/16wo8zAAAAcElEQVQYGW3BBxKC' + && 'MABFwYcQETv2hg1UVP79ryeTZBxw3MWL+JGltBgVtGRSSoORVOAE8Xi5zVU7rWfDCOaV' + && 'Gu59mLz0dTPUBg95eYjVK2VdOzjBW9YZL5FT4i2k5+YoKcY5VPsQkoumOLsu1mjFHx8o' + && 'ahA3YV7OfwAAAABJRU5ErkJggg=='. + APPEND ls_image TO rt_assets. + ENDMETHOD. "get_assets ENDCLASS. \ No newline at end of file diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index 11e0d5e2c..e8c026571 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -114,6 +114,7 @@ CLASS lcl_persistence_repo DEFINITION FINAL. INCLUDE TYPE ty_repo_xml. TYPES: END OF ty_repo. TYPES: tt_repo TYPE STANDARD TABLE OF ty_repo WITH DEFAULT KEY. + TYPES: tt_repo_keys TYPE STANDARD TABLE OF ty_repo-key WITH DEFAULT KEY. METHODS constructor. @@ -359,6 +360,8 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. PUBLIC SECTION. + TYPES: tt_favorites TYPE lcl_persistence_repo=>tt_repo_keys. + METHODS set_username IMPORTING iv_username TYPE string RAISING lcx_exception. @@ -419,6 +422,19 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. RETURNING VALUE(rv_changes_only) TYPE abap_bool RAISING lcx_exception. + METHODS get_favorites + RETURNING VALUE(rt_favorites) TYPE tt_favorites + RAISING lcx_exception. + + METHODS toggle_favorite + IMPORTING iv_repo_key TYPE lcl_persistence_repo=>ty_repo-key + RAISING lcx_exception. + + METHODS is_favorite_repo + IMPORTING iv_repo_key TYPE lcl_persistence_repo=>ty_repo-key + RETURNING VALUE(rv_yes) TYPE abap_bool + RAISING lcx_exception. + PRIVATE SECTION. CONSTANTS c_type_user TYPE lcl_persistence_db=>ty_type VALUE 'USER'. @@ -438,6 +454,7 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. repo_config TYPE ty_repo_config_tt, hide_files TYPE abap_bool, changes_only TYPE abap_bool, + favorites TYPE tt_favorites, END OF ty_user. METHODS constructor @@ -525,7 +542,7 @@ CLASS lcl_persistence_user IMPLEMENTATION. ls_user-repo_show = iv_key. update( ls_user ). - COMMIT WORK. + COMMIT WORK AND WAIT. ENDMETHOD. @@ -681,9 +698,51 @@ CLASS lcl_persistence_user IMPLEMENTATION. ENDMETHOD. "get_changes_only + METHOD get_favorites. + + rt_favorites = read( )-favorites. + + ENDMETHOD. "get_favorites + + METHOD toggle_favorite. + + DATA: ls_user TYPE ty_user. + + ls_user = read( ). + + READ TABLE ls_user-favorites TRANSPORTING NO FIELDS + WITH KEY table_line = iv_repo_key. + + IF sy-subrc = 0. + DELETE ls_user-favorites INDEX sy-tabix. + ELSE. + APPEND iv_repo_key TO ls_user-favorites. + ENDIF. + + update( ls_user ). + + ENDMETHOD. " toggle_favorite. + + METHOD is_favorite_repo. + + DATA: lt_favorites TYPE tt_favorites. + + lt_favorites = get_favorites( ). + + READ TABLE lt_favorites TRANSPORTING NO FIELDS + WITH KEY table_line = iv_repo_key. + + rv_yes = boolc( sy-subrc = 0 ). + + ENDMETHOD. " is_favorite_repo. ENDCLASS. + +*----------------------------------------------------------------------* +* CLASS lcl_persistence_db +*----------------------------------------------------------------------* + CLASS lcl_persistence_db IMPLEMENTATION. METHOD list_by_type. @@ -800,6 +859,11 @@ CLASS lcl_persistence_db IMPLEMENTATION. ENDCLASS. + +*----------------------------------------------------------------------* +* CLASS lcl_persistence_repo +*----------------------------------------------------------------------* + CLASS lcl_persistence_repo IMPLEMENTATION. METHOD add. diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 06fb5ba92..39da085eb 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -260,12 +260,15 @@ CLASS lcl_repo_online IMPLEMENTATION. lt_local = get_files_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_remote BY path filename. LOOP AT lt_local ASSIGNING . - IF ls_last_item <> -item. " New item reached ? + IF ls_last_item <> -item OR sy-tabix = 1. " First or New item reached ? APPEND INITIAL LINE TO lt_checksums ASSIGNING . -item = -item. ls_last_item = -item. @@ -472,6 +475,7 @@ CLASS lcl_repo IMPLEMENTATION. ENDIF. lt_updated_files = lcl_objects=>deserialize( me ). + APPEND mo_dot_abapgit->get_signature( ) TO lt_updated_files. CLEAR: mt_local, mv_last_serialization. diff --git a/src/zabapgit_services_repo.prog.abap b/src/zabapgit_services_repo.prog.abap index 37571ad01..f33acb264 100644 --- a/src/zabapgit_services_repo.prog.abap +++ b/src/zabapgit_services_repo.prog.abap @@ -39,6 +39,10 @@ CLASS lcl_services_repo DEFINITION FINAL. IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key RAISING lcx_exception lcx_cancel. + CLASS-METHODS toggle_favorite + IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key + RAISING lcx_exception. + ENDCLASS. "lcl_services_repo CLASS lcl_services_repo IMPLEMENTATION. @@ -62,6 +66,7 @@ CLASS lcl_services_repo IMPLEMENTATION. lo_repo->deserialize( ). lcl_app=>user( )->set_repo_show( lo_repo->get_key( ) ). " Set default repo for user + toggle_favorite( lo_repo->get_key( ) ). COMMIT WORK. @@ -170,6 +175,7 @@ CLASS lcl_services_repo IMPLEMENTATION. iv_package = ls_popup-package ). lcl_app=>user( )->set_repo_show( lo_repo->get_key( ) ). " Set default repo for user + toggle_favorite( lo_repo->get_key( ) ). COMMIT WORK. @@ -282,4 +288,10 @@ CLASS lcl_services_repo IMPLEMENTATION. ENDMETHOD. "refresh_local_checksums + METHOD toggle_favorite. + + lcl_app=>user( )->toggle_favorite( iv_key ). + + ENDMETHOD. " toggle_favorite. + ENDCLASS. "lcl_services_repo \ No newline at end of file diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index 43828e8ce..fa141fbc5 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -1792,6 +1792,7 @@ CLASS ltcl_path IMPLEMENTATION. ENDMETHOD. + ENDCLASS. "ltcl_path CLASS ltcl_file_status DEFINITION diff --git a/src/zabapgit_xml.prog.abap b/src/zabapgit_xml.prog.abap index aa679df6c..824505338 100644 --- a/src/zabapgit_xml.prog.abap +++ b/src/zabapgit_xml.prog.abap @@ -86,7 +86,7 @@ CLASS lcl_xml IMPLEMENTATION. ENDIF. * buffer serializer metadata. Git node will be removed lateron - ms_metadata-class = li_element->get_attribute_ns( c_attr_serializer ). + ms_metadata-class = li_element->get_attribute_ns( c_attr_serializer ). ms_metadata-version = li_element->get_attribute_ns( c_attr_serializer_version ). ENDMETHOD. "parse