anchor.diff:        BEGIN OF ty_commit,
           tree      TYPE zags_sha1,
           parent    TYPE zags_sha1,
  +        parent2   TYPE zags_sha1,
           author    TYPE string,
           committer TYPE string,
           body      TYPE string,
  
positive.code: 
    METHOD zif_ags_object~deserialize.
  
      DATA: lv_string TYPE string,
            lv_char40 TYPE c LENGTH 40,
            lv_mode   TYPE string,
            lv_len    TYPE i,
            lt_string TYPE TABLE OF string.
  
      FIELD-SYMBOLS: <lv_string> LIKE LINE OF lt_string.
  
  
      lv_string = zcl_ags_util=>xstring_to_string_utf8( iv_data ).
  
      SPLIT lv_string AT c_newline INTO TABLE lt_string.
  
      lv_mode = 'tree'.                                       "#EC NOTEXT
      LOOP AT lt_string ASSIGNING <lv_string>.
        lv_len = strlen( lv_mode ).
  
        IF NOT lv_mode IS INITIAL AND <lv_string>(lv_len) = lv_mode.
          CASE lv_mode.
            WHEN 'tree'.
              lv_char40 = <lv_string>+5.
              ms_data-tree = lv_char40.
              lv_mode = 'parent'.                             "#EC NOTEXT
            WHEN 'parent'.
              lv_char40 = <lv_string>+7.
              ms_data-parent = lv_char40.
              lv_mode = 'author'.                             "#EC NOTEXT
            WHEN 'author'.
              ms_data-author = <lv_string>+7.
              lv_mode = 'committer'.                          "#EC NOTEXT
            WHEN 'committer'.
              ms_data-committer = <lv_string>+10.
              CLEAR lv_mode.
          ENDCASE.
        ELSEIF lv_mode = 'parent' AND <lv_string>(6) = 'author'. "#EC NOTEXT
  * first commit doesnt have parent
          ms_data-author = <lv_string>+7.
          lv_mode = 'committer'.                              "#EC NOTEXT
        ELSE.
  * body
          CONCATENATE ms_data-body <lv_string> INTO ms_data-body
            SEPARATED BY c_newline.
        ENDIF.
      ENDLOOP.
  
  * strip first newline
      IF strlen( ms_data-body ) >= 2.
        ms_data-body = ms_data-body+2.
      ENDIF.
  
      IF ms_data-author IS INITIAL
          OR ms_data-committer IS INITIAL
          OR ms_data-tree IS INITIAL.
  * multiple parents? not supported
        ASSERT 1 = 2.
      ENDIF.
  
    ENDMETHOD.
  
  
negative.code: 
    METHOD zif_ags_object~serialize.
  
      CALL METHOD ('\PROGRAM=ZABAPGIT\CLASS=LCL_GIT_PACK')=>encode_commit
        EXPORTING
          is_commit = ms_data
        RECEIVING
          rv_data   = rv_data.
  
    ENDMETHOD.
  
  