diff --git a/zabapgit.abap b/zabapgit.abap index 26b867ea3..9585ac0a9 100644 --- a/zabapgit.abap +++ b/zabapgit.abap @@ -3,7 +3,7 @@ REPORT zabapgit. * See https://github.com/larshp/abapGit/ CONSTANTS: gc_xml_version TYPE string VALUE 'v0.2-alpha', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v0.102'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v0.103'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) @@ -3368,7 +3368,7 @@ CLASS lcl_object_doma IMPLEMENTATION. ENDCLASS. "lcl_object_doma IMPLEMENTATION *----------------------------------------------------------------------* -* CLASS lcl_object_karp DEFINITION +* CLASS lcl_object_iarp DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* @@ -3545,6 +3545,184 @@ CLASS lcl_object_iarp IMPLEMENTATION. ENDCLASS. +*----------------------------------------------------------------------* +* CLASS lcl_object_iasp DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_iasp DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + + PRIVATE SECTION. + METHODS: + read + EXPORTING es_attr TYPE w3servattr + et_parameters TYPE w3servpara_tabletype + RAISING lcx_exception, + save + IMPORTING is_attr TYPE w3servattr + it_parameters TYPE w3servpara_tabletype + RAISING lcx_exception. + +ENDCLASS. "lcl_object_dtel DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_iasp IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_iasp IMPLEMENTATION. + + METHOD read. + + DATA: li_service TYPE REF TO if_w3_api_service, + ls_name TYPE itsappl. + + + ls_name = ms_item-obj_name. + + cl_w3_api_service=>if_w3_api_service~load( + EXPORTING + p_service_name = ls_name + IMPORTING + p_service = li_service + EXCEPTIONS + object_not_existing = 1 + permission_failure = 2 + error_occured = 3 + OTHERS = 4 ). + IF sy-subrc <> 0. + _raise 'error from w3api_service~load'. + ENDIF. + + li_service->get_attributes( IMPORTING p_attributes = es_attr ). + + CLEAR: es_attr-chname, + es_attr-tdate, + es_attr-ttime, + es_attr-devclass. + + li_service->get_parameters( IMPORTING p_parameters = et_parameters ). + + ENDMETHOD. + + METHOD lif_object~serialize. + + DATA: ls_attr TYPE w3servattr, + lo_xml TYPE REF TO lcl_xml, + lt_parameters TYPE w3servpara_tabletype. + + + IF lif_object~exists( ) = abap_false. + RETURN. + ENDIF. + + read( IMPORTING es_attr = ls_attr + et_parameters = lt_parameters ). + + CREATE OBJECT lo_xml. + lo_xml->structure_add( ls_attr ). + lo_xml->table_add( lt_parameters ). + + mo_files->add_xml( lo_xml ). + + ENDMETHOD. + + METHOD save. + + DATA: li_service TYPE REF TO if_w3_api_service. + + + cl_w3_api_service=>if_w3_api_service~create_new( + EXPORTING p_service_data = is_attr + IMPORTING p_service = li_service ). + + li_service->set_attributes( is_attr ). + li_service->set_parameters( it_parameters ). + + li_service->if_w3_api_object~save( ). + + ENDMETHOD. + + METHOD lif_object~deserialize. + + DATA: ls_attr TYPE w3servattr, + lo_xml TYPE REF TO lcl_xml, + lt_parameters TYPE w3servpara_tabletype. + + + lo_xml = mo_files->read_xml( ). + + lo_xml->structure_read( CHANGING cg_structure = ls_attr ). + lo_xml->table_read( CHANGING ct_table = lt_parameters ). + + ls_attr-devclass = iv_package. + save( is_attr = ls_attr + it_parameters = lt_parameters ). + + ENDMETHOD. + + METHOD lif_object~delete. + + DATA: li_service TYPE REF TO if_w3_api_service, + ls_name TYPE itsappl. + + + ls_name = ms_item-obj_name. + + cl_w3_api_service=>if_w3_api_service~load( + EXPORTING + p_service_name = ls_name + IMPORTING + p_service = li_service + EXCEPTIONS + object_not_existing = 1 + permission_failure = 2 + error_occured = 3 + OTHERS = 4 ). + IF sy-subrc <> 0. + _raise 'error from if_w3_api_service~load'. + ENDIF. + + li_service->if_w3_api_object~set_changeable( abap_true ). + li_service->if_w3_api_object~delete( ). + li_service->if_w3_api_object~save( ). + + ENDMETHOD. + + METHOD lif_object~exists. + + DATA: ls_name TYPE itsappl. + + + ls_name = ms_item-obj_name. + + cl_w3_api_service=>if_w3_api_service~load( + EXPORTING + p_service_name = ls_name + EXCEPTIONS + object_not_existing = 1 + permission_failure = 2 + error_occured = 3 + OTHERS = 4 ). + IF sy-subrc = 1. + rv_bool = abap_false. + ELSEIF sy-subrc <> 0. + _raise 'error from w3_api_service~load'. + ELSE. + rv_bool = abap_true. + ENDIF. + + ENDMETHOD. + + METHOD lif_object~jump. + _raise 'todo, IASP, jump'. + ENDMETHOD. + +ENDCLASS. + *----------------------------------------------------------------------* * CLASS lcl_object_dtel DEFINITION *----------------------------------------------------------------------* @@ -4652,7 +4830,7 @@ CLASS lcl_object_smim IMPLEMENTATION. ENDMETHOD. "delete METHOD lif_object~jump. - _raise 'todo, SMIM'. + _raise 'todo, SMIM, jump'. ENDMETHOD. "jump ENDCLASS. "lcl_object_smim IMPLEMENTATION @@ -5036,7 +5214,7 @@ CLASS lcl_object_sicf IMPLEMENTATION. ENDMETHOD. "delete METHOD lif_object~jump. - _raise 'todo, SICF'. + _raise 'todo, SICF, jump'. ENDMETHOD. "jump ENDCLASS. "lcl_object_sicf IMPLEMENTATION @@ -9854,6 +10032,36 @@ CLASS lcl_object_prog IMPLEMENTATION. ENDCLASS. "lcl_object_prog IMPLEMENTATION +CLASS lcl_file_status DEFINITION FINAL. + + PUBLIC SECTION. + + TYPES: BEGIN OF ty_result, + obj_type TYPE tadir-object, + obj_name TYPE tadir-obj_name, + match TYPE sap_bool, + filename TYPE string, + package TYPE devclass, + path TYPE string, + END OF ty_result. + TYPES: ty_results_tt TYPE STANDARD TABLE OF ty_result WITH DEFAULT KEY. + + CLASS-METHODS status + IMPORTING it_files TYPE ty_files_tt + iv_package TYPE devclass + RETURNING VALUE(rt_results) TYPE ty_results_tt + RAISING lcx_exception. + + PRIVATE SECTION. + + CLASS-METHODS compare_files + IMPORTING it_repo TYPE ty_files_tt + is_gen TYPE ty_file + RETURNING VALUE(rv_match) TYPE sap_bool + RAISING lcx_exception. + +ENDCLASS. + *----------------------------------------------------------------------* * CLASS lcl_object DEFINITION *----------------------------------------------------------------------* @@ -9895,6 +10103,11 @@ CLASS lcl_objects DEFINITION FINAL. RETURNING VALUE(ri_obj) TYPE REF TO lif_object RAISING lcx_exception. + CLASS-METHODS + prioritize_deser + IMPORTING it_results TYPE lcl_file_status=>ty_results_tt + RETURNING VALUE(rt_results) TYPE lcl_file_status=>ty_results_tt. + CLASS-METHODS class_name IMPORTING is_item TYPE ty_item RETURNING VALUE(rv_class_name) TYPE string. @@ -10031,7 +10244,8 @@ CLASS lcl_tadir IMPLEMENTATION. * if abapGit project is installed in package ZZZ, all subpackages should be named * ZZZ_something. This will define the folder name in the zip file to be "something", * similarily with online projects - MESSAGE 'Unexpected package naming(' && -devclass && ')' TYPE 'I'. + MESSAGE 'Unexpected package naming(' && + -devclass && ')' TYPE 'I' ##NO_TEXT. CONTINUE. ENDIF. @@ -10052,36 +10266,6 @@ CLASS lcl_tadir IMPLEMENTATION. ENDCLASS. "lcl_tadir IMPLEMENTATION -CLASS lcl_file_status DEFINITION FINAL. - - PUBLIC SECTION. - - TYPES: BEGIN OF ty_result, - obj_type TYPE tadir-object, - obj_name TYPE tadir-obj_name, - match TYPE sap_bool, - filename TYPE string, - package TYPE devclass, - path TYPE string, - END OF ty_result. - TYPES: ty_results_tt TYPE STANDARD TABLE OF ty_result WITH DEFAULT KEY. - - CLASS-METHODS status - IMPORTING it_files TYPE ty_files_tt - iv_package TYPE devclass - RETURNING VALUE(rt_results) TYPE ty_results_tt - RAISING lcx_exception. - - PRIVATE SECTION. - - CLASS-METHODS compare_files - IMPORTING it_repo TYPE ty_files_tt - is_gen TYPE ty_file - RETURNING VALUE(rv_match) TYPE sap_bool - RAISING lcx_exception. - -ENDCLASS. - CLASS lcl_file_status IMPLEMENTATION. METHOD compare_files. @@ -10681,6 +10865,22 @@ CLASS lcl_objects IMPLEMENTATION. ENDMETHOD. "serialize + METHOD prioritize_deser. + + FIELD-SYMBOLS: LIKE LINE OF it_results. + + +* ISAP has to be handled before ISRP + LOOP AT it_results ASSIGNING WHERE obj_type = 'IASP'. + APPEND TO rt_results. + ENDLOOP. + + LOOP AT it_results ASSIGNING WHERE obj_type <> 'IASP'. + APPEND TO rt_results. + ENDLOOP. + + ENDMETHOD. + METHOD deserialize. DATA: ls_item TYPE ty_item, @@ -10701,6 +10901,8 @@ CLASS lcl_objects IMPLEMENTATION. SORT lt_results BY obj_type ASCENDING obj_name ASCENDING. DELETE ADJACENT DUPLICATES FROM lt_results COMPARING obj_type obj_name. + lt_results = prioritize_deser( lt_results ). + LOOP AT lt_results ASSIGNING . show_progress( iv_current = sy-tabix iv_total = lines( lt_results )