anchor.diff:          OTHERS   = 5.
       IF sy-subrc <> 0.
         ROLLBACK WORK.
  -      RAISE EXCEPTION TYPE lcx_exception
  -        EXPORTING
  -          iv_text = 'error from SAVE_TEXT'.                 "#EC NOTEXT
  +      _raise 'error from SAVE_TEXT'.
       ENDIF.
   
       COMMIT WORK.
   
     ENDMETHOD.                    "save_text
   
  +  METHOD add.
  +
  +    DATA: lt_repos TYPE tt_repos_sha1.
  +
  +    FIELD-SYMBOLS: <ls_repo> LIKE LINE OF lt_repos.
  +
  +
  +    IF iv_branch IS INITIAL.
  +      _raise 'update, sha empty'.
  +    ENDIF.
  +
  +    lt_repos = list( ).
  +
  +    READ TABLE lt_repos WITH KEY url = is_repo-url branch_name = is_repo-branch_name
  +      TRANSPORTING NO FIELDS.
  +    IF sy-subrc = 0.
  +      _raise 'already inserted'.
  +    ENDIF.
  +
  +    APPEND INITIAL LINE TO lt_repos ASSIGNING <ls_repo>.
  +    <ls_repo>-url = is_repo-url.
  +    <ls_repo>-branch_name = is_repo-branch_name.
  +    <ls_repo>-sha1 = iv_branch.
  +
  +    save_text( lt_repos ).
  +
  +  ENDMETHOD.                    "insert
  +
     METHOD update.
   
       DATA: lt_repos TYPE tt_repos_sha1.
  
positive.code:       WHEN gc_ref_d.
          lv_type = '111'.
        WHEN OTHERS.
          RAISE EXCEPTION TYPE lcx_exception
            EXPORTING
              iv_text = 'Unexpected object type while encoding pack'. "#EC NOTEXT
      ENDCASE.
  
      lv_x4 = xstrlen( is_object-data ).
  
negative.code: 
      READ TABLE it_objects ASSIGNING <ls_tree> WITH KEY sha1 = iv_sha1 type = gc_tree.
      IF sy-subrc <> 0.
        _raise 'Walk, tree not found'.
      ENDIF.
  
      lt_nodes = lcl_pack=>decode_tree( <ls_tree>-data ).
  