mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 13:03:01 +08:00
Apack dependencies (#3285)
* Support APACK dependencies Check installed apack package dependencies for current repository Display a popup with dependencies * abaplint checks * abaplint checks * abaplint checks * Popup only when dependency not met * abaplint checks * abaplint checks * Optimization * abaplint checks * abaplint checks * Fix typo "dependeNcies" * Remove address from dependency check * Dependencies popup title * Dependencies popup enhanced * EXCEPTION column replacing MET * Enable Git URL hiperlink * APACK doc - Version dependency support * Dependencies version check support * abaplint checks * abaplint checks * Version utils * fix syntax warning * move set_dot_apack to protected Co-authored-by: larshp <larshp@hotmail.com>
This commit is contained in:
parent
7cb9617cf7
commit
27ac61e95d
|
@ -16,7 +16,7 @@ The metadata follows the [POM format by Apache Maven](https://maven.apache.org/p
|
||||||
- `version`: Version of your project, should adhere to the [semantic versioning concept](https://semver.org/), e.g. `1.85`
|
- `version`: Version of your project, should adhere to the [semantic versioning concept](https://semver.org/), e.g. `1.85`
|
||||||
- `repository_type`: Currently fixed to `abapGit` as it's currently the only supported repository type and is set automatically during serialization
|
- `repository_type`: Currently fixed to `abapGit` as it's currently the only supported repository type and is set automatically during serialization
|
||||||
- `git_url`: The URL where your main repository is located, e.g. `https://github.com/larshp/abapGit.git`
|
- `git_url`: The URL where your main repository is located, e.g. `https://github.com/larshp/abapGit.git`
|
||||||
- `dependencies`: Optional, only needs to be filled if this project has dependencies to other projects. You only need to specify `group_id`, `artifact_id` and `git_url` to identify the dependency. `target_package` is ignored during serialization. Moreover, versioning is currently not supported - that's why there is no version in this set of dependency data. **Note:** Be sure to specify the `git_url` for each dependency properly as this is currently the only way how dependencies can automatically be resolved.
|
- `dependencies`: Optional, only needs to be filled if this project has dependencies to other projects. You only need to specify `group_id`, `artifact_id`, `version` and `git_url` to identify the dependency. `target_package` is ignored during serialization. **Note:** Be sure to specify the `git_url` for each dependency properly as this is currently the only way how dependencies can automatically be resolved.
|
||||||
|
|
||||||
If such an implementation class is detected during the serialization process, a corresponding `.apack-mainfest.xml` file will be created on the top level of the Git repository. This contains the APACK metadata information.
|
If such an implementation class is detected during the serialization process, a corresponding `.apack-mainfest.xml` file will be created on the top level of the Git repository. This contains the APACK metadata information.
|
||||||
|
|
||||||
|
|
322
src/apack/zcl_abapgit_apack_helper.clas.abap
Normal file
322
src/apack/zcl_abapgit_apack_helper.clas.abap
Normal file
|
@ -0,0 +1,322 @@
|
||||||
|
CLASS zcl_abapgit_apack_helper DEFINITION
|
||||||
|
PUBLIC
|
||||||
|
FINAL
|
||||||
|
CREATE PUBLIC .
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
CLASS-METHODS are_dependencies_met
|
||||||
|
IMPORTING
|
||||||
|
!it_dependencies TYPE zif_abapgit_apack_definitions=>tt_dependencies
|
||||||
|
RETURNING
|
||||||
|
VALUE(rv_status) TYPE zif_abapgit_definitions=>ty_yes_no
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS dependencies_popup
|
||||||
|
IMPORTING
|
||||||
|
!it_dependencies TYPE zif_abapgit_apack_definitions=>tt_dependencies
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
|
PROTECTED SECTION.
|
||||||
|
PRIVATE SECTION.
|
||||||
|
|
||||||
|
TYPES:
|
||||||
|
BEGIN OF ty_manifest_declaration,
|
||||||
|
clsname TYPE seometarel-clsname,
|
||||||
|
devclass TYPE devclass,
|
||||||
|
END OF ty_manifest_declaration,
|
||||||
|
tt_manifest_declaration TYPE STANDARD TABLE OF ty_manifest_declaration WITH NON-UNIQUE DEFAULT KEY.
|
||||||
|
|
||||||
|
TYPES:
|
||||||
|
BEGIN OF ty_dependency_status,
|
||||||
|
met(1) TYPE c.
|
||||||
|
INCLUDE TYPE zif_abapgit_apack_definitions=>ty_dependency.
|
||||||
|
TYPES: END OF ty_dependency_status,
|
||||||
|
tt_dependency_status TYPE STANDARD TABLE OF ty_dependency_status WITH NON-UNIQUE DEFAULT KEY.
|
||||||
|
|
||||||
|
CLASS-METHODS get_dependencies_met_status
|
||||||
|
IMPORTING
|
||||||
|
!it_dependencies TYPE zif_abapgit_apack_definitions=>tt_dependencies
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_status) TYPE tt_dependency_status
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS get_installed_packages
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_packages) TYPE zif_abapgit_apack_definitions=>tt_descriptor
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS show_dependencies_popup
|
||||||
|
IMPORTING
|
||||||
|
!it_dependencies TYPE tt_dependency_status
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CLASS zcl_abapgit_apack_helper IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD are_dependencies_met.
|
||||||
|
|
||||||
|
DATA: lt_dependencies_status TYPE tt_dependency_status.
|
||||||
|
|
||||||
|
IF it_dependencies IS INITIAL.
|
||||||
|
rv_status = 'Y'.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lt_dependencies_status = get_dependencies_met_status( it_dependencies ).
|
||||||
|
|
||||||
|
LOOP AT lt_dependencies_status TRANSPORTING NO FIELDS WHERE met <> 'Y'.
|
||||||
|
EXIT.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
rv_status = 'N'.
|
||||||
|
ELSE.
|
||||||
|
rv_status = 'Y'.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD dependencies_popup.
|
||||||
|
|
||||||
|
DATA: lt_met_status TYPE tt_dependency_status.
|
||||||
|
|
||||||
|
lt_met_status = get_dependencies_met_status( it_dependencies ).
|
||||||
|
|
||||||
|
show_dependencies_popup( lt_met_status ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD get_dependencies_met_status.
|
||||||
|
|
||||||
|
DATA: lt_installed_packages TYPE zif_abapgit_apack_definitions=>tt_descriptor,
|
||||||
|
ls_installed_package TYPE zif_abapgit_apack_definitions=>ty_descriptor,
|
||||||
|
ls_dependecy TYPE zif_abapgit_apack_definitions=>ty_dependency,
|
||||||
|
ls_dependecy_popup TYPE ty_dependency_status.
|
||||||
|
|
||||||
|
IF it_dependencies IS INITIAL.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lt_installed_packages = get_installed_packages( ).
|
||||||
|
|
||||||
|
LOOP AT it_dependencies INTO ls_dependecy.
|
||||||
|
CLEAR: ls_dependecy_popup.
|
||||||
|
|
||||||
|
MOVE-CORRESPONDING ls_dependecy TO ls_dependecy_popup.
|
||||||
|
|
||||||
|
READ TABLE lt_installed_packages INTO ls_installed_package
|
||||||
|
WITH KEY group_id = ls_dependecy-group_id
|
||||||
|
artifact_id = ls_dependecy-artifact_id.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
ls_dependecy_popup-met = 'N'.
|
||||||
|
ELSE.
|
||||||
|
TRY.
|
||||||
|
zcl_abapgit_version=>check_dependant_version( is_current = ls_installed_package-sem_version
|
||||||
|
is_dependant = ls_dependecy-sem_version ).
|
||||||
|
ls_dependecy_popup-met = 'Y'.
|
||||||
|
CATCH zcx_abapgit_exception.
|
||||||
|
ls_dependecy_popup-met = 'P'.
|
||||||
|
ENDTRY.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
INSERT ls_dependecy_popup INTO TABLE rt_status.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD get_installed_packages.
|
||||||
|
|
||||||
|
DATA: lo_apack_reader TYPE REF TO zcl_abapgit_apack_reader,
|
||||||
|
lt_manifest_implementation TYPE tt_manifest_declaration,
|
||||||
|
ls_manifest_implementation TYPE ty_manifest_declaration,
|
||||||
|
lo_manifest_provider TYPE REF TO object,
|
||||||
|
ls_descriptor TYPE zif_abapgit_apack_definitions=>ty_descriptor.
|
||||||
|
|
||||||
|
SELECT seometarel~clsname tadir~devclass FROM seometarel "#EC CI_NOORDER
|
||||||
|
INNER JOIN tadir ON seometarel~clsname = tadir~obj_name "#EC CI_BUFFJOIN
|
||||||
|
INTO TABLE lt_manifest_implementation
|
||||||
|
WHERE tadir~pgmid = 'R3TR'
|
||||||
|
AND tadir~object = 'CLAS'
|
||||||
|
AND seometarel~version = '1'
|
||||||
|
AND ( seometarel~refclsname = 'ZIF_APACK_MANIFEST' OR seometarel~refclsname = 'IF_APACK_MANIFEST' ).
|
||||||
|
|
||||||
|
LOOP AT lt_manifest_implementation INTO ls_manifest_implementation.
|
||||||
|
CLEAR: lo_manifest_provider, lo_apack_reader.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
CREATE OBJECT lo_manifest_provider TYPE (ls_manifest_implementation-clsname).
|
||||||
|
CATCH cx_sy_create_object_error.
|
||||||
|
CLEAR: lo_manifest_provider.
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
IF lo_manifest_provider IS NOT BOUND.
|
||||||
|
CONTINUE.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lo_apack_reader = zcl_abapgit_apack_reader=>create_instance( ls_manifest_implementation-devclass ).
|
||||||
|
lo_apack_reader->copy_manifest_descriptor( io_manifest_provider = lo_manifest_provider ).
|
||||||
|
ls_descriptor = lo_apack_reader->get_manifest_descriptor( ).
|
||||||
|
|
||||||
|
IF ls_descriptor IS NOT INITIAL.
|
||||||
|
INSERT ls_descriptor INTO TABLE rt_packages.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD show_dependencies_popup.
|
||||||
|
|
||||||
|
TYPES:
|
||||||
|
BEGIN OF lty_color_line,
|
||||||
|
exception(1) TYPE c,
|
||||||
|
color TYPE lvc_t_scol.
|
||||||
|
INCLUDE TYPE ty_dependency_status.
|
||||||
|
TYPES: t_hyperlink TYPE salv_t_int4_column,
|
||||||
|
END OF lty_color_line.
|
||||||
|
|
||||||
|
TYPES: lty_color_tab TYPE STANDARD TABLE OF lty_color_line WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
DATA: lo_alv TYPE REF TO cl_salv_table,
|
||||||
|
lo_functional_settings TYPE REF TO cl_salv_functional_settings,
|
||||||
|
lo_hyperlinks TYPE REF TO cl_salv_hyperlinks,
|
||||||
|
lo_column TYPE REF TO cl_salv_column,
|
||||||
|
lo_column_table TYPE REF TO cl_salv_column_table,
|
||||||
|
lo_columns TYPE REF TO cl_salv_columns_table,
|
||||||
|
lt_columns TYPE salv_t_column_ref,
|
||||||
|
ls_column LIKE LINE OF lt_columns,
|
||||||
|
lt_color_table TYPE lty_color_tab,
|
||||||
|
lt_color_negative TYPE lvc_t_scol,
|
||||||
|
lt_color_normal TYPE lvc_t_scol,
|
||||||
|
lt_color_positive TYPE lvc_t_scol,
|
||||||
|
ls_color TYPE lvc_s_scol,
|
||||||
|
lv_handle TYPE i,
|
||||||
|
ls_hyperlink TYPE salv_s_int4_column,
|
||||||
|
lv_hyperlink TYPE service_rl,
|
||||||
|
lx_ex TYPE REF TO cx_root.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_line> TYPE lty_color_line,
|
||||||
|
<ls_dependency> LIKE LINE OF it_dependencies.
|
||||||
|
|
||||||
|
IF it_dependencies IS INITIAL.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CLEAR: ls_color.
|
||||||
|
ls_color-color-col = col_negative.
|
||||||
|
APPEND ls_color TO lt_color_negative.
|
||||||
|
|
||||||
|
CLEAR: ls_color.
|
||||||
|
ls_color-color-col = col_normal.
|
||||||
|
APPEND ls_color TO lt_color_normal.
|
||||||
|
|
||||||
|
CLEAR: ls_color.
|
||||||
|
ls_color-color-col = col_positive.
|
||||||
|
APPEND ls_color TO lt_color_positive.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
cl_salv_table=>factory( IMPORTING r_salv_table = lo_alv
|
||||||
|
CHANGING t_table = lt_color_table ).
|
||||||
|
|
||||||
|
lo_functional_settings = lo_alv->get_functional_settings( ).
|
||||||
|
lo_hyperlinks = lo_functional_settings->get_hyperlinks( ).
|
||||||
|
|
||||||
|
lo_columns = lo_alv->get_columns( ).
|
||||||
|
lt_columns = lo_columns->get( ).
|
||||||
|
LOOP AT lt_columns INTO ls_column WHERE columnname CP 'SEM_VERSION-*'.
|
||||||
|
ls_column-r_column->set_technical( ).
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
lo_column = lo_columns->get_column( 'MET' ).
|
||||||
|
lo_column->set_technical( ).
|
||||||
|
|
||||||
|
lo_column = lo_columns->get_column( 'GROUP_ID' ).
|
||||||
|
lo_column->set_short_text( 'Org/ProjId' ).
|
||||||
|
|
||||||
|
lo_columns->set_color_column( 'COLOR' ).
|
||||||
|
lo_columns->set_exception_column( 'EXCEPTION' ).
|
||||||
|
lo_columns->set_hyperlink_entry_column( 'T_HYPERLINK' ).
|
||||||
|
lo_columns->set_optimize( ).
|
||||||
|
|
||||||
|
lo_column = lo_columns->get_column( 'GROUP_ID' ).
|
||||||
|
lo_column->set_short_text( 'Org/ProjId' ).
|
||||||
|
|
||||||
|
lo_column = lo_columns->get_column( 'ARTIFACT_ID' ).
|
||||||
|
lo_column->set_short_text( 'Proj. Name' ).
|
||||||
|
|
||||||
|
lo_column = lo_columns->get_column( 'GIT_URL' ).
|
||||||
|
lo_column->set_short_text( 'Git URL' ).
|
||||||
|
|
||||||
|
lo_column_table ?= lo_column.
|
||||||
|
lo_column_table->set_cell_type( if_salv_c_cell_type=>link ).
|
||||||
|
|
||||||
|
|
||||||
|
lo_column = lo_columns->get_column( 'VERSION' ).
|
||||||
|
lo_column->set_short_text( 'Version' ).
|
||||||
|
|
||||||
|
lo_column = lo_columns->get_column( 'TARGET_PACKAGE' ).
|
||||||
|
lo_column->set_technical( ).
|
||||||
|
|
||||||
|
lo_hyperlinks = lo_functional_settings->get_hyperlinks( ).
|
||||||
|
|
||||||
|
CLEAR: lv_handle, ls_color.
|
||||||
|
LOOP AT it_dependencies ASSIGNING <ls_dependency>.
|
||||||
|
lv_handle = lv_handle + 1.
|
||||||
|
|
||||||
|
APPEND INITIAL LINE TO lt_color_table ASSIGNING <ls_line>.
|
||||||
|
MOVE-CORRESPONDING <ls_dependency> TO <ls_line>.
|
||||||
|
|
||||||
|
CASE <ls_line>-met.
|
||||||
|
WHEN 'Y'.
|
||||||
|
<ls_line>-color = lt_color_positive.
|
||||||
|
<ls_line>-exception = '3'.
|
||||||
|
WHEN 'P'.
|
||||||
|
<ls_line>-color = lt_color_normal.
|
||||||
|
<ls_line>-exception = '2'.
|
||||||
|
WHEN 'N'.
|
||||||
|
<ls_line>-color = lt_color_negative.
|
||||||
|
<ls_line>-exception = '1'.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
CLEAR: ls_hyperlink.
|
||||||
|
ls_hyperlink-columnname = 'GIT_URL'.
|
||||||
|
ls_hyperlink-value = lv_handle.
|
||||||
|
APPEND ls_hyperlink TO <ls_line>-t_hyperlink.
|
||||||
|
|
||||||
|
lv_hyperlink = <ls_line>-git_url.
|
||||||
|
lo_hyperlinks->add_hyperlink( handle = lv_handle
|
||||||
|
hyperlink = lv_hyperlink ).
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
UNASSIGN <ls_line>.
|
||||||
|
|
||||||
|
lo_alv->set_screen_popup( start_column = 30
|
||||||
|
end_column = 120
|
||||||
|
start_line = 10
|
||||||
|
end_line = 20 ).
|
||||||
|
lo_alv->get_display_settings( )->set_list_header( 'APACK dependencies' ).
|
||||||
|
lo_alv->display( ).
|
||||||
|
|
||||||
|
CATCH cx_salv_msg cx_salv_not_found cx_salv_data_error cx_salv_existing INTO lx_ex.
|
||||||
|
zcx_abapgit_exception=>raise( lx_ex->get_text( ) ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
ENDCLASS.
|
16
src/apack/zcl_abapgit_apack_helper.clas.xml
Normal file
16
src/apack/zcl_abapgit_apack_helper.clas.xml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<VSEOCLASS>
|
||||||
|
<CLSNAME>ZCL_ABAPGIT_APACK_HELPER</CLSNAME>
|
||||||
|
<LANGU>E</LANGU>
|
||||||
|
<DESCRIPT>APACK Helper</DESCRIPT>
|
||||||
|
<STATE>1</STATE>
|
||||||
|
<CLSCCINCL>X</CLSCCINCL>
|
||||||
|
<FIXPT>X</FIXPT>
|
||||||
|
<UNICODE>X</UNICODE>
|
||||||
|
</VSEOCLASS>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -12,18 +12,34 @@ CLASS zcl_abapgit_apack_reader DEFINITION
|
||||||
!iv_package_name TYPE ty_package_name
|
!iv_package_name TYPE ty_package_name
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(ro_manifest_reader) TYPE REF TO zcl_abapgit_apack_reader .
|
VALUE(ro_manifest_reader) TYPE REF TO zcl_abapgit_apack_reader .
|
||||||
|
CLASS-METHODS deserialize
|
||||||
|
IMPORTING
|
||||||
|
!iv_package_name TYPE ty_package_name
|
||||||
|
!iv_xstr TYPE xstring
|
||||||
|
RETURNING
|
||||||
|
VALUE(ro_manifest_reader) TYPE REF TO zcl_abapgit_apack_reader
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
METHODS get_manifest_descriptor
|
METHODS get_manifest_descriptor
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rs_manifest_descriptor) TYPE zif_abapgit_apack_definitions=>ty_descriptor .
|
VALUE(rs_manifest_descriptor) TYPE zif_abapgit_apack_definitions=>ty_descriptor
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
METHODS set_manifest_descriptor
|
METHODS set_manifest_descriptor
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!is_manifest_descriptor TYPE zif_abapgit_apack_definitions=>ty_descriptor .
|
!is_manifest_descriptor TYPE zif_abapgit_apack_definitions=>ty_descriptor
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
METHODS copy_manifest_descriptor
|
METHODS copy_manifest_descriptor
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!io_manifest_provider TYPE REF TO object .
|
!io_manifest_provider TYPE REF TO object
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
METHODS has_manifest
|
METHODS has_manifest
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rv_has_manifest) TYPE abap_bool .
|
VALUE(rv_has_manifest) TYPE abap_bool
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
METHODS constructor
|
METHODS constructor
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!iv_package_name TYPE ty_package_name .
|
!iv_package_name TYPE ty_package_name .
|
||||||
|
@ -39,6 +55,17 @@ CLASS zcl_abapgit_apack_reader DEFINITION
|
||||||
DATA mv_package_name TYPE ty_package_name .
|
DATA mv_package_name TYPE ty_package_name .
|
||||||
DATA ms_cached_descriptor TYPE zif_abapgit_apack_definitions=>ty_descriptor .
|
DATA ms_cached_descriptor TYPE zif_abapgit_apack_definitions=>ty_descriptor .
|
||||||
DATA mv_is_cached TYPE abap_bool .
|
DATA mv_is_cached TYPE abap_bool .
|
||||||
|
|
||||||
|
CLASS-METHODS from_xml
|
||||||
|
IMPORTING
|
||||||
|
iv_xml TYPE string
|
||||||
|
RETURNING
|
||||||
|
VALUE(rs_data) TYPE zif_abapgit_apack_definitions=>ty_descriptor.
|
||||||
|
|
||||||
|
METHODS format_version
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,7 +74,7 @@ CLASS zcl_abapgit_apack_reader IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD constructor.
|
METHOD constructor.
|
||||||
me->mv_package_name = iv_package_name.
|
mv_package_name = iv_package_name.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,6 +83,41 @@ CLASS zcl_abapgit_apack_reader IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD deserialize.
|
||||||
|
|
||||||
|
DATA: lv_xml TYPE string,
|
||||||
|
ls_data TYPE zif_abapgit_apack_definitions=>ty_descriptor.
|
||||||
|
|
||||||
|
lv_xml = zcl_abapgit_convert=>xstring_to_string_utf8( iv_xstr ).
|
||||||
|
|
||||||
|
ls_data = from_xml( lv_xml ).
|
||||||
|
|
||||||
|
ro_manifest_reader = create_instance( iv_package_name ).
|
||||||
|
|
||||||
|
ro_manifest_reader = create_instance( iv_package_name ).
|
||||||
|
ro_manifest_reader->set_manifest_descriptor( ls_data ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD from_xml.
|
||||||
|
|
||||||
|
DATA: lv_xml TYPE string.
|
||||||
|
|
||||||
|
lv_xml = iv_xml.
|
||||||
|
|
||||||
|
" fix downward compatibility
|
||||||
|
REPLACE ALL OCCURRENCES OF '<_--28C_DATA_--29>' IN lv_xml WITH '<DATA>'.
|
||||||
|
REPLACE ALL OCCURRENCES OF '</_--28C_DATA_--29>' IN lv_xml WITH '</DATA>'.
|
||||||
|
|
||||||
|
CALL TRANSFORMATION id
|
||||||
|
OPTIONS value_handling = 'accept_data_loss'
|
||||||
|
SOURCE XML lv_xml
|
||||||
|
RESULT data = rs_data ##NO_TEXT.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD get_manifest_descriptor.
|
METHOD get_manifest_descriptor.
|
||||||
|
|
||||||
DATA: lo_manifest_provider TYPE REF TO object,
|
DATA: lo_manifest_provider TYPE REF TO object,
|
||||||
|
@ -90,7 +152,9 @@ CLASS zcl_abapgit_apack_reader IMPLEMENTATION.
|
||||||
me->copy_manifest_descriptor( io_manifest_provider = lo_manifest_provider ).
|
me->copy_manifest_descriptor( io_manifest_provider = lo_manifest_provider ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
me->mv_is_cached = abap_true.
|
|
||||||
|
mv_is_cached = abap_true.
|
||||||
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
rs_manifest_descriptor = me->ms_cached_descriptor.
|
rs_manifest_descriptor = me->ms_cached_descriptor.
|
||||||
|
@ -101,7 +165,7 @@ CLASS zcl_abapgit_apack_reader IMPLEMENTATION.
|
||||||
|
|
||||||
DATA: ls_returned_manifest TYPE zif_abapgit_apack_definitions=>ty_descriptor.
|
DATA: ls_returned_manifest TYPE zif_abapgit_apack_definitions=>ty_descriptor.
|
||||||
|
|
||||||
ls_returned_manifest = me->get_manifest_descriptor( ).
|
ls_returned_manifest = get_manifest_descriptor( ).
|
||||||
|
|
||||||
rv_has_manifest = abap_false.
|
rv_has_manifest = abap_false.
|
||||||
IF ls_returned_manifest IS NOT INITIAL.
|
IF ls_returned_manifest IS NOT INITIAL.
|
||||||
|
@ -112,14 +176,16 @@ CLASS zcl_abapgit_apack_reader IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD set_manifest_descriptor.
|
METHOD set_manifest_descriptor.
|
||||||
me->mv_is_cached = abap_true.
|
mv_is_cached = abap_true.
|
||||||
me->ms_cached_descriptor = is_manifest_descriptor.
|
ms_cached_descriptor = is_manifest_descriptor.
|
||||||
|
format_version( ).
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD copy_manifest_descriptor.
|
METHOD copy_manifest_descriptor.
|
||||||
|
|
||||||
DATA: ls_my_manifest_wo_deps TYPE zif_abapgit_apack_definitions=>ty_descriptor_wo_dependencies,
|
DATA: ls_my_manifest_wo_deps TYPE zif_abapgit_apack_definitions=>ty_descriptor_wo_dependencies,
|
||||||
ls_my_dependency TYPE zif_abapgit_apack_definitions=>ty_dependency.
|
ls_my_dependency TYPE zif_abapgit_apack_definitions=>ty_dependency,
|
||||||
|
ls_descriptor TYPE zif_abapgit_apack_definitions=>ty_descriptor.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <lg_descriptor> TYPE any,
|
FIELD-SYMBOLS: <lg_descriptor> TYPE any,
|
||||||
<lt_dependencies> TYPE ANY TABLE,
|
<lt_dependencies> TYPE ANY TABLE,
|
||||||
|
@ -136,13 +202,30 @@ CLASS zcl_abapgit_apack_reader IMPLEMENTATION.
|
||||||
IF <lt_dependencies> IS ASSIGNED.
|
IF <lt_dependencies> IS ASSIGNED.
|
||||||
LOOP AT <lt_dependencies> ASSIGNING <lg_dependency>.
|
LOOP AT <lt_dependencies> ASSIGNING <lg_dependency>.
|
||||||
MOVE-CORRESPONDING <lg_dependency> TO ls_my_dependency.
|
MOVE-CORRESPONDING <lg_dependency> TO ls_my_dependency.
|
||||||
INSERT ls_my_dependency INTO TABLE me->ms_cached_descriptor-dependencies.
|
INSERT ls_my_dependency INTO TABLE ls_descriptor-dependencies.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
MOVE-CORRESPONDING <lg_descriptor> TO ls_my_manifest_wo_deps.
|
MOVE-CORRESPONDING <lg_descriptor> TO ls_my_manifest_wo_deps.
|
||||||
MOVE-CORRESPONDING ls_my_manifest_wo_deps TO me->ms_cached_descriptor.
|
MOVE-CORRESPONDING ls_my_manifest_wo_deps TO ls_descriptor.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
set_manifest_descriptor( ls_descriptor ).
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD format_version.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_dependency> TYPE zif_abapgit_apack_definitions=>ty_dependency.
|
||||||
|
|
||||||
|
TRANSLATE ms_cached_descriptor-version TO LOWER CASE.
|
||||||
|
ms_cached_descriptor-sem_version = zcl_abapgit_version=>conv_str_to_version( ms_cached_descriptor-version ).
|
||||||
|
|
||||||
|
LOOP AT ms_cached_descriptor-dependencies ASSIGNING <ls_dependency>.
|
||||||
|
<ls_dependency>-sem_version = zcl_abapgit_version=>conv_str_to_version( <ls_dependency>-version ).
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
CLASS ltcl_apack_manifest_reader DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
|
CLASS ltcl_apack_manifest_reader DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
METHODS:
|
METHODS:
|
||||||
setup,
|
setup RAISING cx_static_check,
|
||||||
manifest_descriptor FOR TESTING RAISING cx_static_check,
|
manifest_descriptor FOR TESTING RAISING cx_static_check,
|
||||||
verify_own_descriptor IMPORTING is_manifest_descriptor TYPE zif_abapgit_apack_definitions=>ty_descriptor.
|
verify_own_descriptor IMPORTING is_manifest_descriptor TYPE zif_abapgit_apack_definitions=>ty_descriptor.
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS ZCL_ABAPGIT_APACK_WRITER IMPLEMENTATION.
|
CLASS zcl_abapgit_apack_writer IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD constructor.
|
METHOD constructor.
|
||||||
|
@ -41,12 +41,22 @@ CLASS ZCL_ABAPGIT_APACK_WRITER IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD serialize.
|
METHOD serialize.
|
||||||
|
|
||||||
|
DATA: ls_manifest_descriptor LIKE ms_manifest_descriptor.
|
||||||
|
FIELD-SYMBOLS: <ls_dependency> LIKE LINE OF ls_manifest_descriptor-dependencies.
|
||||||
|
|
||||||
" Setting repository type automatically to 'abapGit' as there is no other one right now
|
" Setting repository type automatically to 'abapGit' as there is no other one right now
|
||||||
ms_manifest_descriptor-repository_type = zif_abapgit_apack_definitions=>c_repository_type_abapgit.
|
ms_manifest_descriptor-repository_type = zif_abapgit_apack_definitions=>c_repository_type_abapgit.
|
||||||
|
|
||||||
|
ls_manifest_descriptor = ms_manifest_descriptor.
|
||||||
|
CLEAR: ls_manifest_descriptor-sem_version.
|
||||||
|
|
||||||
|
LOOP AT ls_manifest_descriptor-dependencies ASSIGNING <ls_dependency>.
|
||||||
|
CLEAR: <ls_dependency>-sem_version.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
CALL TRANSFORMATION id
|
CALL TRANSFORMATION id
|
||||||
OPTIONS initial_components = 'suppress'
|
OPTIONS initial_components = 'suppress'
|
||||||
SOURCE data = ms_manifest_descriptor
|
SOURCE data = ls_manifest_descriptor
|
||||||
RESULT XML rv_xml.
|
RESULT XML rv_xml.
|
||||||
|
|
||||||
rv_xml = zcl_abapgit_xml_pretty=>print( rv_xml ).
|
rv_xml = zcl_abapgit_xml_pretty=>print( rv_xml ).
|
||||||
|
|
|
@ -5,6 +5,7 @@ INTERFACE zif_abapgit_apack_definitions PUBLIC.
|
||||||
group_id TYPE string,
|
group_id TYPE string,
|
||||||
artifact_id TYPE string,
|
artifact_id TYPE string,
|
||||||
version TYPE string,
|
version TYPE string,
|
||||||
|
sem_version TYPE zif_abapgit_definitions=>ty_version,
|
||||||
git_url TYPE string,
|
git_url TYPE string,
|
||||||
target_package TYPE devclass,
|
target_package TYPE devclass,
|
||||||
END OF ty_dependency,
|
END OF ty_dependency,
|
||||||
|
@ -18,6 +19,7 @@ INTERFACE zif_abapgit_apack_definitions PUBLIC.
|
||||||
group_id TYPE string,
|
group_id TYPE string,
|
||||||
artifact_id TYPE string,
|
artifact_id TYPE string,
|
||||||
version TYPE string,
|
version TYPE string,
|
||||||
|
sem_version TYPE zif_abapgit_definitions=>ty_version,
|
||||||
repository_type TYPE ty_repository_type,
|
repository_type TYPE ty_repository_type,
|
||||||
git_url TYPE string,
|
git_url TYPE string,
|
||||||
END OF ty_descriptor_wo_dependencies,
|
END OF ty_descriptor_wo_dependencies,
|
||||||
|
@ -26,7 +28,9 @@ INTERFACE zif_abapgit_apack_definitions PUBLIC.
|
||||||
INCLUDE TYPE ty_descriptor_wo_dependencies.
|
INCLUDE TYPE ty_descriptor_wo_dependencies.
|
||||||
TYPES:
|
TYPES:
|
||||||
dependencies TYPE tt_dependencies,
|
dependencies TYPE tt_dependencies,
|
||||||
END OF ty_descriptor.
|
END OF ty_descriptor,
|
||||||
|
|
||||||
|
tt_descriptor TYPE STANDARD TABLE OF ty_descriptor WITH NON-UNIQUE DEFAULT KEY.
|
||||||
|
|
||||||
CONSTANTS c_dot_apack_manifest TYPE string VALUE '.apack-manifest.xml' ##NO_TEXT.
|
CONSTANTS c_dot_apack_manifest TYPE string VALUE '.apack-manifest.xml' ##NO_TEXT.
|
||||||
CONSTANTS c_repository_type_abapgit TYPE ty_repository_type VALUE 'abapGit' ##NO_TEXT.
|
CONSTANTS c_repository_type_abapgit TYPE ty_repository_type VALUE 'abapGit' ##NO_TEXT.
|
||||||
|
|
|
@ -87,13 +87,14 @@ ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION.
|
CLASS zcl_abapgit_services_repo IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD gui_deserialize.
|
METHOD gui_deserialize.
|
||||||
|
|
||||||
DATA: ls_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks,
|
DATA: ls_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks,
|
||||||
lt_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt.
|
lt_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt,
|
||||||
|
lt_dependencies TYPE zif_abapgit_apack_definitions=>tt_dependencies.
|
||||||
|
|
||||||
|
|
||||||
* find troublesome objects
|
* find troublesome objects
|
||||||
|
@ -110,6 +111,11 @@ CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION.
|
||||||
ls_checks-requirements-decision = 'Y'.
|
ls_checks-requirements-decision = 'Y'.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
IF ls_checks-dependencies-met = 'N'.
|
||||||
|
lt_dependencies = io_repo->get_dot_apack( )->get_manifest_descriptor( )-dependencies.
|
||||||
|
zcl_abapgit_apack_helper=>dependencies_popup( lt_dependencies ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
IF ls_checks-transport-required = abap_true.
|
IF ls_checks-transport-required = abap_true.
|
||||||
ls_checks-transport-transport = zcl_abapgit_ui_factory=>get_popups( )->popup_transport_request(
|
ls_checks-transport-transport = zcl_abapgit_ui_factory=>get_popups( )->popup_transport_request(
|
||||||
is_transport_type = ls_checks-transport-type ).
|
is_transport_type = ls_checks-transport-type ).
|
||||||
|
|
140
src/utils/zcl_abapgit_version.clas.abap
Normal file
140
src/utils/zcl_abapgit_version.clas.abap
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
CLASS zcl_abapgit_version DEFINITION
|
||||||
|
PUBLIC
|
||||||
|
FINAL
|
||||||
|
CREATE PUBLIC .
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
CLASS-METHODS conv_str_to_version
|
||||||
|
IMPORTING
|
||||||
|
!iv_version TYPE csequence
|
||||||
|
RETURNING
|
||||||
|
VALUE(rs_version) TYPE zif_abapgit_definitions=>ty_version
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS check_dependant_version
|
||||||
|
IMPORTING
|
||||||
|
!is_current TYPE zif_abapgit_definitions=>ty_version
|
||||||
|
!is_dependant TYPE zif_abapgit_definitions=>ty_version
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
|
PROTECTED SECTION.
|
||||||
|
PRIVATE SECTION.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CLASS zcl_abapgit_version IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD conv_str_to_version.
|
||||||
|
|
||||||
|
DATA: lt_segments TYPE STANDARD TABLE OF string,
|
||||||
|
lt_parts TYPE STANDARD TABLE OF string,
|
||||||
|
lv_segment TYPE string.
|
||||||
|
|
||||||
|
SPLIT iv_version AT '-' INTO TABLE lt_segments.
|
||||||
|
|
||||||
|
READ TABLE lt_segments INTO lv_segment INDEX 1. " Version
|
||||||
|
IF sy-subrc <> 0. " No version
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
SPLIT lv_segment AT '.' INTO TABLE lt_parts.
|
||||||
|
|
||||||
|
LOOP AT lt_parts INTO lv_segment.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
CASE sy-tabix.
|
||||||
|
WHEN 1.
|
||||||
|
rs_version-major = lv_segment.
|
||||||
|
WHEN 2.
|
||||||
|
rs_version-minor = lv_segment.
|
||||||
|
WHEN 3.
|
||||||
|
rs_version-patch = lv_segment.
|
||||||
|
ENDCASE.
|
||||||
|
CATCH cx_sy_conversion_no_number.
|
||||||
|
zcx_abapgit_exception=>raise( 'Incorrect format for Semantic Version' ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
READ TABLE lt_segments INTO lv_segment INDEX 2. " Pre-release Version
|
||||||
|
IF sy-subrc <> 0. " No version
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
SPLIT lv_segment AT '.' INTO TABLE lt_parts.
|
||||||
|
|
||||||
|
LOOP AT lt_parts INTO lv_segment.
|
||||||
|
|
||||||
|
CASE sy-tabix.
|
||||||
|
WHEN 1.
|
||||||
|
rs_version-prerelase = lv_segment.
|
||||||
|
TRANSLATE rs_version-prerelase TO LOWER CASE.
|
||||||
|
WHEN 2.
|
||||||
|
rs_version-prerelase_patch = lv_segment.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
IF rs_version-prerelase <> 'rc' AND rs_version-prerelase <> 'beta' AND rs_version-prerelase <> 'alpha'.
|
||||||
|
zcx_abapgit_exception=>raise( 'Incorrect format for Semantic Version' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD check_dependant_version.
|
||||||
|
|
||||||
|
CONSTANTS: lc_message TYPE string VALUE 'Current version is older than required'.
|
||||||
|
|
||||||
|
IF is_dependant-major > is_current-major.
|
||||||
|
zcx_abapgit_exception=>raise( lc_message ).
|
||||||
|
ELSEIF is_dependant-major < is_current-major.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF is_dependant-minor > is_current-minor.
|
||||||
|
zcx_abapgit_exception=>raise( lc_message ).
|
||||||
|
ELSEIF is_dependant-minor < is_current-minor.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF is_dependant-patch > is_current-patch.
|
||||||
|
zcx_abapgit_exception=>raise( lc_message ).
|
||||||
|
ELSEIF is_dependant-patch < is_current-patch.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF is_current-prerelase IS INITIAL.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CASE is_current-prerelase.
|
||||||
|
WHEN 'rc'.
|
||||||
|
IF is_dependant-prerelase = ''.
|
||||||
|
zcx_abapgit_exception=>raise( lc_message ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
WHEN 'beta'.
|
||||||
|
IF is_dependant-prerelase = '' OR is_dependant-prerelase = 'rc'.
|
||||||
|
zcx_abapgit_exception=>raise( lc_message ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
WHEN 'alpha'.
|
||||||
|
IF is_dependant-prerelase = '' OR is_dependant-prerelase = 'rc' OR is_dependant-prerelase = 'beta'.
|
||||||
|
zcx_abapgit_exception=>raise( lc_message ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
IF is_dependant-prerelase = is_current-prerelase AND is_dependant-prerelase_patch > is_current-prerelase_patch.
|
||||||
|
zcx_abapgit_exception=>raise( lc_message ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
ENDCLASS.
|
16
src/utils/zcl_abapgit_version.clas.xml
Normal file
16
src/utils/zcl_abapgit_version.clas.xml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<VSEOCLASS>
|
||||||
|
<CLSNAME>ZCL_ABAPGIT_VERSION</CLSNAME>
|
||||||
|
<LANGU>E</LANGU>
|
||||||
|
<DESCRIPT>Version</DESCRIPT>
|
||||||
|
<STATE>1</STATE>
|
||||||
|
<CLSCCINCL>X</CLSCCINCL>
|
||||||
|
<FIXPT>X</FIXPT>
|
||||||
|
<UNICODE>X</UNICODE>
|
||||||
|
</VSEOCLASS>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -56,6 +56,9 @@ CLASS zcl_abapgit_repo DEFINITION
|
||||||
!io_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit
|
!io_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
|
METHODS get_dot_apack
|
||||||
|
RETURNING
|
||||||
|
VALUE(ro_dot_apack) TYPE REF TO zcl_abapgit_apack_reader .
|
||||||
METHODS deserialize
|
METHODS deserialize
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!is_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks
|
!is_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks
|
||||||
|
@ -80,6 +83,11 @@ CLASS zcl_abapgit_repo DEFINITION
|
||||||
VALUE(ro_dot) TYPE REF TO zcl_abapgit_dot_abapgit
|
VALUE(ro_dot) TYPE REF TO zcl_abapgit_dot_abapgit
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
|
METHODS find_remote_dot_apack
|
||||||
|
RETURNING
|
||||||
|
VALUE(ro_dot) TYPE REF TO zcl_abapgit_apack_reader
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
METHODS is_offline
|
METHODS is_offline
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rv_offline) TYPE abap_bool
|
VALUE(rv_offline) TYPE abap_bool
|
||||||
|
@ -123,8 +131,8 @@ CLASS zcl_abapgit_repo DEFINITION
|
||||||
METHODS reset_log .
|
METHODS reset_log .
|
||||||
METHODS refresh_local_object
|
METHODS refresh_local_object
|
||||||
IMPORTING
|
IMPORTING
|
||||||
iv_obj_type TYPE tadir-object
|
!iv_obj_type TYPE tadir-object
|
||||||
iv_obj_name TYPE tadir-obj_name
|
!iv_obj_name TYPE tadir-obj_name
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
METHODS refresh_local_objects
|
METHODS refresh_local_objects
|
||||||
|
@ -141,6 +149,11 @@ CLASS zcl_abapgit_repo DEFINITION
|
||||||
DATA mt_status TYPE zif_abapgit_definitions=>ty_results_tt .
|
DATA mt_status TYPE zif_abapgit_definitions=>ty_results_tt .
|
||||||
DATA mi_log TYPE REF TO zif_abapgit_log .
|
DATA mi_log TYPE REF TO zif_abapgit_log .
|
||||||
|
|
||||||
|
METHODS set_dot_apack
|
||||||
|
IMPORTING
|
||||||
|
!io_dot_apack TYPE REF TO zcl_abapgit_apack_reader
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
METHODS set
|
METHODS set
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!it_checksums TYPE zif_abapgit_persistence=>ty_local_checksum_tt OPTIONAL
|
!it_checksums TYPE zif_abapgit_persistence=>ty_local_checksum_tt OPTIONAL
|
||||||
|
@ -158,6 +171,7 @@ CLASS zcl_abapgit_repo DEFINITION
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
DATA mi_listener TYPE REF TO zif_abapgit_repo_listener.
|
DATA mi_listener TYPE REF TO zif_abapgit_repo_listener.
|
||||||
|
DATA mo_apack_reader TYPE REF TO zcl_abapgit_apack_reader.
|
||||||
|
|
||||||
METHODS get_local_checksums
|
METHODS get_local_checksums
|
||||||
RETURNING
|
RETURNING
|
||||||
|
@ -184,7 +198,7 @@ ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS zcl_abapgit_repo IMPLEMENTATION.
|
CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD bind_listener.
|
METHOD bind_listener.
|
||||||
|
@ -256,13 +270,16 @@ CLASS zcl_abapgit_repo IMPLEMENTATION.
|
||||||
DATA: lt_updated_files TYPE zif_abapgit_definitions=>ty_file_signatures_tt,
|
DATA: lt_updated_files TYPE zif_abapgit_definitions=>ty_file_signatures_tt,
|
||||||
lx_error TYPE REF TO zcx_abapgit_exception.
|
lx_error TYPE REF TO zcx_abapgit_exception.
|
||||||
|
|
||||||
|
|
||||||
deserialize_checks( ).
|
deserialize_checks( ).
|
||||||
|
|
||||||
IF is_checks-requirements-met = 'N' AND is_checks-requirements-decision IS INITIAL.
|
IF is_checks-requirements-met = 'N' AND is_checks-requirements-decision IS INITIAL.
|
||||||
zcx_abapgit_exception=>raise( 'Requirements not met and undecided' ).
|
zcx_abapgit_exception=>raise( 'Requirements not met and undecided' ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
IF is_checks-dependencies-met = 'N'.
|
||||||
|
zcx_abapgit_exception=>raise( 'APACK dependencies not met' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
IF is_checks-transport-required = abap_true AND is_checks-transport-transport IS INITIAL.
|
IF is_checks-transport-required = abap_true AND is_checks-transport-transport IS INITIAL.
|
||||||
zcx_abapgit_exception=>raise( |No transport request was supplied| ).
|
zcx_abapgit_exception=>raise( |No transport request was supplied| ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
@ -294,11 +311,13 @@ CLASS zcl_abapgit_repo IMPLEMENTATION.
|
||||||
METHOD deserialize_checks.
|
METHOD deserialize_checks.
|
||||||
|
|
||||||
DATA: lt_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt,
|
DATA: lt_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt,
|
||||||
|
lt_dependencies TYPE zif_abapgit_apack_definitions=>tt_dependencies,
|
||||||
lv_master_language TYPE spras,
|
lv_master_language TYPE spras,
|
||||||
lv_logon_language TYPE spras.
|
lv_logon_language TYPE spras.
|
||||||
|
|
||||||
|
|
||||||
find_remote_dot_abapgit( ).
|
find_remote_dot_abapgit( ).
|
||||||
|
find_remote_dot_apack( ).
|
||||||
|
|
||||||
lv_master_language = get_dot_abapgit( )->get_master_language( ).
|
lv_master_language = get_dot_abapgit( )->get_master_language( ).
|
||||||
lv_logon_language = sy-langu.
|
lv_logon_language = sy-langu.
|
||||||
|
@ -318,6 +337,9 @@ CLASS zcl_abapgit_repo IMPLEMENTATION.
|
||||||
lt_requirements = get_dot_abapgit( )->get_data( )-requirements.
|
lt_requirements = get_dot_abapgit( )->get_data( )-requirements.
|
||||||
rs_checks-requirements-met = zcl_abapgit_requirement_helper=>is_requirements_met( lt_requirements ).
|
rs_checks-requirements-met = zcl_abapgit_requirement_helper=>is_requirements_met( lt_requirements ).
|
||||||
|
|
||||||
|
lt_dependencies = get_dot_apack( )->get_manifest_descriptor( )-dependencies.
|
||||||
|
rs_checks-dependencies-met = zcl_abapgit_apack_helper=>are_dependencies_met( lt_dependencies ).
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
@ -339,6 +361,24 @@ CLASS zcl_abapgit_repo IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD find_remote_dot_apack.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_remote> LIKE LINE OF mt_remote.
|
||||||
|
|
||||||
|
get_files_remote( ).
|
||||||
|
|
||||||
|
READ TABLE mt_remote ASSIGNING <ls_remote>
|
||||||
|
WITH KEY path = zif_abapgit_definitions=>c_root_dir
|
||||||
|
filename = zif_abapgit_apack_definitions=>c_dot_apack_manifest.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
ro_dot = zcl_abapgit_apack_reader=>deserialize( iv_package_name = ms_data-package
|
||||||
|
iv_xstr = <ls_remote>-data ).
|
||||||
|
set_dot_apack( ro_dot ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD get_dot_abapgit.
|
METHOD get_dot_abapgit.
|
||||||
CREATE OBJECT ro_dot_abapgit
|
CREATE OBJECT ro_dot_abapgit
|
||||||
EXPORTING
|
EXPORTING
|
||||||
|
@ -346,6 +386,16 @@ CLASS zcl_abapgit_repo IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD get_dot_apack.
|
||||||
|
IF mo_apack_reader IS NOT BOUND.
|
||||||
|
mo_apack_reader = zcl_abapgit_apack_reader=>create_instance( ms_data-package ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ro_dot_apack = mo_apack_reader.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD get_files_local.
|
METHOD get_files_local.
|
||||||
|
|
||||||
DATA: lo_filter TYPE REF TO zcl_abapgit_repo_filter,
|
DATA: lo_filter TYPE REF TO zcl_abapgit_repo_filter,
|
||||||
|
@ -531,6 +581,48 @@ CLASS zcl_abapgit_repo IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD refresh_local_object.
|
||||||
|
|
||||||
|
DATA:
|
||||||
|
ls_tadir TYPE zif_abapgit_definitions=>ty_tadir,
|
||||||
|
lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt,
|
||||||
|
lt_new_local_files TYPE zif_abapgit_definitions=>ty_files_item_tt,
|
||||||
|
lo_serialize TYPE REF TO zcl_abapgit_serialize.
|
||||||
|
|
||||||
|
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read(
|
||||||
|
iv_package = ms_data-package
|
||||||
|
io_dot = get_dot_abapgit( ) ).
|
||||||
|
|
||||||
|
DELETE mt_local WHERE item-obj_type = iv_obj_type
|
||||||
|
AND item-obj_name = iv_obj_name.
|
||||||
|
|
||||||
|
READ TABLE lt_tadir INTO ls_tadir
|
||||||
|
WITH KEY object = iv_obj_type
|
||||||
|
obj_name = iv_obj_name.
|
||||||
|
IF sy-subrc <> 0 OR ls_tadir-delflag = abap_true.
|
||||||
|
" object doesn't exist anymore, nothing todo here
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CLEAR lt_tadir.
|
||||||
|
INSERT ls_tadir INTO TABLE lt_tadir.
|
||||||
|
|
||||||
|
CREATE OBJECT lo_serialize.
|
||||||
|
lt_new_local_files = lo_serialize->serialize( lt_tadir ).
|
||||||
|
|
||||||
|
INSERT LINES OF lt_new_local_files INTO TABLE mt_local.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD refresh_local_objects.
|
||||||
|
|
||||||
|
mv_request_local_refresh = abap_true.
|
||||||
|
get_files_local( ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD reset_log.
|
METHOD reset_log.
|
||||||
CLEAR mi_log.
|
CLEAR mi_log.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
@ -552,8 +644,7 @@ CLASS zcl_abapgit_repo IMPLEMENTATION.
|
||||||
|
|
||||||
* TODO: refactor
|
* TODO: refactor
|
||||||
|
|
||||||
DATA:
|
DATA: ls_mask TYPE zif_abapgit_persistence=>ty_repo_meta_mask.
|
||||||
ls_mask TYPE zif_abapgit_persistence=>ty_repo_meta_mask.
|
|
||||||
|
|
||||||
|
|
||||||
ASSERT it_checksums IS SUPPLIED
|
ASSERT it_checksums IS SUPPLIED
|
||||||
|
@ -619,6 +710,12 @@ CLASS zcl_abapgit_repo IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD set_dot_apack.
|
||||||
|
get_dot_apack( ).
|
||||||
|
mo_apack_reader->set_manifest_descriptor( io_dot_apack->get_manifest_descriptor( ) ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD set_files_remote.
|
METHOD set_files_remote.
|
||||||
|
|
||||||
mt_remote = it_files.
|
mt_remote = it_files.
|
||||||
|
@ -757,47 +854,4 @@ CLASS zcl_abapgit_repo IMPLEMENTATION.
|
||||||
set( it_checksums = lt_checksums ).
|
set( it_checksums = lt_checksums ).
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD refresh_local_object.
|
|
||||||
|
|
||||||
DATA:
|
|
||||||
ls_tadir TYPE zif_abapgit_definitions=>ty_tadir,
|
|
||||||
lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt,
|
|
||||||
lt_new_local_files TYPE zif_abapgit_definitions=>ty_files_item_tt,
|
|
||||||
lo_serialize TYPE REF TO zcl_abapgit_serialize.
|
|
||||||
|
|
||||||
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read(
|
|
||||||
iv_package = ms_data-package
|
|
||||||
io_dot = get_dot_abapgit( ) ).
|
|
||||||
|
|
||||||
DELETE mt_local WHERE item-obj_type = iv_obj_type
|
|
||||||
AND item-obj_name = iv_obj_name.
|
|
||||||
|
|
||||||
READ TABLE lt_tadir INTO ls_tadir
|
|
||||||
WITH KEY object = iv_obj_type
|
|
||||||
obj_name = iv_obj_name.
|
|
||||||
IF sy-subrc <> 0 OR ls_tadir-delflag = abap_true.
|
|
||||||
" object doesn't exist anymore, nothing todo here
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
CLEAR lt_tadir.
|
|
||||||
INSERT ls_tadir INTO TABLE lt_tadir.
|
|
||||||
|
|
||||||
CREATE OBJECT lo_serialize.
|
|
||||||
lt_new_local_files = lo_serialize->serialize( lt_tadir ).
|
|
||||||
|
|
||||||
INSERT LINES OF lt_new_local_files INTO TABLE mt_local.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD refresh_local_objects.
|
|
||||||
|
|
||||||
mv_request_local_refresh = abap_true.
|
|
||||||
get_files_local( ).
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
|
@ -113,6 +113,10 @@ INTERFACE zif_abapgit_definitions
|
||||||
met TYPE ty_yes_no,
|
met TYPE ty_yes_no,
|
||||||
decision TYPE ty_yes_no,
|
decision TYPE ty_yes_no,
|
||||||
END OF ty_requirements .
|
END OF ty_requirements .
|
||||||
|
TYPES:
|
||||||
|
BEGIN OF ty_dependencies,
|
||||||
|
met TYPE ty_yes_no,
|
||||||
|
END OF ty_dependencies .
|
||||||
TYPES:
|
TYPES:
|
||||||
BEGIN OF ty_transport_type,
|
BEGIN OF ty_transport_type,
|
||||||
request TYPE trfunction,
|
request TYPE trfunction,
|
||||||
|
@ -129,6 +133,7 @@ INTERFACE zif_abapgit_definitions
|
||||||
overwrite TYPE ty_overwrite_tt,
|
overwrite TYPE ty_overwrite_tt,
|
||||||
warning_package TYPE ty_overwrite_tt,
|
warning_package TYPE ty_overwrite_tt,
|
||||||
requirements TYPE ty_requirements,
|
requirements TYPE ty_requirements,
|
||||||
|
dependencies TYPE ty_dependencies,
|
||||||
transport TYPE ty_transport,
|
transport TYPE ty_transport,
|
||||||
END OF ty_deserialize_checks .
|
END OF ty_deserialize_checks .
|
||||||
TYPES:
|
TYPES:
|
||||||
|
@ -368,6 +373,15 @@ INTERFACE zif_abapgit_definitions
|
||||||
ty_proxy_bypass_url TYPE c LENGTH 255,
|
ty_proxy_bypass_url TYPE c LENGTH 255,
|
||||||
ty_range_proxy_bypass_url TYPE RANGE OF ty_proxy_bypass_url.
|
ty_range_proxy_bypass_url TYPE RANGE OF ty_proxy_bypass_url.
|
||||||
|
|
||||||
|
TYPES:
|
||||||
|
BEGIN OF ty_version,
|
||||||
|
major TYPE i,
|
||||||
|
minor TYPE i,
|
||||||
|
patch TYPE i,
|
||||||
|
prerelase TYPE string,
|
||||||
|
prerelase_patch TYPE i,
|
||||||
|
END OF ty_version.
|
||||||
|
|
||||||
CONSTANTS:
|
CONSTANTS:
|
||||||
BEGIN OF c_git_branch_type,
|
BEGIN OF c_git_branch_type,
|
||||||
branch TYPE ty_git_branch_type VALUE 'HD',
|
branch TYPE ty_git_branch_type VALUE 'HD',
|
||||||
|
|
Loading…
Reference in New Issue
Block a user