mirror of https://github.com/cheat/cheat.git
refactor(installer): externalize installer
Move installation-related code out of `main.go` and into a new `installer.Run` method.
This commit is contained in:
parent
a81dd96ff4
commit
ecc96c64f9
|
@ -5,7 +5,6 @@ package main
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
@ -74,62 +73,16 @@ func main() {
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// read the config template
|
// choose a confpath
|
||||||
configs := configs()
|
|
||||||
|
|
||||||
// determine the appropriate paths for config data and (optional) community
|
|
||||||
// cheatsheets based on the user's platform
|
|
||||||
confpath = confpaths[0]
|
confpath = confpaths[0]
|
||||||
confdir := path.Dir(confpath)
|
|
||||||
|
|
||||||
// create paths for community and personal cheatsheets
|
// run the installer
|
||||||
community := path.Join(confdir, "/cheatsheets/community")
|
if err := installer.Run(configs(), confpath); err != nil {
|
||||||
personal := path.Join(confdir, "/cheatsheets/personal")
|
fmt.Fprintf(os.Stderr, "failed to run installer: %v\n", err)
|
||||||
|
|
||||||
// template the above paths into the default configs
|
|
||||||
configs = strings.Replace(configs, "COMMUNITY_PATH", community, -1)
|
|
||||||
configs = strings.Replace(configs, "PERSONAL_PATH", personal, -1)
|
|
||||||
|
|
||||||
// prompt the user to download the community cheatsheets
|
|
||||||
yes, err = installer.Prompt(
|
|
||||||
"Would you like to download the community cheatsheets? [Y/n]",
|
|
||||||
true,
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Fprintf(os.Stderr, "failed to create config: %v\n", err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
// clone the community cheatsheets if so instructed
|
|
||||||
if yes {
|
|
||||||
// clone the community cheatsheets
|
|
||||||
if err := installer.Clone(community); err != nil {
|
|
||||||
fmt.Fprintf(os.Stderr, "failed to create config: %v\n", err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
// also create a directory for personal cheatsheets
|
|
||||||
if err := os.MkdirAll(personal, os.ModePerm); err != nil {
|
|
||||||
fmt.Fprintf(
|
|
||||||
os.Stderr,
|
|
||||||
"failed to create config: failed to create directory: %s: %v\n",
|
|
||||||
personal,
|
|
||||||
err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// the config file does not exist, so we'll try to create one
|
|
||||||
if err = config.Init(confpath, configs); err != nil {
|
|
||||||
fmt.Fprintf(
|
|
||||||
os.Stderr,
|
|
||||||
"failed to create config file: %s: %v\n",
|
|
||||||
confpath,
|
|
||||||
err,
|
|
||||||
)
|
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// notify the user and exit
|
||||||
fmt.Printf("Created config file: %s\n", confpath)
|
fmt.Printf("Created config file: %s\n", confpath)
|
||||||
fmt.Println("Please read this file for advanced configuration information.")
|
fmt.Println("Please read this file for advanced configuration information.")
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
|
|
|
@ -8,8 +8,8 @@ import (
|
||||||
|
|
||||||
const cloneURL = "https://github.com/cheat/cheatsheets.git"
|
const cloneURL = "https://github.com/cheat/cheatsheets.git"
|
||||||
|
|
||||||
// Clone clones the community cheatsheets
|
// clone clones the community cheatsheets
|
||||||
func Clone(path string) error {
|
func clone(path string) error {
|
||||||
|
|
||||||
// perform the clone in a shell
|
// perform the clone in a shell
|
||||||
cmd := exec.Command("git", "clone", cloneURL, path)
|
cmd := exec.Command("git", "clone", cloneURL, path)
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
package installer
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"path"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/cheat/cheat/internal/config"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Run runs the installer
|
||||||
|
func Run(configs string, confpath string) error {
|
||||||
|
|
||||||
|
// determine the appropriate paths for config data and (optional) community
|
||||||
|
// cheatsheets based on the user's platform
|
||||||
|
confdir := path.Dir(confpath)
|
||||||
|
|
||||||
|
// create paths for community and personal cheatsheets
|
||||||
|
community := path.Join(confdir, "/cheatsheets/community")
|
||||||
|
personal := path.Join(confdir, "/cheatsheets/personal")
|
||||||
|
|
||||||
|
// template the above paths into the default configs
|
||||||
|
configs = strings.Replace(configs, "COMMUNITY_PATH", community, -1)
|
||||||
|
configs = strings.Replace(configs, "PERSONAL_PATH", personal, -1)
|
||||||
|
|
||||||
|
// prompt the user to download the community cheatsheets
|
||||||
|
yes, err := Prompt(
|
||||||
|
"Would you like to download the community cheatsheets? [Y/n]",
|
||||||
|
true,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to prompt: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// clone the community cheatsheets if so instructed
|
||||||
|
if yes {
|
||||||
|
// clone the community cheatsheets
|
||||||
|
if err := clone(community); err != nil {
|
||||||
|
return fmt.Errorf("failed to clone cheatsheets: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// also create a directory for personal cheatsheets
|
||||||
|
if err := os.MkdirAll(personal, os.ModePerm); err != nil {
|
||||||
|
return fmt.Errorf("failed to create directory: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// the config file does not exist, so we'll try to create one
|
||||||
|
if err = config.Init(confpath, configs); err != nil {
|
||||||
|
return fmt.Errorf("failed to create config file: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
Reference in New Issue