func remoteToLocal()

in infra/module-swapper/cmd/swap.go [196:244]


func remoteToLocal(f []byte, p string) ([]byte, error) {
	if _, err := os.Stat(p); err != nil {
		return nil, err
	}
	f = commentVersions(f)
	absPath, err := filepath.Abs(filepath.Dir(p))
	if err != nil {
		return nil, fmt.Errorf("failed to get absolute path: %v", err)
	}
	fqnMap := make(map[string]LocalTerraformModule, len(localModules))
	for _, l := range localModules {
		fqnMap[l.ModuleFQN] = l
	}
	currentReferences, err := moduleSourceRefs(f, p)
	if err != nil {
		return nil, fmt.Errorf("failed to write find module sources: %v", err)
	}
	newReferences := map[string]string{}
	for label, source := range currentReferences {
		localModule, exists := fqnMap[source]
		if !exists {
			continue
		}
		newModulePath, err := filepath.Rel(absPath, localModule.Dir)
		if err != nil {
			return nil, fmt.Errorf("failed to find relative path: %v", err)
		}
		newReferences[label] = newModulePath
	}
	if len(currentReferences) == 0 {
		return f, nil
	}
	updated, err := writeModuleRefs(f, p, newReferences)
	if err != nil {
		return nil, fmt.Errorf("failed to write updated module sources: %v", err)
	}
	// print diff info
	log.Printf("Modifications made to file %s", p)
	diff := difflib.UnifiedDiff{
		A:        difflib.SplitLines(string(f)),
		B:        difflib.SplitLines(string(updated)),
		FromFile: "Original",
		ToFile:   "Modified",
		Context:  3,
	}
	diffInfo, _ := difflib.GetUnifiedDiffString(diff)
	log.Println(diffInfo)
	return updated, nil
}