@@ -148,6 +148,22 @@ func NewApp() *cli.App {
148148 Name : "migrate" ,
149149 Usage : "Migrate to the latest version" ,
150150 Flags : []cli.Flag {
151+ & cli.StringFlag {
152+ Name : "only" ,
153+ Usage : "apply only the specified migration version" ,
154+ },
155+ & cli.StringFlag {
156+ Name : "to" ,
157+ Usage : "apply migrations up to specified version (inclusive)" ,
158+ },
159+ & cli.BoolFlag {
160+ Name : "one" ,
161+ Usage : "apply exactly one pending migration" ,
162+ },
163+ & cli.BoolFlag {
164+ Name : "all" ,
165+ Usage : "apply all pending migrations (default)" ,
166+ },
151167 & cli.BoolFlag {
152168 Name : "strict" ,
153169 EnvVars : []string {"DBMATE_STRICT" },
@@ -163,14 +179,42 @@ func NewApp() *cli.App {
163179 Action : action (func (db * dbmate.DB , c * cli.Context ) error {
164180 db .Strict = c .Bool ("strict" )
165181 db .Verbose = c .Bool ("verbose" )
166- return db .Migrate ()
182+ if version := c .String ("only" ); version != "" {
183+ migrations , err := db .FindMigrations ()
184+ if err != nil {
185+ return err
186+ }
187+ return db .MigrateOnly (migrations , version )
188+ } else if version := c .String ("to" ); version != "" {
189+ return db .MigrateTo (version )
190+ } else if c .Bool ("one" ) {
191+ return db .MigrateNext ()
192+ } else {
193+ return db .Migrate () // default: apply all
194+ }
167195 }),
168196 },
169197 {
170198 Name : "rollback" ,
171199 Aliases : []string {"down" },
172200 Usage : "Rollback the most recent migration" ,
173201 Flags : []cli.Flag {
202+ & cli.StringFlag {
203+ Name : "only" ,
204+ Usage : "rollback only the specified migration version" ,
205+ },
206+ & cli.StringFlag {
207+ Name : "to" ,
208+ Usage : "rollback migrations down to specified version (exclusive)" ,
209+ },
210+ & cli.BoolFlag {
211+ Name : "one" ,
212+ Usage : "rollback exactly one migration (default)" ,
213+ },
214+ & cli.BoolFlag {
215+ Name : "all" ,
216+ Usage : "rollback all migrations" ,
217+ },
174218 & cli.BoolFlag {
175219 Name : "verbose" ,
176220 Aliases : []string {"v" },
@@ -180,7 +224,19 @@ func NewApp() *cli.App {
180224 },
181225 Action : action (func (db * dbmate.DB , c * cli.Context ) error {
182226 db .Verbose = c .Bool ("verbose" )
183- return db .Rollback ()
227+ if version := c .String ("only" ); version != "" {
228+ migrations , err := db .FindMigrations ()
229+ if err != nil {
230+ return err
231+ }
232+ return db .RollbackOnly (migrations , version )
233+ } else if version := c .String ("to" ); version != "" {
234+ return db .RollbackTo (version )
235+ } else if c .Bool ("all" ) {
236+ return db .RollbackAll ()
237+ } else {
238+ return db .Rollback () // default: rollback one migration
239+ }
184240 }),
185241 },
186242 {
0 commit comments