add handling of deleted branches in branchoverview (#1928)

* add handling of deleted branches in branchoverview

also display deleted branches in branch overview but w/o a branch name

* PP #1823
This commit is contained in:
Domi Bigl 2018-09-21 09:12:38 +02:00 committed by Lars Hvam
parent aa7a5fd01f
commit 529bfc478e
2 changed files with 70 additions and 16 deletions

View File

@ -60,12 +60,11 @@ CLASS zcl_abapgit_gui_page_boverview DEFINITION
ENDCLASS. ENDCLASS.
CLASS zcl_abapgit_gui_page_boverview IMPLEMENTATION. CLASS zcl_abapgit_gui_page_boverview IMPLEMENTATION.
METHOD body. METHOD body.
DATA: lv_tag TYPE string. DATA: lv_tag TYPE string.
DATA: lv_branch_display_name TYPE string.
FIELD-SYMBOLS: <ls_commit> LIKE LINE OF mt_commits, FIELD-SYMBOLS: <ls_commit> LIKE LINE OF mt_commits,
<ls_create> LIKE LINE OF <ls_commit>-create. <ls_create> LIKE LINE OF <ls_commit>-create.
@ -145,9 +144,15 @@ CLASS zcl_abapgit_gui_page_boverview IMPLEMENTATION.
ENDIF. ENDIF.
LOOP AT <ls_commit>-create ASSIGNING <ls_create>. LOOP AT <ls_commit>-create ASSIGNING <ls_create>.
IF <ls_create>-name CS zcl_abapgit_branch_overview=>c_deleted_branch_name_prefix.
lv_branch_display_name = ''.
ELSE.
lv_branch_display_name = <ls_create>-name.
ENDIF.
ro_html->add( |var { escape_branch( <ls_create>-name ) } = { ro_html->add( |var { escape_branch( <ls_create>-name ) } = {
escape_branch( <ls_create>-parent ) }.branch("{ escape_branch( <ls_create>-parent ) }.branch("{
<ls_create>-name }");| ). lv_branch_display_name }");| ).
ENDLOOP. ENDLOOP.
ENDLOOP. ENDLOOP.

View File

@ -9,6 +9,7 @@ CLASS zcl_abapgit_branch_overview DEFINITION
INTERFACES zif_abapgit_branch_overview . INTERFACES zif_abapgit_branch_overview .
TYPES: ty_commits TYPE STANDARD TABLE OF zif_abapgit_definitions=>ty_commit WITH DEFAULT KEY . TYPES: ty_commits TYPE STANDARD TABLE OF zif_abapgit_definitions=>ty_commit WITH DEFAULT KEY .
CONSTANTS c_deleted_branch_name_prefix TYPE string VALUE '__DELETED_BRANCH_' ##NO_TEXT.
METHODS constructor METHODS constructor
IMPORTING IMPORTING
@ -61,6 +62,8 @@ CLASS zcl_abapgit_branch_overview DEFINITION
EXPORTING etr_commit_sha1s TYPE tyt_commit_sha1_range EXPORTING etr_commit_sha1s TYPE tyt_commit_sha1_range
e_1st_commit TYPE zif_abapgit_definitions=>ty_commit e_1st_commit TYPE zif_abapgit_definitions=>ty_commit
CHANGING ct_commits TYPE ty_commits. CHANGING ct_commits TYPE ty_commits.
METHODS _reverse_sort_order
CHANGING ct_commits TYPE ty_commits.
ENDCLASS. ENDCLASS.
@ -75,6 +78,8 @@ CLASS zcl_abapgit_branch_overview IMPLEMENTATION.
lt_objects = get_git_objects( io_repo ). lt_objects = get_git_objects( io_repo ).
mt_commits = parse_commits( lt_objects ). mt_commits = parse_commits( lt_objects ).
_sort_commits( CHANGING ct_commits = mt_commits ).
parse_annotated_tags( lt_objects ). parse_annotated_tags( lt_objects ).
CLEAR lt_objects. CLEAR lt_objects.
@ -83,7 +88,7 @@ CLASS zcl_abapgit_branch_overview IMPLEMENTATION.
determine_merges( ). determine_merges( ).
determine_tags( ). determine_tags( ).
fixes( ). fixes( ).
_sort_commits( CHANGING ct_commits = mt_commits ).
ENDMETHOD. ENDMETHOD.
@ -141,31 +146,76 @@ CLASS zcl_abapgit_branch_overview IMPLEMENTATION.
METHOD determine_merges. METHOD determine_merges.
FIELD-SYMBOLS: <ls_merged> LIKE LINE OF mt_commits, DATA: BEGIN OF deleted_branch_info,
<ls_commit> LIKE LINE OF mt_commits. created TYPE flag,
index TYPE string,
name TYPE string,
END OF deleted_branch_info.
FIELD-SYMBOLS: <ls_merged_branch_commit> TYPE zif_abapgit_definitions=>ty_commit,
<ls_merged_branch_parent> TYPE zif_abapgit_definitions=>ty_commit,
<ls_commit> TYPE zif_abapgit_definitions=>ty_commit,
<ls_create> TYPE zif_abapgit_definitions=>ty_create.
* important: start with the newest first and propagate branches * we need latest first here: latest -> initial
SORT mt_commits BY time DESCENDING. _reverse_sort_order( CHANGING ct_commits = mt_commits ).
LOOP AT mt_commits ASSIGNING <ls_commit> WHERE NOT parent2 IS INITIAL. LOOP AT mt_commits ASSIGNING <ls_commit> WHERE NOT parent2 IS INITIAL.
ASSERT NOT <ls_commit>-branch IS INITIAL. ASSERT NOT <ls_commit>-branch IS INITIAL.
READ TABLE mt_commits ASSIGNING <ls_merged> WITH KEY sha1 = <ls_commit>-parent2. READ TABLE mt_commits ASSIGNING <ls_merged_branch_commit> WITH KEY sha1 = <ls_commit>-parent2.
IF sy-subrc = 0. IF sy-subrc = 0.
<ls_commit>-merge = <ls_merged>-branch. <ls_commit>-merge = <ls_merged_branch_commit>-branch.
* orphaned, branch has been deleted after merge * orphaned, branch has been deleted after merge
WHILE <ls_merged>-branch IS INITIAL. deleted_branch_info-created = abap_false.
<ls_merged>-branch = <ls_commit>-branch.
READ TABLE mt_commits ASSIGNING <ls_merged> WITH KEY sha1 = <ls_merged>-parent1. WHILE <ls_merged_branch_commit>-branch IS INITIAL.
IF deleted_branch_info-created = abap_false.
deleted_branch_info-created = abap_true.
deleted_branch_info-index = deleted_branch_info-index + 1.
deleted_branch_info-name = c_deleted_branch_name_prefix && deleted_branch_info-index && '__'.
CONDENSE deleted_branch_info-name NO-GAPS.
<ls_commit>-merge = deleted_branch_info-name.
ENDIF.
<ls_merged_branch_commit>-branch = deleted_branch_info-name.
READ TABLE mt_commits ASSIGNING <ls_merged_branch_parent>
WITH KEY sha1 = <ls_merged_branch_commit>-parent1.
IF sy-subrc <> 0. IF sy-subrc <> 0.
EXIT. EXIT.
ELSE.
ASSIGN <ls_merged_branch_parent> TO <ls_merged_branch_commit>.
ENDIF. ENDIF.
ENDWHILE. ENDWHILE.
IF <ls_merged_branch_parent> IS ASSIGNED.
APPEND INITIAL LINE TO <ls_merged_branch_parent>-create ASSIGNING <ls_create>.
<ls_create>-name = deleted_branch_info-name.
<ls_create>-parent = <ls_commit>-branch.
ENDIF.
ENDIF. ENDIF.
ENDLOOP. ENDLOOP.
" switch back to initial -> latest
_reverse_sort_order( CHANGING ct_commits = mt_commits ).
ENDMETHOD.
METHOD _reverse_sort_order.
DATA: lt_commits TYPE ty_commits.
FIELD-SYMBOLS: <ls_commit> TYPE zif_abapgit_definitions=>ty_commit.
LOOP AT ct_commits ASSIGNING <ls_commit>.
INSERT <ls_commit> INTO lt_commits INDEX 1.
ENDLOOP.
ct_commits = lt_commits.
FREE lt_commits.
ENDMETHOD. ENDMETHOD.
@ -503,5 +553,4 @@ CLASS zcl_abapgit_branch_overview IMPLEMENTATION.
ct_commits = lt_sorted_commits. ct_commits = lt_sorted_commits.
ENDMETHOD. ENDMETHOD.
ENDCLASS. ENDCLASS.