anchor.diff:                ENDWHILE.
   
                 IF <ls_result>-obj_type IS INITIAL.
  -                lv_object = '<td rowspan="' && lv_span && '">&nbsp;</td>'.
  +                lv_object = '<td rowspan="' && lv_span && '">&nbsp;</td>' &&
  +                  '<td rowspan="' && lv_span && '"></td>'.
                   lv_trclass = ' class="unsupported"'.
                 ELSE.
                   CLEAR lv_trclass.
                   lv_object = '<td rowspan="' && lv_span && '">' &&
                     jump_link( iv_obj_type = <ls_result>-obj_type
                                iv_obj_name = <ls_result>-obj_name ) &&
  +                  '</td>' &&
  +                  '<td rowspan="' && lv_span && '">' &&
  +                  <ls_result>-package &&
                     '</td>'.
                 ENDIF.
               ELSE.
  
positive.code: 
    METHOD push.
  
  * todo, only works with root files
  
      DATA:
        lt_nodes TYPE lcl_git_pack=>ty_nodes_tt,
        lt_files TYPE ty_files_tt,
        lv_sha1  TYPE ty_sha1,
        lt_stage TYPE lcl_stage=>ty_stage_tt,
        lv_index TYPE i.
  
      FIELD-SYMBOLS: <ls_file>  LIKE LINE OF lt_files,
                     <ls_stage> LIKE LINE OF lt_stage,
                     <ls_node>  LIKE LINE OF lt_nodes.
  
  
      lt_nodes = root_tree( it_objects = io_repo->get_objects( )
                            iv_branch  = io_repo->get_sha1_remote( ) ).
  
  * todo, can only handle add
      lt_stage = io_stage->get_all( ).
      LOOP AT lt_stage ASSIGNING <ls_stage>.
        CASE <ls_stage>-method.
          WHEN lcl_stage=>c_method-add.
            APPEND <ls_stage>-file TO lt_files.
          WHEN OTHERS.
  * todo, work in progress see issue #5 on github
            _raise 'stage method not supported, todo'.
        ENDCASE.
      ENDLOOP.
  
      LOOP AT lt_files ASSIGNING <ls_file>.
        lv_index = sy-tabix.
        READ TABLE lt_nodes ASSIGNING <ls_node> WITH KEY name = <ls_file>-filename.
        IF sy-subrc <> 0.
  * new files
          APPEND INITIAL LINE TO lt_nodes ASSIGNING <ls_node>.
          <ls_node>-chmod = gc_chmod-file.
          <ls_node>-name = <ls_file>-filename.
        ENDIF.
  
        lv_sha1 = lcl_hash=>sha1( iv_type = gc_type-blob iv_data = <ls_file>-data ).
        IF <ls_node>-sha1 <> lv_sha1.
          <ls_node>-sha1 = lv_sha1.
        ELSE.
          DELETE lt_files INDEX lv_index.
        ENDIF.
      ENDLOOP.
  
      IF lt_files[] IS INITIAL.
        _raise 'no files'.
      ENDIF.
  
      rv_branch = receive_pack( is_comment = is_comment
                                io_repo    = io_repo
                                it_nodes   = lt_nodes
                                it_files   = lt_files
                                iv_branch  = io_repo->get_sha1_remote( ) ).
  
    ENDMETHOD.                    "push
  
    METHOD root_tree.
  
      DATA: ls_object LIKE LINE OF it_objects,
            ls_commit TYPE lcl_git_pack=>ty_commit.
  
negative.code:     ls_object-type = gc_type-commit.
      ls_object-data = lv_commit.
      APPEND ls_object TO lt_objects.
  
      LOOP AT it_trees ASSIGNING <ls_tree>.
        CLEAR ls_object.
        ls_object-sha1 = <ls_tree>-sha1.
        ls_object-type = gc_type-tree.
        ls_object-data = <ls_tree>-data.
        APPEND ls_object TO lt_objects.
      ENDLOOP.
  
      LOOP AT it_blobs ASSIGNING <ls_blob>.
        CLEAR ls_object.
        ls_object-sha1 = lcl_hash=>sha1( iv_type = gc_type-blob iv_data = <ls_blob>-data ).
        ls_object-type = gc_type-blob.
        ls_object-data = <ls_blob>-data.
        APPEND ls_object TO lt_objects.
      ENDLOOP.
  
  