mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +08:00
encode and decode signed commits (#3373)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
aa71ed52ae
commit
47a2332cc7
|
@ -18,6 +18,7 @@ CLASS zcl_abapgit_git_pack DEFINITION
|
|||
parent2 TYPE zif_abapgit_definitions=>ty_sha1,
|
||||
author TYPE string,
|
||||
committer TYPE string,
|
||||
gpgsig TYPE string,
|
||||
body TYPE string,
|
||||
END OF ty_commit .
|
||||
TYPES:
|
||||
|
@ -284,11 +285,13 @@ CLASS ZCL_ABAPGIT_GIT_PACK IMPLEMENTATION.
|
|||
|
||||
METHOD decode_commit.
|
||||
|
||||
DATA: lv_string TYPE string,
|
||||
lv_word TYPE string,
|
||||
lv_length TYPE i,
|
||||
lv_trash TYPE string ##NEEDED,
|
||||
lt_string TYPE TABLE OF string.
|
||||
DATA: lv_string TYPE string,
|
||||
lv_word TYPE string,
|
||||
lv_offset TYPE i,
|
||||
lv_length TYPE i,
|
||||
lv_length_gpgsig TYPE i,
|
||||
lv_trash TYPE string ##NEEDED,
|
||||
lt_string TYPE TABLE OF string.
|
||||
|
||||
FIELD-SYMBOLS: <lv_string> LIKE LINE OF lt_string.
|
||||
|
||||
|
@ -317,10 +320,23 @@ CLASS ZCL_ABAPGIT_GIT_PACK IMPLEMENTATION.
|
|||
rs_commit-committer = <lv_string>+10.
|
||||
EXIT. " current loop
|
||||
WHEN OTHERS.
|
||||
ASSERT 0 = 1.
|
||||
ASSERT 1 = 0.
|
||||
ENDCASE.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
IF lv_string+0(6) = 'gpgsig'.
|
||||
FIND REGEX |-----END PGP SIGNATURE-----[[:space:]]+|
|
||||
IN lv_string
|
||||
MATCH OFFSET lv_offset
|
||||
MATCH LENGTH lv_length.
|
||||
lv_length = lv_length - 1.
|
||||
lv_length_gpgsig = lv_offset + lv_length - 7.
|
||||
lv_length = lv_offset + lv_length.
|
||||
rs_commit-gpgsig = lv_string+7(lv_length_gpgsig).
|
||||
lv_string = lv_string+lv_length.
|
||||
ENDIF.
|
||||
|
||||
rs_commit-body = lv_string+1.
|
||||
|
||||
IF rs_commit-author IS INITIAL
|
||||
|
@ -698,6 +714,12 @@ CLASS ZCL_ABAPGIT_GIT_PACK IMPLEMENTATION.
|
|||
INTO lv_tmp SEPARATED BY space. "#EC NOTEXT
|
||||
CONCATENATE lv_string lv_tmp zif_abapgit_definitions=>c_newline INTO lv_string.
|
||||
|
||||
IF NOT is_commit-gpgsig IS INITIAL.
|
||||
CONCATENATE 'gpgsig' is_commit-gpgsig
|
||||
INTO lv_tmp SEPARATED BY space.
|
||||
CONCATENATE lv_string lv_tmp INTO lv_string.
|
||||
ENDIF.
|
||||
|
||||
CONCATENATE lv_string zif_abapgit_definitions=>c_newline is_commit-body INTO lv_string.
|
||||
|
||||
rv_data = zcl_abapgit_convert=>string_to_xstring_utf8( lv_string ).
|
||||
|
|
|
@ -231,6 +231,8 @@ CLASS ltcl_pack DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL.
|
|||
RAISING zcx_abapgit_exception,
|
||||
commit_newline FOR TESTING
|
||||
RAISING zcx_abapgit_exception,
|
||||
signed_commit FOR TESTING
|
||||
RAISING zcx_abapgit_exception,
|
||||
pack_short FOR TESTING
|
||||
RAISING zcx_abapgit_exception,
|
||||
pack_long FOR TESTING
|
||||
|
@ -484,6 +486,29 @@ CLASS ltcl_pack IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD signed_commit.
|
||||
|
||||
DATA: ls_commit TYPE zcl_abapgit_git_pack=>ty_commit,
|
||||
ls_result TYPE zcl_abapgit_git_pack=>ty_commit,
|
||||
lv_data TYPE xstring.
|
||||
|
||||
ls_commit-tree = c_sha.
|
||||
ls_commit-parent = c_sha.
|
||||
ls_commit-author = 'larshp <larshp@hotmail.com> 1387823471 +0100'.
|
||||
ls_commit-committer = 'larshp <larshp@hotmail.com> 1387823471 +0100'.
|
||||
ls_commit-body = 'very informative'.
|
||||
ls_commit-gpgsig = '-----END PGP SIGNATURE-----'
|
||||
&& |{ zif_abapgit_definitions=>c_newline } { zif_abapgit_definitions=>c_newline }|.
|
||||
|
||||
lv_data = zcl_abapgit_git_pack=>encode_commit( ls_commit ).
|
||||
ls_result = zcl_abapgit_git_pack=>decode_commit( lv_data ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = ls_commit
|
||||
act = ls_result ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_git_pack_decode_commit DEFINITION FOR TESTING
|
||||
|
|
Loading…
Reference in New Issue
Block a user