mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
Several repos for same URL (#4313)
* Check URL repo before add * Unit tests Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
d0983cf386
commit
6c87fa3f05
|
@ -156,7 +156,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_ADDONLINE IMPLEMENTATION.
|
|||
|
||||
IF io_form_data->get( c_id-url ) IS NOT INITIAL.
|
||||
TRY.
|
||||
zcl_abapgit_url=>validate( io_form_data->get( c_id-url ) ).
|
||||
zcl_abapgit_repo_srv=>get_instance( )->validate_url( io_form_data->get( c_id-url ) ).
|
||||
CATCH zcx_abapgit_exception INTO lx_err.
|
||||
ro_validation_log->set(
|
||||
iv_key = c_id-url
|
||||
|
|
|
@ -37,6 +37,13 @@ CLASS zcl_abapgit_url DEFINITION
|
|||
!iv_url TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_abapgit) TYPE abap_bool .
|
||||
CLASS-METHODS url_address
|
||||
IMPORTING
|
||||
!iv_url TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_adress) TYPE string
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
|
||||
|
@ -53,7 +60,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_URL IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_url IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD host.
|
||||
|
@ -127,4 +134,33 @@ CLASS ZCL_ABAPGIT_URL IMPLEMENTATION.
|
|||
iv_validate = abap_true ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD url_address.
|
||||
|
||||
DATA:
|
||||
lv_host TYPE string,
|
||||
lv_path TYPE string,
|
||||
lv_name TYPE string,
|
||||
lv_len TYPE i.
|
||||
|
||||
regex( EXPORTING iv_url = iv_url
|
||||
IMPORTING ev_host = lv_host
|
||||
ev_path = lv_path
|
||||
ev_name = lv_name ).
|
||||
|
||||
IF lv_path IS INITIAL AND lv_name IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( 'Malformed URL' ).
|
||||
ELSEIF lv_name IS INITIAL.
|
||||
lv_len = strlen( lv_path ) - 1.
|
||||
IF lv_path+lv_len(1) = '/'.
|
||||
lv_path = lv_path(lv_len).
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
rv_adress = |{ lv_host }{ lv_path }{ lv_name }|.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
ENDCLASS.
|
||||
|
|
|
@ -9,6 +9,10 @@ CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
|||
repo_name3 FOR TESTING RAISING zcx_abapgit_exception,
|
||||
repo_name4 FOR TESTING RAISING zcx_abapgit_exception,
|
||||
repo_name5 FOR TESTING RAISING zcx_abapgit_exception,
|
||||
repo_address1 FOR TESTING RAISING zcx_abapgit_exception,
|
||||
repo_address2 FOR TESTING RAISING zcx_abapgit_exception,
|
||||
repo_address3 FOR TESTING RAISING zcx_abapgit_exception,
|
||||
repo_address4 FOR TESTING RAISING zcx_abapgit_exception,
|
||||
repo_error FOR TESTING,
|
||||
url_validate1 FOR TESTING,
|
||||
url_validate2 FOR TESTING,
|
||||
|
@ -101,6 +105,58 @@ CLASS ltcl_test IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD repo_address1.
|
||||
|
||||
DATA:
|
||||
lv_url_address TYPE string.
|
||||
|
||||
lv_url_address = zcl_abapgit_url=>url_address( 'https://github.com/abapGit/abapGit.git' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 'https://github.com/abapGit/abapGit'
|
||||
act = lv_url_address ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD repo_address2.
|
||||
|
||||
DATA:
|
||||
lv_url_address TYPE string.
|
||||
|
||||
lv_url_address = zcl_abapgit_url=>url_address( 'https://git.hanatrial.ondemand.com/abapGit/abapGit.git' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 'https://git.hanatrial.ondemand.com/abapGit/abapGit'
|
||||
act = lv_url_address ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD repo_address3.
|
||||
|
||||
DATA:
|
||||
lv_url_address TYPE string.
|
||||
|
||||
lv_url_address = zcl_abapgit_url=>url_address( 'https://github.com/abapGit/abapGit/' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 'https://github.com/abapGit/abapGit'
|
||||
act = lv_url_address ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD repo_address4.
|
||||
|
||||
DATA:
|
||||
lv_url_address TYPE string.
|
||||
|
||||
lv_url_address = zcl_abapgit_url=>url_address( 'https://github.com/abapGit/abapGit' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 'https://github.com/abapGit/abapGit'
|
||||
act = lv_url_address ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD url_validate1.
|
||||
|
||||
TRY.
|
||||
|
|
|
@ -11,6 +11,9 @@ CLASS zcl_abapgit_repo_srv DEFINITION
|
|||
ALIASES get_repo_from_package
|
||||
FOR zif_abapgit_repo_srv~get_repo_from_package .
|
||||
|
||||
ALIASES get_repo_from_url
|
||||
FOR zif_abapgit_repo_srv~get_repo_from_url .
|
||||
|
||||
CLASS-METHODS get_instance
|
||||
RETURNING
|
||||
VALUE(ri_srv) TYPE REF TO zif_abapgit_repo_srv .
|
||||
|
@ -25,6 +28,8 @@ CLASS zcl_abapgit_repo_srv DEFINITION
|
|||
FOR zif_abapgit_repo_srv~list .
|
||||
ALIASES validate_package
|
||||
FOR zif_abapgit_repo_srv~validate_package .
|
||||
ALIASES validate_url
|
||||
FOR zif_abapgit_repo_srv~validate_url .
|
||||
|
||||
CLASS-DATA gi_ref TYPE REF TO zif_abapgit_repo_srv .
|
||||
DATA mv_init TYPE abap_bool VALUE abap_false ##NO_TEXT.
|
||||
|
@ -76,7 +81,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_REPO_SRV IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_repo_srv IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD add.
|
||||
|
@ -334,6 +339,44 @@ CLASS ZCL_ABAPGIT_REPO_SRV IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_repo_srv~get_repo_from_url.
|
||||
|
||||
DATA:
|
||||
lt_repos TYPE zif_abapgit_persistence=>ty_repos,
|
||||
lv_current_repo_address TYPE string,
|
||||
lv_check_repo_address TYPE string,
|
||||
lv_repo_path TYPE string,
|
||||
lv_name TYPE zif_abapgit_persistence=>ty_local_settings-display_name,
|
||||
lv_owner TYPE zif_abapgit_persistence=>ty_local_settings-display_name.
|
||||
|
||||
FIELD-SYMBOLS:
|
||||
<ls_repo> LIKE LINE OF lt_repos.
|
||||
|
||||
CLEAR:
|
||||
eo_repo, ev_reason.
|
||||
|
||||
lv_current_repo_address = zcl_abapgit_url=>url_address( iv_url ).
|
||||
|
||||
" check if url is already in use for a different package
|
||||
lt_repos = zcl_abapgit_persist_factory=>get_repo( )->list( ).
|
||||
LOOP AT lt_repos ASSIGNING <ls_repo>.
|
||||
|
||||
lv_check_repo_address = zcl_abapgit_url=>url_address( <ls_repo>-url ).
|
||||
|
||||
IF lv_current_repo_address = lv_check_repo_address.
|
||||
eo_repo = get_instance( )->get( <ls_repo>-key ).
|
||||
lv_repo_path = zcl_abapgit_url=>path_name( iv_url ).
|
||||
lv_name = eo_repo->get_name( ).
|
||||
lv_owner = <ls_repo>-created_by.
|
||||
ev_reason = |Repository { lv_repo_path } already versioned as { lv_name } by { lv_owner }|.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_repo_srv~is_repo_installed.
|
||||
|
||||
DATA: lt_repo TYPE zif_abapgit_repo_srv=>ty_repo_list,
|
||||
|
@ -441,7 +484,7 @@ CLASS ZCL_ABAPGIT_REPO_SRV IMPLEMENTATION.
|
|||
validate_package( iv_package = iv_package
|
||||
iv_ign_subpkg = iv_ign_subpkg ).
|
||||
|
||||
zcl_abapgit_url=>validate( lv_url ).
|
||||
validate_url( lv_url ).
|
||||
|
||||
lv_branch_name = determine_branch_name(
|
||||
iv_name = iv_branch_name
|
||||
|
@ -545,4 +588,29 @@ CLASS ZCL_ABAPGIT_REPO_SRV IMPLEMENTATION.
|
|||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_repo_srv~validate_url.
|
||||
|
||||
DATA:
|
||||
lo_repo TYPE REF TO zcl_abapgit_repo,
|
||||
lv_reason TYPE string.
|
||||
|
||||
zcl_abapgit_url=>validate( iv_url ).
|
||||
|
||||
IF iv_chk_exists = abap_true.
|
||||
get_repo_from_url(
|
||||
EXPORTING
|
||||
iv_url = iv_url
|
||||
IMPORTING
|
||||
eo_repo = lo_repo
|
||||
ev_reason = lv_reason ).
|
||||
IF lo_repo IS BOUND.
|
||||
zcx_abapgit_exception=>raise( lv_reason ).
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
ENDCLASS.
|
||||
|
|
|
@ -68,6 +68,12 @@ INTERFACE zif_abapgit_repo_srv
|
|||
!iv_chk_exists TYPE abap_bool DEFAULT abap_true
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS validate_url
|
||||
IMPORTING
|
||||
!iv_url TYPE string
|
||||
!iv_chk_exists TYPE abap_bool DEFAULT abap_true
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS get_repo_from_package
|
||||
IMPORTING
|
||||
!iv_package TYPE devclass
|
||||
|
@ -77,4 +83,12 @@ INTERFACE zif_abapgit_repo_srv
|
|||
!ev_reason TYPE string
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS get_repo_from_url
|
||||
IMPORTING
|
||||
!iv_url TYPE string
|
||||
EXPORTING
|
||||
!eo_repo TYPE REF TO zcl_abapgit_repo
|
||||
!ev_reason TYPE string
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
ENDINTERFACE.
|
||||
|
|
Loading…
Reference in New Issue
Block a user