#234, Merge branch 'master' into t234, conflicts

This commit is contained in:
atsy 2016-05-30 22:55:25 +03:00
commit 4747115118

View File

@ -3,7 +3,7 @@ REPORT zabapgit.
* See http://www.abapgit.org * See http://www.abapgit.org
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
gc_abap_version TYPE string VALUE 'v1.9.13'. "#EC NOTEXT gc_abap_version TYPE string VALUE 'v1.9.14'. "#EC NOTEXT
******************************************************************************** ********************************************************************************
* The MIT License (MIT) * The MIT License (MIT)
@ -2777,12 +2777,14 @@ CLASS lcl_diff IMPLEMENTATION.
ENDCLASS. "lcl_diff IMPLEMENTATION ENDCLASS. "lcl_diff IMPLEMENTATION
CLASS ltcl_git_pack DEFINITION DEFERRED.
*----------------------------------------------------------------------* *----------------------------------------------------------------------*
* CLASS lcl_pack DEFINITION * CLASS lcl_pack DEFINITION
*----------------------------------------------------------------------* *----------------------------------------------------------------------*
* *
*----------------------------------------------------------------------* *----------------------------------------------------------------------*
CLASS lcl_git_pack DEFINITION FINAL. CLASS lcl_git_pack DEFINITION FINAL FRIENDS ltcl_git_pack.
PUBLIC SECTION. PUBLIC SECTION.
TYPES: BEGIN OF ty_node, TYPES: BEGIN OF ty_node,
@ -2859,6 +2861,10 @@ CLASS lcl_git_pack DEFINITION FINAL.
EXPORTING ev_header TYPE i EXPORTING ev_header TYPE i
CHANGING cv_delta TYPE xstring. CHANGING cv_delta TYPE xstring.
CLASS-METHODS sort_tree
IMPORTING it_nodes TYPE ty_nodes_tt
RETURNING VALUE(rt_nodes) TYPE ty_nodes_tt.
CLASS-METHODS get_type CLASS-METHODS get_type
IMPORTING iv_x TYPE x IMPORTING iv_x TYPE x
RETURNING VALUE(rv_type) TYPE ty_type RETURNING VALUE(rv_type) TYPE ty_type
@ -14385,6 +14391,38 @@ ENDCLASS. "lcl_hash IMPLEMENTATION
*----------------------------------------------------------------------* *----------------------------------------------------------------------*
CLASS lcl_git_pack IMPLEMENTATION. CLASS lcl_git_pack IMPLEMENTATION.
METHOD sort_tree.
TYPES: BEGIN OF ty_sort,
sort TYPE string,
node TYPE ty_node,
END OF ty_sort.
DATA: lt_sort TYPE STANDARD TABLE OF ty_sort WITH DEFAULT KEY.
FIELD-SYMBOLS: <ls_sort> LIKE LINE OF lt_sort,
<ls_node> LIKE LINE OF it_nodes.
LOOP AT it_nodes ASSIGNING <ls_node>.
APPEND INITIAL LINE TO lt_sort ASSIGNING <ls_sort>.
IF <ls_node>-chmod = gc_chmod-dir.
CONCATENATE <ls_node>-name '/' INTO <ls_sort>-sort.
ELSE.
<ls_sort>-sort = <ls_node>-name.
ENDIF.
<ls_sort>-node = <ls_node>.
ENDLOOP.
* following has to be done, or unpack will fail on server side
SORT lt_sort BY sort ASCENDING.
LOOP AT lt_sort ASSIGNING <ls_sort>.
APPEND <ls_sort>-node TO rt_nodes.
ENDLOOP.
ENDMETHOD.
METHOD type_and_length. METHOD type_and_length.
DATA: lv_bits TYPE string, DATA: lv_bits TYPE string,
@ -14485,9 +14523,7 @@ CLASS lcl_git_pack IMPLEMENTATION.
FIELD-SYMBOLS: <ls_node> LIKE LINE OF it_nodes. FIELD-SYMBOLS: <ls_node> LIKE LINE OF it_nodes.
lt_nodes[] = it_nodes[]. lt_nodes = sort_tree( it_nodes ).
* following has to be done, or unpack will fail on server side
SORT lt_nodes BY name ASCENDING.
LOOP AT lt_nodes ASSIGNING <ls_node>. LOOP AT lt_nodes ASSIGNING <ls_node>.
ASSERT NOT <ls_node>-chmod IS INITIAL. ASSERT NOT <ls_node>-chmod IS INITIAL.
@ -20951,7 +20987,9 @@ CLASS ltcl_git_pack DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FI
pack_long FOR TESTING pack_long FOR TESTING
RAISING lcx_exception, RAISING lcx_exception,
pack_multiple FOR TESTING pack_multiple FOR TESTING
RAISING lcx_exception. RAISING lcx_exception,
sort_tree1 FOR TESTING,
sort_tree2 FOR TESTING.
METHODS: METHODS:
object_blob object_blob
@ -21218,6 +21256,62 @@ ENDCLASS. "ltcl_url IMPLEMENTATION
*----------------------------------------------------------------------* *----------------------------------------------------------------------*
CLASS ltcl_git_pack IMPLEMENTATION. CLASS ltcl_git_pack IMPLEMENTATION.
METHOD sort_tree1.
DATA: lt_tree TYPE lcl_git_pack=>ty_nodes_tt.
FIELD-SYMBOLS: <ls_tree> LIKE LINE OF lt_tree.
APPEND INITIAL LINE TO lt_tree ASSIGNING <ls_tree>.
<ls_tree>-chmod = gc_chmod-file.
<ls_tree>-name = 'b.txt'.
<ls_tree>-sha1 = '0123'.
APPEND INITIAL LINE TO lt_tree ASSIGNING <ls_tree>.
<ls_tree>-chmod = gc_chmod-file.
<ls_tree>-name = 'a.txt'.
<ls_tree>-sha1 = '0123'.
lt_tree = lcl_git_pack=>sort_tree( lt_tree ).
READ TABLE lt_tree INDEX 1 ASSIGNING <ls_tree>.
cl_abap_unit_assert=>assert_subrc( ).
cl_abap_unit_assert=>assert_equals(
act = <ls_tree>-name
exp = 'a.txt' ).
ENDMETHOD.
METHOD sort_tree2.
DATA: lt_tree TYPE lcl_git_pack=>ty_nodes_tt.
FIELD-SYMBOLS: <ls_tree> LIKE LINE OF lt_tree.
APPEND INITIAL LINE TO lt_tree ASSIGNING <ls_tree>.
<ls_tree>-chmod = gc_chmod-file.
<ls_tree>-name = 'foo.txt'.
<ls_tree>-sha1 = '0123'.
APPEND INITIAL LINE TO lt_tree ASSIGNING <ls_tree>.
<ls_tree>-chmod = gc_chmod-dir.
<ls_tree>-name = 'foo'.
<ls_tree>-sha1 = '0123'.
lt_tree = lcl_git_pack=>sort_tree( lt_tree ).
READ TABLE lt_tree INDEX 1 ASSIGNING <ls_tree>.
cl_abap_unit_assert=>assert_subrc( ).
cl_abap_unit_assert=>assert_equals(
act = <ls_tree>-name
exp = 'foo.txt' ).
ENDMETHOD.
METHOD pack_multiple. METHOD pack_multiple.
CONSTANTS: lc_data TYPE x LENGTH 15 VALUE '123456789ABCDEF545794254754554', CONSTANTS: lc_data TYPE x LENGTH 15 VALUE '123456789ABCDEF545794254754554',