Merge pull request #712 from larshp/issue_710

Issue 710
This commit is contained in:
Lars Hvam 2017-04-15 08:02:45 +02:00 committed by GitHub
commit 151264fb67
2 changed files with 58 additions and 11 deletions

View File

@ -1510,7 +1510,6 @@ CLASS lcl_git_porcelain IMPLEMENTATION.
DATA: lt_nodes TYPE lcl_git_pack=>ty_nodes_tt,
ls_tree LIKE LINE OF rt_trees,
lv_sub TYPE string,
lv_len TYPE i,
lt_folders TYPE ty_folders_tt.
@ -1537,19 +1536,19 @@ CLASS lcl_git_porcelain IMPLEMENTATION.
ENDLOOP.
* folders
lv_sub = <ls_folder>-path && '+*'.
LOOP AT lt_folders ASSIGNING <ls_sub>
WHERE count = <ls_folder>-count + 1 AND path CP lv_sub.
APPEND INITIAL LINE TO lt_nodes ASSIGNING <ls_node>.
<ls_node>-chmod = gc_chmod-dir.
LOOP AT lt_folders ASSIGNING <ls_sub> WHERE count = <ls_folder>-count + 1.
lv_len = strlen( <ls_folder>-path ).
IF strlen( <ls_sub>-path ) > lv_len AND <ls_sub>-path(lv_len) = <ls_folder>-path.
APPEND INITIAL LINE TO lt_nodes ASSIGNING <ls_node>.
<ls_node>-chmod = gc_chmod-dir.
* extract folder name, this can probably be done easier using regular expressions
lv_len = strlen( <ls_folder>-path ).
<ls_node>-name = <ls_sub>-path+lv_len.
lv_len = strlen( <ls_node>-name ) - 1.
<ls_node>-name = <ls_node>-name(lv_len).
<ls_node>-name = <ls_sub>-path+lv_len.
lv_len = strlen( <ls_node>-name ) - 1.
<ls_node>-name = <ls_node>-name(lv_len).
<ls_node>-sha1 = <ls_sub>-sha1.
<ls_node>-sha1 = <ls_sub>-sha1.
ENDIF.
ENDLOOP.
CLEAR ls_tree.

View File

@ -457,6 +457,10 @@ CLASS ltcl_git_porcelain DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHO
RAISING lcx_exception,
root_empty FOR TESTING
RAISING lcx_exception,
namespaces FOR TESTING
RAISING lcx_exception,
more_sub FOR TESTING
RAISING lcx_exception,
sub FOR TESTING
RAISING lcx_exception.
@ -530,6 +534,50 @@ CLASS ltcl_git_porcelain IMPLEMENTATION.
ENDMETHOD.
METHOD more_sub.
FIELD-SYMBOLS: <ls_tree> LIKE LINE OF mt_trees.
append( iv_path = '/src/foo_a/foo_a1/'
iv_name = 'a1.txt' ).
append( iv_path = '/src/foo_a/foo_a2/'
iv_name = 'a2.txt' ).
mt_trees = lcl_git_porcelain=>build_trees( mt_expanded ).
cl_abap_unit_assert=>assert_equals(
act = lines( mt_trees )
exp = 5 ).
LOOP AT mt_trees ASSIGNING <ls_tree>.
cl_abap_unit_assert=>assert_not_initial( <ls_tree>-data ).
ENDLOOP.
ENDMETHOD.
METHOD namespaces.
FIELD-SYMBOLS: <ls_tree> LIKE LINE OF mt_trees.
append( iv_path = '/src/#foo#a/#foo#a1/'
iv_name = 'a1.txt' ).
append( iv_path = '/src/#foo#a/#foo#a2/'
iv_name = 'a2.txt' ).
mt_trees = lcl_git_porcelain=>build_trees( mt_expanded ).
cl_abap_unit_assert=>assert_equals(
act = lines( mt_trees )
exp = 5 ).
LOOP AT mt_trees ASSIGNING <ls_tree>.
cl_abap_unit_assert=>assert_not_initial( <ls_tree>-data ).
ENDLOOP.
ENDMETHOD.
METHOD root_empty.
append( iv_path = '/sub/'