Skip to content

Commit 46982dc

Browse files
author
Miguel Molina
authored
Merge pull request #147 from erizocosmico/feature/exec-migrations
execute migrations
2 parents 726b5c4 + a8a6b44 commit 46982dc

File tree

8 files changed

+608
-178
lines changed

8 files changed

+608
-178
lines changed

generator/cli/kallax/cmd.go

Lines changed: 14 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -1,147 +1,30 @@
11
package main
22

33
import (
4-
"fmt"
54
"os"
6-
"path/filepath"
75

8-
"gopkg.in/src-d/go-kallax.v1/generator"
6+
"gopkg.in/src-d/go-kallax.v1/generator/cli/kallax/cmd"
97

108
"gopkg.in/urfave/cli.v1"
119
)
1210

11+
const version = "1.1.4"
12+
1313
func main() {
14+
newApp().Run(os.Args)
15+
}
16+
17+
func newApp() *cli.App {
1418
app := cli.NewApp()
1519
app.Name = "kallax"
16-
app.Version = "1.1.4"
20+
app.Version = version
1721
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,
14427
}
14528

146-
return info.IsDir(), nil
29+
return app
14730
}

generator/cli/kallax/cmd/gen.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package cmd
2+
3+
import (
4+
"fmt"
5+
"path/filepath"
6+
7+
"gopkg.in/src-d/go-kallax.v1/generator"
8+
cli "gopkg.in/urfave/cli.v1"
9+
)
10+
11+
var Generate = cli.Command{
12+
Name: "gen",
13+
Usage: "Generate kallax models",
14+
Action: generateAction,
15+
Flags: []cli.Flag{
16+
cli.StringFlag{
17+
Name: "input",
18+
Value: ".",
19+
Usage: "Input package directory",
20+
},
21+
cli.StringFlag{
22+
Name: "output",
23+
Value: "kallax.go",
24+
Usage: "Output file name",
25+
},
26+
cli.StringSliceFlag{
27+
Name: "exclude, e",
28+
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.",
29+
},
30+
},
31+
}
32+
33+
func generateAction(c *cli.Context) error {
34+
input := c.String("input")
35+
output := c.String("output")
36+
excluded := c.StringSlice("exclude")
37+
38+
ok, err := isDirectory(input)
39+
if err != nil {
40+
return fmt.Errorf("kallax: can't check input directory: %s", err)
41+
}
42+
43+
if !ok {
44+
return fmt.Errorf("kallax: Input path should be a directory %s", input)
45+
}
46+
47+
p := generator.NewProcessor(input, excluded)
48+
pkg, err := p.Do()
49+
if err != nil {
50+
return err
51+
}
52+
53+
gen := generator.NewGenerator(filepath.Join(input, output))
54+
err = gen.Generate(pkg)
55+
if err != nil {
56+
return err
57+
}
58+
59+
return nil
60+
}

0 commit comments

Comments
 (0)