mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
lcl_gui_view_repo_content - code reorg #280
This commit is contained in:
parent
a6a7523b0b
commit
9f9f6b191d
|
@ -29,6 +29,10 @@ CLASS lcl_gui_page_super DEFINITION ABSTRACT.
|
|||
PUBLIC SECTION.
|
||||
INTERFACES lif_gui_page ABSTRACT METHODS render.
|
||||
|
||||
CLASS-METHODS render_error
|
||||
IMPORTING ix_error TYPE REF TO lcx_exception
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||
|
||||
PROTECTED SECTION.
|
||||
METHODS render_repo_top
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
|
@ -251,6 +255,16 @@ CLASS lcl_gui_page_super IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "render html footer & logo
|
||||
|
||||
METHOD render_error.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( '<div class="dummydiv attention">' ).
|
||||
ro_html->add( |Error: { ix_error->mv_text }| ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD. "render_error
|
||||
|
||||
METHOD redirect.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
*& Include ZABAPGIT_PAGE_MAIN
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
INCLUDE zabapgit_view_repo.
|
||||
|
||||
CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
@ -15,32 +17,15 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
|||
PRIVATE SECTION.
|
||||
CONSTANTS: BEGIN OF c_actions,
|
||||
show TYPE string VALUE 'show' ##NO_TEXT,
|
||||
toggle_hide_files TYPE string VALUE 'toggle_hide_files' ##NO_TEXT,
|
||||
END OF c_actions.
|
||||
|
||||
CONSTANTS: c_default_sortkey TYPE i VALUE 9999.
|
||||
|
||||
TYPES: BEGIN OF ty_repo_item,
|
||||
obj_type TYPE tadir-object,
|
||||
obj_name TYPE tadir-obj_name,
|
||||
is_first TYPE abap_bool,
|
||||
files TYPE tt_repo_files,
|
||||
sortkey TYPE i,
|
||||
changes TYPE i,
|
||||
END OF ty_repo_item.
|
||||
TYPES tt_repo_items TYPE STANDARD TABLE OF ty_repo_item WITH DEFAULT KEY.
|
||||
|
||||
DATA: mv_show TYPE lcl_persistence_db=>ty_value,
|
||||
mv_hide_files TYPE abap_bool.
|
||||
DATA: mv_show TYPE lcl_persistence_db=>ty_value.
|
||||
|
||||
METHODS:
|
||||
retrieve_active_repo
|
||||
RAISING lcx_exception,
|
||||
styles
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
|
||||
render_error
|
||||
IMPORTING ix_error TYPE REF TO lcx_exception
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
|
||||
retrieve_active_repo
|
||||
RAISING lcx_exception,
|
||||
render_toc
|
||||
IMPORTING it_list TYPE lcl_repo_srv=>ty_repo_tt
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
|
@ -52,34 +37,18 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
|||
RAISING lcx_exception,
|
||||
build_main_menu
|
||||
RETURNING VALUE(ro_menu) TYPE REF TO lcl_html_toolbar,
|
||||
render_repo_menu
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
render_explore
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception,
|
||||
render_repo
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception,
|
||||
extract_repo_content
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
EXPORTING et_repo_items TYPE tt_repo_items
|
||||
eo_log TYPE REF TO lcl_log
|
||||
RAISING lcx_exception,
|
||||
render_repo_item
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
is_item TYPE ty_repo_item
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception,
|
||||
render_obj_jump_link
|
||||
IMPORTING iv_obj_type TYPE tadir-object
|
||||
iv_obj_name TYPE tadir-obj_name
|
||||
RETURNING VALUE(rv_html) TYPE string,
|
||||
render_explore
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||
|
||||
METHOD constructor.
|
||||
|
@ -99,7 +68,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
|||
WHEN c_actions-show. " Change displayed repo
|
||||
lcl_app=>user( )->set_repo_show( lv_key ).
|
||||
ev_state = gc_event_state-re_render.
|
||||
WHEN c_actions-toggle_hide_files. " Toggle file diplay
|
||||
WHEN lcl_gui_view_repo_content=>c_actions-toggle_hide_files. " Toggle file diplay
|
||||
lcl_app=>user( )->toggle_hide_files( ).
|
||||
ev_state = gc_event_state-re_render.
|
||||
ENDCASE.
|
||||
|
@ -117,7 +86,6 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
|||
lo_repo LIKE LINE OF lt_repos.
|
||||
|
||||
retrieve_active_repo( ). " Get and validate key of user default repo
|
||||
mv_hide_files = lcl_app=>user( )->get_hide_files( ).
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
|
@ -175,20 +143,6 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "retrieve_active_repo
|
||||
|
||||
METHOD render_obj_jump_link.
|
||||
|
||||
DATA: lv_encode TYPE string,
|
||||
lo_html TYPE REF TO lcl_html_helper.
|
||||
|
||||
lv_encode = lcl_html_action_utils=>jump_encode( iv_obj_type = iv_obj_type
|
||||
iv_obj_name = iv_obj_name ).
|
||||
|
||||
CREATE OBJECT lo_html.
|
||||
lo_html->add_anchor( iv_txt = |{ iv_obj_name }| iv_act = |{ gc_action-jump }?{ lv_encode }| ).
|
||||
rv_html = lo_html->mv_html.
|
||||
|
||||
ENDMETHOD. "render_obj_jump_link
|
||||
|
||||
METHOD build_main_menu.
|
||||
|
||||
DATA lo_betasub TYPE REF TO lcl_html_toolbar.
|
||||
|
@ -300,16 +254,6 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "render_toc_line
|
||||
|
||||
METHOD render_error.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( '<div class="dummydiv attention">' ).
|
||||
ro_html->add( |Error: { ix_error->mv_text }| ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD. "render_error
|
||||
|
||||
METHOD render_explore.
|
||||
|
||||
DATA lo_toolbar TYPE REF TO lcl_html_toolbar.
|
||||
|
@ -326,339 +270,22 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "render_explore
|
||||
|
||||
**********************************************************************
|
||||
* SELECTED REPO RENDERING
|
||||
**********************************************************************
|
||||
|
||||
METHOD render_repo.
|
||||
|
||||
DATA: lt_repo_items TYPE tt_repo_items,
|
||||
lo_tab_menu TYPE REF TO lcl_html_toolbar,
|
||||
lx_error TYPE REF TO lcx_exception,
|
||||
lo_log TYPE REF TO lcl_log.
|
||||
DATA: lo_repo_content TYPE REF TO lcl_gui_view_repo_content.
|
||||
|
||||
FIELD-SYMBOLS <ls_item> LIKE LINE OF lt_repo_items.
|
||||
|
||||
CREATE OBJECT lo_tab_menu.
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( |<div class="repo" id="repo{ io_repo->get_key( ) }">| ).
|
||||
ro_html->add( render_repo_top( io_repo = io_repo iv_interactive_branch = abap_true ) ).
|
||||
|
||||
TRY.
|
||||
extract_repo_content( EXPORTING io_repo = io_repo
|
||||
IMPORTING et_repo_items = lt_repo_items
|
||||
eo_log = lo_log ).
|
||||
|
||||
" extract_repo_content must be called before rendering the menu
|
||||
" so that lo_log is filled with errors from the serialization
|
||||
ro_html->add( render_repo_menu( io_repo ) ).
|
||||
|
||||
IF io_repo->is_offline( ) = abap_false and lo_log->count( ) > 0.
|
||||
ro_html->add( '<div class="log">' ).
|
||||
ro_html->add( lo_log->to_html( ) ). " shows eg. list of unsupported objects
|
||||
ro_html->add( '</div>' ).
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( '<div class="repo_container">' ).
|
||||
IF io_repo->is_offline( ) = abap_false.
|
||||
IF mv_hide_files = abap_true.
|
||||
lo_tab_menu->add( iv_txt = 'Show files' iv_act = c_actions-toggle_hide_files ).
|
||||
ELSE.
|
||||
lo_tab_menu->add( iv_txt = 'Hide files' iv_act = c_actions-toggle_hide_files ).
|
||||
ENDIF.
|
||||
ro_html->add( lo_tab_menu->render( iv_as_angle = abap_true ) ).
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( '<table width="100%" class="repo_tab">' ).
|
||||
IF lines( lt_repo_items ) = 0.
|
||||
ro_html->add( '<tr class="unsupported firstrow"><td class="paddings">'
|
||||
&& '<center>Empty package</center>'
|
||||
&& '</td></tr>' ) ##NO_TEXT.
|
||||
ELSE.
|
||||
LOOP AT lt_repo_items ASSIGNING <ls_item>.
|
||||
ro_html->add( render_repo_item( io_repo = io_repo is_item = <ls_item> ) ).
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
ro_html->add( '</table>' ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
CATCH lcx_exception INTO lx_error.
|
||||
ro_html->add( render_repo_menu( io_repo ) ).
|
||||
ro_html->add( render_error( lx_error ) ).
|
||||
ENDTRY.
|
||||
CREATE OBJECT lo_repo_content EXPORTING io_repo = io_repo.
|
||||
ro_html->add( lo_repo_content->render( ) ).
|
||||
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD. "render_repo
|
||||
|
||||
METHOD render_repo_menu.
|
||||
|
||||
DATA: lo_toolbar TYPE REF TO lcl_html_toolbar,
|
||||
lo_tb_advanced TYPE REF TO lcl_html_toolbar,
|
||||
lo_tb_branch TYPE REF TO lcl_html_toolbar,
|
||||
lv_key TYPE lcl_persistence_db=>ty_value,
|
||||
lv_wp_opt LIKE gc_html_opt-crossout,
|
||||
lv_pull_opt LIKE gc_html_opt-crossout,
|
||||
lo_repo_online TYPE REF TO lcl_repo_online.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
CREATE OBJECT lo_toolbar.
|
||||
CREATE OBJECT lo_tb_branch.
|
||||
CREATE OBJECT lo_tb_advanced.
|
||||
|
||||
lv_key = io_repo->get_key( ).
|
||||
IF io_repo->is_offline( ) = abap_false.
|
||||
lo_repo_online ?= io_repo.
|
||||
ENDIF.
|
||||
|
||||
IF io_repo->is_write_protected( ) = abap_true.
|
||||
lv_wp_opt = gc_html_opt-crossout.
|
||||
lv_pull_opt = gc_html_opt-crossout.
|
||||
ELSE.
|
||||
lv_pull_opt = gc_html_opt-emphas.
|
||||
ENDIF.
|
||||
|
||||
" Build branch drop-down ========================
|
||||
IF io_repo->is_offline( ) = abap_false. " Online ?
|
||||
lo_tb_branch->add( iv_txt = 'Overview'
|
||||
iv_act = |{ gc_action-go_branch_overview }?{ lv_key }| ).
|
||||
lo_tb_branch->add( iv_txt = 'Switch'
|
||||
iv_act = |{ gc_action-git_branch_switch }?{ lv_key }|
|
||||
iv_opt = lv_wp_opt ).
|
||||
lo_tb_branch->add( iv_txt = 'Create'
|
||||
iv_act = |{ gc_action-git_branch_create }?{ lv_key }| ).
|
||||
lo_tb_branch->add( iv_txt = 'Delete'
|
||||
iv_act = |{ gc_action-git_branch_delete }?{ lv_key }| ).
|
||||
ENDIF.
|
||||
|
||||
" Build advanced drop-down ========================
|
||||
IF io_repo->is_offline( ) = abap_false. " Online ?
|
||||
lo_tb_advanced->add( iv_txt = 'Reset local'
|
||||
iv_act = |{ gc_action-git_reset }?{ lv_key }|
|
||||
iv_opt = lv_wp_opt ).
|
||||
lo_tb_advanced->add( iv_txt = 'Background mode'
|
||||
iv_act = |{ gc_action-go_background }?{ lv_key }| ).
|
||||
lo_tb_advanced->add( iv_txt = 'Change remote'
|
||||
iv_act = |{ gc_action-repo_remote_change }?{ lv_key }| ).
|
||||
lo_tb_advanced->add( iv_txt = 'Make off-line'
|
||||
iv_act = |{ gc_action-repo_remote_detach }?{ lv_key }| ).
|
||||
ELSE.
|
||||
lo_tb_advanced->add( iv_txt = 'Make on-line'
|
||||
iv_act = |{ gc_action-repo_remote_attach }?{ lv_key }| ).
|
||||
ENDIF.
|
||||
lo_tb_advanced->add( iv_txt = 'Remove'
|
||||
iv_act = |{ gc_action-repo_remove }?{ lv_key }| ).
|
||||
lo_tb_advanced->add( iv_txt = 'Uninstall'
|
||||
iv_act = |{ gc_action-repo_purge }?{ lv_key }|
|
||||
iv_opt = lv_wp_opt ).
|
||||
|
||||
" Build main toolbar ==============================
|
||||
IF io_repo->is_offline( ) = abap_false. " Online ?
|
||||
TRY.
|
||||
IF lo_repo_online->get_sha1_remote( ) <> lo_repo_online->get_sha1_local( ).
|
||||
lo_toolbar->add( iv_txt = 'Pull'
|
||||
iv_act = |{ gc_action-git_pull }?{ lv_key }|
|
||||
iv_opt = lv_pull_opt ).
|
||||
ENDIF.
|
||||
IF lcl_stage_logic=>count( lo_repo_online ) > 0.
|
||||
lo_toolbar->add( iv_txt = 'Stage'
|
||||
iv_act = |{ gc_action-go_stage }?{ lv_key }|
|
||||
iv_opt = gc_html_opt-emphas ).
|
||||
ENDIF.
|
||||
CATCH lcx_exception ##NO_HANDLER.
|
||||
" authorization error or repository does not exist
|
||||
" ignore error
|
||||
ENDTRY.
|
||||
lo_toolbar->add( iv_txt = 'Branch'
|
||||
io_sub = lo_tb_branch ) ##NO_TEXT.
|
||||
ELSE.
|
||||
lo_toolbar->add( iv_txt = 'Import ZIP'
|
||||
iv_act = |{ gc_action-zip_import }?{ lv_key }|
|
||||
iv_opt = gc_html_opt-emphas ).
|
||||
lo_toolbar->add( iv_txt = 'Export ZIP'
|
||||
iv_act = |{ gc_action-zip_export }?{ lv_key }|
|
||||
iv_opt = gc_html_opt-emphas ).
|
||||
ENDIF.
|
||||
|
||||
lo_toolbar->add( iv_txt = 'Advanced'
|
||||
io_sub = lo_tb_advanced ) ##NO_TEXT.
|
||||
lo_toolbar->add( iv_txt = 'Refresh'
|
||||
iv_act = |{ gc_action-repo_refresh }?{ lv_key }| ).
|
||||
|
||||
" Render ==========================================
|
||||
ro_html->add( '<div class="paddings right">' ).
|
||||
ro_html->add( lo_toolbar->render( ) ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD. "render_repo_menu
|
||||
|
||||
METHOD extract_repo_content.
|
||||
|
||||
DATA: lo_repo_online TYPE REF TO lcl_repo_online,
|
||||
lt_tadir TYPE ty_tadir_tt,
|
||||
ls_file TYPE ty_repo_file,
|
||||
lt_results TYPE ty_results_tt.
|
||||
|
||||
FIELD-SYMBOLS: <ls_result> LIKE LINE OF lt_results,
|
||||
<ls_repo_item> LIKE LINE OF et_repo_items,
|
||||
<ls_tadir> LIKE LINE OF lt_tadir.
|
||||
|
||||
|
||||
CLEAR et_repo_items.
|
||||
|
||||
IF io_repo->is_offline( ) = abap_true.
|
||||
lt_tadir = lcl_tadir=>read( io_repo->get_package( ) ).
|
||||
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
|
||||
APPEND INITIAL LINE TO et_repo_items ASSIGNING <ls_repo_item>.
|
||||
IF sy-tabix = 1.
|
||||
<ls_repo_item>-is_first = abap_true.
|
||||
ENDIF.
|
||||
<ls_repo_item>-obj_type = <ls_tadir>-object.
|
||||
<ls_repo_item>-obj_name = <ls_tadir>-obj_name.
|
||||
ENDLOOP.
|
||||
|
||||
ELSE.
|
||||
CREATE OBJECT eo_log.
|
||||
lo_repo_online ?= io_repo.
|
||||
lt_results = lo_repo_online->status( eo_log ).
|
||||
LOOP AT lt_results ASSIGNING <ls_result>.
|
||||
AT NEW obj_name. "obj_type + obj_name
|
||||
APPEND INITIAL LINE TO et_repo_items ASSIGNING <ls_repo_item>.
|
||||
<ls_repo_item>-obj_type = <ls_result>-obj_type.
|
||||
<ls_repo_item>-obj_name = <ls_result>-obj_name.
|
||||
<ls_repo_item>-sortkey = c_default_sortkey. " Default sort key
|
||||
<ls_repo_item>-changes = 0.
|
||||
ENDAT.
|
||||
|
||||
IF <ls_result>-filename IS NOT INITIAL.
|
||||
ls_file-path = <ls_result>-path.
|
||||
ls_file-filename = <ls_result>-filename.
|
||||
ls_file-is_changed = boolc( NOT <ls_result>-match = abap_true ).
|
||||
ls_file-new = <ls_result>-new.
|
||||
APPEND ls_file TO <ls_repo_item>-files.
|
||||
|
||||
IF ls_file-is_changed = abap_true OR ls_file-new IS NOT INITIAL.
|
||||
<ls_repo_item>-sortkey = 2. " Changed files
|
||||
<ls_repo_item>-changes = <ls_repo_item>-changes + 1.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
AT END OF obj_name. "obj_type + obj_name
|
||||
IF <ls_repo_item>-obj_type IS INITIAL.
|
||||
<ls_repo_item>-sortkey = 0. "Virtual objects
|
||||
ELSEIF lines( <ls_repo_item>-files ) = 0.
|
||||
<ls_repo_item>-sortkey = 1. "New object to commit
|
||||
ENDIF.
|
||||
ENDAT.
|
||||
ENDLOOP.
|
||||
|
||||
SORT et_repo_items BY sortkey obj_type obj_name ASCENDING.
|
||||
READ TABLE et_repo_items ASSIGNING <ls_repo_item> INDEX 1.
|
||||
IF sy-subrc IS INITIAL.
|
||||
<ls_repo_item>-is_first = abap_true.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
|
||||
ENDMETHOD. "extract_repo_content
|
||||
|
||||
METHOD render_repo_item.
|
||||
DATA:
|
||||
lv_link TYPE string,
|
||||
lv_icon TYPE string,
|
||||
lv_difflink TYPE string,
|
||||
ls_file LIKE LINE OF is_item-files,
|
||||
lv_trclass TYPE string.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
IF is_item-is_first = abap_true. " TR class
|
||||
lv_trclass = 'firstrow' ##NO_TEXT.
|
||||
ENDIF.
|
||||
IF is_item-obj_name IS INITIAL.
|
||||
lv_trclass = lv_trclass && ' unsupported' ##NO_TEXT.
|
||||
ENDIF.
|
||||
IF is_item-sortkey > 0 AND is_item-sortkey < c_default_sortkey.
|
||||
lv_trclass = lv_trclass && ' modified' ##NO_TEXT.
|
||||
ENDIF.
|
||||
IF lv_trclass IS NOT INITIAL.
|
||||
SHIFT lv_trclass LEFT DELETING LEADING space.
|
||||
lv_trclass = | class="{ lv_trclass }"|.
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( |<tr{ lv_trclass }>| ).
|
||||
|
||||
IF is_item-obj_name IS INITIAL.
|
||||
ro_html->add( '<td colspan="2"></td>'
|
||||
&& '<td class="object"><i class="grey">non-code and meta files</i></td>' ).
|
||||
ELSE.
|
||||
CASE is_item-obj_type. "TODO ??
|
||||
WHEN 'PROG' OR 'CLAS' OR 'FUGR'.
|
||||
lv_icon = |<img src="img/code">|.
|
||||
WHEN 'W3MI' OR 'W3HT'.
|
||||
lv_icon = |<img src="img/bin">|.
|
||||
WHEN ''.
|
||||
lv_icon = space. " no icon
|
||||
WHEN OTHERS.
|
||||
lv_icon = |<img src="img/obj">|.
|
||||
ENDCASE.
|
||||
|
||||
lv_link = render_obj_jump_link( iv_obj_name = is_item-obj_name
|
||||
iv_obj_type = is_item-obj_type ).
|
||||
ro_html->add( |<td class="icon">{ lv_icon }</td>| ).
|
||||
ro_html->add( |<td class="type">{ is_item-obj_type }</td>| ).
|
||||
ro_html->add( |<td class="object">{ lv_link }</td>| ).
|
||||
ENDIF.
|
||||
|
||||
IF io_repo->is_offline( ) = abap_false. " Files for online repos only
|
||||
|
||||
ro_html->add( '<td class="files">' ).
|
||||
IF mv_hide_files = abap_false OR is_item-obj_type IS INITIAL.
|
||||
LOOP AT is_item-files INTO ls_file.
|
||||
ro_html->add( |<span>{ ls_file-path && ls_file-filename }</span>| ).
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
ro_html->add( '</td>' ).
|
||||
|
||||
ro_html->add( '<td class="cmd">' ).
|
||||
IF lines( is_item-files ) = 0.
|
||||
ro_html->add( '<span class="grey">new @local</span>' ).
|
||||
ELSEIF is_item-changes > 0.
|
||||
IF mv_hide_files = abap_true AND is_item-obj_name IS NOT INITIAL.
|
||||
lv_difflink = lcl_html_action_utils=>obj_encode(
|
||||
iv_key = io_repo->get_key( )
|
||||
ig_object = is_item ).
|
||||
ro_html->add_anchor(
|
||||
iv_txt = |diff ({ is_item-changes })|
|
||||
iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ).
|
||||
ELSE.
|
||||
LOOP AT is_item-files INTO ls_file.
|
||||
IF ls_file-new = gc_new-remote.
|
||||
ro_html->add( '<span class="grey">new @remote</span>' ).
|
||||
ELSEIF ls_file-new = gc_new-local.
|
||||
ro_html->add( '<span class="grey">new @local</span>' ).
|
||||
ELSEIF ls_file-is_changed = abap_true.
|
||||
lv_difflink = lcl_html_action_utils=>file_encode(
|
||||
iv_key = io_repo->get_key( )
|
||||
ig_file = ls_file ).
|
||||
ro_html->add_anchor(
|
||||
iv_txt = 'diff'
|
||||
iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ).
|
||||
ELSE.
|
||||
ro_html->add( |<span> </span>| ).
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ro_html->add( '</td>' ).
|
||||
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( '</tr>' ).
|
||||
|
||||
ENDMETHOD. "render_repo_item
|
||||
|
||||
**********************************************************************
|
||||
* ASSETS, STYLES, SCRIPTS
|
||||
**********************************************************************
|
||||
|
|
405
src/zabapgit_view_repo.prog.abap
Normal file
405
src/zabapgit_view_repo.prog.abap
Normal file
|
@ -0,0 +1,405 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Include ZABAPGIT_VIEW_REPO
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
CLASS lcl_gui_view_repo_content DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
|
||||
CONSTANTS: BEGIN OF c_actions,
|
||||
toggle_hide_files TYPE string VALUE 'toggle_hide_files' ##NO_TEXT,
|
||||
END OF c_actions.
|
||||
|
||||
METHODS constructor
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
RAISING lcx_exception.
|
||||
METHODS render
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
CONSTANTS: c_default_sortkey TYPE i VALUE 9999.
|
||||
|
||||
TYPES: BEGIN OF ty_repo_item,
|
||||
obj_type TYPE tadir-object,
|
||||
obj_name TYPE tadir-obj_name,
|
||||
is_first TYPE abap_bool,
|
||||
files TYPE tt_repo_files,
|
||||
sortkey TYPE i,
|
||||
changes TYPE i,
|
||||
END OF ty_repo_item.
|
||||
TYPES tt_repo_items TYPE STANDARD TABLE OF ty_repo_item WITH DEFAULT KEY.
|
||||
|
||||
DATA: mo_repo TYPE REF TO lcl_repo,
|
||||
mv_hide_files TYPE abap_bool.
|
||||
|
||||
METHODS:
|
||||
render_repo_menu
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception,
|
||||
extract_repo_content
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
EXPORTING et_repo_items TYPE tt_repo_items
|
||||
eo_log TYPE REF TO lcl_log
|
||||
RAISING lcx_exception,
|
||||
render_repo_item
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
is_item TYPE ty_repo_item
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception,
|
||||
render_obj_jump_link
|
||||
IMPORTING iv_obj_type TYPE tadir-object
|
||||
iv_obj_name TYPE tadir-obj_name
|
||||
RETURNING VALUE(rv_html) TYPE string.
|
||||
|
||||
ENDCLASS. "lcl_gui_view_repo_content
|
||||
|
||||
CLASS lcl_gui_view_repo_content IMPLEMENTATION.
|
||||
|
||||
METHOD constructor.
|
||||
|
||||
mo_repo ?= io_repo.
|
||||
mv_hide_files = lcl_app=>user( )->get_hide_files( ).
|
||||
|
||||
ENDMETHOD. "constructor
|
||||
|
||||
METHOD render.
|
||||
|
||||
DATA: lt_repo_items TYPE tt_repo_items,
|
||||
lo_tab_menu TYPE REF TO lcl_html_toolbar,
|
||||
lx_error TYPE REF TO lcx_exception,
|
||||
lo_log TYPE REF TO lcl_log.
|
||||
|
||||
FIELD-SYMBOLS <ls_item> LIKE LINE OF lt_repo_items.
|
||||
|
||||
CREATE OBJECT lo_tab_menu.
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
TRY.
|
||||
extract_repo_content( EXPORTING io_repo = mo_repo
|
||||
IMPORTING et_repo_items = lt_repo_items
|
||||
eo_log = lo_log ).
|
||||
|
||||
" extract_repo_content must be called before rendering the menu
|
||||
" so that lo_log is filled with errors from the serialization
|
||||
ro_html->add( render_repo_menu( mo_repo ) ).
|
||||
|
||||
IF mo_repo->is_offline( ) = abap_false and lo_log->count( ) > 0.
|
||||
ro_html->add( '<div class="log">' ).
|
||||
ro_html->add( lo_log->to_html( ) ). " shows eg. list of unsupported objects
|
||||
ro_html->add( '</div>' ).
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( '<div class="repo_container">' ).
|
||||
IF mo_repo->is_offline( ) = abap_false.
|
||||
IF mv_hide_files = abap_true.
|
||||
* lo_tab_menu->add( iv_txt = 'Show files' iv_act = c_actions-toggle_hide_files ).
|
||||
ELSE.
|
||||
* lo_tab_menu->add( iv_txt = 'Hide files' iv_act = c_actions-toggle_hide_files ).
|
||||
ENDIF.
|
||||
ro_html->add( lo_tab_menu->render( iv_as_angle = abap_true ) ).
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( '<table width="100%" class="repo_tab">' ).
|
||||
IF lines( lt_repo_items ) = 0.
|
||||
ro_html->add( '<tr class="unsupported firstrow"><td class="paddings">'
|
||||
&& '<center>Empty package</center>'
|
||||
&& '</td></tr>' ) ##NO_TEXT.
|
||||
ELSE.
|
||||
LOOP AT lt_repo_items ASSIGNING <ls_item>.
|
||||
ro_html->add( render_repo_item( io_repo = mo_repo is_item = <ls_item> ) ).
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
ro_html->add( '</table>' ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
CATCH lcx_exception INTO lx_error.
|
||||
ro_html->add( render_repo_menu( mo_repo ) ).
|
||||
ro_html->add( lcl_gui_page_super=>render_error( lx_error ) ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD. "render
|
||||
|
||||
METHOD render_repo_menu.
|
||||
|
||||
DATA: lo_toolbar TYPE REF TO lcl_html_toolbar,
|
||||
lo_tb_advanced TYPE REF TO lcl_html_toolbar,
|
||||
lo_tb_branch TYPE REF TO lcl_html_toolbar,
|
||||
lv_key TYPE lcl_persistence_db=>ty_value,
|
||||
lv_wp_opt LIKE gc_html_opt-crossout,
|
||||
lv_pull_opt LIKE gc_html_opt-crossout,
|
||||
lo_repo_online TYPE REF TO lcl_repo_online.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
CREATE OBJECT lo_toolbar.
|
||||
CREATE OBJECT lo_tb_branch.
|
||||
CREATE OBJECT lo_tb_advanced.
|
||||
|
||||
lv_key = io_repo->get_key( ).
|
||||
IF io_repo->is_offline( ) = abap_false.
|
||||
lo_repo_online ?= io_repo.
|
||||
ENDIF.
|
||||
|
||||
IF io_repo->is_write_protected( ) = abap_true.
|
||||
lv_wp_opt = gc_html_opt-crossout.
|
||||
lv_pull_opt = gc_html_opt-crossout.
|
||||
ELSE.
|
||||
lv_pull_opt = gc_html_opt-emphas.
|
||||
ENDIF.
|
||||
|
||||
" Build branch drop-down ========================
|
||||
IF io_repo->is_offline( ) = abap_false. " Online ?
|
||||
lo_tb_branch->add( iv_txt = 'Overview'
|
||||
iv_act = |{ gc_action-go_branch_overview }?{ lv_key }| ).
|
||||
lo_tb_branch->add( iv_txt = 'Switch'
|
||||
iv_act = |{ gc_action-git_branch_switch }?{ lv_key }|
|
||||
iv_opt = lv_wp_opt ).
|
||||
lo_tb_branch->add( iv_txt = 'Create'
|
||||
iv_act = |{ gc_action-git_branch_create }?{ lv_key }| ).
|
||||
lo_tb_branch->add( iv_txt = 'Delete'
|
||||
iv_act = |{ gc_action-git_branch_delete }?{ lv_key }| ).
|
||||
ENDIF.
|
||||
|
||||
" Build advanced drop-down ========================
|
||||
IF io_repo->is_offline( ) = abap_false. " Online ?
|
||||
lo_tb_advanced->add( iv_txt = 'Reset local'
|
||||
iv_act = |{ gc_action-git_reset }?{ lv_key }|
|
||||
iv_opt = lv_wp_opt ).
|
||||
lo_tb_advanced->add( iv_txt = 'Background mode'
|
||||
iv_act = |{ gc_action-go_background }?{ lv_key }| ).
|
||||
lo_tb_advanced->add( iv_txt = 'Change remote'
|
||||
iv_act = |{ gc_action-repo_remote_change }?{ lv_key }| ).
|
||||
lo_tb_advanced->add( iv_txt = 'Make off-line'
|
||||
iv_act = |{ gc_action-repo_remote_detach }?{ lv_key }| ).
|
||||
ELSE.
|
||||
lo_tb_advanced->add( iv_txt = 'Make on-line'
|
||||
iv_act = |{ gc_action-repo_remote_attach }?{ lv_key }| ).
|
||||
ENDIF.
|
||||
lo_tb_advanced->add( iv_txt = 'Remove'
|
||||
iv_act = |{ gc_action-repo_remove }?{ lv_key }| ).
|
||||
lo_tb_advanced->add( iv_txt = 'Uninstall'
|
||||
iv_act = |{ gc_action-repo_purge }?{ lv_key }|
|
||||
iv_opt = lv_wp_opt ).
|
||||
|
||||
" Build main toolbar ==============================
|
||||
IF io_repo->is_offline( ) = abap_false. " Online ?
|
||||
TRY.
|
||||
IF lo_repo_online->get_sha1_remote( ) <> lo_repo_online->get_sha1_local( ).
|
||||
lo_toolbar->add( iv_txt = 'Pull'
|
||||
iv_act = |{ gc_action-git_pull }?{ lv_key }|
|
||||
iv_opt = lv_pull_opt ).
|
||||
ENDIF.
|
||||
IF lcl_stage_logic=>count( lo_repo_online ) > 0.
|
||||
lo_toolbar->add( iv_txt = 'Stage'
|
||||
iv_act = |{ gc_action-go_stage }?{ lv_key }|
|
||||
iv_opt = gc_html_opt-emphas ).
|
||||
ENDIF.
|
||||
CATCH lcx_exception ##NO_HANDLER.
|
||||
" authorization error or repository does not exist
|
||||
" ignore error
|
||||
ENDTRY.
|
||||
lo_toolbar->add( iv_txt = 'Branch'
|
||||
io_sub = lo_tb_branch ) ##NO_TEXT.
|
||||
ELSE.
|
||||
lo_toolbar->add( iv_txt = 'Import ZIP'
|
||||
iv_act = |{ gc_action-zip_import }?{ lv_key }|
|
||||
iv_opt = gc_html_opt-emphas ).
|
||||
lo_toolbar->add( iv_txt = 'Export ZIP'
|
||||
iv_act = |{ gc_action-zip_export }?{ lv_key }|
|
||||
iv_opt = gc_html_opt-emphas ).
|
||||
ENDIF.
|
||||
|
||||
lo_toolbar->add( iv_txt = 'Advanced'
|
||||
io_sub = lo_tb_advanced ) ##NO_TEXT.
|
||||
lo_toolbar->add( iv_txt = 'Refresh'
|
||||
iv_act = |{ gc_action-repo_refresh }?{ lv_key }| ).
|
||||
|
||||
" Render ==========================================
|
||||
ro_html->add( '<div class="paddings right">' ).
|
||||
ro_html->add( lo_toolbar->render( ) ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD. "render_repo_menu
|
||||
|
||||
METHOD extract_repo_content.
|
||||
|
||||
DATA: lo_repo_online TYPE REF TO lcl_repo_online,
|
||||
lt_tadir TYPE ty_tadir_tt,
|
||||
ls_file TYPE ty_repo_file,
|
||||
lt_results TYPE ty_results_tt.
|
||||
|
||||
FIELD-SYMBOLS: <ls_result> LIKE LINE OF lt_results,
|
||||
<ls_repo_item> LIKE LINE OF et_repo_items,
|
||||
<ls_tadir> LIKE LINE OF lt_tadir.
|
||||
|
||||
|
||||
CLEAR et_repo_items.
|
||||
|
||||
IF io_repo->is_offline( ) = abap_true.
|
||||
lt_tadir = lcl_tadir=>read( io_repo->get_package( ) ).
|
||||
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
|
||||
APPEND INITIAL LINE TO et_repo_items ASSIGNING <ls_repo_item>.
|
||||
IF sy-tabix = 1.
|
||||
<ls_repo_item>-is_first = abap_true.
|
||||
ENDIF.
|
||||
<ls_repo_item>-obj_type = <ls_tadir>-object.
|
||||
<ls_repo_item>-obj_name = <ls_tadir>-obj_name.
|
||||
ENDLOOP.
|
||||
|
||||
ELSE.
|
||||
CREATE OBJECT eo_log.
|
||||
lo_repo_online ?= io_repo.
|
||||
lt_results = lo_repo_online->status( eo_log ).
|
||||
LOOP AT lt_results ASSIGNING <ls_result>.
|
||||
AT NEW obj_name. "obj_type + obj_name
|
||||
APPEND INITIAL LINE TO et_repo_items ASSIGNING <ls_repo_item>.
|
||||
<ls_repo_item>-obj_type = <ls_result>-obj_type.
|
||||
<ls_repo_item>-obj_name = <ls_result>-obj_name.
|
||||
<ls_repo_item>-sortkey = c_default_sortkey. " Default sort key
|
||||
<ls_repo_item>-changes = 0.
|
||||
ENDAT.
|
||||
|
||||
IF <ls_result>-filename IS NOT INITIAL.
|
||||
ls_file-path = <ls_result>-path.
|
||||
ls_file-filename = <ls_result>-filename.
|
||||
ls_file-is_changed = boolc( NOT <ls_result>-match = abap_true ).
|
||||
ls_file-new = <ls_result>-new.
|
||||
APPEND ls_file TO <ls_repo_item>-files.
|
||||
|
||||
IF ls_file-is_changed = abap_true OR ls_file-new IS NOT INITIAL.
|
||||
<ls_repo_item>-sortkey = 2. " Changed files
|
||||
<ls_repo_item>-changes = <ls_repo_item>-changes + 1.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
AT END OF obj_name. "obj_type + obj_name
|
||||
IF <ls_repo_item>-obj_type IS INITIAL.
|
||||
<ls_repo_item>-sortkey = 0. "Virtual objects
|
||||
ELSEIF lines( <ls_repo_item>-files ) = 0.
|
||||
<ls_repo_item>-sortkey = 1. "New object to commit
|
||||
ENDIF.
|
||||
ENDAT.
|
||||
ENDLOOP.
|
||||
|
||||
SORT et_repo_items BY sortkey obj_type obj_name ASCENDING.
|
||||
READ TABLE et_repo_items ASSIGNING <ls_repo_item> INDEX 1.
|
||||
IF sy-subrc IS INITIAL.
|
||||
<ls_repo_item>-is_first = abap_true.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
|
||||
ENDMETHOD. "extract_repo_content
|
||||
|
||||
METHOD render_repo_item.
|
||||
DATA:
|
||||
lv_link TYPE string,
|
||||
lv_icon TYPE string,
|
||||
lv_difflink TYPE string,
|
||||
ls_file LIKE LINE OF is_item-files,
|
||||
lv_trclass TYPE string.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
IF is_item-is_first = abap_true. " TR class
|
||||
lv_trclass = 'firstrow' ##NO_TEXT.
|
||||
ENDIF.
|
||||
IF is_item-obj_name IS INITIAL.
|
||||
lv_trclass = lv_trclass && ' unsupported' ##NO_TEXT.
|
||||
ENDIF.
|
||||
IF is_item-sortkey > 0 AND is_item-sortkey < c_default_sortkey.
|
||||
lv_trclass = lv_trclass && ' modified' ##NO_TEXT.
|
||||
ENDIF.
|
||||
IF lv_trclass IS NOT INITIAL.
|
||||
SHIFT lv_trclass LEFT DELETING LEADING space.
|
||||
lv_trclass = | class="{ lv_trclass }"|.
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( |<tr{ lv_trclass }>| ).
|
||||
|
||||
IF is_item-obj_name IS INITIAL.
|
||||
ro_html->add( '<td colspan="2"></td>'
|
||||
&& '<td class="object"><i class="grey">non-code and meta files</i></td>' ).
|
||||
ELSE.
|
||||
CASE is_item-obj_type. "TODO ??
|
||||
WHEN 'PROG' OR 'CLAS' OR 'FUGR'.
|
||||
lv_icon = |<img src="img/code">|.
|
||||
WHEN 'W3MI' OR 'W3HT'.
|
||||
lv_icon = |<img src="img/bin">|.
|
||||
WHEN ''.
|
||||
lv_icon = space. " no icon
|
||||
WHEN OTHERS.
|
||||
lv_icon = |<img src="img/obj">|.
|
||||
ENDCASE.
|
||||
|
||||
lv_link = render_obj_jump_link( iv_obj_name = is_item-obj_name
|
||||
iv_obj_type = is_item-obj_type ).
|
||||
ro_html->add( |<td class="icon">{ lv_icon }</td>| ).
|
||||
ro_html->add( |<td class="type">{ is_item-obj_type }</td>| ).
|
||||
ro_html->add( |<td class="object">{ lv_link }</td>| ).
|
||||
ENDIF.
|
||||
|
||||
IF io_repo->is_offline( ) = abap_false. " Files for online repos only
|
||||
|
||||
ro_html->add( '<td class="files">' ).
|
||||
IF mv_hide_files = abap_false OR is_item-obj_type IS INITIAL.
|
||||
LOOP AT is_item-files INTO ls_file.
|
||||
ro_html->add( |<span>{ ls_file-path && ls_file-filename }</span>| ).
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
ro_html->add( '</td>' ).
|
||||
|
||||
ro_html->add( '<td class="cmd">' ).
|
||||
IF lines( is_item-files ) = 0.
|
||||
ro_html->add( '<span class="grey">new @local</span>' ).
|
||||
ELSEIF is_item-changes > 0.
|
||||
IF mv_hide_files = abap_true AND is_item-obj_name IS NOT INITIAL.
|
||||
lv_difflink = lcl_html_action_utils=>obj_encode(
|
||||
iv_key = io_repo->get_key( )
|
||||
ig_object = is_item ).
|
||||
ro_html->add_anchor(
|
||||
iv_txt = |diff ({ is_item-changes })|
|
||||
iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ).
|
||||
ELSE.
|
||||
LOOP AT is_item-files INTO ls_file.
|
||||
IF ls_file-new = gc_new-remote.
|
||||
ro_html->add( '<span class="grey">new @remote</span>' ).
|
||||
ELSEIF ls_file-new = gc_new-local.
|
||||
ro_html->add( '<span class="grey">new @local</span>' ).
|
||||
ELSEIF ls_file-is_changed = abap_true.
|
||||
lv_difflink = lcl_html_action_utils=>file_encode(
|
||||
iv_key = io_repo->get_key( )
|
||||
ig_file = ls_file ).
|
||||
ro_html->add_anchor(
|
||||
iv_txt = 'diff'
|
||||
iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ).
|
||||
ELSE.
|
||||
ro_html->add( |<span> </span>| ).
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ro_html->add( '</td>' ).
|
||||
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( '</tr>' ).
|
||||
|
||||
ENDMETHOD. "render_repo_item
|
||||
|
||||
METHOD render_obj_jump_link.
|
||||
|
||||
DATA: lv_encode TYPE string,
|
||||
lo_html TYPE REF TO lcl_html_helper.
|
||||
|
||||
lv_encode = lcl_html_action_utils=>jump_encode( iv_obj_type = iv_obj_type
|
||||
iv_obj_name = iv_obj_name ).
|
||||
|
||||
CREATE OBJECT lo_html.
|
||||
lo_html->add_anchor( iv_txt = |{ iv_obj_name }| iv_act = |{ gc_action-jump }?{ lv_encode }| ).
|
||||
rv_html = lo_html->mv_html.
|
||||
|
||||
ENDMETHOD. "render_obj_jump_link
|
||||
|
||||
ENDCLASS. "lcl_gui_view_repo_content
|
48
src/zabapgit_view_repo.prog.xml
Normal file
48
src/zabapgit_view_repo.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<PROGDIR>
|
||||
<NAME>ZABAPGIT_VIEW_REPO</NAME>
|
||||
<STATE>A</STATE>
|
||||
<SQLX/>
|
||||
<EDTX/>
|
||||
<VARCL>X</VARCL>
|
||||
<DBAPL/>
|
||||
<DBNA/>
|
||||
<CLAS/>
|
||||
<TYPE/>
|
||||
<OCCURS/>
|
||||
<SUBC>I</SUBC>
|
||||
<APPL/>
|
||||
<SECU/>
|
||||
<CNAM/>
|
||||
<CDAT>0000-00-00</CDAT>
|
||||
<UNAM/>
|
||||
<UDAT>0000-00-00</UDAT>
|
||||
<VERN/>
|
||||
<LEVL/>
|
||||
<RSTAT/>
|
||||
<RMAND/>
|
||||
<RLOAD>E</RLOAD>
|
||||
<FIXPT/>
|
||||
<SSET/>
|
||||
<SDATE>0000-00-00</SDATE>
|
||||
<STIME/>
|
||||
<IDATE>0000-00-00</IDATE>
|
||||
<ITIME/>
|
||||
<LDBNAME/>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<KEY/>
|
||||
<ENTRY>Include ZABAPGIT_VIEW_REPO</ENTRY>
|
||||
<LENGTH>26</LENGTH>
|
||||
<SPLIT/>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
Loading…
Reference in New Issue
Block a user