diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap index 1a039767b..ab6a2a47a 100644 --- a/src/zabapgit_git.prog.abap +++ b/src/zabapgit_git.prog.abap @@ -602,6 +602,8 @@ CLASS lcl_git_pack IMPLEMENTATION. rv_type = zif_abapgit_definitions=>gc_type-tree. WHEN '011'. rv_type = zif_abapgit_definitions=>gc_type-blob. + WHEN '100'. + rv_type = zif_abapgit_definitions=>gc_type-tag. WHEN '111'. rv_type = zif_abapgit_definitions=>gc_type-ref_d. WHEN OTHERS. diff --git a/src/zabapgit_page_branch_overview.prog.abap b/src/zabapgit_page_branch_overview.prog.abap index a18bdfe41..14d8de764 100644 --- a/src/zabapgit_page_branch_overview.prog.abap +++ b/src/zabapgit_page_branch_overview.prog.abap @@ -20,6 +20,7 @@ CLASS lcl_branch_overview DEFINITION FINAL. message TYPE string, branch TYPE string, merge TYPE string, + tags TYPE stringtab, create TYPE STANDARD TABLE OF ty_create WITH DEFAULT KEY, compressed TYPE abap_bool, END OF ty_commit. @@ -54,11 +55,14 @@ CLASS lcl_branch_overview DEFINITION FINAL. get_git_objects IMPORTING io_repo TYPE REF TO lcl_repo_online RETURNING VALUE(rt_objects) TYPE zif_abapgit_definitions=>ty_objects_tt - RAISING zcx_abapgit_exception. + RAISING zcx_abapgit_exception, + determine_tags + RAISING zcx_abapgit_exception. CLASS-DATA: gt_branches TYPE lcl_git_branch_list=>ty_git_branch_list_tt, - gt_commits TYPE TABLE OF ty_commit. + gt_commits TYPE TABLE OF ty_commit, + gt_tags TYPE lcl_git_branch_list=>ty_git_branch_list_tt. ENDCLASS. @@ -143,6 +147,7 @@ CLASS lcl_branch_overview IMPLEMENTATION. determine_branch( ). determine_merges( ). + determine_tags( ). fixes( ). SORT gt_commits BY time ASCENDING. @@ -153,6 +158,8 @@ CLASS lcl_branch_overview IMPLEMENTATION. METHOD get_git_objects. + DATA: lo_branch_list TYPE REF TO lcl_git_branch_list. + lcl_progress=>show( iv_key = 'Get git objects' iv_current = 1 iv_total = 1 @@ -162,12 +169,16 @@ CLASS lcl_branch_overview IMPLEMENTATION. * the selected branch "TODO refactor - gt_branches = lcl_git_transport=>branches( io_repo->get_url( ) )->get_branches_only( ). - lcl_git_transport=>upload_pack( EXPORTING io_repo = io_repo - iv_deepen = abap_false + lo_branch_list = lcl_git_transport=>branches( io_repo->get_url( ) ). + + gt_branches = lo_branch_list->get_branches_only( ). + gt_tags = lo_branch_list->get_tags_only( ). + + lcl_git_transport=>upload_pack( EXPORTING io_repo = io_repo + iv_deepen = abap_false it_branches = gt_branches - IMPORTING et_objects = rt_objects ). + IMPORTING et_objects = rt_objects ). DELETE rt_objects WHERE type = zif_abapgit_definitions=>gc_type-blob. @@ -298,6 +309,26 @@ CLASS lcl_branch_overview IMPLEMENTATION. ENDMETHOD. + + METHOD determine_tags. + + FIELD-SYMBOLS: TYPE lcl_git_branch_list=>ty_git_branch, + TYPE lcl_branch_overview=>ty_commit. + + LOOP AT gt_tags ASSIGNING . + + READ TABLE gt_commits WITH KEY sha1 = -sha1 + ASSIGNING . + CHECK sy-subrc = 0. + + INSERT replace( val = -name + sub = zif_abapgit_definitions=>gc_tag_prefix + with = `` ) INTO TABLE -tags. + + ENDLOOP. + + ENDMETHOD. + ENDCLASS. *********************** @@ -412,6 +443,7 @@ CLASS lcl_gui_page_boverview IMPLEMENTATION. ENDMETHOD. METHOD body. + DATA: tag TYPE string. FIELD-SYMBOLS: LIKE LINE OF mt_commits, LIKE LINE OF -create. @@ -470,10 +502,18 @@ CLASS lcl_gui_page_boverview IMPLEMENTATION. escape_message( -message ) }", dotColor: "black", dotSize: 15, messageHashDisplay: false, messageAuthorDisplay: false\});| ). ELSEIF -merge IS INITIAL. + + " gitgraph doesn't support multiple tags per commit yet. + " Therefore we concatenate them. + " https://github.com/nicoespeon/gitgraph.js/issues/143 + + tag = concat_lines_of( table = -tags + sep = ` | ` ). + ro_html->add( |{ escape_branch( -branch ) }.commit(\{message: "{ escape_message( -message ) }", author: "{ -author }", sha1: "{ - -sha1(7) }"\});| ). + -sha1(7) }", tag: "{ tag }"\});| ). ELSE. ro_html->add( |{ escape_branch( -merge ) }.merge({ escape_branch( -branch ) }, \{message: "{ diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index 6e0a40275..310aac7e6 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -137,7 +137,13 @@ CLASS lcl_popups DEFINITION FINAL. EXPORTING ev_url TYPE abaptxt255-line ev_package TYPE tdevc-devclass - ev_branch TYPE textl-line. + ev_branch TYPE textl-line, + + remove_tag_prefix + IMPORTING + iv_text TYPE string + RETURNING + VALUE(rv_text) TYPE spopli-varoption. ENDCLASS. @@ -301,22 +307,19 @@ CLASS lcl_popups IMPLEMENTATION. METHOD create_tag_popup. - DATA: lv_answer TYPE c LENGTH 1, - lt_fields TYPE TABLE OF sval, - lv_text_question TYPE string. + DATA: lv_answer TYPE c LENGTH 1, + lt_fields TYPE TABLE OF sval. FIELD-SYMBOLS: LIKE LINE OF lt_fields. CLEAR: ev_name, ev_cancel. - lv_text_question = `You create a tag from current commit ` && iv_sha1(7) && ` continue?`. - - lv_answer = lcl_popups=>popup_to_confirm( titlebar = `Create a tag?` - text_question = lv_text_question ). - IF lv_answer <> '1'. - ev_cancel = abap_true. - RETURN. - ENDIF. + add_field( EXPORTING iv_tabname = 'TOAVALUE' + iv_fieldname = 'REFER_CODE' + iv_fieldtext = 'SHA' + iv_value = iv_sha1(7) + iv_field_attr = '05' + CHANGING ct_fields = lt_fields ). add_field( EXPORTING iv_tabname = 'TEXTL' iv_fieldname = 'LINE' @@ -341,7 +344,8 @@ CLASS lcl_popups IMPLEMENTATION. IF lv_answer = 'A'. ev_cancel = abap_true. ELSE. - READ TABLE lt_fields INDEX 1 ASSIGNING . + READ TABLE lt_fields WITH KEY fieldname = 'LINE' + ASSIGNING . ASSERT sy-subrc = 0. ev_name = |{ zif_abapgit_definitions=>gc_tag_prefix }{ -value }|. ENDIF. @@ -591,14 +595,16 @@ CLASS lcl_popups IMPLEMENTATION. lo_branches = lcl_git_transport=>branches( iv_url ). lt_tags = lo_branches->get_tags_only( ). + IF lines( lt_tags ) = 0. + zcx_abapgit_exception=>raise( `There are no tags for this repository` ). + ENDIF. + IF iv_select_mode = abap_true. LOOP AT lt_tags ASSIGNING . INSERT INITIAL LINE INTO lt_selection INDEX 1 ASSIGNING . - -varoption = replace( val = -name - sub = zif_abapgit_definitions=>gc_tag_prefix - with = '' ). + -varoption = remove_tag_prefix( -name ). ENDLOOP. @@ -639,9 +645,7 @@ CLASS lcl_popups IMPLEMENTATION. LOOP AT lt_tags ASSIGNING . - -name = replace( val = -name - sub = zif_abapgit_definitions=>gc_tag_prefix - with = '' ). + -name = remove_tag_prefix( -name ). -sha1 = -sha1(7). ENDLOOP. @@ -1225,4 +1229,15 @@ CLASS lcl_popups IMPLEMENTATION. ENDMETHOD. + + METHOD remove_tag_prefix. + + rv_text = iv_text. + + REPLACE FIRST OCCURRENCE OF zif_abapgit_definitions=>gc_tag_prefix + IN rv_text + WITH ''. + + ENDMETHOD. + ENDCLASS. diff --git a/src/zif_abapgit_definitions.intf.abap b/src/zif_abapgit_definitions.intf.abap index 797e47549..d66015d71 100644 --- a/src/zif_abapgit_definitions.intf.abap +++ b/src/zif_abapgit_definitions.intf.abap @@ -155,6 +155,7 @@ INTERFACE zif_abapgit_definitions commit TYPE zif_abapgit_definitions=>ty_type VALUE 'commit', "#EC NOTEXT tree TYPE zif_abapgit_definitions=>ty_type VALUE 'tree', "#EC NOTEXT ref_d TYPE zif_abapgit_definitions=>ty_type VALUE 'ref_d', "#EC NOTEXT + tag TYPE zif_abapgit_definitions=>ty_type VALUE 'tag', "#EC NOTEXT blob TYPE zif_abapgit_definitions=>ty_type VALUE 'blob', "#EC NOTEXT END OF gc_type . CONSTANTS: