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
}