diff --git a/src/git_platform/zcl_abapgit_git_url.clas.abap b/src/git_platform/zcl_abapgit_git_url.clas.abap index 49ccb001c..8786ee4a7 100644 --- a/src/git_platform/zcl_abapgit_git_url.clas.abap +++ b/src/git_platform/zcl_abapgit_git_url.clas.abap @@ -12,6 +12,13 @@ CLASS zcl_abapgit_git_url DEFINITION VALUE(rv_url) TYPE string RAISING zcx_abapgit_exception . + + METHODS validate_url + IMPORTING + !iv_url TYPE string + RAISING + zcx_abapgit_exception. + PROTECTED SECTION. METHODS get_default_commit_display_url @@ -27,7 +34,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_GIT_URL IMPLEMENTATION. +CLASS zcl_abapgit_git_url IMPLEMENTATION. METHOD get_commit_display_url. @@ -81,4 +88,26 @@ CLASS ZCL_ABAPGIT_GIT_URL IMPLEMENTATION. ENDIF. ENDMETHOD. + + + METHOD validate_url. + + DATA lv_provider TYPE string. + + lv_provider = zcl_abapgit_url=>host( to_lower( iv_url ) ). + + " Provider-specific check for URLs that don't work + IF lv_provider CS 'gitlab.com'. + FIND REGEX '\.git$' IN iv_url IGNORING CASE. + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( 'Repo URL for GitLab must end in ".git"' ). + ENDIF. + ELSEIF lv_provider CS 'dev.azure.com'. + FIND REGEX '\.git$' IN iv_url IGNORING CASE. + IF sy-subrc = 0. + zcx_abapgit_exception=>raise( 'Repo URL for Azure DevOps must not end in ".git"' ). + ENDIF. + ENDIF. + + ENDMETHOD. ENDCLASS. diff --git a/src/ui/zcl_abapgit_gui_page_addonline.clas.abap b/src/ui/zcl_abapgit_gui_page_addonline.clas.abap index e537ff21b..6607524d1 100644 --- a/src/ui/zcl_abapgit_gui_page_addonline.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_addonline.clas.abap @@ -72,6 +72,23 @@ ENDCLASS. CLASS zcl_abapgit_gui_page_addonline IMPLEMENTATION. + METHOD choose_labels. + + DATA: + lv_old_labels TYPE string, + lv_new_labels TYPE string. + + lv_old_labels = mo_form_data->get( c_id-labels ). + + lv_new_labels = zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_labels( lv_old_labels ). + + mo_form_data->set( + iv_key = c_id-labels + iv_val = lv_new_labels ). + + ENDMETHOD. + + METHOD constructor. super->constructor( ). CREATE OBJECT mo_validation_log. @@ -168,13 +185,21 @@ CLASS zcl_abapgit_gui_page_addonline IMPLEMENTATION. METHOD validate_form. - DATA lx_err TYPE REF TO zcx_abapgit_exception. + DATA: + lv_url TYPE string, + lo_url TYPE REF TO zcl_abapgit_git_url, + lx_err TYPE REF TO zcx_abapgit_exception. ro_validation_log = mo_form_util->validate( io_form_data ). - IF io_form_data->get( c_id-url ) IS NOT INITIAL. + lv_url = io_form_data->get( c_id-url ). + IF lv_url IS NOT INITIAL. TRY. - zcl_abapgit_repo_srv=>get_instance( )->validate_url( io_form_data->get( c_id-url ) ). + zcl_abapgit_repo_srv=>get_instance( )->validate_url( lv_url ). + + " Provider-specific URL check + CREATE OBJECT lo_url. + lo_url->validate_url( lv_url ). CATCH zcx_abapgit_exception INTO lx_err. ro_validation_log->set( iv_key = c_id-url @@ -312,22 +337,4 @@ CLASS zcl_abapgit_gui_page_addonline IMPLEMENTATION. io_validation_log = mo_validation_log ) ). ri_html->add( '' ). ENDMETHOD. - - - METHOD choose_labels. - - DATA: - lv_old_labels TYPE string, - lv_new_labels TYPE string. - - lv_old_labels = mo_form_data->get( c_id-labels ). - - lv_new_labels = zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_labels( lv_old_labels ). - - mo_form_data->set( - iv_key = c_id-labels - iv_val = lv_new_labels ). - - ENDMETHOD. - ENDCLASS. diff --git a/src/ui/zcl_abapgit_gui_page_sett_remo.clas.abap b/src/ui/zcl_abapgit_gui_page_sett_remo.clas.abap index f666ac02e..9c30896f3 100644 --- a/src/ui/zcl_abapgit_gui_page_sett_remo.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_sett_remo.clas.abap @@ -796,6 +796,7 @@ CLASS zcl_abapgit_gui_page_sett_remo IMPLEMENTATION. DATA: lx_error TYPE REF TO zcx_abapgit_exception, lo_branch_list TYPE REF TO zcl_abapgit_git_branch_list, + lo_url TYPE REF TO zcl_abapgit_git_url, lv_offline TYPE abap_bool, lv_head_type TYPE ty_head_type, lv_branch TYPE ty_remote_settings-branch, @@ -823,6 +824,10 @@ CLASS zcl_abapgit_gui_page_sett_remo IMPLEMENTATION. zcl_abapgit_url=>name( iv_url = lv_url iv_validate = abap_true ). + + " Provider-specific URL check + CREATE OBJECT lo_url. + lo_url->validate_url( lv_url ). CATCH zcx_abapgit_exception INTO lx_error. ro_validation_log->set( iv_key = c_id-url