@@ -459,38 +459,55 @@ defmodule AshPostgres.DataLayer do
459
459
end )
460
460
|> Enum . take ( 20 )
461
461
|> Enum . map ( & String . trim_leading ( & 1 , migrations_path ) )
462
+ |> Enum . map ( & String . trim_leading ( & 1 , "/" ) )
463
+
464
+ indexed =
465
+ files
462
466
|> Enum . with_index ( )
463
467
|> Enum . map ( fn { file , index } -> "#{ index + 1 } : #{ file } " end )
464
468
465
- n =
469
+ to =
466
470
Mix . shell ( ) . prompt (
467
471
"""
468
472
How many migrations should be rolled back#{ for_repo } ? (default: 0)
469
473
470
474
Last 20 migration names, with the input you must provide to
471
475
rollback up to *and including* that migration:
472
476
473
- #{ Enum . join ( files , "\n " ) }
477
+ #{ Enum . join ( indexed , "\n " ) }
474
478
Rollback to:
475
479
"""
476
480
|> String . trim_trailing ( )
477
481
)
478
482
|> String . trim ( )
479
483
|> case do
480
484
"" ->
481
- 0
485
+ nil
486
+
487
+ "0" ->
488
+ nil
482
489
483
490
n ->
484
491
try do
485
- String . to_integer ( n )
492
+ files
493
+ |> Enum . at ( String . to_integer ( n ) - 1 )
486
494
rescue
487
495
_ ->
488
496
reraise "Required an integer value, got: #{ n } " , __STACKTRACE__
489
497
end
498
+ |> String . split ( "_" , parts: 2 )
499
+ |> Enum . at ( 0 )
500
+ |> String . to_integer ( )
490
501
end
491
502
492
- Mix.Task . run ( "ash_postgres.rollback" , args ++ [ "-r" , inspect ( repo ) , "-n" , to_string ( n ) ] )
493
- Mix.Task . reenable ( "ash_postgres.rollback" )
503
+ if to do
504
+ Mix.Task . run (
505
+ "ash_postgres.rollback" ,
506
+ args ++ [ "-r" , inspect ( repo ) , "--to" , to_string ( to ) ]
507
+ )
508
+
509
+ Mix.Task . reenable ( "ash_postgres.rollback" )
510
+ end
494
511
495
512
tenant_files =
496
513
tenant_migrations_path
@@ -520,10 +537,14 @@ defmodule AshPostgres.DataLayer do
520
537
end )
521
538
|> Enum . take ( 20 )
522
539
|> Enum . map ( & String . trim_leading ( & 1 , tenant_migrations_path ) )
540
+ |> Enum . map ( & String . trim_leading ( & 1 , "/" ) )
541
+
542
+ indexed =
543
+ tenant_files
523
544
|> Enum . with_index ( )
524
545
|> Enum . map ( fn { file , index } -> "#{ index + 1 } : #{ file } " end )
525
546
526
- n =
547
+ to =
527
548
Mix . shell ( ) . prompt (
528
549
"""
529
550
@@ -536,7 +557,7 @@ defmodule AshPostgres.DataLayer do
536
557
Last 20 migration names, with the input you must provide to
537
558
rollback up to *and including* that migration:
538
559
539
- #{ Enum . join ( tenant_files , "\n " ) }
560
+ #{ Enum . join ( indexed , "\n " ) }
540
561
541
562
Rollback to:
542
563
"""
@@ -545,23 +566,32 @@ defmodule AshPostgres.DataLayer do
545
566
|> String . trim ( )
546
567
|> case do
547
568
"" ->
548
- 0
569
+ nil
570
+
571
+ "0" ->
572
+ nil
549
573
550
574
n ->
551
575
try do
552
- String . to_integer ( n )
576
+ tenant_files
577
+ |> Enum . at ( String . to_integer ( n ) - 1 )
553
578
rescue
554
579
_ ->
555
580
reraise "Required an integer value, got: #{ n } " , __STACKTRACE__
556
581
end
582
+ |> String . split ( "_" , parts: 2 )
583
+ |> Enum . at ( 0 )
584
+ |> String . to_integer ( )
557
585
end
558
586
559
- Mix.Task . run (
560
- "ash_postgres.rollback" ,
561
- args ++ [ "--tenants" , "-r" , inspect ( repo ) , "-n" , to_string ( n ) ]
562
- )
587
+ if to do
588
+ Mix.Task . run (
589
+ "ash_postgres.rollback" ,
590
+ args ++ [ "--tenants" , "-r" , inspect ( repo ) , "--to" , to ]
591
+ )
563
592
564
- Mix.Task . reenable ( "ash_postgres.rollback" )
593
+ Mix.Task . reenable ( "ash_postgres.rollback" )
594
+ end
565
595
end
566
596
end
567
597
end )
0 commit comments