diff --git a/src/ui/zcl_abapgit_popups.clas.abap b/src/ui/zcl_abapgit_popups.clas.abap index 76a45e78d..41cd4712a 100644 --- a/src/ui/zcl_abapgit_popups.clas.abap +++ b/src/ui/zcl_abapgit_popups.clas.abap @@ -1128,6 +1128,7 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. lv_finished = abap_true. TRY. + zcl_abapgit_url=>validate( rs_popup-url ). zcl_abapgit_repo_srv=>get_instance( )->validate_package( rs_popup-package ). validate_folder_logic( rs_popup-folder_logic ). @@ -1276,7 +1277,9 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION. lv_finished = abap_true. TRY. - zcl_abapgit_url=>validate( |{ lv_url }| ). + IF iv_freeze_url = abap_false. + zcl_abapgit_url=>validate( |{ lv_url }| ). + ENDIF. IF iv_freeze_package = abap_false. zcl_abapgit_repo_srv=>get_instance( )->validate_package( iv_package = lv_package iv_ign_subpkg = lv_ign_subpkg ). diff --git a/src/utils/zcl_abapgit_url.clas.abap b/src/utils/zcl_abapgit_url.clas.abap index 801d9f4b5..9f21b69f5 100644 --- a/src/utils/zcl_abapgit_url.clas.abap +++ b/src/utils/zcl_abapgit_url.clas.abap @@ -20,6 +20,7 @@ CLASS zcl_abapgit_url DEFINITION CLASS-METHODS name IMPORTING !iv_url TYPE string + !iv_validate TYPE abap_bool DEFAULT abap_false RETURNING VALUE(rv_name) TYPE string RAISING @@ -47,7 +48,7 @@ ENDCLASS. -CLASS zcl_abapgit_url IMPLEMENTATION. +CLASS ZCL_ABAPGIT_URL IMPLEMENTATION. METHOD host. @@ -62,16 +63,25 @@ CLASS zcl_abapgit_url IMPLEMENTATION. DATA: lv_path TYPE string. - regex( EXPORTING iv_url = iv_url - IMPORTING ev_name = rv_name - ev_path = lv_path ). + TRY. + regex( EXPORTING iv_url = iv_url + IMPORTING ev_name = rv_name + ev_path = lv_path ). - IF rv_name IS INITIAL. - FIND REGEX '([\w-]+)/$' IN lv_path SUBMATCHES rv_name. - IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( 'Malformed URL' ). - ENDIF. - ENDIF. + IF rv_name IS INITIAL. + FIND REGEX '([\w-]+)/$' IN lv_path SUBMATCHES rv_name. + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( 'Malformed URL' ). + ENDIF. + ENDIF. + + CATCH zcx_abapgit_exception. + IF iv_validate = abap_true. + zcx_abapgit_exception=>raise( 'Malformed URL' ). + ELSE. + rv_name = 'URL error (fix repo with "Advanced > Change Remote")'. + ENDIF. + ENDTRY. ENDMETHOD. @@ -88,7 +98,7 @@ CLASS zcl_abapgit_url IMPLEMENTATION. METHOD regex. - FIND REGEX '(.*://[^/]*)(.*/)([^\.]*)[\.git]?' IN iv_url + FIND REGEX '(https?://[^/]*)(.*/)([^\.]*)[\.git]?' IN iv_url SUBMATCHES ev_host ev_path ev_name. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( 'Malformed URL' ). @@ -99,7 +109,8 @@ CLASS zcl_abapgit_url IMPLEMENTATION. METHOD validate. - name( iv_url ). + name( iv_url = iv_url + iv_validate = abap_true ). ENDMETHOD. ENDCLASS. diff --git a/src/utils/zcl_abapgit_url.clas.testclasses.abap b/src/utils/zcl_abapgit_url.clas.testclasses.abap index f0fba13ef..199913b3d 100644 --- a/src/utils/zcl_abapgit_url.clas.testclasses.abap +++ b/src/utils/zcl_abapgit_url.clas.testclasses.abap @@ -9,7 +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_error FOR TESTING. + repo_error FOR TESTING, + url_validate1 FOR TESTING, + url_validate2 FOR TESTING, + url_validate3 FOR TESTING. ENDCLASS. @@ -98,4 +101,35 @@ CLASS ltcl_test IMPLEMENTATION. ENDMETHOD. + METHOD url_validate1. + + TRY. + zcl_abapgit_url=>validate( 'http://github.com/larshp/Foobar.git' ). "#EC NOTEXT + CATCH zcx_abapgit_exception. "#EC NO_HANDLER + cl_abap_unit_assert=>fail( ). + ENDTRY. + + ENDMETHOD. + + METHOD url_validate2. + + TRY. + zcl_abapgit_url=>validate( 'https://github.com/larshp/Foobar.git' ). "#EC NOTEXT + CATCH zcx_abapgit_exception. "#EC NO_HANDLER + cl_abap_unit_assert=>fail( ). + ENDTRY. + + ENDMETHOD. + + METHOD url_validate3. + + TRY. + zcl_abapgit_url=>validate( 'XYZ://github.com/larshp/Foobar.git' ). "#EC NOTEXT + cl_abap_unit_assert=>fail( ). + CATCH zcx_abapgit_exception. "#EC NO_HANDLER + ENDTRY. + + ENDMETHOD. + + ENDCLASS. diff --git a/src/zcl_abapgit_repo_online.clas.abap b/src/zcl_abapgit_repo_online.clas.abap index 7f9a2f926..1ced22b3b 100644 --- a/src/zcl_abapgit_repo_online.clas.abap +++ b/src/zcl_abapgit_repo_online.clas.abap @@ -111,7 +111,6 @@ CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION. METHOD get_name. - rv_name = zcl_abapgit_url=>name( ms_data-url ). rv_name = super->get_name( ). IF rv_name IS INITIAL. rv_name = zcl_abapgit_url=>name( ms_data-url ).