Generate the package and apply the template
This commit is contained in:
parent
a2279925d3
commit
cf3041ed2d
@ -3,6 +3,7 @@ package operators
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
@ -28,8 +29,6 @@ func Generate() error {
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Println(opts)
|
||||
|
||||
pwd, err := filepath.Abs(".")
|
||||
if err != nil {
|
||||
return err
|
||||
@ -37,6 +36,8 @@ func Generate() error {
|
||||
|
||||
dir := filepath.Join(pwd, opts.title)
|
||||
|
||||
fmt.Println()
|
||||
|
||||
_, err = git.PlainClone(dir, false, &git.CloneOptions{
|
||||
URL: "https://github.com/pluto-language/package-template",
|
||||
Progress: os.Stdout,
|
||||
@ -51,6 +52,13 @@ func Generate() error {
|
||||
return err
|
||||
}
|
||||
|
||||
err = applyOptionsToTemplate(dir, opts)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Printf("\nPackage '%s' has been created!\n", opts.title)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -58,27 +66,27 @@ func promptOptions() (*genOpts, error) {
|
||||
reader := bufio.NewReader(os.Stdin)
|
||||
colour := color.New(color.Bold)
|
||||
|
||||
title, err := promptOption("package title:", reader, colour)
|
||||
title, err := promptOption("package title", reader, colour)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
display, err := promptOption("display name:", reader, colour)
|
||||
display, err := promptOption("display name", reader, colour)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
description, err := promptOption("description:", reader, colour)
|
||||
description, err := promptOption("description", reader, colour)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
author, err := promptOption("author:", reader, colour)
|
||||
author, err := promptOption("author", reader, colour)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
version, err := promptOption("version:", reader, colour)
|
||||
version, err := promptOption("version", reader, colour)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -93,7 +101,7 @@ func promptOptions() (*genOpts, error) {
|
||||
}
|
||||
|
||||
func promptOption(msg string, reader *bufio.Reader, colour *color.Color) (string, error) {
|
||||
colour.Printf("%15s ", msg)
|
||||
colour.Printf("%15s: ", msg)
|
||||
|
||||
text, err := reader.ReadString('\n')
|
||||
if err != nil {
|
||||
@ -102,3 +110,71 @@ func promptOption(msg string, reader *bufio.Reader, colour *color.Color) (string
|
||||
|
||||
return strings.TrimSpace(text), nil
|
||||
}
|
||||
|
||||
func applyOptionsToTemplate(dir string, opts *genOpts) error {
|
||||
files, err := ioutil.ReadDir(dir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, file := range files {
|
||||
if file.Name() == ".git" {
|
||||
continue
|
||||
}
|
||||
|
||||
path := filepath.Join(dir, file.Name())
|
||||
|
||||
if file.IsDir() {
|
||||
err = applyOptionsToTemplate(path, opts)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
var (
|
||||
name = file.Name()
|
||||
newname = applyOptions(name, opts)
|
||||
newpath = filepath.Join(dir, newname)
|
||||
)
|
||||
|
||||
err = os.Rename(path, newpath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
handle, err := os.Open(newpath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
data, err := ioutil.ReadAll(handle)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
newstr := applyOptions(string(data), opts)
|
||||
|
||||
err = ioutil.WriteFile(newpath, []byte(newstr), 0644)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func applyOptions(str string, opts *genOpts) string {
|
||||
replacements := map[string]string{
|
||||
"%title": opts.title,
|
||||
"%display": opts.display,
|
||||
"%description": opts.description,
|
||||
"%author": opts.author,
|
||||
"%version": opts.version,
|
||||
}
|
||||
|
||||
for temp, opt := range replacements {
|
||||
str = strings.Replace(str, temp, opt, -1)
|
||||
}
|
||||
|
||||
return str
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user