()
| 375 | var _ MigrationSource = (*PackrMigrationSource)(nil) |
| 376 | |
| 377 | func (p PackrMigrationSource) FindMigrations() ([]*Migration, error) { |
| 378 | migrations := make([]*Migration, 0) |
| 379 | items := p.Box.List() |
| 380 | |
| 381 | prefix := "" |
| 382 | dir := path.Clean(p.Dir) |
| 383 | if dir != "." { |
| 384 | prefix = fmt.Sprintf("%s/", dir) |
| 385 | } |
| 386 | |
| 387 | for _, item := range items { |
| 388 | if !strings.HasPrefix(item, prefix) { |
| 389 | continue |
| 390 | } |
| 391 | name := strings.TrimPrefix(item, prefix) |
| 392 | if strings.Contains(name, "/") { |
| 393 | continue |
| 394 | } |
| 395 | |
| 396 | if strings.HasSuffix(name, ".sql") { |
| 397 | file, err := p.Box.Find(item) |
| 398 | if err != nil { |
| 399 | return nil, err |
| 400 | } |
| 401 | |
| 402 | migration, err := ParseMigration(name, bytes.NewReader(file)) |
| 403 | if err != nil { |
| 404 | return nil, err |
| 405 | } |
| 406 | |
| 407 | migrations = append(migrations, migration) |
| 408 | } |
| 409 | } |
| 410 | |
| 411 | // Make sure migrations are sorted |
| 412 | sort.Sort(byId(migrations)) |
| 413 | |
| 414 | return migrations, nil |
| 415 | } |
| 416 | |
| 417 | // Migration parsing |
| 418 | func ParseMigration(id string, r io.ReadSeeker) (*Migration, error) { |
nothing calls this directly
no test coverage detected