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.
|
METHOD complete_heads_branch_name.
|
||||||
|
@ -127,7 +127,7 @@ CLASS zcl_abapgit_git_branch_list IMPLEMENTATION.
|
||||||
READ TABLE mt_branches INTO rs_branch
|
READ TABLE mt_branches INTO rs_branch
|
||||||
WITH KEY name = iv_branch_name.
|
WITH KEY name = iv_branch_name.
|
||||||
IF sy-subrc <> 0.
|
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.
|
||||||
|
|
||||||
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.
|
METHOD apply_order_by.
|
||||||
|
@ -648,6 +648,7 @@ CLASS zcl_abapgit_gui_page_view_repo IMPLEMENTATION.
|
||||||
lv_add_str TYPE string,
|
lv_add_str TYPE string,
|
||||||
li_log TYPE REF TO zif_abapgit_log,
|
li_log TYPE REF TO zif_abapgit_log,
|
||||||
lv_render_transports TYPE abap_bool,
|
lv_render_transports TYPE abap_bool,
|
||||||
|
lv_msg TYPE string,
|
||||||
lo_news TYPE REF TO zcl_abapgit_news.
|
lo_news TYPE REF TO zcl_abapgit_news.
|
||||||
|
|
||||||
FIELD-SYMBOLS <ls_item> LIKE LINE OF lt_repo_items.
|
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
|
" Reinit, for the case of type change
|
||||||
mo_repo = zcl_abapgit_repo_srv=>get_instance( )->get( mo_repo->get_key( ) ).
|
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 ).
|
lo_news = zcl_abapgit_news=>create( mo_repo ).
|
||||||
|
|
||||||
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
|
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
|
||||||
|
|
|
@ -139,6 +139,14 @@ CLASS zcl_abapgit_repo DEFINITION
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
METHODS reset_status .
|
METHODS reset_status .
|
||||||
|
METHODS validate
|
||||||
|
ABSTRACT
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
|
METHODS reset
|
||||||
|
ABSTRACT
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
|
|
||||||
DATA mt_local TYPE zif_abapgit_definitions=>ty_files_item_tt .
|
DATA mt_local TYPE zif_abapgit_definitions=>ty_files_item_tt .
|
||||||
|
|
|
@ -7,13 +7,17 @@ CLASS zcl_abapgit_repo_offline DEFINITION
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
|
||||||
METHODS get_name
|
METHODS get_name
|
||||||
REDEFINITION .
|
REDEFINITION .
|
||||||
METHODS has_remote_source
|
METHODS has_remote_source
|
||||||
REDEFINITION .
|
REDEFINITION .
|
||||||
|
METHODS validate
|
||||||
|
REDEFINITION .
|
||||||
|
METHODS reset
|
||||||
|
REDEFINITION .
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
|
|
||||||
METHODS reset_remote
|
METHODS reset_remote
|
||||||
REDEFINITION .
|
REDEFINITION .
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
@ -36,6 +40,11 @@ CLASS ZCL_ABAPGIT_REPO_OFFLINE IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD reset.
|
||||||
|
" Nothing to do so far
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD reset_remote.
|
METHOD reset_remote.
|
||||||
|
|
||||||
DATA lt_backup LIKE mt_remote.
|
DATA lt_backup LIKE mt_remote.
|
||||||
|
@ -52,4 +61,9 @@ CLASS ZCL_ABAPGIT_REPO_OFFLINE IMPLEMENTATION.
|
||||||
set_files_remote( lt_backup ).
|
set_files_remote( lt_backup ).
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD validate.
|
||||||
|
" Nothing to do so far
|
||||||
|
ENDMETHOD.
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
|
@ -39,19 +39,26 @@ CLASS zcl_abapgit_repo_online DEFINITION
|
||||||
VALUE(rt_objects) TYPE zif_abapgit_definitions=>ty_objects_tt
|
VALUE(rt_objects) TYPE zif_abapgit_definitions=>ty_objects_tt
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
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
|
METHODS get_files_remote
|
||||||
REDEFINITION .
|
REDEFINITION .
|
||||||
METHODS get_name
|
METHODS get_name
|
||||||
REDEFINITION .
|
REDEFINITION .
|
||||||
METHODS has_remote_source
|
METHODS has_remote_source
|
||||||
REDEFINITION .
|
REDEFINITION .
|
||||||
METHODS rebuild_local_checksums
|
METHODS rebuild_local_checksums
|
||||||
REDEFINITION .
|
REDEFINITION .
|
||||||
METHODS get_commit_display_url
|
METHODS validate
|
||||||
IMPORTING iv_hash TYPE zif_abapgit_definitions=>ty_sha1
|
REDEFINITION .
|
||||||
RETURNING VALUE(rv_url) TYPE zif_abapgit_persistence=>ty_repo-url
|
METHODS reset
|
||||||
RAISING zcx_abapgit_exception.
|
REDEFINITION .
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
|
@ -75,7 +82,7 @@ ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS zcl_abapgit_repo_online IMPLEMENTATION.
|
CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD fetch_remote.
|
METHOD fetch_remote.
|
||||||
|
@ -108,6 +115,33 @@ CLASS zcl_abapgit_repo_online IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
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.
|
METHOD get_files_remote.
|
||||||
fetch_remote( ).
|
fetch_remote( ).
|
||||||
rt_files = super->get_files_remote( ).
|
rt_files = super->get_files_remote( ).
|
||||||
|
@ -238,6 +272,16 @@ CLASS zcl_abapgit_repo_online IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD reset.
|
||||||
|
|
||||||
|
" Reset repo to master branch
|
||||||
|
set_branch_name( 'refs/heads/master' ).
|
||||||
|
|
||||||
|
COMMIT WORK AND WAIT.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD set_branch_name.
|
METHOD set_branch_name.
|
||||||
|
|
||||||
reset_remote( ).
|
reset_remote( ).
|
||||||
|
@ -259,6 +303,21 @@ CLASS zcl_abapgit_repo_online IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
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.
|
METHOD zif_abapgit_git_operations~create_branch.
|
||||||
|
|
||||||
DATA: lv_sha1 TYPE zif_abapgit_definitions=>ty_sha1.
|
DATA: lv_sha1 TYPE zif_abapgit_definitions=>ty_sha1.
|
||||||
|
@ -322,32 +381,4 @@ CLASS zcl_abapgit_repo_online IMPLEMENTATION.
|
||||||
reset_status( ).
|
reset_status( ).
|
||||||
|
|
||||||
ENDMETHOD.
|
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.
|
ENDCLASS.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user