code: func (old *Manifest) Diff(new *Manifest) *ManifestDiff {
  	ret := &ManifestDiff{
  		Old:         old,
  		New:         new,
  		Directories: map[string]*ManifestDiff_Directory{},
  	}
  	ret.Overall = zeroCmpTwo(old, new, func() ManifestDiff_Stat {
  		var anyChanged modifiedTracker
  
  		for path, olddir := range old.Directories {
  			dir := olddir.Diff(new.Directories[path])
  			ret.Directories[path] = dir
  			anyChanged.add(dir.Overall)
  		}
  		for path, newdir := range new.Directories {
  			if _, ok := ret.Directories[path]; !ok {
  				dir := old.Directories[path].Diff(newdir)
  				ret.Directories[path] = dir
  				anyChanged.add(dir.Overall)
  			}
  		}
  
  		return anyChanged.status()
  	})
  	return ret
  }
docs: // Diff generates a ManifestDiff object which shows what changed between the
  // `old` manifest and the `new` manifest.
  //
  // This only calculates the pure-data differences. Notably, this will not reach
  // out to any remote services to populate the git_history field.