mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 13:03:01 +08:00

* 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>
131 lines
2.6 KiB
ABAP
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.
|