code: func (f1 *File) CompareTo(f2 *File) (changed, removed []*FileDataEntry) {
  	if f1.Path != f2.Path {
  		return f1.Data, f2.Data
  	}
  	for _, f2Data := range f2.Data {
  		var found bool
  		for _, f1Data := range f1.Data {
  			if f1Data.Key == f2Data.Key {
  				found = true
  				if !bytes.Equal(f1Data.Value, f2Data.Value) {
  					changed = append(changed, f1Data)
  					break
  				}
  			}
  		}
  		if !found {
  			removed = append(removed, f2Data)
  		}
  	}
  	for _, f1Data := range f1.Data {
  		var found bool
  		for _, f2Data := range f2.Data {
  			if f1Data.Key == f2Data.Key {
  				found = true
  				break
  			}
  		}
  		if !found {
  			changed = append(changed, f1Data)
  		}
  	}
  
  	return
  }
docs: // CompareTo compares two files - new, modified and deleted entries. Result is against the parameter.