mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
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:
parent
7657d972e9
commit
e4bafbe715
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 .
|
||||
|
|
|
@ -10,6 +10,10 @@ CLASS zcl_abapgit_repo_offline DEFINITION
|
|||
REDEFINITION .
|
||||
METHODS has_remote_source
|
||||
REDEFINITION .
|
||||
METHODS validate
|
||||
REDEFINITION .
|
||||
METHODS reset
|
||||
REDEFINITION .
|
||||
PROTECTED SECTION.
|
||||
|
||||
METHODS reset_remote
|
||||
|
@ -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.
|
||||
|
|
|
@ -39,6 +39,13 @@ 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 .
|
||||
|
@ -48,10 +55,10 @@ CLASS zcl_abapgit_repo_online DEFINITION
|
|||
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.
|
||||
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.
|
||||
|
|
Loading…
Reference in New Issue
Block a user