diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index d1f4b4649..502d19d4a 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -3,7 +3,7 @@ REPORT zabapgit. * See http://www.abapgit.org CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.7.12'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.7.13'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) @@ -12315,7 +12315,6 @@ ENDCLASS. "lcl_object_W3MI DEFINITION CLASS lcl_object_w3ht DEFINITION INHERITING FROM lcl_object_w3super FINAL. ENDCLASS. "lcl_object_W3HT DEFINITION - *----------------------------------------------------------------------* * CLASS lcl_file_status DEFINITION *----------------------------------------------------------------------* @@ -12351,6 +12350,180 @@ CLASS lcl_file_status DEFINITION FINAL. ENDCLASS. "lcl_file_status DEFINITION +CLASS lcl_persistence_db DEFINITION FINAL. + + PUBLIC SECTION. + CONSTANTS: + c_tabname TYPE tabname VALUE 'ZABAPGIT', + c_lock TYPE viewname VALUE 'EZABAPGIT'. + + TYPES: ty_type TYPE c LENGTH 12. + TYPES: ty_value TYPE c LENGTH 12. + + TYPES: BEGIN OF ty_content, + type TYPE ty_type, + value TYPE ty_value, + data_str TYPE string, + END OF ty_content, + tt_content TYPE SORTED TABLE OF ty_content WITH UNIQUE KEY value. + + METHODS list_by_type + IMPORTING iv_type TYPE ty_type + RETURNING VALUE(rt_content) TYPE tt_content. + + METHODS list + RETURNING VALUE(rt_content) TYPE tt_content. + + METHODS add + IMPORTING iv_type TYPE ty_type + iv_value TYPE ty_content-value + iv_data TYPE ty_content-data_str + RAISING lcx_exception. + + METHODS delete + IMPORTING iv_type TYPE ty_type + iv_value TYPE ty_content-value + RAISING lcx_exception. + + METHODS update + IMPORTING iv_type TYPE ty_type + iv_value TYPE ty_content-value + iv_data TYPE ty_content-data_str + RAISING lcx_exception. + + METHODS modify + IMPORTING iv_type TYPE ty_type + iv_value TYPE ty_content-value + iv_data TYPE ty_content-data_str + RAISING lcx_exception. + + METHODS read + IMPORTING iv_type TYPE ty_type + iv_value TYPE ty_content-value + RETURNING VALUE(rv_data) TYPE ty_content-data_str + RAISING lcx_not_found. + + METHODS lock + IMPORTING iv_mode TYPE enqmode DEFAULT 'E' + iv_type TYPE ty_type + iv_value TYPE ty_content-value + RAISING lcx_exception. + +ENDCLASS. + +CLASS lcl_persistence_repo DEFINITION FINAL. + + PUBLIC SECTION. + TYPES: BEGIN OF ty_repo_xml, + url TYPE string, + branch_name TYPE string, + sha1 TYPE ty_sha1, + package TYPE devclass, + offline TYPE sap_bool, + END OF ty_repo_xml. + + TYPES: BEGIN OF ty_repo, + key TYPE lcl_persistence_db=>ty_value. + INCLUDE TYPE ty_repo_xml. + TYPES: END OF ty_repo. + TYPES: tt_repo TYPE STANDARD TABLE OF ty_repo WITH DEFAULT KEY. + + METHODS constructor. + + METHODS list + RETURNING VALUE(rt_repos) TYPE tt_repo + RAISING lcx_exception. + + METHODS update + IMPORTING iv_key TYPE ty_repo-key + iv_branch_sha1 TYPE ty_sha1 + RAISING lcx_exception. + + METHODS add + IMPORTING iv_url TYPE string + iv_branch_name TYPE string + iv_branch TYPE ty_sha1 OPTIONAL + iv_package TYPE devclass + iv_offline TYPE sap_bool DEFAULT abap_false + RETURNING VALUE(rv_key) TYPE ty_repo-key + RAISING lcx_exception. + + METHODS delete + IMPORTING iv_key TYPE ty_repo-key + RAISING lcx_exception. + + METHODS read + IMPORTING iv_key TYPE ty_repo-key + RETURNING VALUE(rs_repo) TYPE ty_repo + RAISING lcx_exception + lcx_not_found. + + METHODS lock + IMPORTING iv_mode TYPE enqmode + iv_key TYPE ty_repo-key + RAISING lcx_exception. + + PRIVATE SECTION. + CONSTANTS c_type_repo TYPE lcl_persistence_db=>ty_type VALUE 'REPO'. + + DATA: mo_db TYPE REF TO lcl_persistence_db. + + METHODS from_xml + IMPORTING iv_repo_xml_string TYPE string + RETURNING VALUE(rs_repo) TYPE ty_repo_xml + RAISING lcx_exception. + + METHODS to_xml + IMPORTING is_repo TYPE ty_repo + RETURNING VALUE(rv_repo_xml_string) TYPE string. + + METHODS get_next_id + RETURNING VALUE(rv_next_repo_id) TYPE lcl_persistence_db=>ty_content-value + RAISING lcx_exception. + +ENDCLASS. + +*----------------------------------------------------------------------* +* CLASS lcl_repo DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_repo DEFINITION ABSTRACT. + + PUBLIC SECTION. + METHODS: + constructor + IMPORTING is_data TYPE lcl_persistence_repo=>ty_repo, + get_key + RETURNING VALUE(rv_key) TYPE lcl_persistence_db=>ty_value, + get_name + RETURNING VALUE(rv_name) TYPE string + RAISING lcx_exception, + get_files_local + RETURNING VALUE(rt_files) TYPE ty_files_tt + RAISING lcx_exception, + get_files_remote + RETURNING VALUE(rt_files) TYPE ty_files_tt + RAISING lcx_exception, + get_package + RETURNING VALUE(rv_package) TYPE lcl_persistence_repo=>ty_repo-package, + delete + RAISING lcx_exception, + deserialize + RAISING lcx_exception, + refresh + RAISING lcx_exception, + is_offline + RETURNING VALUE(rv_offline) TYPE abap_bool + RAISING lcx_exception. + + PROTECTED SECTION. + DATA: mt_local TYPE ty_files_tt, + mt_remote TYPE ty_files_tt, + ms_data TYPE lcl_persistence_repo=>ty_repo. + +ENDCLASS. "lcl_repo DEFINITION + *----------------------------------------------------------------------* * CLASS lcl_object DEFINITION *----------------------------------------------------------------------* @@ -12367,8 +12540,7 @@ CLASS lcl_objects DEFINITION FINAL. RAISING lcx_exception. CLASS-METHODS deserialize - IMPORTING it_files TYPE ty_files_tt - iv_package TYPE devclass + IMPORTING io_repo TYPE REF TO lcl_repo RAISING lcx_exception. CLASS-METHODS delete @@ -12594,9 +12766,10 @@ CLASS lcl_file_status IMPLEMENTATION. ls_item TYPE ty_item, lt_tadir TYPE lcl_tadir=>ty_tadir_tt, ls_tadir TYPE tadir, + lt_remote TYPE ty_files_tt, lv_ext TYPE string. - FIELD-SYMBOLS: LIKE LINE OF it_files, + FIELD-SYMBOLS: TYPE ty_file, LIKE LINE OF lt_tadir, LIKE LINE OF rt_results, LIKE LINE OF lt_files. @@ -12655,7 +12828,8 @@ CLASS lcl_file_status IMPLEMENTATION. lt_tadir = lcl_tadir=>read( iv_package ). LOOP AT lt_tadir ASSIGNING . READ TABLE rt_results - WITH KEY obj_type = -object obj_name = -obj_name + WITH KEY obj_type = -object + obj_name = -obj_name TRANSPORTING NO FIELDS. IF sy-subrc <> 0. CLEAR ls_result. @@ -13356,6 +13530,7 @@ CLASS lcl_objects IMPLEMENTATION. DATA: ls_item TYPE ty_item, lv_cancel TYPE abap_bool, li_obj TYPE REF TO lif_object, + lt_remote TYPE ty_files_tt, lo_files TYPE REF TO lcl_objects_files, lo_xml TYPE REF TO lcl_xml_input, lt_results TYPE lcl_file_status=>ty_results_tt, @@ -13367,8 +13542,10 @@ CLASS lcl_objects IMPLEMENTATION. lcl_objects_activation=>clear( ). - lt_results = lcl_file_status=>status( it_files = it_files - iv_package = iv_package ). + lt_remote = io_repo->get_files_remote( ). + + lt_results = lcl_file_status=>status( it_files = lt_remote + iv_package = io_repo->get_package( ) ). DELETE lt_results WHERE match = abap_true. SORT lt_results BY obj_type ASCENDING obj_name ASCENDING. DELETE ADJACENT DUPLICATES FROM lt_results COMPARING obj_type obj_name. @@ -13387,7 +13564,7 @@ CLASS lcl_objects IMPLEMENTATION. REPLACE ALL OCCURRENCES OF '#' IN ls_item-obj_name WITH '/'. lv_cancel = check_warning( is_item = ls_item - iv_package = iv_package ). + iv_package = io_repo->get_package( ) ). IF lv_cancel = abap_true. RETURN. ENDIF. @@ -13395,9 +13572,9 @@ CLASS lcl_objects IMPLEMENTATION. CREATE OBJECT lo_files EXPORTING is_item = ls_item. - lo_files->set_files( it_files ). + lo_files->set_files( lt_remote ). -* Analyze XML in order to instantiate the proper serializer +* Analyze XML in order to instantiate the proper serializer lo_xml = lo_files->read_xml( ). li_obj = create_object( is_item = ls_item @@ -13412,7 +13589,7 @@ CLASS lcl_objects IMPLEMENTATION. CONTINUE. ENDIF. - li_obj->deserialize( iv_package = iv_package + li_obj->deserialize( iv_package = io_repo->get_package( ) io_xml = lo_xml ). ENDLOOP. @@ -13420,11 +13597,11 @@ CLASS lcl_objects IMPLEMENTATION. lcl_objects_activation=>activate( ). LOOP AT lt_late ASSIGNING . - -obj->deserialize( iv_package = iv_package + -obj->deserialize( iv_package = io_repo->get_package( ) io_xml = -xml ). ENDLOOP. - update_package_tree( iv_package ). + update_package_tree( io_repo->get_package( ) ). ENDMETHOD. "deserialize @@ -14536,174 +14713,6 @@ CLASS lcl_persistence IMPLEMENTATION. ENDCLASS. "lcl_persistence IMPLEMENTATION -CLASS lcl_persistence_db DEFINITION FINAL. - - PUBLIC SECTION. - CONSTANTS: - c_tabname TYPE tabname VALUE 'ZABAPGIT', - c_lock TYPE viewname VALUE 'EZABAPGIT'. - - TYPES: ty_type TYPE c LENGTH 12. - TYPES: ty_value TYPE c LENGTH 12. - - TYPES: BEGIN OF ty_content, - type TYPE ty_type, - value TYPE ty_value, - data_str TYPE string, - END OF ty_content, - tt_content TYPE SORTED TABLE OF ty_content WITH UNIQUE KEY value. - - METHODS list_by_type - IMPORTING iv_type TYPE ty_type - RETURNING VALUE(rt_content) TYPE tt_content. - - METHODS list - RETURNING VALUE(rt_content) TYPE tt_content. - - METHODS add - IMPORTING iv_type TYPE ty_type - iv_value TYPE ty_content-value - iv_data TYPE ty_content-data_str - RAISING lcx_exception. - - METHODS delete - IMPORTING iv_type TYPE ty_type - iv_value TYPE ty_content-value - RAISING lcx_exception. - - METHODS update - IMPORTING iv_type TYPE ty_type - iv_value TYPE ty_content-value - iv_data TYPE ty_content-data_str - RAISING lcx_exception. - - METHODS modify - IMPORTING iv_type TYPE ty_type - iv_value TYPE ty_content-value - iv_data TYPE ty_content-data_str - RAISING lcx_exception. - - METHODS read - IMPORTING iv_type TYPE ty_type - iv_value TYPE ty_content-value - RETURNING VALUE(rv_data) TYPE ty_content-data_str - RAISING lcx_not_found. - - METHODS lock - IMPORTING iv_mode TYPE enqmode DEFAULT 'E' - iv_type TYPE ty_type - iv_value TYPE ty_content-value - RAISING lcx_exception. - -ENDCLASS. - -CLASS lcl_persistence_repo DEFINITION FINAL. - - PUBLIC SECTION. - TYPES: BEGIN OF ty_repo_xml, - url TYPE string, - branch_name TYPE string, - sha1 TYPE ty_sha1, - package TYPE devclass, - offline TYPE sap_bool, - END OF ty_repo_xml. - - TYPES: BEGIN OF ty_repo, - key TYPE lcl_persistence_db=>ty_value. - INCLUDE TYPE ty_repo_xml. - TYPES: END OF ty_repo. - TYPES: tt_repo TYPE STANDARD TABLE OF ty_repo WITH DEFAULT KEY. - - METHODS constructor. - - METHODS list - RETURNING VALUE(rt_repos) TYPE tt_repo - RAISING lcx_exception. - - METHODS update - IMPORTING iv_key TYPE ty_repo-key - iv_branch_sha1 TYPE ty_sha1 - RAISING lcx_exception. - - METHODS add - IMPORTING iv_url TYPE string - iv_branch_name TYPE string - iv_branch TYPE ty_sha1 OPTIONAL - iv_package TYPE devclass - iv_offline TYPE sap_bool DEFAULT abap_false - RETURNING VALUE(rv_key) TYPE ty_repo-key - RAISING lcx_exception. - - METHODS delete - IMPORTING iv_key TYPE ty_repo-key - RAISING lcx_exception. - - METHODS read - IMPORTING iv_key TYPE ty_repo-key - RETURNING VALUE(rs_repo) TYPE ty_repo - RAISING lcx_exception - lcx_not_found. - - METHODS lock - IMPORTING iv_mode TYPE enqmode - iv_key TYPE ty_repo-key - RAISING lcx_exception. - - PRIVATE SECTION. - CONSTANTS c_type_repo TYPE lcl_persistence_db=>ty_type VALUE 'REPO'. - - DATA: mo_db TYPE REF TO lcl_persistence_db. - - METHODS from_xml - IMPORTING iv_repo_xml_string TYPE string - RETURNING VALUE(rs_repo) TYPE ty_repo_xml - RAISING lcx_exception. - - METHODS to_xml - IMPORTING is_repo TYPE ty_repo - RETURNING VALUE(rv_repo_xml_string) TYPE string. - - METHODS get_next_id - RETURNING VALUE(rv_next_repo_id) TYPE lcl_persistence_db=>ty_content-value - RAISING lcx_exception. - -ENDCLASS. - -*----------------------------------------------------------------------* -* CLASS lcl_repo DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_repo DEFINITION ABSTRACT. - - PUBLIC SECTION. - METHODS: - constructor - IMPORTING is_data TYPE lcl_persistence_repo=>ty_repo, - get_key - RETURNING VALUE(rv_key) TYPE lcl_persistence_db=>ty_value, - get_name - RETURNING VALUE(rv_name) TYPE string - RAISING lcx_exception, - get_files_local - RETURNING VALUE(rt_files) TYPE ty_files_tt - RAISING lcx_exception, - get_package - RETURNING VALUE(rv_package) TYPE lcl_persistence_repo=>ty_repo-package, - delete - RAISING lcx_exception, - refresh - RAISING lcx_exception, - is_offline - RETURNING VALUE(rv_offline) TYPE abap_bool - RAISING lcx_exception. - - PROTECTED SECTION. - DATA: mt_local TYPE ty_files_tt, - ms_data TYPE lcl_persistence_repo=>ty_repo. - -ENDCLASS. "lcl_repo DEFINITION - CLASS lcl_stage DEFINITION FINAL. PUBLIC SECTION. @@ -14783,14 +14792,11 @@ CLASS lcl_repo_online DEFINITION INHERITING FROM lcl_repo FINAL. get_sha1_remote RETURNING VALUE(rv_sha1) TYPE lcl_persistence_repo=>ty_repo-sha1 RAISING lcx_exception, - get_files_remote - RETURNING VALUE(rt_files) TYPE ty_files_tt - RAISING lcx_exception, + get_files_remote REDEFINITION, get_objects RETURNING VALUE(rt_objects) TYPE lcl_git_pack=>ty_objects_tt RAISING lcx_exception, - deserialize - RAISING lcx_exception, + deserialize REDEFINITION, status RETURNING VALUE(rt_results) TYPE lcl_file_status=>ty_results_tt RAISING lcx_exception, @@ -14801,10 +14807,9 @@ CLASS lcl_repo_online DEFINITION INHERITING FROM lcl_repo FINAL. PRIVATE SECTION. DATA: - mt_files_remote TYPE ty_files_tt, - mt_objects TYPE lcl_git_pack=>ty_objects_tt, - mv_branch TYPE ty_sha1, - mv_initialized TYPE abap_bool. + mt_objects TYPE lcl_git_pack=>ty_objects_tt, + mv_branch TYPE ty_sha1, + mv_initialized TYPE abap_bool. METHODS: initialize @@ -14877,6 +14882,11 @@ ENDCLASS. *----------------------------------------------------------------------* CLASS lcl_repo_offline DEFINITION INHERITING FROM lcl_repo FINAL. + PUBLIC SECTION. + METHODS: + set_files_remote + IMPORTING it_files TYPE ty_files_tt. + ENDCLASS. "lcl_repo_offline DEFINITION CLASS ltcl_git_porcelain DEFINITION DEFERRED. @@ -15161,6 +15171,12 @@ ENDCLASS. "lcl_gui DEFINITION *----------------------------------------------------------------------* CLASS lcl_repo_offline IMPLEMENTATION. + METHOD set_files_remote. + + mt_remote = it_files. + + ENDMETHOD. + ENDCLASS. "lcl_repo_offline IMPLEMENTATION *----------------------------------------------------------------------* @@ -15248,7 +15264,7 @@ CLASS lcl_repo_online IMPLEMENTATION. initialize( ). - rt_results = lcl_file_status=>status( it_files = mt_files_remote + rt_results = lcl_file_status=>status( it_files = mt_remote iv_package = get_package( ) ). ENDMETHOD. "status @@ -15257,8 +15273,7 @@ CLASS lcl_repo_online IMPLEMENTATION. initialize( ). - lcl_objects=>deserialize( it_files = mt_files_remote - iv_package = get_package( ) ). + super->deserialize( ). set_sha1( mv_branch ). @@ -15269,7 +15284,7 @@ CLASS lcl_repo_online IMPLEMENTATION. super->refresh( ). lcl_git_porcelain=>pull( EXPORTING io_repo = me - IMPORTING et_files = mt_files_remote + IMPORTING et_files = mt_remote et_objects = mt_objects ev_branch = mv_branch ). @@ -15286,7 +15301,7 @@ CLASS lcl_repo_online IMPLEMENTATION. METHOD get_files_remote. initialize( ). - rt_files = mt_files_remote. + rt_files = mt_remote. ENDMETHOD. "get_files METHOD get_objects. @@ -15353,6 +15368,16 @@ CLASS lcl_repo IMPLEMENTATION. ENDMETHOD. "constructor + METHOD get_files_remote. + rt_files = mt_remote. + ENDMETHOD. + + METHOD deserialize. + + lcl_objects=>deserialize( me ). + + ENDMETHOD. + METHOD get_files_local. DATA: lt_tadir TYPE lcl_tadir=>ty_tadir_tt, @@ -16490,28 +16515,25 @@ CLASS lcl_zip IMPLEMENTATION. lo_repo = lcl_repo_srv=>get( iv_key ). export( iv_package = lo_repo->get_package( ) - iv_zip = iv_zip ). + iv_zip = iv_zip ). ENDMETHOD. "export_key METHOD import. - DATA: lt_files TYPE ty_files_tt, - lo_repo TYPE REF TO lcl_repo. + DATA: lo_repo TYPE REF TO lcl_repo_offline. - lo_repo = lcl_repo_srv=>get( iv_key ). - - lt_files = unzip_file( file_upload( ) ). - - lcl_objects=>deserialize( it_files = lt_files - iv_package = lo_repo->get_package( ) ). + lo_repo ?= lcl_repo_srv=>get( iv_key ). + lo_repo->set_files_remote( unzip_file( file_upload( ) ) ). + lo_repo->deserialize( ). lcl_gui=>render( ). ENDMETHOD. "import METHOD export. +* todo, align this method with lcl_repo->get_files_local() DATA: lt_tadir TYPE lcl_tadir=>ty_tadir_tt, ls_item TYPE ty_item, @@ -19044,7 +19066,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ro_html->add( '