|
1 | 1 | package main
|
2 | 2 |
|
3 | 3 | import (
|
4 |
| - "fmt" |
5 | 4 | "os"
|
6 |
| - "path/filepath" |
7 | 5 |
|
8 |
| - "gopkg.in/src-d/go-kallax.v1/generator" |
| 6 | + "gopkg.in/src-d/go-kallax.v1/generator/cli/kallax/cmd" |
9 | 7 |
|
10 | 8 | "gopkg.in/urfave/cli.v1"
|
11 | 9 | )
|
12 | 10 |
|
| 11 | +const version = "1.1.4" |
| 12 | + |
13 | 13 | func main() {
|
| 14 | + newApp().Run(os.Args) |
| 15 | +} |
| 16 | + |
| 17 | +func newApp() *cli.App { |
14 | 18 | app := cli.NewApp()
|
15 | 19 | app.Name = "kallax"
|
16 |
| - app.Version = "1.1.4" |
| 20 | + app.Version = version |
17 | 21 | app.Usage = "generate kallax models"
|
18 |
| - app.Flags = []cli.Flag{ |
19 |
| - cli.StringFlag{ |
20 |
| - Name: "input", |
21 |
| - Value: ".", |
22 |
| - Usage: "Input package directory", |
23 |
| - }, |
24 |
| - cli.StringFlag{ |
25 |
| - Name: "output", |
26 |
| - Value: "kallax.go", |
27 |
| - Usage: "Output file name", |
28 |
| - }, |
29 |
| - cli.StringSliceFlag{ |
30 |
| - Name: "exclude, e", |
31 |
| - Usage: "List of excluded files from the package when generating the code for your models. Use this to exclude files in your package that uses the generated code. You can use this flag as many times as you want.", |
32 |
| - }, |
33 |
| - } |
34 |
| - app.Action = generateModels |
35 |
| - app.Commands = []cli.Command{ |
36 |
| - { |
37 |
| - Name: "gen", |
38 |
| - Usage: "Generate kallax models", |
39 |
| - Action: generateModels, |
40 |
| - Flags: app.Flags, |
41 |
| - }, |
42 |
| - { |
43 |
| - Name: "migrate", |
44 |
| - Usage: "Generate migrations for current kallax models", |
45 |
| - Action: migrateAction, |
46 |
| - Flags: []cli.Flag{ |
47 |
| - cli.StringFlag{ |
48 |
| - Name: "out, o", |
49 |
| - Usage: "Output directory of migrations", |
50 |
| - }, |
51 |
| - cli.StringFlag{ |
52 |
| - Name: "name, n", |
53 |
| - Usage: "Descriptive name for the migration", |
54 |
| - Value: "migration", |
55 |
| - }, |
56 |
| - cli.StringSliceFlag{ |
57 |
| - Name: "input, i", |
58 |
| - Usage: "List of directories to scan models from. You can use this flag as many times as you want.", |
59 |
| - }, |
60 |
| - }, |
61 |
| - }, |
62 |
| - } |
63 |
| - |
64 |
| - app.Run(os.Args) |
65 |
| -} |
66 |
| - |
67 |
| -func generateModels(c *cli.Context) error { |
68 |
| - input := c.String("input") |
69 |
| - output := c.String("output") |
70 |
| - excluded := c.StringSlice("exclude") |
71 |
| - |
72 |
| - ok, err := isDirectory(input) |
73 |
| - if err != nil { |
74 |
| - return fmt.Errorf("kallax: can't check input directory: %s", err) |
75 |
| - } |
76 |
| - |
77 |
| - if !ok { |
78 |
| - return fmt.Errorf("kallax: Input path should be a directory %s", input) |
79 |
| - } |
80 |
| - |
81 |
| - p := generator.NewProcessor(input, excluded) |
82 |
| - pkg, err := p.Do() |
83 |
| - if err != nil { |
84 |
| - return err |
85 |
| - } |
86 |
| - |
87 |
| - gen := generator.NewGenerator(filepath.Join(input, output)) |
88 |
| - err = gen.Generate(pkg) |
89 |
| - if err != nil { |
90 |
| - return err |
91 |
| - } |
92 |
| - |
93 |
| - return nil |
94 |
| -} |
95 |
| - |
96 |
| -func migrateAction(c *cli.Context) error { |
97 |
| - dirs := c.StringSlice("input") |
98 |
| - dir := c.String("out") |
99 |
| - name := c.String("name") |
100 |
| - |
101 |
| - var pkgs []*generator.Package |
102 |
| - for _, dir := range dirs { |
103 |
| - ok, err := isDirectory(dir) |
104 |
| - if err != nil { |
105 |
| - return fmt.Errorf("kallax: cannot check directory in `input`: %s", err) |
106 |
| - } |
107 |
| - |
108 |
| - if !ok { |
109 |
| - return fmt.Errorf("kallax: `input` must be a valid directory") |
110 |
| - } |
111 |
| - |
112 |
| - p := generator.NewProcessor(dir, nil) |
113 |
| - p.Silent() |
114 |
| - pkg, err := p.Do() |
115 |
| - if err != nil { |
116 |
| - return err |
117 |
| - } |
118 |
| - |
119 |
| - pkgs = append(pkgs, pkg) |
120 |
| - } |
121 |
| - |
122 |
| - ok, err := isDirectory(dir) |
123 |
| - if err != nil { |
124 |
| - return fmt.Errorf("kallax: cannot check directory in `out`: %s", err) |
125 |
| - } |
126 |
| - |
127 |
| - if !ok { |
128 |
| - return fmt.Errorf("kallax: `out` must be a valid directory") |
129 |
| - } |
130 |
| - |
131 |
| - g := generator.NewMigrationGenerator(name, dir) |
132 |
| - migration, err := g.Build(pkgs...) |
133 |
| - if err != nil { |
134 |
| - return err |
135 |
| - } |
136 |
| - |
137 |
| - return g.Generate(migration) |
138 |
| -} |
139 |
| - |
140 |
| -func isDirectory(name string) (bool, error) { |
141 |
| - info, err := os.Stat(name) |
142 |
| - if err != nil { |
143 |
| - return false, err |
| 22 | + app.Flags = cmd.Generate.Flags |
| 23 | + app.Action = cmd.Generate.Action |
| 24 | + app.Commands = cli.Commands{ |
| 25 | + cmd.Generate, |
| 26 | + cmd.Migrate, |
144 | 27 | }
|
145 | 28 |
|
146 |
| - return info.IsDir(), nil |
| 29 | + return app |
147 | 30 | }
|
0 commit comments