code: func (a *API) Modify(ctx context.Context, addr storage.Address, path, contentHash, contentType string) (storage.Address, error) {
  	apiModifyCount.Inc(1)
  	quitC := make(chan bool)
  	trie, err := loadManifest(ctx, a.fileStore, addr, quitC, NOOPDecrypt)
  	if err != nil {
  		apiModifyFail.Inc(1)
  		return nil, err
  	}
  	if contentHash != "" {
  		entry := newManifestTrieEntry(&ManifestEntry{
  			Path:        path,
  			ContentType: contentType,
  		}, nil)
  		entry.Hash = contentHash
  		trie.addEntry(entry, quitC)
  	} else {
  		trie.deleteEntry(path, quitC)
  	}
  
  	if err := trie.recalcAndStore(); err != nil {
  		apiModifyFail.Inc(1)
  		return nil, err
  	}
  	return trie.ref, nil
  }
docs: // Modify loads manifest and checks the content hash before recalculating and storing the manifest.