Fix migraion name when fetching in reverse order
gammazero committed
Jan 14, 2021 at 18:31 UTC
afcda7c05b6b37f392390202d13eda00650045cf
2 files changed
+57
-1
repo/fsrepo/migrations/migrations.go
+6
-1
@@ -123,7 +123,12 @@ func findMigrations(ctx context.Context, from, to int) ([]string, map[string]str
123
if ctx.Err() != nil {
124
return nil, nil, ctx.Err()
125
}
126
- migName := migrationName(cur, cur+step)
126
+ var migName string
127
+ if step == -1 {
128
+ migName = migrationName(cur+step, cur)
129
+ } else {
130
+ migName = migrationName(cur, cur+step)
131
+ }
132
migrations = append(migrations, migName)
133
bin, err := exec.LookPath(migName)
134
if err != nil {
repo/fsrepo/migrations/migrations_test.go
+51
@@ -61,6 +61,57 @@ func TestFindMigrations(t *testing.T) {
61
}
62
}
63
64
+func TestFindMigrationsReverse(t *testing.T) {
65
+ tmpDir, err := ioutil.TempDir("", "migratetest")
66
+ if err != nil {
67
+ panic(err)
68
+ }
69
+ defer os.RemoveAll(tmpDir)
70
+
71
+ ctx, cancel := context.WithCancel(context.Background())
72
+ defer cancel()
73
+
74
+ migs, bins, err := findMigrations(ctx, 5, 0)
75
+ if err != nil {
76
+ t.Fatal(err)
77
+ }
78
+ if len(migs) != 5 {
79
+ t.Fatal("expected 5 migrations")
80
+ }
81
+ if len(bins) != 0 {
82
+ t.Fatal("should not have found migrations")
83
+ }
84
+
85
+ for i := 1; i < 6; i++ {
86
+ createFakeBin(i-1, i, tmpDir)
87
+ }
88
+
89
+ origPath := os.Getenv("PATH")
90
+ os.Setenv("PATH", tmpDir)
91
+ defer os.Setenv("PATH", origPath)
92
+
93
+ migs, bins, err = findMigrations(ctx, 5, 0)
94
+ if err != nil {
95
+ t.Fatal(err)
96
+ }
97
+ if len(migs) != 5 {
98
+ t.Fatal("expected 5 migrations")
99
+ }
100
+ if len(bins) != len(migs) {
101
+ t.Fatal("missing", len(migs)-len(bins), "migrations:", migs)
102
+ }
103
+
104
+ os.Remove(bins[migs[2]])
105
+
106
+ migs, bins, err = findMigrations(ctx, 5, 0)
107
+ if err != nil {
108
+ t.Fatal(err)
109
+ }
110
+ if len(bins) != len(migs)-1 {
111
+ t.Fatal("should be missing one migration bin")
112
+ }
113
+}
114
+
115
func TestFetchMigrations(t *testing.T) {
116
ctx, cancel := context.WithCancel(context.Background())
117
defer cancel()