补充完成逻辑
This commit is contained in:
+28
@@ -0,0 +1,28 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/spf13/cobra"
|
||||
"os"
|
||||
)
|
||||
|
||||
var rootCmd = &cobra.Command{
|
||||
Use: "",
|
||||
Short: "erlang注解生成配置模版工具",
|
||||
Long: `
|
||||
erlang注解生成配置模版工具
|
||||
- 专注于将接口,事件,定时器等需要定义模版配置的方法,方便的注入生成模版配置文件`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
if len(args) == 0 {
|
||||
args = []string{"config.yaml"}
|
||||
}
|
||||
ExecuteSingleDir(args)
|
||||
},
|
||||
}
|
||||
|
||||
func Execute() {
|
||||
if err := rootCmd.Execute(); err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"complie-erlang/config"
|
||||
tm "complie-erlang/template"
|
||||
"complie-erlang/worker"
|
||||
"fmt"
|
||||
"gopkg.in/yaml.v2"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func ExecuteSingleDir(args []string) {
|
||||
cfgFileName := args[0]
|
||||
|
||||
cfg := config.DefaultErlConfig()
|
||||
|
||||
templates := tm.NewTemplate()
|
||||
worker1 := worker.NewSingleFile(templates)
|
||||
|
||||
xmlPath, err := worker1.FindConfigXMLPath(cfgFileName)
|
||||
if err != nil {
|
||||
fmt.Printf("Err 获取可执行文件路径失败: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
bytes, err := os.ReadFile(xmlPath)
|
||||
if err != nil {
|
||||
fmt.Printf("Err 读取配置文件失败: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
if err = yaml.Unmarshal(bytes, cfg); err != nil {
|
||||
fmt.Printf("Err 解析配置文件 %s 失败: %v", xmlPath, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取可执行文件所在目录
|
||||
exePath, err := os.Executable()
|
||||
if err != nil {
|
||||
log.Fatalf("获取可执行文件路径失败: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 加载模版报错
|
||||
if err := templates.ParseGlob(filepath.Join(filepath.Dir(exePath), cfg.TemplateDirPattern)); err != nil {
|
||||
log.Fatalf("Err 加载模版报错: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
for _, cfgPublic := range cfg.Keywords {
|
||||
// 查询目标文件
|
||||
erlFiles, err := worker1.FindPatternErlFiles(cfgPublic.Filename)
|
||||
if err != nil {
|
||||
log.Fatalf("Err FindPatternErlFiles: %v", err)
|
||||
return
|
||||
}
|
||||
if len(erlFiles) == 0 {
|
||||
log.Printf("Info 未检索到文件: %v", cfgPublic.Filename)
|
||||
continue
|
||||
}
|
||||
|
||||
for _, filename := range erlFiles {
|
||||
parseTemKey, err := worker1.ParseTemKey(filename, cfgPublic)
|
||||
if err != nil {
|
||||
log.Fatalf("loading templates: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 输出文件夹
|
||||
outDir, err := worker1.FindPluginCfgFiles(cfgPublic.OutputSep, cfgPublic.OutDirName, filename)
|
||||
if err != nil {
|
||||
log.Fatalf("Err 查找输出文件夹: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
baseName := strings.Replace(filepath.Base(filename), cfgPublic.InFileExt, cfgPublic.OutFileExt, 1)
|
||||
outFileNema := filepath.Join(outDir, baseName)
|
||||
|
||||
if len(parseTemKey) == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
err = os.WriteFile(outFileNema, []byte(strings.Join(parseTemKey, "\n\n")), os.ModePerm)
|
||||
fmt.Println(err)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"complie-erlang/config"
|
||||
tm "complie-erlang/template"
|
||||
"complie-erlang/worker"
|
||||
"fmt"
|
||||
"github.com/spf13/cobra"
|
||||
"gopkg.in/yaml.v2"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type SingleFile struct {
|
||||
CheckFile string
|
||||
OutFile string
|
||||
Cfg string
|
||||
}
|
||||
|
||||
func (s *SingleFile) run(_ *cobra.Command, _ []string) {
|
||||
|
||||
cfg := config.DefaultErlConfig()
|
||||
templates := tm.NewTemplate()
|
||||
worker1 := worker.NewSingleFile(templates)
|
||||
|
||||
xmlPath, err := worker1.FindConfigXMLPath(s.Cfg)
|
||||
if err != nil {
|
||||
fmt.Printf("Err 获取可执行文件路径失败: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
bytes, err := os.ReadFile(xmlPath)
|
||||
if err != nil {
|
||||
fmt.Printf("Err 读取配置文件失败: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
if err = yaml.Unmarshal(bytes, cfg); err != nil {
|
||||
fmt.Printf("Err 解析配置文件 %s 失败: %v", xmlPath, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取可执行文件所在目录
|
||||
exePath, err := os.Executable()
|
||||
if err != nil {
|
||||
log.Fatalf("获取可执行文件路径失败: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 加载模版报错
|
||||
if err := templates.ParseGlob(filepath.Join(filepath.Dir(exePath), cfg.TemplateDirPattern)); err != nil {
|
||||
log.Fatalf("Err 加载模版报错: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
var parseTemKeys []string
|
||||
for _, cfgPublic := range cfg.Keywords {
|
||||
// 查询目标文件
|
||||
parseTemKey, err := worker1.ParseTemKey(s.CheckFile, cfgPublic)
|
||||
if err != nil {
|
||||
log.Fatalf("loading templates: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
if len(parseTemKey) == 0 {
|
||||
continue
|
||||
}
|
||||
parseTemKeys = append(parseTemKeys, parseTemKey...)
|
||||
}
|
||||
if err = os.WriteFile(s.OutFile, []byte(strings.Join(parseTemKeys, "\n\n")), os.ModePerm); err != nil {
|
||||
fmt.Println("Err WriteFile:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("ok")
|
||||
}
|
||||
|
||||
func init() {
|
||||
var singleSet = new(SingleFile)
|
||||
var logsCmd = &cobra.Command{
|
||||
Use: "single",
|
||||
Short: "single 单文件生成",
|
||||
Long: `这是一个文件监视器工具集合`,
|
||||
Run: singleSet.run,
|
||||
}
|
||||
logsCmd.PersistentFlags().StringVar(&singleSet.CheckFile, "file", "", "读取文件")
|
||||
logsCmd.PersistentFlags().StringVar(&singleSet.OutFile, "out", "", "输出文件")
|
||||
logsCmd.PersistentFlags().StringVar(&singleSet.Cfg, "cfg", "config.yaml", "配置地址")
|
||||
|
||||
rootCmd.AddCommand(logsCmd)
|
||||
}
|
||||
Reference in New Issue
Block a user