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.
|
IF io_form_data->get( c_id-url ) IS NOT INITIAL.
|
||||||
TRY.
|
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.
|
CATCH zcx_abapgit_exception INTO lx_err.
|
||||||
ro_validation_log->set(
|
ro_validation_log->set(
|
||||||
iv_key = c_id-url
|
iv_key = c_id-url
|
||||||
|
|
|
@ -37,6 +37,13 @@ CLASS zcl_abapgit_url DEFINITION
|
||||||
!iv_url TYPE string
|
!iv_url TYPE string
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rv_abapgit) TYPE abap_bool .
|
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.
|
PROTECTED SECTION.
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
|
@ -53,7 +60,7 @@ ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS ZCL_ABAPGIT_URL IMPLEMENTATION.
|
CLASS zcl_abapgit_url IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD host.
|
METHOD host.
|
||||||
|
@ -127,4 +134,33 @@ CLASS ZCL_ABAPGIT_URL IMPLEMENTATION.
|
||||||
iv_validate = abap_true ).
|
iv_validate = abap_true ).
|
||||||
|
|
||||||
ENDMETHOD.
|
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.
|
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_name3 FOR TESTING RAISING zcx_abapgit_exception,
|
||||||
repo_name4 FOR TESTING RAISING zcx_abapgit_exception,
|
repo_name4 FOR TESTING RAISING zcx_abapgit_exception,
|
||||||
repo_name5 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,
|
repo_error FOR TESTING,
|
||||||
url_validate1 FOR TESTING,
|
url_validate1 FOR TESTING,
|
||||||
url_validate2 FOR TESTING,
|
url_validate2 FOR TESTING,
|
||||||
|
@ -101,6 +105,58 @@ CLASS ltcl_test IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD.
|
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.
|
METHOD url_validate1.
|
||||||
|
|
||||||
TRY.
|
TRY.
|
||||||
|
|
|
@ -11,6 +11,9 @@ CLASS zcl_abapgit_repo_srv DEFINITION
|
||||||
ALIASES get_repo_from_package
|
ALIASES get_repo_from_package
|
||||||
FOR zif_abapgit_repo_srv~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
|
CLASS-METHODS get_instance
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(ri_srv) TYPE REF TO zif_abapgit_repo_srv .
|
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 .
|
FOR zif_abapgit_repo_srv~list .
|
||||||
ALIASES validate_package
|
ALIASES validate_package
|
||||||
FOR zif_abapgit_repo_srv~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 .
|
CLASS-DATA gi_ref TYPE REF TO zif_abapgit_repo_srv .
|
||||||
DATA mv_init TYPE abap_bool VALUE abap_false ##NO_TEXT.
|
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.
|
METHOD add.
|
||||||
|
@ -334,6 +339,44 @@ CLASS ZCL_ABAPGIT_REPO_SRV IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
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.
|
METHOD zif_abapgit_repo_srv~is_repo_installed.
|
||||||
|
|
||||||
DATA: lt_repo TYPE zif_abapgit_repo_srv=>ty_repo_list,
|
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
|
validate_package( iv_package = iv_package
|
||||||
iv_ign_subpkg = iv_ign_subpkg ).
|
iv_ign_subpkg = iv_ign_subpkg ).
|
||||||
|
|
||||||
zcl_abapgit_url=>validate( lv_url ).
|
validate_url( lv_url ).
|
||||||
|
|
||||||
lv_branch_name = determine_branch_name(
|
lv_branch_name = determine_branch_name(
|
||||||
iv_name = iv_branch_name
|
iv_name = iv_branch_name
|
||||||
|
@ -545,4 +588,29 @@ CLASS ZCL_ABAPGIT_REPO_SRV IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD.
|
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.
|
ENDCLASS.
|
||||||
|
|
|
@ -68,6 +68,12 @@ INTERFACE zif_abapgit_repo_srv
|
||||||
!iv_chk_exists TYPE abap_bool DEFAULT abap_true
|
!iv_chk_exists TYPE abap_bool DEFAULT abap_true
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
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
|
METHODS get_repo_from_package
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!iv_package TYPE devclass
|
!iv_package TYPE devclass
|
||||||
|
@ -77,4 +83,12 @@ INTERFACE zif_abapgit_repo_srv
|
||||||
!ev_reason TYPE string
|
!ev_reason TYPE string
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
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.
|
ENDINTERFACE.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user