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

* Fix dump during "New Online" I accidentally used a copied link `sapevent:url?url=https://github.com/abapGit-tests/TABL` into the "New Online" diaplog. AG would dump in this case. Now you get a proper error message. * Strip leading/trailing spaces for URLs * Add * Update Co-authored-by: Lars Hvam <larshp@hotmail.com> Co-authored-by: g-back <27279305+g-back@users.noreply.github.com>
169 lines
3.6 KiB
ABAP
169 lines
3.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 .
|
|
CLASS-METHODS url_address
|
|
IMPORTING
|
|
!iv_url TYPE string
|
|
RETURNING
|
|
VALUE(rv_adress) TYPE string
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
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.
|
|
FIND REGEX '^(https?://[^/]*)(.*/)(.*)$' IN iv_url
|
|
SUBMATCHES ev_host ev_path ev_name.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( 'Malformed URL' ).
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
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.
|
|
|
|
|
|
METHOD validate.
|
|
|
|
name( iv_url = iv_url
|
|
iv_validate = abap_true ).
|
|
|
|
ENDMETHOD.
|
|
ENDCLASS.
|