abapGit/src/git_platform/zcl_abapgit_git_url.clas.abap
Lars Hvam 3162b23c39
Move git url repo methods (#4147)
* Move git url repo methods

This moves methods GET_COMMIT_DISPLAY_URL and GET_DEFAULT_COMMIT_DISPLAY_URL from the repo class to new class in new package GIT_PLATFORM.

we want to keep the repo class small, as its quite complex and central

#4085

* fix line length
2020-11-10 06:34:16 +01:00

85 lines
2.3 KiB
ABAP

CLASS zcl_abapgit_git_url DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
METHODS get_commit_display_url
IMPORTING
!io_repo TYPE REF TO zcl_abapgit_repo_online
RETURNING
VALUE(rv_url) TYPE string
RAISING
zcx_abapgit_exception .
PROTECTED SECTION.
METHODS get_default_commit_display_url
IMPORTING
!iv_repo_url TYPE string
!iv_hash TYPE zif_abapgit_definitions=>ty_sha1
RETURNING
VALUE(rv_commit_url) TYPE string
RAISING
zcx_abapgit_exception .
PRIVATE SECTION.
ENDCLASS.
CLASS ZCL_ABAPGIT_GIT_URL IMPLEMENTATION.
METHOD get_commit_display_url.
DATA li_exit TYPE REF TO zif_abapgit_exit.
rv_url = get_default_commit_display_url(
iv_repo_url = io_repo->get_url( )
iv_hash = io_repo->get_current_remote( ) ).
li_exit = zcl_abapgit_exit=>get_instance( ).
li_exit->adjust_display_commit_url(
EXPORTING
iv_repo_url = io_repo->get_url( )
iv_repo_name = io_repo->get_name( )
iv_repo_key = io_repo->get_key( )
iv_commit_hash = io_repo->get_current_remote( )
CHANGING
cv_display_url = rv_url ).
IF rv_url IS INITIAL.
zcx_abapgit_exception=>raise( |provider not yet supported| ).
ENDIF.
ENDMETHOD.
METHOD get_default_commit_display_url.
DATA ls_result TYPE match_result.
FIELD-SYMBOLS <ls_provider_match> TYPE submatch_result.
rv_commit_url = iv_repo_url.
FIND REGEX '^http(?:s)?:\/\/(?:www\.)?(github\.com|bitbucket\.org|gitlab\.com)\/'
IN rv_commit_url
RESULTS ls_result.
IF sy-subrc = 0.
READ TABLE ls_result-submatches INDEX 1 ASSIGNING <ls_provider_match>.
CASE rv_commit_url+<ls_provider_match>-offset(<ls_provider_match>-length).
WHEN 'github.com'.
REPLACE REGEX '\.git$' IN rv_commit_url WITH space.
rv_commit_url = rv_commit_url && |/commit/| && iv_hash.
WHEN 'bitbucket.org'.
REPLACE REGEX '\.git$' IN rv_commit_url WITH space.
rv_commit_url = rv_commit_url && |/commits/| && iv_hash.
WHEN 'gitlab.com'.
REPLACE REGEX '\.git$' IN rv_commit_url WITH space.
rv_commit_url = rv_commit_url && |/-/commit/| && iv_hash.
ENDCASE.
ENDIF.
ENDMETHOD.
ENDCLASS.