package forgepb // thank chatgpt for this because why. why write this if you can have it // kick this out in 30 seconds import ( "errors" "fmt" "io" "log" "os" "path/filepath" "time" ) func backupConfig() error { // make a new dir to backup the files now := time.Now() // timestamp := now.Format("2022.07.18.190545") // 50yr shout out to K&R timestamp := now.Format("2006.01.02.150405") // bummer. other date doesn't work? srcDir := filepath.Join(os.Getenv("FORGE_HOME")) destDir := filepath.Join(os.Getenv("FORGE_HOME"), timestamp) return backupFiles(srcDir, destDir) } func backupFiles(srcDir string, destDir string) error { // Create the destination directory err := os.MkdirAll(destDir, os.ModePerm) if err != nil { return errors.New(fmt.Sprintf("Failed to create directory: %v", err)) } // Read the contents of the source directory entries, err := os.ReadDir(srcDir) if err != nil { return errors.New(fmt.Sprintf("Failed to read directory: %v", err)) } // Iterate over the entries in the source directory for _, entry := range entries { // Skip directories and files that do not have the .test extension if entry.IsDir() { continue } log.Println("backing up file", entry.Name()) srcPath := filepath.Join(srcDir, entry.Name()) destPath := filepath.Join(destDir, entry.Name()) // Copy the file if err := copyFile(srcPath, destPath); err != nil { return errors.New(fmt.Sprintf("Failed to copy file %s: %v", entry.Name(), err)) } } return nil } // copyFile copies a file from src to dest func copyFile(src, dest string) error { srcFile, err := os.Open(src) if err != nil { return err } defer srcFile.Close() destFile, err := os.Create(dest) if err != nil { return err } defer destFile.Close() // Copy the content _, err = io.Copy(destFile, srcFile) return err }