mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 11:46:38 +08:00
Merge pull request #1496 from larshp/repo_srv
interface for ZCL_ABAPGIT_REPO_SRV
This commit is contained in:
commit
b71b96fc9f
|
@ -5,70 +5,23 @@ CLASS zcl_abapgit_repo_srv DEFINITION
|
|||
|
||||
PUBLIC SECTION.
|
||||
|
||||
INTERFACES zif_abapgit_repo_srv .
|
||||
|
||||
CLASS-METHODS get_instance
|
||||
RETURNING
|
||||
VALUE(rv_srv) TYPE REF TO zcl_abapgit_repo_srv .
|
||||
METHODS list
|
||||
RETURNING
|
||||
VALUE(rt_list) TYPE zif_abapgit_definitions=>ty_repo_ref_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS new_online
|
||||
IMPORTING
|
||||
!iv_url TYPE string
|
||||
!iv_branch_name TYPE string
|
||||
!iv_package TYPE devclass
|
||||
RETURNING
|
||||
VALUE(ro_repo) TYPE REF TO zcl_abapgit_repo_online
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS new_offline
|
||||
IMPORTING
|
||||
!iv_url TYPE string
|
||||
!iv_package TYPE devclass
|
||||
RETURNING
|
||||
VALUE(ro_repo) TYPE REF TO zcl_abapgit_repo_offline
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS delete
|
||||
IMPORTING
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS get
|
||||
IMPORTING
|
||||
!iv_key TYPE zif_abapgit_persistence=>ty_value
|
||||
RETURNING
|
||||
VALUE(ro_repo) TYPE REF TO zcl_abapgit_repo
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS is_repo_installed
|
||||
IMPORTING
|
||||
!iv_url TYPE string
|
||||
!iv_target_package TYPE devclass OPTIONAL
|
||||
RETURNING
|
||||
VALUE(rv_installed) TYPE abap_bool
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS switch_repo_type
|
||||
IMPORTING
|
||||
!iv_key TYPE zif_abapgit_persistence=>ty_value
|
||||
!iv_offline TYPE abap_bool
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS validate_package
|
||||
IMPORTING
|
||||
!iv_package TYPE devclass
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS purge
|
||||
IMPORTING
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
VALUE(ri_srv) TYPE REF TO zif_abapgit_repo_srv .
|
||||
PRIVATE SECTION.
|
||||
|
||||
CLASS-DATA go_ref TYPE REF TO zcl_abapgit_repo_srv .
|
||||
ALIASES delete
|
||||
FOR zif_abapgit_repo_srv~delete .
|
||||
ALIASES get
|
||||
FOR zif_abapgit_repo_srv~get .
|
||||
ALIASES list
|
||||
FOR zif_abapgit_repo_srv~list .
|
||||
ALIASES validate_package
|
||||
FOR zif_abapgit_repo_srv~validate_package .
|
||||
|
||||
CLASS-DATA gi_ref TYPE REF TO zif_abapgit_repo_srv .
|
||||
DATA mv_init TYPE abap_bool VALUE abap_false ##NO_TEXT.
|
||||
DATA mo_persistence TYPE REF TO zcl_abapgit_persistence_repo .
|
||||
DATA mt_list TYPE zif_abapgit_definitions=>ty_repo_ref_tt .
|
||||
|
@ -116,79 +69,14 @@ CLASS ZCL_ABAPGIT_REPO_SRV IMPLEMENTATION.
|
|||
ENDMETHOD. "class_constructor
|
||||
|
||||
|
||||
METHOD delete.
|
||||
|
||||
io_repo->delete( ).
|
||||
|
||||
DELETE TABLE mt_list FROM io_repo.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
ENDMETHOD. "delete
|
||||
|
||||
|
||||
METHOD get.
|
||||
|
||||
FIELD-SYMBOLS: <lo_list> LIKE LINE OF mt_list.
|
||||
|
||||
|
||||
IF mv_init = abap_false.
|
||||
refresh( ).
|
||||
ENDIF.
|
||||
|
||||
LOOP AT mt_list ASSIGNING <lo_list>.
|
||||
IF <lo_list>->get_key( ) = iv_key.
|
||||
ro_repo = <lo_list>.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
zcx_abapgit_exception=>raise( 'repo not found, get' ).
|
||||
|
||||
ENDMETHOD. "get
|
||||
|
||||
|
||||
METHOD get_instance.
|
||||
IF go_ref IS INITIAL.
|
||||
CREATE OBJECT go_ref.
|
||||
IF gi_ref IS INITIAL.
|
||||
CREATE OBJECT gi_ref TYPE zcl_abapgit_repo_srv.
|
||||
ENDIF.
|
||||
rv_srv = go_ref.
|
||||
ri_srv = gi_ref.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD is_repo_installed.
|
||||
|
||||
DATA: lt_repo TYPE zif_abapgit_definitions=>ty_repo_ref_tt,
|
||||
lo_repo TYPE REF TO zcl_abapgit_repo,
|
||||
lv_url TYPE string,
|
||||
lv_package TYPE devclass,
|
||||
lo_repo_online TYPE REF TO zcl_abapgit_repo_online,
|
||||
lv_err TYPE string.
|
||||
|
||||
lt_repo = list( ).
|
||||
|
||||
LOOP AT lt_repo INTO lo_repo.
|
||||
CHECK lo_repo->is_offline( ) = abap_false.
|
||||
lo_repo_online ?= lo_repo.
|
||||
|
||||
lv_url = lo_repo_online->get_url( ).
|
||||
lv_package = lo_repo_online->get_package( ).
|
||||
CHECK to_upper( lv_url ) = to_upper( iv_url ).
|
||||
|
||||
" Validate bindings
|
||||
"TODO refactor: move this message out of this method
|
||||
IF iv_target_package IS NOT INITIAL AND iv_target_package <> lv_package.
|
||||
lv_err = |Installation to package { lv_package } detected. |
|
||||
&& |Cancelling installation|.
|
||||
zcx_abapgit_exception=>raise( lv_err ).
|
||||
ENDIF.
|
||||
|
||||
rv_installed = abap_true.
|
||||
EXIT.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD. "is_repo_installed
|
||||
|
||||
|
||||
METHOD is_sap_object_allowed.
|
||||
|
||||
rv_allowed = cl_enh_badi_def_utility=>is_sap_system( ).
|
||||
|
@ -201,104 +89,6 @@ CLASS ZCL_ABAPGIT_REPO_SRV IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD list.
|
||||
|
||||
IF mv_init = abap_false.
|
||||
refresh( ).
|
||||
ENDIF.
|
||||
|
||||
rt_list = mt_list.
|
||||
|
||||
ENDMETHOD. "list
|
||||
|
||||
|
||||
METHOD new_offline.
|
||||
|
||||
DATA: ls_repo TYPE zif_abapgit_persistence=>ty_repo,
|
||||
lv_key TYPE zif_abapgit_persistence=>ty_repo-key.
|
||||
|
||||
|
||||
validate_package( iv_package ).
|
||||
|
||||
lv_key = mo_persistence->add(
|
||||
iv_url = iv_url
|
||||
iv_branch_name = ''
|
||||
iv_package = iv_package
|
||||
iv_offline = abap_true
|
||||
is_dot_abapgit = zcl_abapgit_dot_abapgit=>build_default( )->get_data( ) ).
|
||||
|
||||
TRY.
|
||||
ls_repo = mo_persistence->read( lv_key ).
|
||||
CATCH zcx_abapgit_not_found.
|
||||
zcx_abapgit_exception=>raise( 'new_offline not found' ).
|
||||
ENDTRY.
|
||||
|
||||
CREATE OBJECT ro_repo
|
||||
EXPORTING
|
||||
is_data = ls_repo.
|
||||
|
||||
add( ro_repo ).
|
||||
|
||||
ENDMETHOD. "new_offline
|
||||
|
||||
|
||||
METHOD new_online.
|
||||
|
||||
DATA: ls_repo TYPE zif_abapgit_persistence=>ty_repo,
|
||||
lv_key TYPE zif_abapgit_persistence=>ty_repo-key.
|
||||
|
||||
|
||||
ASSERT NOT iv_url IS INITIAL
|
||||
AND NOT iv_branch_name IS INITIAL
|
||||
AND NOT iv_package IS INITIAL.
|
||||
|
||||
validate_package( iv_package ).
|
||||
zcl_abapgit_url=>validate( |{ iv_url }| ).
|
||||
|
||||
lv_key = mo_persistence->add(
|
||||
iv_url = iv_url
|
||||
iv_branch_name = iv_branch_name
|
||||
iv_package = iv_package
|
||||
iv_offline = abap_false
|
||||
is_dot_abapgit = zcl_abapgit_dot_abapgit=>build_default( )->get_data( ) ).
|
||||
TRY.
|
||||
ls_repo = mo_persistence->read( lv_key ).
|
||||
CATCH zcx_abapgit_not_found.
|
||||
zcx_abapgit_exception=>raise( 'new_online not found' ).
|
||||
ENDTRY.
|
||||
|
||||
CREATE OBJECT ro_repo
|
||||
EXPORTING
|
||||
is_data = ls_repo.
|
||||
|
||||
add( ro_repo ).
|
||||
|
||||
ro_repo->initialize( ).
|
||||
ro_repo->find_remote_dot_abapgit( ).
|
||||
|
||||
ENDMETHOD. "new_online
|
||||
|
||||
|
||||
METHOD purge.
|
||||
|
||||
DATA: lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt.
|
||||
|
||||
|
||||
IF io_repo->get_local_settings( )-write_protected = abap_true.
|
||||
zcx_abapgit_exception=>raise( 'Cannot purge. Local code is write-protected by repo config' ).
|
||||
ELSEIF zcl_abapgit_auth=>is_allowed( zif_abapgit_auth=>gc_authorization-uninstall ) = abap_false.
|
||||
zcx_abapgit_exception=>raise( 'Not authorized' ).
|
||||
ENDIF.
|
||||
|
||||
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read( io_repo->get_package( ) ).
|
||||
|
||||
zcl_abapgit_objects=>delete( lt_tadir ).
|
||||
|
||||
delete( io_repo ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD refresh.
|
||||
|
||||
DATA: lt_list TYPE zif_abapgit_persistence=>tt_repo,
|
||||
|
@ -330,7 +120,174 @@ CLASS ZCL_ABAPGIT_REPO_SRV IMPLEMENTATION.
|
|||
ENDMETHOD. "refresh
|
||||
|
||||
|
||||
METHOD switch_repo_type.
|
||||
METHOD zif_abapgit_repo_srv~delete.
|
||||
|
||||
io_repo->delete( ).
|
||||
|
||||
DELETE TABLE mt_list FROM io_repo.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_repo_srv~get.
|
||||
|
||||
FIELD-SYMBOLS: <lo_list> LIKE LINE OF mt_list.
|
||||
|
||||
|
||||
IF mv_init = abap_false.
|
||||
refresh( ).
|
||||
ENDIF.
|
||||
|
||||
LOOP AT mt_list ASSIGNING <lo_list>.
|
||||
IF <lo_list>->get_key( ) = iv_key.
|
||||
ro_repo = <lo_list>.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
zcx_abapgit_exception=>raise( 'repo not found, get' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_repo_srv~is_repo_installed.
|
||||
|
||||
DATA: lt_repo TYPE zif_abapgit_definitions=>ty_repo_ref_tt,
|
||||
lo_repo TYPE REF TO zcl_abapgit_repo,
|
||||
lv_url TYPE string,
|
||||
lv_package TYPE devclass,
|
||||
lo_repo_online TYPE REF TO zcl_abapgit_repo_online,
|
||||
lv_err TYPE string.
|
||||
|
||||
lt_repo = list( ).
|
||||
|
||||
LOOP AT lt_repo INTO lo_repo.
|
||||
CHECK lo_repo->is_offline( ) = abap_false.
|
||||
lo_repo_online ?= lo_repo.
|
||||
|
||||
lv_url = lo_repo_online->get_url( ).
|
||||
lv_package = lo_repo_online->get_package( ).
|
||||
CHECK to_upper( lv_url ) = to_upper( iv_url ).
|
||||
|
||||
" Validate bindings
|
||||
"TODO refactor: move this message out of this method
|
||||
IF iv_target_package IS NOT INITIAL AND iv_target_package <> lv_package.
|
||||
lv_err = |Installation to package { lv_package } detected. |
|
||||
&& |Cancelling installation|.
|
||||
zcx_abapgit_exception=>raise( lv_err ).
|
||||
ENDIF.
|
||||
|
||||
rv_installed = abap_true.
|
||||
EXIT.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_repo_srv~list.
|
||||
|
||||
IF mv_init = abap_false.
|
||||
refresh( ).
|
||||
ENDIF.
|
||||
|
||||
rt_list = mt_list.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_repo_srv~new_offline.
|
||||
|
||||
DATA: ls_repo TYPE zif_abapgit_persistence=>ty_repo,
|
||||
lv_key TYPE zif_abapgit_persistence=>ty_repo-key.
|
||||
|
||||
|
||||
validate_package( iv_package ).
|
||||
|
||||
lv_key = mo_persistence->add(
|
||||
iv_url = iv_url
|
||||
iv_branch_name = ''
|
||||
iv_package = iv_package
|
||||
iv_offline = abap_true
|
||||
is_dot_abapgit = zcl_abapgit_dot_abapgit=>build_default( )->get_data( ) ).
|
||||
|
||||
TRY.
|
||||
ls_repo = mo_persistence->read( lv_key ).
|
||||
CATCH zcx_abapgit_not_found.
|
||||
zcx_abapgit_exception=>raise( 'new_offline not found' ).
|
||||
ENDTRY.
|
||||
|
||||
CREATE OBJECT ro_repo
|
||||
EXPORTING
|
||||
is_data = ls_repo.
|
||||
|
||||
add( ro_repo ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_repo_srv~new_online.
|
||||
|
||||
DATA: ls_repo TYPE zif_abapgit_persistence=>ty_repo,
|
||||
lv_key TYPE zif_abapgit_persistence=>ty_repo-key.
|
||||
|
||||
|
||||
ASSERT NOT iv_url IS INITIAL
|
||||
AND NOT iv_branch_name IS INITIAL
|
||||
AND NOT iv_package IS INITIAL.
|
||||
|
||||
validate_package( iv_package ).
|
||||
zcl_abapgit_url=>validate( |{ iv_url }| ).
|
||||
|
||||
lv_key = mo_persistence->add(
|
||||
iv_url = iv_url
|
||||
iv_branch_name = iv_branch_name
|
||||
iv_package = iv_package
|
||||
iv_offline = abap_false
|
||||
is_dot_abapgit = zcl_abapgit_dot_abapgit=>build_default( )->get_data( ) ).
|
||||
TRY.
|
||||
ls_repo = mo_persistence->read( lv_key ).
|
||||
CATCH zcx_abapgit_not_found.
|
||||
zcx_abapgit_exception=>raise( 'new_online not found' ).
|
||||
ENDTRY.
|
||||
|
||||
CREATE OBJECT ro_repo
|
||||
EXPORTING
|
||||
is_data = ls_repo.
|
||||
|
||||
add( ro_repo ).
|
||||
|
||||
ro_repo->initialize( ).
|
||||
ro_repo->find_remote_dot_abapgit( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_repo_srv~purge.
|
||||
|
||||
* todo, this should be a method on the repo instead
|
||||
|
||||
DATA: lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt.
|
||||
|
||||
|
||||
IF io_repo->get_local_settings( )-write_protected = abap_true.
|
||||
zcx_abapgit_exception=>raise( 'Cannot purge. Local code is write-protected by repo config' ).
|
||||
ELSEIF zcl_abapgit_auth=>is_allowed( zif_abapgit_auth=>gc_authorization-uninstall ) = abap_false.
|
||||
zcx_abapgit_exception=>raise( 'Not authorized' ).
|
||||
ENDIF.
|
||||
|
||||
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read( io_repo->get_package( ) ).
|
||||
|
||||
zcl_abapgit_objects=>delete( lt_tadir ).
|
||||
|
||||
delete( io_repo ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_repo_srv~switch_repo_type.
|
||||
|
||||
* todo, this should be a method on the repo instead?
|
||||
|
||||
DATA lo_repo TYPE REF TO zcl_abapgit_repo.
|
||||
|
||||
|
@ -358,10 +315,10 @@ CLASS ZCL_ABAPGIT_REPO_SRV IMPLEMENTATION.
|
|||
is_data = lo_repo->ms_data.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "switch_repo_type
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD validate_package.
|
||||
METHOD zif_abapgit_repo_srv~validate_package.
|
||||
|
||||
DATA: lv_as4user TYPE tdevc-as4user,
|
||||
lt_repos TYPE zif_abapgit_persistence=>tt_repo.
|
||||
|
@ -393,5 +350,5 @@ CLASS ZCL_ABAPGIT_REPO_SRV IMPLEMENTATION.
|
|||
zcx_abapgit_exception=>raise( |Package { iv_package } already in use| ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "validate_package
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
63
src/zif_abapgit_repo_srv.intf.abap
Normal file
63
src/zif_abapgit_repo_srv.intf.abap
Normal file
|
@ -0,0 +1,63 @@
|
|||
INTERFACE zif_abapgit_repo_srv
|
||||
PUBLIC .
|
||||
|
||||
|
||||
METHODS delete
|
||||
IMPORTING
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS get
|
||||
IMPORTING
|
||||
!iv_key TYPE zif_abapgit_persistence=>ty_value
|
||||
RETURNING
|
||||
VALUE(ro_repo) TYPE REF TO zcl_abapgit_repo
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS is_repo_installed
|
||||
IMPORTING
|
||||
!iv_url TYPE string
|
||||
!iv_target_package TYPE devclass OPTIONAL
|
||||
RETURNING
|
||||
VALUE(rv_installed) TYPE abap_bool
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS list
|
||||
RETURNING
|
||||
VALUE(rt_list) TYPE zif_abapgit_definitions=>ty_repo_ref_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS new_offline
|
||||
IMPORTING
|
||||
!iv_url TYPE string
|
||||
!iv_package TYPE devclass
|
||||
RETURNING
|
||||
VALUE(ro_repo) TYPE REF TO zcl_abapgit_repo_offline
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS new_online
|
||||
IMPORTING
|
||||
!iv_url TYPE string
|
||||
!iv_branch_name TYPE string
|
||||
!iv_package TYPE devclass
|
||||
RETURNING
|
||||
VALUE(ro_repo) TYPE REF TO zcl_abapgit_repo_online
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS purge
|
||||
IMPORTING
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS switch_repo_type
|
||||
IMPORTING
|
||||
!iv_key TYPE zif_abapgit_persistence=>ty_value
|
||||
!iv_offline TYPE abap_bool
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS validate_package
|
||||
IMPORTING
|
||||
!iv_package TYPE devclass
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
ENDINTERFACE.
|
16
src/zif_abapgit_repo_srv.intf.xml
Normal file
16
src/zif_abapgit_repo_srv.intf.xml
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_INTF" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOINTERF>
|
||||
<CLSNAME>ZIF_ABAPGIT_REPO_SRV</CLSNAME>
|
||||
<VERSION>1</VERSION>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Repo services</DESCRIPT>
|
||||
<EXPOSURE>2</EXPOSURE>
|
||||
<STATE>1</STATE>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOINTERF>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
Loading…
Reference in New Issue
Block a user