Wrote function to copy embedded config files to a config directory

master
Aadhavan Srinivasan 2 months ago
parent 94d1d99af2
commit 76fc61a19d

@ -2,13 +2,76 @@ package main
import (
"ccat/stack"
"embed"
"errors"
"io/fs"
"os"
"os/user"
"path/filepath"
"regexp"
"runtime"
"strings"
"gopkg.in/yaml.v2"
)
//go:embed config
var storedConfigs embed.FS // Embed the folder containing config files
func runningOnWindows() bool {
return runtime.GOOS == "windows"
}
// generateDefaultConfigs is used to generate a folder of default config files
// for common languages. These default config files are embedded into the program, and will
// be outputted into a directory.
//
// If there is an error encountered, the error is returned.
func generateDefaultConfigs() error {
var configOutputPath string // Location of config files, depends on OS
if runningOnWindows() {
configOutputPath = "%APPDATA%\\ccat"
} else {
currentUser, err := user.Current()
if err != nil {
panic(err)
}
configOutputPath = filepath.Join("/home/" + currentUser.Username + "/.config/ccat/")
}
err := os.MkdirAll(configOutputPath, 0755)
if err != nil {
if os.IsExist(err) {
return errors.New("Directory already exists.")
} else {
return errors.New("Unable to create directory.")
}
}
// Copy each folder from the embedded filesystem, into the destination path
err = fs.WalkDir(storedConfigs, "config", func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
if d.IsDir() { // Skip directories
return nil
}
relPath, _ := filepath.Rel("config", path)
dstPath := filepath.Join(configOutputPath, relPath) // Destination path
data, err := os.ReadFile(path)
if err != nil {
return err
}
if err := os.WriteFile(dstPath, data, 0644); err != nil {
return err
}
return nil
})
return nil
}
// loadConfig takes in the filename of a config file. It reads the file,
// and returns a stack of RegColors, with the item at the bottom being the one that
// was read first. This ensures that, _when accessing the RegColors in the stack, the last

Loading…
Cancel
Save