code: func (cs *CachableSource) HandleChange(kind fsutil.ChangeKind, p string, fi os.FileInfo, err error) (retErr error) {
  	cs.mu.Lock()
  	if cs.txn == nil {
  		cs.txn = cs.tree.Txn()
  	}
  	if kind == fsutil.ChangeKindDelete {
  		cs.txn.Delete([]byte(p))
  		cs.mu.Unlock()
  		return
  	}
  
  	h, ok := fi.(hashed)
  	if !ok {
  		cs.mu.Unlock()
  		return errors.Errorf("invalid fileinfo: %s", p)
  	}
  
  	hfi := &fileInfo{
  		sum: h.Digest().Hex(),
  	}
  	cs.txn.Insert([]byte(p), hfi)
  	cs.mu.Unlock()
  	return nil
  }
docs: // HandleChange notifies the source about a modification operation