code: func ChangesDirs(newDir, oldDir string) ([]Change, error) {
  	var (
  		oldRoot, newRoot *FileInfo
  	)
  	if oldDir == "" {
  		emptyDir, err := ioutil.TempDir("", "empty")
  		if err != nil {
  			return nil, err
  		}
  		defer os.Remove(emptyDir)
  		oldDir = emptyDir
  	}
  	oldRoot, newRoot, err := collectFileInfoForChanges(oldDir, newDir)
  	if err != nil {
  		return nil, err
  	}
  
  	return newRoot.Changes(oldRoot), nil
  }
docs: // ChangesDirs compares two directories and generates an array of Change objects describing the changes.
  // If oldDir is "", then all files in newDir will be Add-Changes.