abapGit/src/utils/zcl_abapgit_url.clas.abap
Marc Bernard e70875879b
Restart abapGit in case of self-update (#3804)
* Restart abapGit in case of self-update

Closes #3358

* Fix abapgit url detection

Old logic incorrectly matched for example https://github.com/abapGit-tests/CHAR

* Github only

* Separate method

Co-authored-by: Lars Hvam <larshp@hotmail.com>
2020-09-03 09:07:57 +02:00

131 lines
2.6 KiB
ABAP

CLASS zcl_abapgit_url DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-METHODS validate
IMPORTING
!iv_url TYPE string
RAISING
zcx_abapgit_exception .
CLASS-METHODS host
IMPORTING
!iv_url TYPE string
RETURNING
VALUE(rv_host) TYPE string
RAISING
zcx_abapgit_exception .
CLASS-METHODS name
IMPORTING
!iv_url TYPE string
!iv_validate TYPE abap_bool DEFAULT abap_false
RETURNING
VALUE(rv_name) TYPE string
RAISING
zcx_abapgit_exception .
CLASS-METHODS path_name
IMPORTING
!iv_url TYPE string
RETURNING
VALUE(rv_path_name) TYPE string
RAISING
zcx_abapgit_exception .
CLASS-METHODS is_abapgit_repo
IMPORTING
!iv_url TYPE string
RETURNING
VALUE(rv_abapgit) TYPE abap_bool .
PROTECTED SECTION.
PRIVATE SECTION.
CLASS-METHODS regex
IMPORTING
!iv_url TYPE string
EXPORTING
!ev_host TYPE string
!ev_path TYPE string
!ev_name TYPE string
RAISING
zcx_abapgit_exception .
ENDCLASS.
CLASS ZCL_ABAPGIT_URL IMPLEMENTATION.
METHOD host.
regex( EXPORTING iv_url = iv_url
IMPORTING ev_host = rv_host ).
ENDMETHOD.
METHOD is_abapgit_repo.
IF iv_url CS 'github.com' AND ( iv_url CP '*/abapGit' OR iv_url CP '*/abapGit.git' ).
rv_abapgit = abap_true.
ENDIF.
ENDMETHOD.
METHOD name.
DATA: lv_path TYPE string.
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.
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.
METHOD path_name.
DATA: lv_host TYPE string ##NEEDED.
FIND REGEX '(.*://[^/]*)(.*)' IN iv_url
SUBMATCHES lv_host rv_path_name.
ENDMETHOD.
METHOD regex.
FIND REGEX '(https?://[^/]*)(.*/)([^\.]*)[\.git]?' IN iv_url
SUBMATCHES ev_host ev_path ev_name.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Malformed URL' ).
ENDIF.
ENDMETHOD.
METHOD validate.
name( iv_url = iv_url
iv_validate = abap_true ).
ENDMETHOD.
ENDCLASS.