Validate if branch exists when displaying repo (#3749)

* Validate if branch exists when displaying repo

* Validate if branch exists when displaying repo

* Lint

* Lint and 702

* Lint

* Rename validate_branch to validate

* Fix msg and branch display name

* Move msg to UI layer

* Lint

Co-authored-by: Lars Hvam <larshp@hotmail.com>
Co-authored-by: Frederik Hudák <frederik.hudak@sap.com>
This commit is contained in:
Marc Bernard 2020-08-24 05:15:46 -04:00 committed by GitHub
parent 7657d972e9
commit e4bafbe715
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 107 additions and 43 deletions

View File

@ -90,7 +90,7 @@ ENDCLASS.
CLASS zcl_abapgit_git_branch_list IMPLEMENTATION.
CLASS ZCL_ABAPGIT_GIT_BRANCH_LIST IMPLEMENTATION.
METHOD complete_heads_branch_name.
@ -127,7 +127,7 @@ CLASS zcl_abapgit_git_branch_list IMPLEMENTATION.
READ TABLE mt_branches INTO rs_branch
WITH KEY name = iv_branch_name.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Branch not found: { iv_branch_name }| ).
zcx_abapgit_exception=>raise( |Branch not found: { get_display_name( iv_branch_name ) }| ).
ENDIF.
ENDIF.

View File

@ -138,7 +138,7 @@ ENDCLASS.
CLASS zcl_abapgit_gui_page_view_repo IMPLEMENTATION.
CLASS ZCL_ABAPGIT_GUI_PAGE_VIEW_REPO IMPLEMENTATION.
METHOD apply_order_by.
@ -648,6 +648,7 @@ CLASS zcl_abapgit_gui_page_view_repo IMPLEMENTATION.
lv_add_str TYPE string,
li_log TYPE REF TO zif_abapgit_log,
lv_render_transports TYPE abap_bool,
lv_msg TYPE string,
lo_news TYPE REF TO zcl_abapgit_news.
FIELD-SYMBOLS <ls_item> LIKE LINE OF lt_repo_items.
@ -660,6 +661,16 @@ CLASS zcl_abapgit_gui_page_view_repo IMPLEMENTATION.
" Reinit, for the case of type change
mo_repo = zcl_abapgit_repo_srv=>get_instance( )->get( mo_repo->get_key( ) ).
" Check if repo is still valid and reset if necessary to consistent state
TRY.
mo_repo->validate( ).
CATCH zcx_abapgit_exception INTO lx_error.
lv_msg = lx_error->get_text( ) && '. Fallback to master branch.'.
MESSAGE lv_msg TYPE 'S'.
mo_repo->reset( ).
ENDTRY.
lo_news = zcl_abapgit_news=>create( mo_repo ).
CREATE OBJECT ri_html TYPE zcl_abapgit_html.

View File

@ -139,6 +139,14 @@ CLASS zcl_abapgit_repo DEFINITION
RAISING
zcx_abapgit_exception .
METHODS reset_status .
METHODS validate
ABSTRACT
RAISING
zcx_abapgit_exception .
METHODS reset
ABSTRACT
RAISING
zcx_abapgit_exception .
PROTECTED SECTION.
DATA mt_local TYPE zif_abapgit_definitions=>ty_files_item_tt .

View File

@ -7,13 +7,17 @@ CLASS zcl_abapgit_repo_offline DEFINITION
PUBLIC SECTION.
METHODS get_name
REDEFINITION .
REDEFINITION .
METHODS has_remote_source
REDEFINITION .
REDEFINITION .
METHODS validate
REDEFINITION .
METHODS reset
REDEFINITION .
PROTECTED SECTION.
METHODS reset_remote
REDEFINITION .
REDEFINITION .
PRIVATE SECTION.
ENDCLASS.
@ -36,6 +40,11 @@ CLASS ZCL_ABAPGIT_REPO_OFFLINE IMPLEMENTATION.
ENDMETHOD.
METHOD reset.
" Nothing to do so far
ENDMETHOD.
METHOD reset_remote.
DATA lt_backup LIKE mt_remote.
@ -52,4 +61,9 @@ CLASS ZCL_ABAPGIT_REPO_OFFLINE IMPLEMENTATION.
set_files_remote( lt_backup ).
ENDMETHOD.
METHOD validate.
" Nothing to do so far
ENDMETHOD.
ENDCLASS.

View File

@ -39,19 +39,26 @@ CLASS zcl_abapgit_repo_online DEFINITION
VALUE(rt_objects) TYPE zif_abapgit_definitions=>ty_objects_tt
RAISING
zcx_abapgit_exception .
METHODS get_commit_display_url
IMPORTING
!iv_hash TYPE zif_abapgit_definitions=>ty_sha1
RETURNING
VALUE(rv_url) TYPE zif_abapgit_persistence=>ty_repo-url
RAISING
zcx_abapgit_exception .
METHODS get_files_remote
REDEFINITION .
REDEFINITION .
METHODS get_name
REDEFINITION .
REDEFINITION .
METHODS has_remote_source
REDEFINITION .
REDEFINITION .
METHODS rebuild_local_checksums
REDEFINITION .
METHODS get_commit_display_url
IMPORTING iv_hash TYPE zif_abapgit_definitions=>ty_sha1
RETURNING VALUE(rv_url) TYPE zif_abapgit_persistence=>ty_repo-url
RAISING zcx_abapgit_exception.
REDEFINITION .
METHODS validate
REDEFINITION .
METHODS reset
REDEFINITION .
PROTECTED SECTION.
PRIVATE SECTION.
@ -75,7 +82,7 @@ ENDCLASS.
CLASS zcl_abapgit_repo_online IMPLEMENTATION.
CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION.
METHOD fetch_remote.
@ -108,6 +115,33 @@ CLASS zcl_abapgit_repo_online IMPLEMENTATION.
ENDMETHOD.
METHOD get_commit_display_url.
DATA ls_result TYPE match_result.
FIELD-SYMBOLS <ls_provider_match> TYPE submatch_result.
rv_url = me->get_url( ).
FIND REGEX '^https:\/\/(?:www\.)?(github\.com|bitbucket\.org|gitlab\.com)\/' IN rv_url RESULTS ls_result.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |provider not yet supported| ).
ENDIF.
READ TABLE ls_result-submatches INDEX 1 ASSIGNING <ls_provider_match>.
CASE rv_url+<ls_provider_match>-offset(<ls_provider_match>-length).
WHEN 'github.com'.
REPLACE REGEX '\.git$' IN rv_url WITH space.
rv_url = rv_url && |/commit/| && iv_hash.
WHEN 'bitbucket.org'.
REPLACE REGEX '\.git$' IN rv_url WITH space.
rv_url = rv_url && |/commits/| && iv_hash.
WHEN 'gitlab.com'.
REPLACE REGEX '\.git$' IN rv_url WITH space.
rv_url = rv_url && |/-/commit/| && iv_hash.
ENDCASE.
ENDMETHOD.
METHOD get_files_remote.
fetch_remote( ).
rt_files = super->get_files_remote( ).
@ -238,6 +272,16 @@ CLASS zcl_abapgit_repo_online IMPLEMENTATION.
ENDMETHOD.
METHOD reset.
" Reset repo to master branch
set_branch_name( 'refs/heads/master' ).
COMMIT WORK AND WAIT.
ENDMETHOD.
METHOD set_branch_name.
reset_remote( ).
@ -259,6 +303,21 @@ CLASS zcl_abapgit_repo_online IMPLEMENTATION.
ENDMETHOD.
METHOD validate.
DATA:
lo_branches TYPE REF TO zcl_abapgit_git_branch_list,
ls_branch TYPE zif_abapgit_definitions=>ty_git_branch.
" Check if branch still exists since it might have been deleted in remote repo
" This will raise exception if not
lo_branches = zcl_abapgit_git_transport=>branches( ms_data-url ).
ls_branch = lo_branches->find_by_name( ms_data-branch_name ).
ENDMETHOD.
METHOD zif_abapgit_git_operations~create_branch.
DATA: lv_sha1 TYPE zif_abapgit_definitions=>ty_sha1.
@ -322,32 +381,4 @@ CLASS zcl_abapgit_repo_online IMPLEMENTATION.
reset_status( ).
ENDMETHOD.
METHOD get_commit_display_url.
DATA ls_result TYPE match_result.
FIELD-SYMBOLS <ls_provider_match> TYPE submatch_result.
rv_url = me->get_url( ).
FIND REGEX '^https:\/\/(?:www\.)?(github\.com|bitbucket\.org|gitlab\.com)\/' IN rv_url RESULTS ls_result.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |provider not yet supported| ).
ENDIF.
READ TABLE ls_result-submatches INDEX 1 ASSIGNING <ls_provider_match>.
CASE rv_url+<ls_provider_match>-offset(<ls_provider_match>-length).
WHEN 'github.com'.
REPLACE REGEX '\.git$' IN rv_url WITH space.
rv_url = rv_url && |/commit/| && iv_hash.
WHEN 'bitbucket.org'.
REPLACE REGEX '\.git$' IN rv_url WITH space.
rv_url = rv_url && |/commits/| && iv_hash.
WHEN 'gitlab.com'.
REPLACE REGEX '\.git$' IN rv_url WITH space.
rv_url = rv_url && |/-/commit/| && iv_hash.
ENDCASE.
ENDMETHOD.
ENDCLASS.