@@ -8,9 +8,10 @@ import (
8
8
"net/url"
9
9
"os"
10
10
"path/filepath"
11
+ "strconv"
11
12
"strings"
12
13
13
- "github.com/gsamokovarov /gloat"
14
+ "github.com/webedx-spark /gloat"
14
15
15
16
_ "github.com/go-sql-driver/mysql"
16
17
_ "github.com/lib/pq"
@@ -22,13 +23,17 @@ const usage = `Usage gloat: [OPTION ...] [COMMAND ...]
22
23
Gloat is a Go SQL migration utility.
23
24
24
25
Commands:
25
- new Create a new migration folder
26
- up Apply new migrations
27
- down Revert the last applied migration
26
+ new Create a new migration folder
27
+ up Apply new migrations
28
+ down Revert the last applied migration
29
+ to <version> Migrate to a given version (down to).
30
+ latest Latest migration in the source.
31
+ current Latest Applied migration.
32
+ present List all present versions.
28
33
29
34
Options:
30
35
-src The folder with migrations
31
- (default $DATABASE_SRC or db /migrations)
36
+ (default $DATABASE_SRC or database /migrations)
32
37
-url The database connection URL
33
38
(default $DATABASE_URL)
34
39
-help Show this message
@@ -56,6 +61,14 @@ func main() {
56
61
err = downCmd (args )
57
62
case "new" :
58
63
err = newCmd (args )
64
+ case "to" :
65
+ err = migrateToCmd (args )
66
+ case "latest" :
67
+ err = latestCmd (args )
68
+ case "current" :
69
+ err = currentCmd (args )
70
+ case "present" :
71
+ err = presentCmd (args )
59
72
default :
60
73
fmt .Fprintf (os .Stderr , usage )
61
74
os .Exit (2 )
@@ -97,6 +110,96 @@ func upCmd(args arguments) error {
97
110
return nil
98
111
}
99
112
113
+ func latestCmd (args arguments ) error {
114
+ gl , err := setupGloat (args )
115
+ if err != nil {
116
+ return err
117
+ }
118
+
119
+ latest , err := gl .Latest ()
120
+ if err != nil {
121
+ return err
122
+ }
123
+
124
+ if latest != nil {
125
+ fmt .Printf ("%d" , latest .Version )
126
+ }
127
+ return nil
128
+ }
129
+
130
+ func presentCmd (args arguments ) error {
131
+ gl , err := setupGloat (args )
132
+ if err != nil {
133
+ return err
134
+ }
135
+
136
+ migrations , err := gl .Present ()
137
+ if err != nil {
138
+ return err
139
+ }
140
+
141
+ migrations .Sort ()
142
+
143
+ for i , m := range migrations {
144
+ fmt .Printf ("%d" , m .Version )
145
+ if i != len (migrations )- 1 {
146
+ fmt .Print ("," )
147
+ }
148
+ }
149
+
150
+ return nil
151
+ }
152
+
153
+ func currentCmd (args arguments ) error {
154
+ gl , err := setupGloat (args )
155
+ if err != nil {
156
+ return err
157
+ }
158
+
159
+ current , err := gl .Current ()
160
+ if err != nil {
161
+ return err
162
+ }
163
+
164
+ if current != nil {
165
+ fmt .Printf ("%d" , current .Version )
166
+ }
167
+ return nil
168
+ }
169
+
170
+ func migrateToCmd (args arguments ) error {
171
+ gl , err := setupGloat (args )
172
+ if err != nil {
173
+ return err
174
+ }
175
+ if len (args .rest ) < 2 {
176
+ return errors .New ("migrate to requires a version to migrate to" )
177
+ }
178
+
179
+ version , err := strconv .ParseInt (args .rest [1 ], 10 , 64 )
180
+ if err != nil {
181
+ return err
182
+ }
183
+
184
+ migrations , err := gl .AppliedAfter (version )
185
+ if err != nil {
186
+ if err == gloat .ErrNotFound {
187
+ return upCmd (args )
188
+ }
189
+ return err
190
+ }
191
+
192
+ for _ , migration := range migrations {
193
+ fmt .Printf ("\n Reverting: %d...\n " , migration .Version )
194
+
195
+ if err := gl .Revert (migration ); err != nil {
196
+ return err
197
+ }
198
+ }
199
+
200
+ return nil
201
+ }
202
+
100
203
func downCmd (args arguments ) error {
101
204
gl , err := setupGloat (args )
102
205
if err != nil {
@@ -109,7 +212,7 @@ func downCmd(args arguments) error {
109
212
}
110
213
111
214
if migration == nil {
112
- fmt .Printf ("No migrations to apply \n " )
215
+ fmt .Printf ("No migrations to revert \n " )
113
216
return nil
114
217
}
115
218
@@ -163,7 +266,7 @@ func parseArguments() arguments {
163
266
164
267
srcDefault := os .Getenv ("DATABASE_SRC" )
165
268
if srcDefault == "" {
166
- srcDefault = "db /migrations"
269
+ srcDefault = "database /migrations"
167
270
}
168
271
srcUsage := `the folder with migrations`
169
272
0 commit comments