From af74a24b6d7bc46963e4c12a43c0cecc62cb7748 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Wed, 6 Jul 2016 16:08:00 +0200 Subject: [PATCH] calculate merged tree #275 (#277) * merge #275, scaffolding * refactoring few gui pages top class element moved to page_super * syle FORM dropdown * find common ancestor * calculate merged tree #275 --- src/zabapgit.prog.abap | 4 +- src/zabapgit_git.prog.abap | 31 +- src/zabapgit_gui.prog.abap | 393 +----------------- src/zabapgit_object_webi.prog.abap | 17 +- src/zabapgit_page.prog.abap | 92 ++++- src/zabapgit_page_branch_overview.prog.abap | 168 ++++++-- src/zabapgit_page_commit.prog.abap | 234 +++++++++++ src/zabapgit_page_commit.prog.xml | 48 +++ src/zabapgit_page_merge.prog.abap | 426 ++++++++++++++++++++ src/zabapgit_page_merge.prog.xml | 48 +++ 10 files changed, 1016 insertions(+), 445 deletions(-) create mode 100644 src/zabapgit_page_commit.prog.abap create mode 100644 src/zabapgit_page_commit.prog.xml create mode 100644 src/zabapgit_page_merge.prog.abap create mode 100644 src/zabapgit_page_merge.prog.xml diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 55f558a65..5f8225765 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -3,7 +3,7 @@ REPORT zabapgit LINE-SIZE 100. * See http://www.abapgit.org CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.12.11'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.12.12'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) @@ -72,7 +72,9 @@ INCLUDE zabapgit_background. INCLUDE zabapgit_zip. INCLUDE zabapgit_transport. INCLUDE zabapgit_page. +INCLUDE zabapgit_page_merge. INCLUDE zabapgit_page_branch_overview. +INCLUDE zabapgit_page_commit. INCLUDE zabapgit_gui. INCLUDE zabapgit_app_impl. INCLUDE zabapgit_unit_test. diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap index 213619a12..978122357 100644 --- a/src/zabapgit_git.prog.abap +++ b/src/zabapgit_git.prog.abap @@ -572,6 +572,8 @@ CLASS lcl_git_transport IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF lt_branches. + CLEAR et_objects. + find_branch( EXPORTING io_repo = io_repo @@ -1321,6 +1323,15 @@ CLASS lcl_git_porcelain DEFINITION FINAL FRIENDS ltcl_git_porcelain. PUBLIC SECTION. + TYPES: BEGIN OF ty_expanded, + path TYPE string, + name TYPE string, + sha1 TYPE ty_sha1, + chmod TYPE ty_chmod, + END OF ty_expanded. + + TYPES: ty_expanded_tt TYPE STANDARD TABLE OF ty_expanded WITH DEFAULT KEY. + CLASS-METHODS pull IMPORTING io_repo TYPE REF TO lcl_repo_online EXPORTING et_files TYPE ty_files_tt @@ -1341,15 +1352,13 @@ CLASS lcl_git_porcelain DEFINITION FINAL FRIENDS ltcl_git_porcelain. iv_from TYPE ty_sha1 RAISING lcx_exception. - PRIVATE SECTION. - TYPES: BEGIN OF ty_expanded, - path TYPE string, - name TYPE string, - sha1 TYPE ty_sha1, - chmod TYPE ty_chmod, - END OF ty_expanded. + CLASS-METHODS full_tree + IMPORTING it_objects TYPE ty_objects_tt + iv_branch TYPE ty_sha1 + RETURNING VALUE(rt_expanded) TYPE ty_expanded_tt + RAISING lcx_exception. - TYPES: ty_expanded_tt TYPE STANDARD TABLE OF ty_expanded WITH DEFAULT KEY. + PRIVATE SECTION. TYPES: BEGIN OF ty_tree, path TYPE string, @@ -1390,12 +1399,6 @@ CLASS lcl_git_porcelain DEFINITION FINAL FRIENDS ltcl_git_porcelain. RETURNING VALUE(rt_expanded) TYPE ty_expanded_tt RAISING lcx_exception. - CLASS-METHODS full_tree - IMPORTING it_objects TYPE ty_objects_tt - iv_branch TYPE ty_sha1 - RETURNING VALUE(rt_expanded) TYPE ty_expanded_tt - RAISING lcx_exception. - CLASS-METHODS receive_pack IMPORTING is_comment TYPE ty_comment io_repo TYPE REF TO lcl_repo_online diff --git a/src/zabapgit_gui.prog.abap b/src/zabapgit_gui.prog.abap index 0ff7894d5..9ce52a292 100644 --- a/src/zabapgit_gui.prog.abap +++ b/src/zabapgit_gui.prog.abap @@ -200,12 +200,14 @@ CLASS lcl_gui IMPLEMENTATION. TRY. IF mi_cur_page IS BOUND. - lv_state = mi_cur_page->on_event( - iv_action = action - iv_frame = frame - iv_getdata = getdata - it_postdata = postdata - it_query_table = query_table ). + mi_cur_page->on_event( + EXPORTING + iv_action = action + iv_getdata = getdata + it_postdata = postdata + IMPORTING + ei_page = li_page + ev_state = lv_state ). ENDIF. IF lv_state IS INITIAL. @@ -418,11 +420,6 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super. METHODS lif_gui_page~render REDEFINITION. METHODS lif_gui_page~get_assets REDEFINITION. - CLASS-METHODS render_repo_top - IMPORTING io_repo TYPE REF TO lcl_repo - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper - RAISING lcx_exception. - PRIVATE SECTION. TYPES: BEGIN OF ty_repo_item, @@ -850,7 +847,7 @@ CLASS lcl_gui_page_background IMPLEMENTATION. CASE iv_action. WHEN 'save'. save( iv_getdata ). - rv_state = gc_event_state-re_render. + ev_state = gc_event_state-re_render. ENDCASE. ENDMETHOD. @@ -975,268 +972,6 @@ CLASS lcl_gui_page_background IMPLEMENTATION. ENDCLASS. -CLASS lcl_gui_page_commit DEFINITION FINAL INHERITING FROM lcl_gui_page_super. - - PUBLIC SECTION. - METHODS constructor - IMPORTING iv_repo_key TYPE lcl_persistence_repo=>ty_repo-key - RAISING lcx_exception. - - METHODS lif_gui_page~render REDEFINITION. - - PRIVATE SECTION. - DATA: mo_repo TYPE REF TO lcl_repo_online, - mo_stage TYPE REF TO lcl_stage. - - METHODS render_menu - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. - - METHODS render_stage - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper - RAISING lcx_exception. - - METHODS render_form - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper - RAISING lcx_exception. - - METHODS styles - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. - - METHODS scripts - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. - -ENDCLASS. - -CLASS lcl_gui_page_commit IMPLEMENTATION. - - METHOD constructor. - super->constructor( ). - - mo_repo ?= lcl_app=>repo_srv( )->get( iv_repo_key ). - mo_stage = lcl_app=>repo_srv( )->get_stage( iv_repo_key ). - ENDMETHOD. - - METHOD render_stage. - - DATA: lt_stage TYPE lcl_stage=>ty_stage_tt. - - FIELD-SYMBOLS: LIKE LINE OF lt_stage. - - CREATE OBJECT ro_html. - - lt_stage = mo_stage->get_all( ). - - ro_html->add( '' ). - ro_html->add( ''). - ro_html->add( ''). - ro_html->add( '' ). - - LOOP AT lt_stage ASSIGNING . - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - ENDLOOP. - - ro_html->add( '
Staged files
' ). - ro_html->add( lcl_stage=>method_description( -method ) ). - ro_html->add( '' ). - ro_html->add( -file-path && -file-filename ). - ro_html->add( '
' ). - - ENDMETHOD. "render_stage - - METHOD render_form. - DATA: lo_user TYPE REF TO lcl_persistence_user, - lv_user TYPE string, - lv_key TYPE string, - lv_email TYPE string. - -* see https://git-scm.com/book/ch5-2.html -* commit messages should be max 50 characters -* body should wrap at 72 characters - - lo_user = lcl_app=>user( ). - lv_user = lo_user->get_username( ). - lv_email = lo_user->get_email( ). - lv_key = mo_repo->get_key( ). - - CREATE OBJECT ro_html. - - ro_html->add( '
' ). - ro_html->add( '
' ). - ro_html->add( || ). - ro_html->add( '' ). - - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - - ro_html->add( '
username' ). - ro_html->add( || ). - ro_html->add( '
email' ). - ro_html->add( || ). - ro_html->add( '
comment' ). - ro_html->add( - '' ). - ro_html->add( '
body' ). - ro_html->add( '' ). - - ro_html->add( '' ). "Hmmm ... reconsider - - ro_html->add( '
' ). - ro_html->add( '
' ). - - ro_html->add( '
' ). - - ENDMETHOD. "render_form - - METHOD render_menu. - - DATA lo_toolbar TYPE REF TO lcl_html_toolbar. - - CREATE OBJECT ro_html. - CREATE OBJECT lo_toolbar. - - lo_toolbar->add( iv_act = 'submitCommit();' - iv_txt = 'Commit' - iv_typ = gc_action_type-onclick - iv_opt = gc_html_opt-emphas ) ##NO_TEXT. - - lo_toolbar->add( iv_act = 'commit_cancel' - iv_txt = 'Cancel' - iv_opt = gc_html_opt-cancel ) ##NO_TEXT. - - ro_html->add( '
' ). - ro_html->add( lo_toolbar->render( ) ). - ro_html->add( '
' ). - - ENDMETHOD. "render_menu - - METHOD lif_gui_page~render. - - CREATE OBJECT ro_html. - - ro_html->add( header( io_include_style = styles( ) ) ). - ro_html->add( title( 'COMMIT' ) ). - - ro_html->add( '
' ). - ro_html->add( lcl_gui_page_main=>render_repo_top( mo_repo ) ). - ro_html->add( render_menu( ) ). - ro_html->add( render_form( ) ). - ro_html->add( render_stage( ) ). - ro_html->add( '
' ). - - ro_html->add( footer( io_include_script = scripts( ) ) ). - - ENDMETHOD. "lif_gui_page~render - - METHOD styles. - - CREATE OBJECT ro_html. - - _add '/* REPOSITORY */'. - _add 'div.repo {'. - _add ' margin-top: 3px;'. - _add ' background-color: #f2f2f2;'. - _add ' padding: 0.5em 1em 0.5em 1em;'. - _add '}'. - _add '.repo_name span {'. - _add ' color: #333;'. - _add ' font-weight: bold;'. - _add ' font-size: 14pt;'. - _add '}'. - _add '.repo_name img {'. - _add ' vertical-align: baseline;'. - _add ' margin: 0 5px 0 5px;'. - _add '}'. - _add '.repo_attr {'. - _add ' color: grey;'. - _add ' font-size: 12pt;'. - _add '}'. - _add '.repo_attr span {'. - _add ' margin-left: 0.2em;'. - _add ' margin-right: 0.5em;'. - _add '}'. - _add '.repo_attr input {'. - _add ' color: grey;'. " Input wants it personaly - _add ' font-size: 12pt;'. " Input wants it personaly - _add ' margin-left: 0.5em;'. - _add ' margin-right: 0.5em;'. - _add ' background-color: transparent;'. - _add ' border-style: none;'. - _add ' text-overflow: ellipsis;'. - _add '}'. - - _add '/* STAGE */'. - _add '.stage_tab {'. - _add ' border: 1px solid #DDD;'. - _add ' background: #fff;'. - _add ' margin-top: 0.2em;'. - _add '}'. - _add '.stage_tab td {'. - _add ' border-top: 1px solid #eee;'. - _add ' color: #333;'. - _add ' vertical-align: middle;'. - _add ' padding: 2px 0.5em;'. - _add '}'. - _add '.stage_tab td.method {'. - _add ' color: #ccc;'. - _add '}'. - _add '.stage_tab tr.firstrow td { border-top: 0px; } ' . - _add '.stage_tab tr.title td {'. - _add ' color: #BBB;'. - _add ' font-size: 10pt;'. - _add ' background-color: #edf2f9;'. - _add ' padding: 4px 0.5em;'. - _add ' text-align: center;'. - _add '}'. - - _add '/* COMMIT */'. - _add 'div.form_div {'. - _add ' margin: 0.5em 0em;'. - _add ' background-color: #F8F8F8;'. - _add ' padding: 1em 1em;'. - _add '}'. - _add 'div.form_div td.field_name {'. - _add ' color: #BBB;'. - _add ' padding-right: 1em;'. - _add '}'. - - ENDMETHOD. "styles - - METHOD scripts. - - CREATE OBJECT ro_html. - - _add 'function setInitialFocus() {'. - _add ' document.getElementById("commit_msg").focus();'. - _add '}'. - _add 'function submitCommit() {'. - _add ' document.getElementById("commit_form").submit();'. - _add '}'. - _add 'setInitialFocus();'. - - ENDMETHOD. "scripts - -ENDCLASS. "lcl_gui_page_commit - CLASS lcl_gui_page_stage DEFINITION FINAL INHERITING FROM lcl_gui_page_super. PUBLIC SECTION. @@ -1244,7 +979,7 @@ CLASS lcl_gui_page_stage DEFINITION FINAL INHERITING FROM lcl_gui_page_super. IMPORTING io_repo TYPE REF TO lcl_repo_online RAISING lcx_exception. - METHODS lif_gui_page~render REDEFINITION. + METHODS lif_gui_page~render REDEFINITION. PRIVATE SECTION. DATA: mo_repo TYPE REF TO lcl_repo_online, @@ -1348,7 +1083,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION. ro_html->add( title( 'STAGE' ) ). ro_html->add( '
' ). - ro_html->add( lcl_gui_page_main=>render_repo_top( mo_repo ) ). + ro_html->add( render_repo_top( mo_repo ) ). ro_html->add( render_menu( ) ). ro_html->add( '' ). @@ -1389,39 +1124,6 @@ CLASS lcl_gui_page_stage IMPLEMENTATION. CREATE OBJECT ro_html. - _add '/* REPOSITORY */'. - _add 'div.repo {'. - _add ' margin-top: 3px;'. - _add ' background-color: #f2f2f2;'. - _add ' padding: 0.5em 1em 0.5em 1em;'. - _add '}'. - _add '.repo_name span {'. - _add ' color: #333;'. - _add ' font-weight: bold;'. - _add ' font-size: 14pt;'. - _add '}'. - _add '.repo_name img {'. - _add ' vertical-align: baseline;'. - _add ' margin: 0 5px 0 5px;'. - _add '}'. - _add '.repo_attr {'. - _add ' color: grey;'. - _add ' font-size: 12pt;'. - _add '}'. - _add '.repo_attr span {'. - _add ' margin-left: 0.2em;'. - _add ' margin-right: 0.5em;'. - _add '}'. - _add '.repo_attr input {'. - _add ' color: grey;'. " Input wants it personaly - _add ' font-size: 12pt;'. " Input wants it personaly - _add ' margin-left: 0.5em;'. - _add ' margin-right: 0.5em;'. - _add ' background-color: transparent;'. - _add ' border-style: none;'. - _add ' text-overflow: ellipsis;'. - _add '}'. - _add '/* STAGE */'. _add '.stage_tab {'. _add ' border: 1px solid #DDD;'. @@ -1502,40 +1204,8 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ENDMETHOD. "build main_menu METHOD styles. - CREATE OBJECT ro_html. - _add '/* REPOSITORY */'. - _add 'div.repo {'. - _add ' margin-top: 3px;'. - _add ' background-color: #f2f2f2;'. - _add ' padding: 0.5em 1em 0.5em 1em;'. - _add '}'. - _add '.repo_name span {'. - _add ' font-weight: bold;'. - _add ' color: #333;'. - _add ' font-size: 14pt;'. - _add '}'. - _add '.repo_name img {'. - _add ' vertical-align: baseline;'. - _add ' margin: 0 5px 0 5px;'. - _add '}'. - _add '.repo_attr {'. - _add ' color: grey;'. - _add ' font-size: 12pt;'. - _add '}'. - _add '.repo_attr span {'. - _add ' margin-left: 0.2em;'. - _add ' margin-right: 0.5em;'. - _add '}'. - _add '.repo_attr input {'. - _add ' color: grey;'. " Input wants it personaly - _add ' font-size: 12pt;'. " Input wants it personaly - _add ' margin-left: 0.5em;'. - _add ' margin-right: 0.5em;'. - _add ' background-color: transparent;'. - _add ' border-style: none;'. - _add ' text-overflow: ellipsis;'. - _add '}'. + CREATE OBJECT ro_html. _add '/* REPOSITORY TABLE*/'. _add '.repo_tab {'. @@ -1665,45 +1335,6 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ENDMETHOD. - METHOD render_repo_top. - - DATA: lo_repo_online TYPE REF TO lcl_repo_online, - lv_icon TYPE string. - - - CREATE OBJECT ro_html. - - IF io_repo->is_offline( ) = abap_true. - lv_icon = 'img/repo_offline' ##NO_TEXT. - ELSE. - lv_icon = 'img/repo_online' ##NO_TEXT. - ENDIF. - - ro_html->add( || ). - ro_html->add( '
' ). - - ro_html->add( '' ). - - ro_html->add( '' ). - ro_html->add( '
' ). - ro_html->add( || ). - ro_html->add( |{ io_repo->get_name( ) }| ). - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( |{ io_repo->get_package( ) }| ). - - IF io_repo->is_offline( ) = abap_false. - lo_repo_online ?= io_repo. - ro_html->add( '' ). - ro_html->add( |{ lo_repo_online->get_branch_name( ) }| ). - ro_html->add( '' ). - ro_html->add( || ). - ENDIF. - - ro_html->add( '
' ). - - ENDMETHOD. - METHOD render_repo. DATA: lt_repo_items TYPE tt_repo_items, lx_error TYPE REF TO lcx_exception, diff --git a/src/zabapgit_object_webi.prog.abap b/src/zabapgit_object_webi.prog.abap index 221d2371a..c750e991a 100644 --- a/src/zabapgit_object_webi.prog.abap +++ b/src/zabapgit_object_webi.prog.abap @@ -278,15 +278,14 @@ CLASS lcl_object_webi IMPLEMENTATION. li_field->set_type( mi_vi->get_type( typename = -typeref version = sews_c_vif_version-inactive ) ). - IF lv_index = 1. - IF li_struc->if_ws_md_vif_type~has_soap_extension_type( - sews_c_vif_version-all ) = abap_false. - READ TABLE is_webi-pveptypesoapext ASSIGNING - WITH KEY typename = -typename. - IF sy-subrc = 0. - li_soap = li_struc->if_ws_md_vif_type~create_soap_extension_type( ). - li_soap->set_namespace( -namespace ). - ENDIF. + IF lv_index = 1 + AND li_struc->if_ws_md_vif_type~has_soap_extension_type( + sews_c_vif_version-all ) = abap_false. + READ TABLE is_webi-pveptypesoapext ASSIGNING + WITH KEY typename = -typename. + IF sy-subrc = 0. + li_soap = li_struc->if_ws_md_vif_type~create_soap_extension_type( ). + li_soap->set_namespace( -namespace ). ENDIF. ENDIF. ENDLOOP. diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index f07592af9..e6b5248da 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -8,12 +8,11 @@ INTERFACE lif_gui_page. METHODS on_event - IMPORTING iv_action TYPE clike - iv_frame TYPE clike - iv_getdata TYPE clike - it_postdata TYPE cnht_post_data_tab - it_query_table TYPE cnht_query_table - RETURNING VALUE(rv_state) TYPE i + IMPORTING iv_action TYPE clike + iv_getdata TYPE clike OPTIONAL + it_postdata TYPE cnht_post_data_tab OPTIONAL + EXPORTING ei_page TYPE REF TO lif_gui_page + ev_state TYPE i RAISING lcx_exception. METHODS render @@ -30,6 +29,11 @@ CLASS lcl_gui_page_super DEFINITION ABSTRACT. INTERFACES lif_gui_page ABSTRACT METHODS render. PROTECTED SECTION. + METHODS render_repo_top + IMPORTING io_repo TYPE REF TO lcl_repo + RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper + RAISING lcx_exception. + METHODS header IMPORTING io_include_style TYPE REF TO lcl_html_helper OPTIONAL RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. @@ -54,6 +58,45 @@ ENDCLASS. CLASS lcl_gui_page_super IMPLEMENTATION. + METHOD render_repo_top. + + DATA: lo_repo_online TYPE REF TO lcl_repo_online, + lv_icon TYPE string. + + + CREATE OBJECT ro_html. + + IF io_repo->is_offline( ) = abap_true. + lv_icon = 'img/repo_offline' ##NO_TEXT. + ELSE. + lv_icon = 'img/repo_online' ##NO_TEXT. + ENDIF. + + ro_html->add( || ). + ro_html->add( '' ). + + ro_html->add( '' ). + + ro_html->add( '' ). + ro_html->add( '
' ). + ro_html->add( || ). + ro_html->add( |{ io_repo->get_name( ) }| ). + ro_html->add( '' ). + ro_html->add( '' ). + ro_html->add( |{ io_repo->get_package( ) }| ). + + IF io_repo->is_offline( ) = abap_false. + lo_repo_online ?= io_repo. + ro_html->add( '' ). + ro_html->add( |{ lo_repo_online->get_branch_name( ) }| ). + ro_html->add( '' ). + ro_html->add( || ). + ENDIF. + + ro_html->add( '
' ). + + ENDMETHOD. + METHOD header. CREATE OBJECT ro_html. @@ -160,7 +203,7 @@ CLASS lcl_gui_page_super IMPLEMENTATION. _add 'table { border-collapse: collapse; }'. _add 'pre { display: inline; }'. - _add 'form input, textarea {'. + _add 'form input, textarea, select {'. _add ' border: 1px solid #DDD;'. _add ' padding: 3px 6px;'. _add '}'. @@ -252,6 +295,39 @@ CLASS lcl_gui_page_super IMPLEMENTATION. _add '.dropdown:hover .dropdown_content { display: block; }'. _add '.dropdown:hover .dropbtn { color: #79a0d2; }'. + _add '/* REPOSITORY */'. + _add 'div.repo {'. + _add ' margin-top: 3px;'. + _add ' background-color: #f2f2f2;'. + _add ' padding: 0.5em 1em 0.5em 1em;'. + _add '}'. + _add '.repo_name span {'. + _add ' font-weight: bold;'. + _add ' color: #333;'. + _add ' font-size: 14pt;'. + _add '}'. + _add '.repo_name img {'. + _add ' vertical-align: baseline;'. + _add ' margin: 0 5px 0 5px;'. + _add '}'. + _add '.repo_attr {'. + _add ' color: grey;'. + _add ' font-size: 12pt;'. + _add '}'. + _add '.repo_attr span {'. + _add ' margin-left: 0.2em;'. + _add ' margin-right: 0.5em;'. + _add '}'. + _add '.repo_attr input {'. + _add ' color: grey;'. " Input wants it personaly + _add ' font-size: 12pt;'. " Input wants it personaly + _add ' margin-left: 0.5em;'. + _add ' margin-right: 0.5em;'. + _add ' background-color: transparent;'. + _add ' border-style: none;'. + _add ' text-overflow: ellipsis;'. + _add '}'. + " Other and outdated (?) styles _add '/* MISC AND REFACTOR */'. _add 'a.grey:link {color: grey; font-size: smaller;}'. @@ -372,7 +448,7 @@ CLASS lcl_gui_page_super IMPLEMENTATION. ENDMETHOD. "lif_gui_page~get_assets METHOD lif_gui_page~on_event. - rv_state = gc_event_state-not_handled. + ev_state = gc_event_state-not_handled. ENDMETHOD. "lif_gui_page~on_event ENDCLASS. \ No newline at end of file diff --git a/src/zabapgit_page_branch_overview.prog.abap b/src/zabapgit_page_branch_overview.prog.abap index 9ee880ece..11e8dfdcc 100644 --- a/src/zabapgit_page_branch_overview.prog.abap +++ b/src/zabapgit_page_branch_overview.prog.abap @@ -36,6 +36,9 @@ CLASS lcl_branch_overview DEFINITION FINAL. RETURNING VALUE(rt_commits) TYPE ty_commit_tt RAISING lcx_exception. + CLASS-METHODS: get_branches + RETURNING VALUE(rt_branches) TYPE lcl_git_transport=>ty_branch_list_tt. + PRIVATE SECTION. CLASS-METHODS: @@ -61,18 +64,12 @@ ENDCLASS. CLASS lcl_branch_overview IMPLEMENTATION. + METHOD get_branches. + rt_branches = gt_branches. + ENDMETHOD. + METHOD compress. - DATA: lv_previous TYPE i, - lv_index TYPE i, - lv_name TYPE string, - lt_temp LIKE it_commits. - - FIELD-SYMBOLS: LIKE LINE OF gt_branches, - LIKE LINE OF rt_commits, - LIKE LINE OF lt_temp, - LIKE LINE OF it_commits. - DEFINE _compress. IF lines( lt_temp ) >= 10. READ TABLE lt_temp ASSIGNING INDEX 1. @@ -87,6 +84,16 @@ CLASS lcl_branch_overview IMPLEMENTATION. ENDIF. END-OF-DEFINITION. + DATA: lv_previous TYPE i, + lv_index TYPE i, + lv_name TYPE string, + lt_temp LIKE it_commits. + + FIELD-SYMBOLS: LIKE LINE OF gt_branches, + LIKE LINE OF rt_commits, + LIKE LINE OF lt_temp, + LIKE LINE OF it_commits. + LOOP AT gt_branches ASSIGNING . @@ -303,24 +310,44 @@ CLASS lcl_gui_page_branch_overview DEFINITION FINAL INHERITING FROM lcl_gui_page PUBLIC SECTION. METHODS: constructor - IMPORTING io_repo TYPE REF TO lcl_repo_online, + IMPORTING io_repo TYPE REF TO lcl_repo_online + RAISING lcx_exception, lif_gui_page~on_event REDEFINITION, lif_gui_page~render REDEFINITION. PRIVATE SECTION. DATA: mo_repo TYPE REF TO lcl_repo_online, - mv_compress TYPE abap_bool VALUE abap_false. + mv_compress TYPE abap_bool VALUE abap_false, + mt_commits TYPE lcl_branch_overview=>ty_commit_tt. CONSTANTS: BEGIN OF c_actions, uncompress TYPE string VALUE 'uncompress' ##NO_TEXT, compress TYPE string VALUE 'compress' ##NO_TEXT, refresh TYPE string VALUE 'refresh' ##NO_TEXT, + merge TYPE string VALUE 'merge' ##NO_TEXT, END OF c_actions. + TYPES: BEGIN OF ty_merge, + source TYPE string, + target TYPE string, + END OF ty_merge. + METHODS: + refresh + RAISING lcx_exception, body RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper RAISING lcx_exception, + form_select + IMPORTING iv_name TYPE string + RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper, + render_merge + RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper + RAISING lcx_exception, + decode_merge + IMPORTING it_postdata TYPE cnht_post_data_tab + RETURNING VALUE(rs_merge) TYPE ty_merge + RAISING lcx_exception, build_menu RETURNING VALUE(ro_menu) TYPE REF TO lcl_html_toolbar, escape_branch @@ -340,6 +367,16 @@ CLASS lcl_gui_page_branch_overview IMPLEMENTATION. METHOD constructor. super->constructor( ). mo_repo = io_repo. + refresh( ). + ENDMETHOD. + + METHOD refresh. + + mt_commits = lcl_branch_overview=>run( mo_repo ). + IF mv_compress = abap_true. + mt_commits = lcl_branch_overview=>compress( mt_commits ). + ENDIF. + ENDMETHOD. METHOD get_script. @@ -373,17 +410,54 @@ CLASS lcl_gui_page_branch_overview IMPLEMENTATION. ENDMETHOD. + METHOD form_select. + + DATA: lv_name TYPE string, + lt_branches TYPE lcl_git_transport=>ty_branch_list_tt. + + FIELD-SYMBOLS: LIKE LINE OF lt_branches. + + + CREATE OBJECT ro_html. + + lt_branches = lcl_branch_overview=>get_branches( ). + + ro_html->add( |' ). + + ENDMETHOD. + + METHOD render_merge. + + CREATE OBJECT ro_html. + + ro_html->add( '
' ). + ro_html->add( 'Merge' ). + ro_html->add( form_select( 'source' ) ). + ro_html->add( 'into' ). + ro_html->add( form_select( 'target' ) ). + ro_html->add( '' ). + ro_html->add( '
' ). + + ENDMETHOD. + METHOD body. - DATA: lt_commits TYPE lcl_branch_overview=>ty_commit_tt. - - FIELD-SYMBOLS: LIKE LINE OF lt_commits, + FIELD-SYMBOLS: LIKE LINE OF mt_commits, LIKE LINE OF -create. CREATE OBJECT ro_html. - ro_html->add( |Repository: { mo_repo->get_url( ) }
| ). + ro_html->add( render_repo_top( mo_repo ) ). + ro_html->add( '
' ). + ro_html->add( '
' ). + + ro_html->add( render_merge( ) ). * see http://stackoverflow.com/questions/6081483/maximum-size-of-a-canvas-element _add ''. @@ -396,10 +470,7 @@ CLASS lcl_gui_page_branch_overview IMPLEMENTATION. * when above issue is fixed ro_html->add( get_script( ) ). _add ''. - - _add '