diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 5f8225765..d4288382e 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -60,7 +60,7 @@ INCLUDE zabapgit_sap_package. CLASS lcl_repo_online DEFINITION DEFERRED. INCLUDE zabapgit_stage. INCLUDE zabapgit_repo. -INCLUDE zabapgit_stage_impl. +INCLUDE zabapgit_stage_logic. INCLUDE zabapgit_git. INCLUDE zabapgit_objects. INCLUDE zabapgit_tadir. @@ -72,9 +72,11 @@ INCLUDE zabapgit_background. INCLUDE zabapgit_zip. INCLUDE zabapgit_transport. INCLUDE zabapgit_page. +INCLUDE zabapgit_page_commit. INCLUDE zabapgit_page_merge. INCLUDE zabapgit_page_branch_overview. -INCLUDE zabapgit_page_commit. +INCLUDE zabapgit_page_stage. +INCLUDE zabapgit_page_db. INCLUDE zabapgit_gui. INCLUDE zabapgit_app_impl. INCLUDE zabapgit_unit_test. diff --git a/src/zabapgit_background.prog.abap b/src/zabapgit_background.prog.abap index f49a9668c..7dbf45f6f 100644 --- a/src/zabapgit_background.prog.abap +++ b/src/zabapgit_background.prog.abap @@ -20,7 +20,7 @@ CLASS lcl_background IMPLEMENTATION. METHOD push. DATA: ls_comment TYPE ty_comment, - ls_files TYPE lcl_stage_logic=>ty_stage_files, + ls_files TYPE ty_stage_files, lo_stage TYPE REF TO lcl_stage. FIELD-SYMBOLS: LIKE LINE OF ls_files-local. @@ -36,12 +36,16 @@ CLASS lcl_background IMPLEMENTATION. ls_comment-email = 'foo@bar.com' ##NO_TEXT. ls_comment-comment = 'background mode' ##NO_TEXT. - lo_stage = lcl_app=>repo_srv( )->get_stage( io_repo->get_key( ) ). + CREATE OBJECT lo_stage + EXPORTING + iv_branch_name = io_repo->get_branch_name( ) + iv_branch_sha1 = io_repo->get_sha1_remote( ). LOOP AT ls_files-local ASSIGNING . WRITE: / 'stage', -file-path, -file-filename ##NO_TEXT. lo_stage->add( iv_path = -file-path - iv_filename = -file-filename ). + iv_filename = -file-filename + iv_data = -file-data ). ENDLOOP. io_repo->push( is_comment = ls_comment diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index 752ec74b5..ab14d3f0b 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -54,6 +54,11 @@ TYPES: BEGIN OF ty_repo_file, END OF ty_repo_file. TYPES tt_repo_files TYPE STANDARD TABLE OF ty_repo_file WITH DEFAULT KEY. +TYPES: BEGIN OF ty_stage_files, + local TYPE ty_files_item_tt, + remote TYPE ty_files_tt, + END OF ty_stage_files. + CONSTANTS: BEGIN OF gc_type, commit TYPE ty_type VALUE 'commit', "#EC NOTEXT tree TYPE ty_type VALUE 'tree', "#EC NOTEXT diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap index 978122357..8136f9147 100644 --- a/src/zabapgit_git.prog.abap +++ b/src/zabapgit_git.prog.abap @@ -29,7 +29,7 @@ CLASS lcl_git_transport DEFINITION FINAL. * local to remote CLASS-METHODS receive_pack - IMPORTING io_repo TYPE REF TO lcl_repo_online + IMPORTING iv_url TYPE string iv_old TYPE ty_sha1 iv_new TYPE ty_sha1 iv_branch_name TYPE string @@ -64,10 +64,11 @@ CLASS lcl_git_transport DEFINITION FINAL. RAISING lcx_exception. CLASS-METHODS find_branch - IMPORTING io_repo TYPE REF TO lcl_repo_online - iv_service TYPE string - EXPORTING ei_client TYPE REF TO if_http_client - ev_branch TYPE ty_sha1 + IMPORTING iv_url TYPE string + iv_service TYPE string + iv_branch_name TYPE string + EXPORTING ei_client TYPE REF TO if_http_client + ev_branch TYPE ty_sha1 RAISING lcx_exception. CLASS-METHODS parse @@ -86,7 +87,7 @@ CLASS lcl_git_transport DEFINITION FINAL. RAISING lcx_exception. CLASS-METHODS set_headers - IMPORTING io_repo TYPE REF TO lcl_repo_online + IMPORTING iv_url TYPE string iv_service TYPE string ii_client TYPE REF TO if_http_client RAISING lcx_exception. @@ -214,7 +215,7 @@ CLASS lcl_git_transport IMPLEMENTATION. name = '~request_method' value = 'POST' ). - lv_value = lcl_url=>path_name( io_repo->get_url( ) ) && + lv_value = lcl_url=>path_name( iv_url ) && '.git/git-' && iv_service && '-pack'. @@ -326,23 +327,25 @@ CLASS lcl_git_transport IMPLEMENTATION. branch_list( EXPORTING - iv_url = io_repo->get_url( ) + iv_url = iv_url iv_service = iv_service IMPORTING ei_client = ei_client et_branch_list = lt_branch_list ). - IF io_repo->get_branch_name( ) IS INITIAL. - _raise 'branch empty'. - ENDIF. + IF ev_branch IS SUPPLIED. + IF iv_branch_name IS INITIAL. + _raise 'branch empty'. + ENDIF. - READ TABLE lt_branch_list INTO ls_branch_list - WITH KEY name = io_repo->get_branch_name( ). - IF sy-subrc <> 0. - _raise 'Branch not found'. - ENDIF. + READ TABLE lt_branch_list INTO ls_branch_list + WITH KEY name = iv_branch_name. + IF sy-subrc <> 0. + _raise 'Branch not found'. + ENDIF. - ev_branch = ls_branch_list-sha1. + ev_branch = ls_branch_list-sha1. + ENDIF. ENDMETHOD. "find_branch @@ -445,13 +448,14 @@ CLASS lcl_git_transport IMPLEMENTATION. find_branch( EXPORTING - io_repo = io_repo - iv_service = c_service-receive + iv_url = iv_url + iv_service = c_service-receive + iv_branch_name = iv_branch_name IMPORTING - ei_client = li_client ). + ei_client = li_client ). set_headers( - io_repo = io_repo + iv_url = iv_url iv_service = c_service-receive ii_client = li_client ). @@ -576,11 +580,12 @@ CLASS lcl_git_transport IMPLEMENTATION. find_branch( EXPORTING - io_repo = io_repo - iv_service = c_service-upload + iv_url = io_repo->get_url( ) + iv_service = c_service-upload + iv_branch_name = io_repo->get_branch_name( ) IMPORTING - ei_client = li_client - ev_branch = ev_branch ). + ei_client = li_client + ev_branch = ev_branch ). IF it_branches IS INITIAL. APPEND INITIAL LINE TO lt_branches ASSIGNING . @@ -589,7 +594,7 @@ CLASS lcl_git_transport IMPLEMENTATION. lt_branches = it_branches. ENDIF. - set_headers( io_repo = io_repo + set_headers( iv_url = io_repo->get_url( ) iv_service = c_service-upload ii_client = li_client ). @@ -818,15 +823,24 @@ CLASS lcl_git_pack IMPLEMENTATION. lv_tree_lower = is_commit-tree. TRANSLATE lv_tree_lower TO LOWER CASE. - lv_parent_lower = is_commit-parent. - TRANSLATE lv_parent_lower TO LOWER CASE. - lv_string = ''. CONCATENATE 'tree' lv_tree_lower INTO lv_tmp SEPARATED BY space. "#EC NOTEXT CONCATENATE lv_string lv_tmp gc_newline INTO lv_string. IF NOT is_commit-parent IS INITIAL. + lv_parent_lower = is_commit-parent. + TRANSLATE lv_parent_lower TO LOWER CASE. + + CONCATENATE 'parent' lv_parent_lower + INTO lv_tmp SEPARATED BY space. "#EC NOTEXT + CONCATENATE lv_string lv_tmp gc_newline INTO lv_string. + ENDIF. + + IF NOT is_commit-parent2 IS INITIAL. + lv_parent_lower = is_commit-parent2. + TRANSLATE lv_parent_lower TO LOWER CASE. + CONCATENATE 'parent' lv_parent_lower INTO lv_tmp SEPARATED BY space. "#EC NOTEXT CONCATENATE lv_string lv_tmp gc_newline INTO lv_string. @@ -1404,7 +1418,7 @@ CLASS lcl_git_porcelain DEFINITION FINAL FRIENDS ltcl_git_porcelain. io_repo TYPE REF TO lcl_repo_online it_trees TYPE ty_trees_tt it_blobs TYPE ty_files_tt - iv_branch TYPE ty_sha1 + io_stage TYPE REF TO lcl_stage RETURNING VALUE(rv_branch) TYPE ty_sha1 RAISING lcx_exception. @@ -1437,7 +1451,8 @@ CLASS lcl_git_porcelain IMPLEMENTATION. * new commit ls_commit-tree = -sha1. - ls_commit-parent = iv_branch. + ls_commit-parent = io_stage->get_branch_sha1( ). + ls_commit-parent2 = io_stage->get_merge_source( ). CONCATENATE is_comment-username space '<' is_comment-email '>' space lv_time INTO ls_commit-author RESPECTING BLANKS. ls_commit-committer = ls_commit-author. @@ -1462,6 +1477,7 @@ CLASS lcl_git_porcelain IMPLEMENTATION. CLEAR ls_object. ls_object-sha1 = lcl_hash=>sha1( iv_type = gc_type-blob iv_data = -data ). ls_object-type = gc_type-blob. + ASSERT NOT -data IS INITIAL. ls_object-data = -data. APPEND ls_object TO lt_objects. ENDLOOP. @@ -1473,10 +1489,10 @@ CLASS lcl_git_porcelain IMPLEMENTATION. iv_data = lv_commit ). lcl_git_transport=>receive_pack( - io_repo = io_repo - iv_old = io_repo->get_sha1_local( ) + iv_url = io_repo->get_url( ) + iv_old = io_stage->get_branch_sha1( ) iv_new = rv_branch - iv_branch_name = io_repo->get_branch_name( ) + iv_branch_name = io_stage->get_branch_name( ) iv_pack = lv_pack ). ENDMETHOD. "receive_pack @@ -1495,7 +1511,7 @@ CLASS lcl_git_porcelain IMPLEMENTATION. lv_pack = lcl_git_pack=>encode( lt_objects ). lcl_git_transport=>receive_pack( - io_repo = io_repo + iv_url = io_repo->get_url( ) iv_old = lv_zero iv_new = iv_from iv_branch_name = iv_name @@ -1509,14 +1525,30 @@ CLASS lcl_git_porcelain IMPLEMENTATION. lt_blobs TYPE ty_files_tt, lv_sha1 TYPE ty_sha1, lt_trees TYPE ty_trees_tt, + lt_objects TYPE ty_objects_tt, + lt_branches TYPE lcl_git_transport=>ty_branch_list_tt, lt_stage TYPE lcl_stage=>ty_stage_tt. - FIELD-SYMBOLS: LIKE LINE OF lt_stage, - LIKE LINE OF lt_expanded. + FIELD-SYMBOLS: LIKE LINE OF lt_stage, + LIKE LINE OF lt_branches, + LIKE LINE OF lt_expanded. - lt_expanded = full_tree( it_objects = io_repo->get_objects( ) - iv_branch = io_repo->get_sha1_remote( ) ). + IF io_stage->get_branch_sha1( ) = io_repo->get_sha1_remote( ). +* objects cached in io_repo can be used, if pushing to the branch configured in repo + lt_objects = io_repo->get_objects( ). + ELSE. + APPEND INITIAL LINE TO lt_branches ASSIGNING . + -name = io_stage->get_branch_name( ). + -sha1 = io_stage->get_branch_sha1( ). + + lcl_git_transport=>upload_pack( EXPORTING io_repo = io_repo + it_branches = lt_branches + IMPORTING et_objects = lt_objects ). + ENDIF. + + lt_expanded = full_tree( it_objects = lt_objects + iv_branch = io_stage->get_branch_sha1( ) ). lt_stage = io_stage->get_all( ). LOOP AT lt_stage ASSIGNING . @@ -1534,7 +1566,8 @@ CLASS lcl_git_porcelain IMPLEMENTATION. -chmod = gc_chmod-file. ENDIF. - lv_sha1 = lcl_hash=>sha1( iv_type = gc_type-blob iv_data = -file-data ). + lv_sha1 = lcl_hash=>sha1( iv_type = gc_type-blob + iv_data = -file-data ). IF -sha1 <> lv_sha1. -sha1 = lv_sha1. ENDIF. @@ -1554,7 +1587,7 @@ CLASS lcl_git_porcelain IMPLEMENTATION. io_repo = io_repo it_trees = lt_trees it_blobs = lt_blobs - iv_branch = io_repo->get_sha1_remote( ) ). + io_stage = io_stage ). ENDMETHOD. "push diff --git a/src/zabapgit_gui.prog.abap b/src/zabapgit_gui.prog.abap index 9ce52a292..96ff99c53 100644 --- a/src/zabapgit_gui.prog.abap +++ b/src/zabapgit_gui.prog.abap @@ -52,11 +52,6 @@ CLASS lcl_gui_router DEFINITION FINAL. RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page RAISING lcx_exception. - METHODS get_page_commit - IMPORTING iv_getdata TYPE clike - RETURNING VALUE(ri_page) TYPE REF TO lif_gui_page - RAISING lcx_exception. - METHODS get_page_db_by_name IMPORTING iv_name TYPE clike iv_getdata TYPE clike @@ -113,15 +108,6 @@ CLASS lcl_gui_router DEFINITION FINAL. IMPORTING it_postdata TYPE cnht_post_data_tab RAISING lcx_exception. - METHODS commit_push - IMPORTING it_postdata TYPE cnht_post_data_tab - RAISING lcx_exception. - - METHODS stage_handle_action - IMPORTING iv_getdata TYPE clike - iv_action TYPE clike - RAISING lcx_exception. - ENDCLASS. *----------------------------------------------------------------------* @@ -909,11 +895,11 @@ CLASS lcl_gui_page_background IMPLEMENTATION. CLEAR lv_nothing. CASE ls_per-method. WHEN lcl_persistence_background=>c_method-push. - lv_push = ' checked'. + lv_push = ' checked' ##NO_TEXT. WHEN lcl_persistence_background=>c_method-pull. - lv_pull = ' checked'. + lv_pull = ' checked' ##NO_TEXT. WHEN OTHERS. - lv_nothing = ' checked'. + lv_nothing = ' checked' ##NO_TEXT. ENDCASE. ro_html->add( '

' && lo_online->get_name( ) && '

' ). @@ -972,197 +958,6 @@ CLASS lcl_gui_page_background IMPLEMENTATION. ENDCLASS. -CLASS lcl_gui_page_stage DEFINITION FINAL INHERITING FROM lcl_gui_page_super. - - PUBLIC SECTION. - METHODS constructor - IMPORTING io_repo TYPE REF TO lcl_repo_online - 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_lines - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. - - METHODS render_menu - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. - - METHODS styles - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. - -ENDCLASS. - -CLASS lcl_gui_page_stage IMPLEMENTATION. - - METHOD constructor. - - super->constructor( ). - mo_repo = io_repo. - mo_stage = lcl_app=>repo_srv( )->get_stage( iv_repo_key = mo_repo->get_key( ) - iv_new = abap_true ). - ENDMETHOD. - - METHOD render_lines. - - DATA: lv_method TYPE lcl_stage=>ty_method, - lv_param TYPE string, - lv_status TYPE string, - lo_toolbar TYPE REF TO lcl_html_toolbar. - - FIELD-SYMBOLS: LIKE LINE OF mo_stage->mt_workarea. - - CREATE OBJECT ro_html. - CREATE OBJECT lo_toolbar. - - LOOP AT mo_stage->mt_workarea ASSIGNING . - - AT NEW type. " Local/remote header line - IF sy-tabix = 1. - ro_html->add(''). - ELSE. - ro_html->add(''). - ENDIF. - IF -type = lcl_stage=>c_wftype-local. - ro_html->add( 'LOCAL' ) ##NO_TEXT. - ELSE. "c_remote - ro_html->add( 'REMOTE' ) ##NO_TEXT. - ENDIF. - ro_html->add(''). - ENDAT. - - lv_method = mo_stage->lookup( iv_path = -file-path - iv_filename = -file-filename ). - lv_param = lcl_html_action_utils=>file_encode( iv_key = mo_repo->get_key( ) - ig_file = -file ). - - lo_toolbar->reset( ). " Build line actions - IF -type = lcl_stage=>c_wftype-local. - IF lv_method IS NOT INITIAL. - lo_toolbar->add( iv_txt = 'reset' - iv_act = 'stage_reset?' && lv_param ) ##NO_TEXT. - ELSE. - lo_toolbar->add( iv_txt = 'add' - iv_act = 'stage_add?' && lv_param ) ##NO_TEXT. - ENDIF. - ELSE. "c_remote - IF lv_method IS NOT INITIAL. - lo_toolbar->add( iv_txt = 'reset' iv_act = 'stage_reset?' && lv_param ). - ELSE. - lo_toolbar->add( iv_txt = 'ignore' iv_act = 'stage_ignore?' && lv_param ). - lo_toolbar->add( iv_txt = 'remove' iv_act = 'stage_rm?' && lv_param ). - ENDIF. - ENDIF. - - IF lv_method IS INITIAL. - lv_status = '?'. - ELSE. - lv_status = lv_method. - ENDIF. - - ro_html->add( '' ). - ro_html->add( |{ lv_status }| ). - ro_html->add( |{ -file-path && -file-filename }| ). - ro_html->add( '' ). - ro_html->add( lo_toolbar->render( iv_no_separator = abap_true ) ). - ro_html->add( '' ). - ro_html->add( '' ). - - ENDLOOP. - - ENDMETHOD. "render_lines - - METHOD lif_gui_page~render. - - CREATE OBJECT ro_html. - - ro_html->add( header( io_include_style = styles( ) ) ). - ro_html->add( title( 'STAGE' ) ). - - ro_html->add( '
' ). - ro_html->add( render_repo_top( mo_repo ) ). - ro_html->add( render_menu( ) ). - - ro_html->add( '' ). - ro_html->add( render_lines( ) ). - ro_html->add( '
' ). - - ro_html->add( '
' ). - ro_html->add( footer( ) ). - - ENDMETHOD. "lif_gui_page~render - - METHOD render_menu. - - DATA: lo_toolbar TYPE REF TO lcl_html_toolbar, - lv_action TYPE string. - - CREATE OBJECT ro_html. - CREATE OBJECT lo_toolbar. - - lv_action = lcl_html_action_utils=>repo_key_encode( mo_repo->get_key( ) ). - - IF mo_stage->count( ) > 0. - lo_toolbar->add( iv_act = |stage_commit?{ lv_action }| - iv_txt = 'Commit' - iv_opt = gc_html_opt-emphas ) ##NO_TEXT. - ELSEIF mo_stage->mv_local_cnt > 0. - lo_toolbar->add( iv_act = |stage_all?{ lv_action }| - iv_txt = 'Add all and commit') ##NO_TEXT. - ENDIF. - - ro_html->add( '
' ). - ro_html->add( lo_toolbar->render( ) ). - ro_html->add( '
' ). - - ENDMETHOD. "render_menu - - METHOD styles. - - CREATE OBJECT ro_html. - - _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.status {'. - _add ' width: 2em;'. - _add ' text-align: center;'. - _add '}'. - _add '.stage_tab tr.separator td {'. - _add ' color: #BBB;'. - _add ' font-size: 10pt;'. - _add ' background-color: #edf2f9;'. - _add ' padding: 4px 0.5em;'. - _add '}'. - _add '.stage_tab tr.firstrow td { border-top: 0px; } '. - - ENDMETHOD. "styles - -ENDCLASS. - -CLASS lcl_gui_page_db DEFINITION FINAL INHERITING FROM lcl_gui_page_super. - - PUBLIC SECTION. - METHODS lif_gui_page~render REDEFINITION. - - PRIVATE SECTION. - METHODS styles - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. - -ENDCLASS. - CLASS lcl_gui_page_main IMPLEMENTATION. METHOD render_obj_jump_link. @@ -1455,10 +1250,10 @@ CLASS lcl_gui_page_main IMPLEMENTATION. CREATE OBJECT ro_html. IF is_item-is_first = abap_true. " TR class - lv_trclass = 'firstrow'. + lv_trclass = 'firstrow' ##NO_TEXT. ENDIF. IF is_item-obj_name IS INITIAL. - lv_trclass = lv_trclass && ' unsupported'. + lv_trclass = lv_trclass && ' unsupported' ##NO_TEXT. ENDIF. IF lv_trclass IS NOT INITIAL. SHIFT lv_trclass LEFT DELETING LEADING space. @@ -1727,318 +1522,6 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ENDCLASS. -CLASS lcl_gui_page_db_display DEFINITION FINAL INHERITING FROM lcl_gui_page_super. - - PUBLIC SECTION. - METHODS lif_gui_page~render REDEFINITION. - - METHODS: constructor - IMPORTING is_key TYPE lcl_persistence_db=>ty_content. - - PRIVATE SECTION. - DATA: ms_key TYPE lcl_persistence_db=>ty_content. - - METHODS styles - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. - -ENDCLASS. - -CLASS lcl_gui_page_db_display IMPLEMENTATION. - - METHOD constructor. - super->constructor( ). - ms_key = is_key. - ENDMETHOD. - - METHOD lif_gui_page~render. - - DATA: lv_data TYPE lcl_persistence_db=>ty_content-data_str. - - TRY. - lv_data = lcl_app=>db( )->read( - iv_type = ms_key-type - iv_value = ms_key-value ). - CATCH lcx_not_found ##NO_HANDLER. - ENDTRY. - - lv_data = lcl_xml_pretty=>print( lv_data ). - - lv_data = escape( val = lv_data - format = cl_abap_format=>e_html_attr ). - - CREATE OBJECT ro_html. - ro_html->add( header( io_include_style = styles( ) ) ). - ro_html->add( title( 'CONFIG DISPLAY' ) ). - - ro_html->add( '
' ). - ro_html->add( || && - |
Type:{ ms_key-type }
| ). - ro_html->add( || && - |
Value:{ ms_key-value }
| ). - ro_html->add( |
{ lv_data }
| ). - ro_html->add( '
' ). - - ro_html->add( footer( ) ). - - ENDMETHOD. - - METHOD styles. - - CREATE OBJECT ro_html. - - _add '/* DB ENTRY DISPLAY */'. - _add 'div.db_entry {'. - _add ' background-color: #f2f2f2;'. - _add ' padding: 0.5em;'. - _add '}'. - - _add 'div.db_entry pre {'. - _add ' display: block;'. - _add ' overflow: hidden;'. - _add ' word-wrap:break-word;'. - _add ' white-space: pre-wrap;'. - _add ' background-color: #eaeaea;'. - _add ' padding: 0.5em;'. - _add ' width: 50em;'. - _add '}'. - - _add 'table.tag {'. - _add ' display: inline-block;'. - _add ' border: 1px #b3c1cc solid;'. - _add ' background-color: #eee;'. - _add ' margin-right: 0.5em; '. - _add '}'. - _add 'table.tag td { padding: 0.2em 0.5em; }'. - _add 'table.tag td.label { background-color: #b3c1cc; }'. - - ENDMETHOD. "styles - -ENDCLASS. - -CLASS lcl_gui_page_db_edit DEFINITION FINAL INHERITING FROM lcl_gui_page_super. - - PUBLIC SECTION. - METHODS lif_gui_page~render REDEFINITION. - - METHODS: constructor - IMPORTING is_key TYPE lcl_persistence_db=>ty_content. - - PRIVATE SECTION. - DATA: ms_key TYPE lcl_persistence_db=>ty_content. - - 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_db_edit IMPLEMENTATION. - - METHOD constructor. - super->constructor( ). - ms_key = is_key. - ENDMETHOD. - - METHOD lif_gui_page~render. - - DATA: lv_data TYPE lcl_persistence_db=>ty_content-data_str, - lo_toolbar TYPE REF TO lcl_html_toolbar. - - TRY. - lv_data = lcl_app=>db( )->read( - iv_type = ms_key-type - iv_value = ms_key-value ). - CATCH lcx_not_found ##NO_HANDLER. - ENDTRY. - - lcl_app=>db( )->lock( - iv_type = ms_key-type - iv_value = ms_key-value ). - - lv_data = lcl_xml_pretty=>print( lv_data ). - - lv_data = escape( val = lv_data - format = cl_abap_format=>e_html_attr ). - - CREATE OBJECT ro_html. - CREATE OBJECT lo_toolbar. - - ro_html->add( header( io_include_style = styles( ) ) ). - ro_html->add( title( 'CONFIG EDIT' ) ). - - ro_html->add( '
' ). - - " Banners - ro_html->add( || && - |
Type:{ ms_key-type }
| ). - ro_html->add( || && - |
Value:{ ms_key-value }
| ). - - " Form - ro_html->add( '
' ). - ro_html->add( || ). - ro_html->add( || ). - ro_html->add( || ). - ro_html->add( '
' ). - - " Menu - lo_toolbar->add( iv_act = 'submitDBForm();' - iv_txt = 'Save' - iv_typ = gc_action_type-onclick - iv_opt = gc_html_opt-emphas ) ##NO_TEXT. - - ro_html->add( '
' ). - ro_html->add( lo_toolbar->render( ) ). - ro_html->add( '
' ). - - ro_html->add( '
' ). "db_entry - - ro_html->add( footer( io_include_script = scripts( ) ) ). - - ENDMETHOD. - - METHOD styles. - - CREATE OBJECT ro_html. - - _add '/* DB ENTRY DISPLAY */'. - _add 'div.db_entry {'. - _add ' background-color: #f2f2f2;'. - _add ' padding: 0.5em;'. - _add '}'. - _add 'div.db_entry textarea { margin: 0.5em 0em; }'. - _add 'table.tag {'. - _add ' display: inline-block;'. - _add ' border: 1px #b3c1cc solid;'. - _add ' background-color: #eee;'. - _add ' margin-right: 0.5em; '. - _add '}'. - _add 'table.tag td { padding: 0.2em 0.5em; }'. - _add 'table.tag td.label { background-color: #b3c1cc; }'. - - ENDMETHOD. "styles - - METHOD scripts. - - CREATE OBJECT ro_html. - - _add 'function submitDBForm() {'. - _add ' document.getElementById("db_form").submit();'. - _add '}'. - - ENDMETHOD. "scripts - -ENDCLASS. - -CLASS lcl_gui_page_db IMPLEMENTATION. - - METHOD lif_gui_page~render. - - DATA: lt_data TYPE lcl_persistence_db=>tt_content, - lv_escaped TYPE string, - lv_action TYPE string, - lv_trclass TYPE string, - lo_toolbar TYPE REF TO lcl_html_toolbar. - - FIELD-SYMBOLS: LIKE LINE OF lt_data. - - - lt_data = lcl_app=>db( )->list( ). - - CREATE OBJECT ro_html. - - ro_html->add( header( io_include_style = styles( ) ) ). - ro_html->add( title( 'DATABASE PERSISTENCY' ) ). - - ro_html->add( '
' ). - ro_html->add( '' ). - - " Header - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - - " Lines - LOOP AT lt_data ASSIGNING . - CLEAR lv_trclass. - IF sy-tabix = 1. - lv_trclass = ' class="firstrow"'. - ENDIF. - - IF strlen( -data_str ) >= 250. - lv_escaped = escape( val = -data_str(250) - format = cl_abap_format=>e_html_attr ). - ELSE. - lv_escaped = escape( val = -data_str - format = cl_abap_format=>e_html_attr ). - ENDIF. - - lv_action = lcl_html_action_utils=>dbkey_encode( ). - - CREATE OBJECT lo_toolbar. - lo_toolbar->add( iv_txt = 'Display' iv_act = |db_display?{ lv_action }| ). - lo_toolbar->add( iv_txt = 'Edit' iv_act = |db_edit?{ lv_action }| ). - lo_toolbar->add( iv_txt = 'Delete' iv_act = |db_delete?{ lv_action }| ). - - ro_html->add( || ). - ro_html->add( || ). - ro_html->add( || ). - ro_html->add( || ). - ro_html->add( '' ). - ro_html->add( '' ). - ENDLOOP. - - ro_html->add( '
TypeValueData
{ -type }{ -value }
{ lv_escaped }
' ). - ro_html->add( lo_toolbar->render( iv_vertical = abap_true ) ). - ro_html->add( '
' ). - ro_html->add( '
' ). - - ro_html->add( footer( ) ). - - ENDMETHOD. "lif_gui_page~render - - METHOD styles. - - CREATE OBJECT ro_html. - - _add '/* DB ENTRIES */'. - _add 'div.db_list {'. - _add ' background-color: #f2f2f2;'. - _add ' padding: 0.5em;'. - _add '}'. - _add 'table.db_tab pre {'. - _add ' display: block;'. - _add ' overflow: hidden;'. - _add ' word-wrap:break-word;'. - _add ' white-space: pre-wrap;'. - _add ' background-color: #eaeaea;'. - _add ' padding: 3px;'. - _add ' width: 50em;'. - _add '}'. - _add 'table.db_tab tr.firstrow td { padding-top: 0.5em; }'. - _add 'table.db_tab th {'. - _add ' text-align: left;'. - _add ' color: #888;'. - _add ' padding: 0.2em;'. - _add ' border-bottom: 1px #ddd solid;'. - _add '}'. - _add 'table.db_tab td {'. - _add ' color: #333;'. - _add ' padding: 0.2em;'. - _add ' vertical-align: top;'. - _add '}'. - - ENDMETHOD. "styles - -ENDCLASS. - - *----------------------------------------------------------------------* * CLASS lcl_gui_router IMPLEMENTATION *----------------------------------------------------------------------* @@ -2174,26 +1657,6 @@ CLASS lcl_gui_router IMPLEMENTATION. WHEN 'branch_overview'. ei_page = get_page_branch_overview( iv_getdata ). ev_state = gc_event_state-new_page. - - " Stage - WHEN 'stage_commit'. - ei_page = get_page_commit( iv_getdata ). - ev_state = gc_event_state-new_page. - WHEN 'stage_all'. - stage_handle_action( iv_getdata = iv_getdata iv_action = iv_action ). - ei_page = get_page_commit( iv_getdata ). - ev_state = gc_event_state-new_page. - WHEN 'stage_add' OR 'stage_reset' OR 'stage_ignore' OR 'stage_rm'. - stage_handle_action( iv_getdata = iv_getdata iv_action = iv_action ). - ev_state = gc_event_state-re_render. - - " Commit - WHEN 'commit_post'. - commit_push( it_postdata ). - ev_state = gc_event_state-go_back_to_bookmark. - WHEN 'commit_cancel'. - ev_state = gc_event_state-go_back. - WHEN OTHERS. ev_state = gc_event_state-not_handled. ENDCASE. @@ -2881,98 +2344,4 @@ CLASS lcl_gui_router IMPLEMENTATION. ENDMETHOD. - METHOD commit_push. - - DATA: ls_fields TYPE lcl_html_action_utils=>ty_commit_fields, - ls_comment TYPE ty_comment, - lo_stage TYPE REF TO lcl_stage, - lo_repo TYPE REF TO lcl_repo_online, - lo_user TYPE REF TO lcl_persistence_user. - - ls_fields = lcl_html_action_utils=>parse_commit_request( it_postdata ). - - lo_user = lcl_app=>user( ). " TODO refactor - password manager - lo_user->set_username( ls_fields-username ). - lo_user->set_email( ls_fields-email ). - - IF ls_fields-username IS INITIAL. - _raise 'empty username'. - ENDIF. - IF ls_fields-email IS INITIAL. - _raise 'empty email'. - ENDIF. - IF ls_fields-comment IS INITIAL. - _raise 'empty comment'. - ENDIF. - - lo_repo ?= lcl_app=>repo_srv( )->get( ls_fields-repo_key ). - lo_stage = lcl_app=>repo_srv( )->get_stage( ls_fields-repo_key ). - ls_comment-username = ls_fields-username. - ls_comment-email = ls_fields-email. - ls_comment-comment = ls_fields-comment. - - IF NOT ls_fields-body IS INITIAL. - CONCATENATE ls_comment-comment gc_newline ls_fields-body - INTO ls_comment-comment. - ENDIF. - - lo_repo->push( is_comment = ls_comment - io_stage = lo_stage ). - - COMMIT WORK. - - ENDMETHOD. "commit_push - - METHOD get_page_commit. - - DATA: lo_commit_page TYPE REF TO lcl_gui_page_commit, - lv_key TYPE lcl_persistence_repo=>ty_repo-key. - - lv_key = lcl_html_action_utils=>repo_key_decode( iv_getdata ). - - CREATE OBJECT lo_commit_page - EXPORTING - iv_repo_key = lv_key. - - ri_page ?= lo_commit_page. - - ENDMETHOD. - - METHOD stage_handle_action. - - DATA: ls_file TYPE ty_file, - lo_stage TYPE REF TO lcl_stage, - lv_key TYPE lcl_persistence_repo=>ty_repo-key. - - FIELD-SYMBOLS: LIKE LINE OF lo_stage->mt_workarea. - - IF iv_action = 'stage_all'. - lv_key = lcl_html_action_utils=>repo_key_decode( iv_getdata ). - ELSE. - lcl_html_action_utils=>file_decode( EXPORTING iv_string = iv_getdata - IMPORTING ev_key = lv_key - eg_file = ls_file ). - ENDIF. - - lo_stage = lcl_app=>repo_srv( )->get_stage( lv_key ). - - CASE iv_action. - WHEN 'stage_add'. - lo_stage->add( iv_path = ls_file-path iv_filename = ls_file-filename ). - WHEN 'stage_all'. - LOOP AT lo_stage->mt_workarea ASSIGNING - WHERE type = lcl_stage=>c_wftype-local. - lo_stage->add( iv_path = -file-path - iv_filename = -file-filename ). - ENDLOOP. - WHEN 'stage_reset'. - lo_stage->reset( iv_path = ls_file-path iv_filename = ls_file-filename ). - WHEN 'stage_ignore'. - lo_stage->ignore( iv_path = ls_file-path iv_filename = ls_file-filename ). - WHEN 'stage_rm'. - lo_stage->rm( iv_path = ls_file-path iv_filename = ls_file-filename ). - ENDCASE. - - ENDMETHOD. "stage_handle_action - ENDCLASS. " lcl_gui_router \ No newline at end of file diff --git a/src/zabapgit_html.prog.abap b/src/zabapgit_html.prog.abap index 66438507e..66bd03288 100644 --- a/src/zabapgit_html.prog.abap +++ b/src/zabapgit_html.prog.abap @@ -54,10 +54,6 @@ CLASS lcl_html_action_utils DEFINITION FINAL. IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key RETURNING VALUE(rv_string) TYPE string. - CLASS-METHODS repo_key_decode - IMPORTING iv_string TYPE clike - RETURNING VALUE(rv_key) TYPE lcl_persistence_repo=>ty_repo-key. - ENDCLASS. "lcl_html_action_utils DEFINITION *----------------------------------------------------------------------* @@ -261,23 +257,6 @@ CLASS lcl_html_action_utils IMPLEMENTATION. ENDMETHOD. "repo_key_encode - METHOD repo_key_decode. - - DATA: lt_fields TYPE tihttpnvp, - lv_string TYPE string. - - FIELD-SYMBOLS: LIKE LINE OF lt_fields. - - lv_string = iv_string. " type conversion - lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ). - - READ TABLE lt_fields ASSIGNING WITH KEY name = 'KEY'. - IF sy-subrc = 0. - rv_key = -value. - ENDIF. - - ENDMETHOD. "repo_key_decode - ENDCLASS. "lcl_html_action_utils IMPLEMENTATION *----------------------------------------------------------------------* @@ -428,6 +407,7 @@ ENDCLASS. "lcl_html_helper IMPLEMENTATION * CLASS lcl_html_toolbar DEFINITION *----------------------------------------------------------------------* CLASS lcl_html_toolbar DEFINITION FINAL. + PUBLIC SECTION. METHODS add IMPORTING iv_txt TYPE string io_sub TYPE REF TO lcl_html_toolbar OPTIONAL @@ -440,8 +420,6 @@ CLASS lcl_html_toolbar DEFINITION FINAL. iv_vertical TYPE abap_bool OPTIONAL RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. - METHODS reset. - PRIVATE SECTION. TYPES: BEGIN OF ty_item, txt TYPE string, @@ -461,10 +439,6 @@ ENDCLASS. "lcl_html_toolbar DEFINITION *----------------------------------------------------------------------* CLASS lcl_html_toolbar IMPLEMENTATION. - METHOD reset. - CLEAR mt_items. - ENDMETHOD. "reset - METHOD add. DATA ls_item TYPE ty_item. diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index e6b5248da..c71159ccf 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -30,8 +30,11 @@ CLASS lcl_gui_page_super DEFINITION ABSTRACT. PROTECTED SECTION. METHODS render_repo_top - IMPORTING io_repo TYPE REF TO lcl_repo - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper + IMPORTING io_repo TYPE REF TO lcl_repo + iv_show_package TYPE abap_bool DEFAULT abap_true + iv_show_branch TYPE abap_bool DEFAULT abap_true + iv_branch TYPE string OPTIONAL + RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper RAISING lcx_exception. METHODS header @@ -81,13 +84,21 @@ CLASS lcl_gui_page_super IMPLEMENTATION. ro_html->add( '' ). ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( |{ io_repo->get_package( ) }| ). + IF iv_show_package = abap_true. + ro_html->add( '' ). + ro_html->add( |{ io_repo->get_package( ) }| ). + ENDIF. IF io_repo->is_offline( ) = abap_false. lo_repo_online ?= io_repo. - ro_html->add( '' ). - ro_html->add( |{ lo_repo_online->get_branch_name( ) }| ). + IF iv_show_branch = abap_true. + ro_html->add( '' ). + IF iv_branch IS INITIAL. + ro_html->add( |{ lo_repo_online->get_branch_name( ) }| ). + ELSE. + ro_html->add( |{ iv_branch }| ). + ENDIF. + ENDIF. ro_html->add( '' ). ro_html->add( || ). ENDIF. diff --git a/src/zabapgit_page_branch_overview.prog.abap b/src/zabapgit_page_branch_overview.prog.abap index 11e8dfdcc..b1f8457f8 100644 --- a/src/zabapgit_page_branch_overview.prog.abap +++ b/src/zabapgit_page_branch_overview.prog.abap @@ -195,7 +195,7 @@ CLASS lcl_branch_overview IMPLEMENTATION. SPLIT ls_raw-body AT gc_newline INTO ls_commit-message lv_trash. -* todo, handle time zones +* unix time stamps are in same time zone, so ignore the zone, FIND REGEX '^([\w\s]+) <(.*)> (\d{10}) .\d{4}$' IN ls_raw-author SUBMATCHES ls_commit-author @@ -355,10 +355,7 @@ CLASS lcl_gui_page_branch_overview DEFINITION FINAL INHERITING FROM lcl_gui_page RETURNING VALUE(rv_string) TYPE string, escape_message IMPORTING iv_string TYPE string - RETURNING VALUE(rv_string) TYPE string, - get_script - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper - RAISING lcx_exception. + RETURNING VALUE(rv_string) TYPE string. ENDCLASS. "lcl_gui_page_explore DEFINITION @@ -379,37 +376,6 @@ CLASS lcl_gui_page_branch_overview IMPLEMENTATION. ENDMETHOD. - METHOD get_script. - - DATA: li_client TYPE REF TO if_http_client, - lv_url TYPE string. - - lv_url = 'https://raw.githubusercontent.com/bpatra/' - && 'gitgraph.js/develop/src/gitgraph.js' ##NO_TEXT. - - cl_http_client=>create_by_url( - EXPORTING - url = lv_url - ssl_id = 'ANONYM' - IMPORTING - client = li_client - EXCEPTIONS - argument_not_found = 1 - plugin_not_active = 2 - internal_error = 3 - OTHERS = 4 ). - IF sy-subrc <> 0. - _raise 'error fetching gitgraph.js script'. - ENDIF. - - li_client->send( ). - li_client->receive( ). - - CREATE OBJECT ro_html. - ro_html->add( li_client->response->get_cdata( ) ). - - ENDMETHOD. - METHOD form_select. DATA: lv_name TYPE string, @@ -436,7 +402,7 @@ CLASS lcl_gui_page_branch_overview IMPLEMENTATION. CREATE OBJECT ro_html. ro_html->add( '
' ). - ro_html->add( 'Merge' ). + ro_html->add( 'Merge' ) ##NO_TEXT. ro_html->add( form_select( 'source' ) ). ro_html->add( 'into' ). ro_html->add( form_select( 'target' ) ). @@ -453,7 +419,10 @@ CLASS lcl_gui_page_branch_overview IMPLEMENTATION. CREATE OBJECT ro_html. - ro_html->add( render_repo_top( mo_repo ) ). + ro_html->add( render_repo_top( + io_repo = mo_repo + iv_show_package = abap_false + iv_show_branch = abap_false ) ). ro_html->add( '
' ). ro_html->add( '
' ). @@ -462,14 +431,9 @@ CLASS lcl_gui_page_branch_overview IMPLEMENTATION. * see http://stackoverflow.com/questions/6081483/maximum-size-of-a-canvas-element _add ''. - _add ''. + ro_html->add( '' ). + _add '