-pack-advertisement'.
- DATA: lv_data TYPE string.
- DATA: lv_expected_content_type TYPE string.
+ DATA lv_data TYPE string.
+ DATA lv_expected_content_type TYPE string.
eo_client = zcl_abapgit_http=>create_by_url(
iv_url = iv_url
diff --git a/src/http/zcl_abapgit_http.clas.abap b/src/http/zcl_abapgit_http.clas.abap
index 60d146a05..422f149b0 100644
--- a/src/http/zcl_abapgit_http.clas.abap
+++ b/src/http/zcl_abapgit_http.clas.abap
@@ -12,10 +12,18 @@ CLASS zcl_abapgit_http DEFINITION
CLASS-METHODS get_agent
RETURNING
VALUE(rv_agent) TYPE string .
+
+ TYPES: BEGIN OF ty_key_value,
+ key TYPE string,
+ value TYPE string,
+ END OF ty_key_value.
+ TYPES ty_headers TYPE STANDARD TABLE OF ty_key_value WITH DEFAULT KEY.
+
CLASS-METHODS create_by_url
IMPORTING
!iv_url TYPE string
!iv_service TYPE string
+ it_headers TYPE ty_headers OPTIONAL
RETURNING
VALUE(ro_client) TYPE REF TO zcl_abapgit_http_client
RAISING
@@ -48,7 +56,7 @@ ENDCLASS.
-CLASS ZCL_ABAPGIT_HTTP IMPLEMENTATION.
+CLASS zcl_abapgit_http IMPLEMENTATION.
METHOD acquire_login_details.
@@ -121,6 +129,7 @@ CLASS ZCL_ABAPGIT_HTTP IMPLEMENTATION.
lv_scheme TYPE string,
lv_authorization TYPE string,
li_client TYPE REF TO if_http_client,
+ ls_header LIKE LINE OF it_headers,
lo_proxy_configuration TYPE REF TO zcl_abapgit_proxy_config,
lv_text TYPE string.
@@ -186,6 +195,12 @@ CLASS ZCL_ABAPGIT_HTTP IMPLEMENTATION.
name = '~request_uri'
value = lv_uri ).
+ LOOP AT it_headers INTO ls_header.
+ li_client->request->set_header_field(
+ name = ls_header-key
+ value = ls_header-value ).
+ ENDLOOP.
+
" Disable internal auth dialog (due to its unclarity)
li_client->propertytype_logon_popup = if_http_client=>co_disabled.
diff --git a/src/http/zcl_abapgit_http_client.clas.abap b/src/http/zcl_abapgit_http_client.clas.abap
index e534ef881..97a15fe3e 100644
--- a/src/http/zcl_abapgit_http_client.clas.abap
+++ b/src/http/zcl_abapgit_http_client.clas.abap
@@ -27,6 +27,13 @@ CLASS zcl_abapgit_http_client DEFINITION PUBLIC CREATE PUBLIC.
iv_service TYPE string
RAISING zcx_abapgit_exception.
+ METHODS set_header
+ IMPORTING
+ iv_key TYPE string
+ iv_value TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
PRIVATE SECTION.
DATA: mi_client TYPE REF TO if_http_client,
mo_digest TYPE REF TO zcl_abapgit_http_digest.
@@ -169,6 +176,12 @@ CLASS zcl_abapgit_http_client IMPLEMENTATION.
ENDMETHOD.
+ METHOD set_header.
+ mi_client->request->set_header_field(
+ name = iv_key
+ value = iv_value ).
+ ENDMETHOD.
+
METHOD set_headers.
DATA: lv_value TYPE string.
diff --git a/src/ui/lib/zcl_abapgit_gui_buttons.clas.abap b/src/ui/lib/zcl_abapgit_gui_buttons.clas.abap
index 59e49dca3..f89192416 100644
--- a/src/ui/lib/zcl_abapgit_gui_buttons.clas.abap
+++ b/src/ui/lib/zcl_abapgit_gui_buttons.clas.abap
@@ -7,6 +7,9 @@ CLASS zcl_abapgit_gui_buttons DEFINITION
CLASS-METHODS new_online
RETURNING VALUE(rv_html_string) TYPE string.
+ CLASS-METHODS flow
+ RETURNING VALUE(rv_html_string) TYPE string.
+
CLASS-METHODS new_offline
RETURNING VALUE(rv_html_string) TYPE string.
@@ -65,6 +68,11 @@ CLASS zcl_abapgit_gui_buttons IMPLEMENTATION.
ENDMETHOD.
+ METHOD flow.
+ rv_html_string = zcl_abapgit_html=>icon( 'flow' ) && ' Flow'.
+ ENDMETHOD.
+
+
METHOD repo_list.
rv_html_string = zcl_abapgit_html=>icon( 'bars' ) && ' Repository List'.
ENDMETHOD.
diff --git a/src/ui/pages/zcl_abapgit_gui_page_flow.clas.abap b/src/ui/pages/zcl_abapgit_gui_page_flow.clas.abap
new file mode 100644
index 000000000..546929061
--- /dev/null
+++ b/src/ui/pages/zcl_abapgit_gui_page_flow.clas.abap
@@ -0,0 +1,99 @@
+CLASS zcl_abapgit_gui_page_flow DEFINITION
+ PUBLIC
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler.
+ INTERFACES zif_abapgit_gui_renderable.
+ INTERFACES zif_abapgit_gui_menu_provider.
+
+ CLASS-METHODS create
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ENDCLASS.
+
+
+
+CLASS zcl_abapgit_gui_page_flow IMPLEMENTATION.
+
+
+ METHOD constructor.
+ super->constructor( ).
+
+ ENDMETHOD.
+
+
+ METHOD create.
+
+ DATA lo_component TYPE REF TO zcl_abapgit_gui_page_flow.
+
+ CREATE OBJECT lo_component.
+
+ ri_page = zcl_abapgit_gui_page_hoc=>create(
+ iv_page_title = 'Flow'
+ ii_page_menu_provider = lo_component
+ ii_child_component = lo_component ).
+
+ ENDMETHOD.
+
+
+ METHOD zif_abapgit_gui_event_handler~on_event.
+ RETURN. " todo, implement method
+ ENDMETHOD.
+
+
+ METHOD zif_abapgit_gui_menu_provider~get_menu.
+
+ CREATE OBJECT ro_toolbar EXPORTING iv_id = 'toolbar-main'.
+
+ ro_toolbar->add(
+ iv_txt = zcl_abapgit_gui_buttons=>repo_list( )
+ iv_act = zif_abapgit_definitions=>c_action-abapgit_home ).
+
+ ENDMETHOD.
+
+
+ METHOD zif_abapgit_gui_renderable~render.
+ DATA lt_favorites TYPE zif_abapgit_repo_srv=>ty_repo_list.
+ DATA li_favorite LIKE LINE OF lt_favorites.
+ DATA lo_online TYPE REF TO zcl_abapgit_repo_online.
+
+
+ register_handlers( ).
+ CREATE OBJECT ri_html TYPE zcl_abapgit_html.
+ ri_html->add( '' ).
+
+* list branches on favorite transported repos
+ lt_favorites = zcl_abapgit_repo_srv=>get_instance( )->list_favorites( abap_false ).
+ LOOP AT lt_favorites INTO li_favorite.
+ " todo, IF zcl_abapgit_factory=>get_sap_package( li_favorite->get_package( )
+ " todo, )->are_changes_recorded_in_tr_req( ) = abap_false.
+ " todo, CONTINUE.
+ " todo, ENDIF.
+
+ lo_online ?= li_favorite.
+ ri_html->add( '' && li_favorite->get_name( ) && '
' ).
+
+ lcl_helper=>list_changes_per_branch( lo_online ).
+ ENDLOOP.
+
+* list open transports for current user
+* todo
+
+ ri_html->add( '
' ).
+
+ ENDMETHOD.
+ENDCLASS.
diff --git a/src/ui/pages/zcl_abapgit_gui_page_flow.clas.locals_imp.abap b/src/ui/pages/zcl_abapgit_gui_page_flow.clas.locals_imp.abap
new file mode 100644
index 000000000..6bd5a76f8
--- /dev/null
+++ b/src/ui/pages/zcl_abapgit_gui_page_flow.clas.locals_imp.abap
@@ -0,0 +1,46 @@
+*"* use this source file for the definition and implementation of
+*"* local helper classes, interface definitions and type
+*"* declarations
+
+CLASS lcl_helper DEFINITION FINAL.
+ PUBLIC SECTION.
+ CLASS-METHODS list_changes_per_branch
+ IMPORTING
+ io_online TYPE REF TO zcl_abapgit_repo_online
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+
+CLASS lcl_helper IMPLEMENTATION.
+
+ METHOD list_changes_per_branch.
+
+ DATA lt_branches TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt.
+ DATA ls_branch LIKE LINE OF lt_branches.
+ DATA lt_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1_tt.
+ DATA lt_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt.
+ DATA lt_objects TYPE zif_abapgit_definitions=>ty_objects_tt.
+ DATA lv_starting_folder TYPE string.
+
+ lt_branches = zcl_abapgit_gitv2_porcelain=>list_branches(
+ iv_url = io_online->get_url( )
+ iv_prefix = 'refs/heads/' )->get_all( ).
+ LOOP AT lt_branches INTO ls_branch WHERE is_head = abap_false.
+ APPEND ls_branch-sha1 TO lt_sha1.
+ ENDLOOP.
+
+ lt_objects = zcl_abapgit_gitv2_porcelain=>list_no_blobs_multi(
+ iv_url = io_online->get_url( )
+ it_sha1 = lt_sha1 ).
+
+ lv_starting_folder = io_online->get_dot_abapgit( )->get_starting_folder( ) && '*'.
+
+ LOOP AT lt_branches INTO ls_branch WHERE is_head = abap_false.
+ lt_expanded = zcl_abapgit_git_porcelain=>full_tree(
+ it_objects = lt_objects
+ iv_parent = ls_branch-sha1 ).
+ DELETE lt_expanded WHERE path NP lv_starting_folder.
+ ENDLOOP.
+
+ ENDMETHOD.
+ENDCLASS.
diff --git a/src/ui/pages/zcl_abapgit_gui_page_flow.clas.xml b/src/ui/pages/zcl_abapgit_gui_page_flow.clas.xml
new file mode 100644
index 000000000..b30d50a8c
--- /dev/null
+++ b/src/ui/pages/zcl_abapgit_gui_page_flow.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ ZCL_ABAPGIT_GUI_PAGE_FLOW
+ E
+ abapGit - Flow page
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/ui/pages/zcl_abapgit_gui_page_repo_over.clas.abap b/src/ui/pages/zcl_abapgit_gui_page_repo_over.clas.abap
index 3aacbfcaf..91f200ec4 100644
--- a/src/ui/pages/zcl_abapgit_gui_page_repo_over.clas.abap
+++ b/src/ui/pages/zcl_abapgit_gui_page_repo_over.clas.abap
@@ -1007,6 +1007,12 @@ CLASS zcl_abapgit_gui_page_repo_over IMPLEMENTATION.
CREATE OBJECT ro_toolbar EXPORTING iv_id = 'toolbar-main'.
+ IF zcl_abapgit_persist_factory=>get_settings( )->read( )->is_feature_enabled( 'FLOW' ) = abap_true.
+ ro_toolbar->add(
+ iv_txt = zcl_abapgit_gui_buttons=>flow( )
+ iv_act = zif_abapgit_definitions=>c_action-flow ).
+ ENDIF.
+
ro_toolbar->add(
iv_txt = zcl_abapgit_gui_buttons=>new_online( )
iv_act = zif_abapgit_definitions=>c_action-repo_newonline
diff --git a/src/ui/routing/zcl_abapgit_gui_router.clas.abap b/src/ui/routing/zcl_abapgit_gui_router.clas.abap
index dc03d0a66..1560efb1b 100644
--- a/src/ui/routing/zcl_abapgit_gui_router.clas.abap
+++ b/src/ui/routing/zcl_abapgit_gui_router.clas.abap
@@ -609,6 +609,9 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION.
WHEN zif_abapgit_definitions=>c_action-repo_newonline. " New offline repo
rs_handled-page = zcl_abapgit_gui_page_addonline=>create( ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page.
+ WHEN zif_abapgit_definitions=>c_action-flow. " Flow page
+ rs_handled-page = zcl_abapgit_gui_page_flow=>create( ).
+ rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page.
WHEN zif_abapgit_definitions=>c_action-repo_refresh_checksums. " Rebuild local checksums
zcl_abapgit_services_repo=>refresh_local_checksums( lv_key ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
diff --git a/src/zif_abapgit_definitions.intf.abap b/src/zif_abapgit_definitions.intf.abap
index db523812b..0378e57ec 100644
--- a/src/zif_abapgit_definitions.intf.abap
+++ b/src/zif_abapgit_definitions.intf.abap
@@ -308,82 +308,83 @@ INTERFACE zif_abapgit_definitions
CONSTANTS c_author_regex TYPE string VALUE '^(.+) <(.*)> (\d{10})\s?.\d{4}$' ##NO_TEXT.
CONSTANTS:
BEGIN OF c_action,
- repo_refresh TYPE string VALUE 'repo_refresh',
- repo_remove TYPE string VALUE 'repo_remove',
- repo_settings TYPE string VALUE 'repo_settings',
- repo_local_settings TYPE string VALUE 'repo_local_settings',
- repo_remote_settings TYPE string VALUE 'repo_remote_settings',
- repo_background TYPE string VALUE 'repo_background',
- repo_infos TYPE string VALUE 'repo_infos',
- repo_purge TYPE string VALUE 'repo_purge',
- repo_delete_objects TYPE string VALUE 'repo_delete_objects',
- repo_activate_objects TYPE string VALUE 'repo_activate_objects',
- repo_newonline TYPE string VALUE 'repo_newonline',
- repo_newoffline TYPE string VALUE 'repo_newoffline',
- repo_add_all_obj_to_trans_req TYPE string VALUE 'repo_add_all_obj_to_trans_req',
- repo_refresh_checksums TYPE string VALUE 'repo_refresh_checksums',
- repo_toggle_fav TYPE string VALUE 'repo_toggle_fav',
- repo_transport_to_branch TYPE string VALUE 'repo_transport_to_branch',
- repo_syntax_check TYPE string VALUE 'repo_syntax_check',
- repo_code_inspector TYPE string VALUE 'repo_code_inspector',
- repo_open_in_master_lang TYPE string VALUE 'repo_open_in_master_lang',
- repo_log TYPE string VALUE 'repo_log',
abapgit_home TYPE string VALUE 'abapgit_home',
- zip_import TYPE string VALUE 'zip_import',
- zip_export TYPE string VALUE 'zip_export',
- zip_export_transport TYPE string VALUE 'zip_export_transport',
- zip_package TYPE string VALUE 'zip_package',
- zip_transport TYPE string VALUE 'zip_transport',
- zip_object TYPE string VALUE 'zip_object',
- rfc_compare TYPE string VALUE 'rfc_compare',
- performance_test TYPE string VALUE 'performance_test',
- ie_devtools TYPE string VALUE 'ie_devtools',
- git_pull TYPE string VALUE 'git_pull',
+ bg_update TYPE string VALUE 'bg_update',
+ change_order_by TYPE string VALUE 'change_order_by',
+ changelog TYPE string VALUE 'changelog',
+ clipboard TYPE string VALUE 'clipboard',
+ db_display TYPE string VALUE 'db_display',
+ db_edit TYPE string VALUE 'db_edit',
+ direction TYPE string VALUE 'direction',
+ documentation TYPE string VALUE 'documentation',
+ flow TYPE string VALUE 'flow',
git_branch_create TYPE string VALUE 'git_branch_create',
- git_branch_switch TYPE string VALUE 'git_branch_switch',
git_branch_delete TYPE string VALUE 'git_branch_delete',
git_branch_merge TYPE string VALUE 'git_branch_merge',
+ git_branch_switch TYPE string VALUE 'git_branch_switch',
+ git_commit TYPE string VALUE 'git_commit',
+ git_pull TYPE string VALUE 'git_pull',
git_tag_create TYPE string VALUE 'git_tag_create',
git_tag_delete TYPE string VALUE 'git_tag_delete',
git_tag_switch TYPE string VALUE 'git_tag_switch',
- git_commit TYPE string VALUE 'git_commit',
- db_display TYPE string VALUE 'db_display',
- db_edit TYPE string VALUE 'db_edit',
- bg_update TYPE string VALUE 'bg_update',
- go_home TYPE string VALUE 'go_home',
go_back TYPE string VALUE 'go_back',
- go_explore TYPE string VALUE 'go_explore',
- go_repo TYPE string VALUE 'go_repo',
- go_db TYPE string VALUE 'go_db',
go_background TYPE string VALUE 'go_background',
go_background_run TYPE string VALUE 'go_background_run',
- go_repo_diff TYPE string VALUE 'go_repo_diff',
- go_file_diff TYPE string VALUE 'go_file_diff',
- go_stage TYPE string VALUE 'go_stage',
- go_stage_transport TYPE string VALUE 'go_stage_transport',
go_commit TYPE string VALUE 'go_commit',
+ go_db TYPE string VALUE 'go_db',
go_debuginfo TYPE string VALUE 'go_debuginfo',
+ go_explore TYPE string VALUE 'go_explore',
+ go_file_diff TYPE string VALUE 'go_file_diff',
+ go_home TYPE string VALUE 'go_home',
+ go_patch TYPE string VALUE 'go_patch',
+ go_repo TYPE string VALUE 'go_repo',
+ go_repo_diff TYPE string VALUE 'go_repo_diff',
go_settings TYPE string VALUE 'go_settings',
go_settings_personal TYPE string VALUE 'go_settings_personal',
+ go_stage TYPE string VALUE 'go_stage',
+ go_stage_transport TYPE string VALUE 'go_stage_transport',
go_tutorial TYPE string VALUE 'go_tutorial',
- go_patch TYPE string VALUE 'go_patch',
+ goto_message TYPE string VALUE 'goto_message',
+ goto_source TYPE string VALUE 'goto_source',
+ homepage TYPE string VALUE 'homepage',
+ ie_devtools TYPE string VALUE 'ie_devtools',
jump TYPE string VALUE 'jump',
jump_transport TYPE string VALUE 'jump_transport',
jump_user TYPE string VALUE 'jump_user',
- url TYPE string VALUE 'url',
- goto_source TYPE string VALUE 'goto_source',
+ performance_test TYPE string VALUE 'performance_test',
+ repo_activate_objects TYPE string VALUE 'repo_activate_objects',
+ repo_add_all_obj_to_trans_req TYPE string VALUE 'repo_add_all_obj_to_trans_req',
+ repo_background TYPE string VALUE 'repo_background',
+ repo_code_inspector TYPE string VALUE 'repo_code_inspector',
+ repo_delete_objects TYPE string VALUE 'repo_delete_objects',
+ repo_infos TYPE string VALUE 'repo_infos',
+ repo_local_settings TYPE string VALUE 'repo_local_settings',
+ repo_log TYPE string VALUE 'repo_log',
+ repo_newoffline TYPE string VALUE 'repo_newoffline',
+ repo_newonline TYPE string VALUE 'repo_newonline',
+ repo_open_in_master_lang TYPE string VALUE 'repo_open_in_master_lang',
+ repo_purge TYPE string VALUE 'repo_purge',
+ repo_refresh TYPE string VALUE 'repo_refresh',
+ repo_refresh_checksums TYPE string VALUE 'repo_refresh_checksums',
+ repo_remote_settings TYPE string VALUE 'repo_remote_settings',
+ repo_remove TYPE string VALUE 'repo_remove',
+ repo_settings TYPE string VALUE 'repo_settings',
+ repo_syntax_check TYPE string VALUE 'repo_syntax_check',
+ repo_toggle_fav TYPE string VALUE 'repo_toggle_fav',
+ repo_transport_to_branch TYPE string VALUE 'repo_transport_to_branch',
+ rfc_compare TYPE string VALUE 'rfc_compare',
show_callstack TYPE string VALUE 'show_callstack',
- change_order_by TYPE string VALUE 'change_order_by',
- toggle_favorites TYPE string VALUE 'toggle_favorites',
- goto_message TYPE string VALUE 'goto_message',
- direction TYPE string VALUE 'direction',
- documentation TYPE string VALUE 'documentation',
- changelog TYPE string VALUE 'changelog',
- homepage TYPE string VALUE 'homepage',
- sponsor TYPE string VALUE 'sponsor',
- clipboard TYPE string VALUE 'clipboard',
- yank_to_clipboard TYPE string VALUE 'yank_to_clipboard',
show_hotkeys TYPE string VALUE 'show_hotkeys',
+ sponsor TYPE string VALUE 'sponsor',
+ toggle_favorites TYPE string VALUE 'toggle_favorites',
+ url TYPE string VALUE 'url',
+ yank_to_clipboard TYPE string VALUE 'yank_to_clipboard',
+ zip_export TYPE string VALUE 'zip_export',
+ zip_export_transport TYPE string VALUE 'zip_export_transport',
+ zip_import TYPE string VALUE 'zip_import',
+ zip_object TYPE string VALUE 'zip_object',
+ zip_package TYPE string VALUE 'zip_package',
+ zip_transport TYPE string VALUE 'zip_transport',
END OF c_action.
CONSTANTS c_spagpa_param_repo_key TYPE c LENGTH 20 VALUE 'REPO_KEY' ##NO_TEXT.
CONSTANTS c_spagpa_param_package TYPE c LENGTH 20 VALUE 'PACKAGE' ##NO_TEXT.
diff --git a/test/zcl_abapgit_integration_gitv2.clas.abap b/test/zcl_abapgit_integration_gitv2.clas.abap
new file mode 100644
index 000000000..8c6ea2d06
--- /dev/null
+++ b/test/zcl_abapgit_integration_gitv2.clas.abap
@@ -0,0 +1,7 @@
+CLASS zcl_abapgit_integration_gitv2 DEFINITION PUBLIC.
+ PUBLIC SECTION.
+ENDCLASS.
+
+CLASS zcl_abapgit_integration_gitv2 IMPLEMENTATION.
+
+ENDCLASS.
\ No newline at end of file
diff --git a/test/zcl_abapgit_integration_gitv2.clas.testclasses.abap b/test/zcl_abapgit_integration_gitv2.clas.testclasses.abap
new file mode 100644
index 000000000..c90b9fba3
--- /dev/null
+++ b/test/zcl_abapgit_integration_gitv2.clas.testclasses.abap
@@ -0,0 +1,45 @@
+CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL CRITICAL FINAL.
+
+ PRIVATE SECTION.
+ METHODS list_branches FOR TESTING RAISING cx_static_check.
+ METHODS test02 FOR TESTING RAISING cx_static_check.
+
+ENDCLASS.
+
+
+CLASS ltcl_test IMPLEMENTATION.
+
+ METHOD list_branches.
+
+ DATA lo_list TYPE REF TO zcl_abapgit_git_branch_list.
+ DATA lt_branches TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt.
+
+ lo_list = zcl_abapgit_gitv2_porcelain=>list_branches(
+ iv_url = 'https://github.com/abapGit/abapGit.git'
+ iv_prefix = 'refs/heads' ).
+
+ lt_branches = lo_list->get_all( ).
+
+ cl_abap_unit_assert=>assert_number_between(
+ number = lines( lt_branches )
+ lower = 0
+ upper = 100 ).
+
+ ENDMETHOD.
+
+ METHOD test02.
+
+ DATA lt_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt.
+
+ lt_expanded = zcl_abapgit_gitv2_porcelain=>list_no_blobs(
+ iv_url = 'https://github.com/abapGit/abapGit.git'
+ iv_sha1 = '7bdd8f9f4c6bb0ece461b78c7b559957fad6c3ae' ).
+
+ cl_abap_unit_assert=>assert_number_between(
+ number = lines( lt_expanded )
+ lower = 0
+ upper = 5000 ).
+
+ ENDMETHOD.
+
+ENDCLASS.