files.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package templatex
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "os"
  6. "path/filepath"
  7. "github.com/logrusorgru/aurora"
  8. "github.com/tal-tech/go-zero/tools/goctl/util"
  9. )
  10. const goctlDir = ".goctl"
  11. func InitTemplates(category string, templates map[string]string) error {
  12. dir, err := getTemplateDir(category)
  13. if err != nil {
  14. return err
  15. }
  16. if err := util.MkdirIfNotExist(dir); err != nil {
  17. return err
  18. }
  19. for k, v := range templates {
  20. if err := createTemplate(filepath.Join(dir, k), v); err != nil {
  21. return err
  22. }
  23. }
  24. fmt.Printf("Templates are generated in %s, %s\n", aurora.Green(dir),
  25. aurora.Red("edit on your risk!"))
  26. return nil
  27. }
  28. func LoadTemplate(category, file, builtin string) (string, error) {
  29. dir, err := getTemplateDir(category)
  30. if err != nil {
  31. return "", err
  32. }
  33. file = filepath.Join(dir, file)
  34. if !util.FileExists(file) {
  35. return builtin, nil
  36. }
  37. content, err := ioutil.ReadFile(file)
  38. if err != nil {
  39. return "", err
  40. }
  41. return string(content), nil
  42. }
  43. func createTemplate(file, content string) error {
  44. if util.FileExists(file) {
  45. println(1)
  46. return nil
  47. }
  48. f, err := os.Create(file)
  49. if err != nil {
  50. return err
  51. }
  52. defer f.Close()
  53. _, err = f.WriteString(content)
  54. return err
  55. }
  56. func getTemplateDir(category string) (string, error) {
  57. home, err := os.UserHomeDir()
  58. if err != nil {
  59. return "", err
  60. }
  61. return filepath.Join(home, goctlDir, category), nil
  62. }