in version_helper.go [110:140]
func copyFile(src, dst string) error {
cleanedSrc := filepath.Clean(src)
cleanedDst := filepath.Clean(dst)
if _, err := os.Stat(cleanedSrc); os.IsNotExist(err) {
return fmt.Errorf("source file does not exist: %s", src)
}
dstDir := filepath.Dir(cleanedDst)
if _, err := os.Stat(dstDir); os.IsNotExist(err) && os.MkdirAll(dstDir, 0750) != nil {
return fmt.Errorf("failed to create destination folder: %s", dstDir)
}
if _, err := os.Stat(cleanedDst); !os.IsNotExist(err) && os.Remove(cleanedDst) != nil {
return fmt.Errorf("failed to delete destination file: %s", dst)
}
srcFile, err := os.Open(cleanedSrc)
if err != nil {
return fmt.Errorf("failed to open source file: %s", src)
}
defer func() { _ = srcFile.Close() }()
dstFile, err := os.Create(cleanedDst)
if err != nil {
return fmt.Errorf("failed to create destination file: %s", dst)
}
defer func() { _ = dstFile.Close() }()
if _, err = io.Copy(dstFile, srcFile); err != nil {
return fmt.Errorf("failed to copy file: %s", err)
}
return nil
}