};
use List::Util 'first';
+use Text::Brew 'distance';
+use Try::Tiny;
sub dbh {
my ($code) = @_;
warn 'using "current" naming in a deployment script is begging for problems. Just Say No.'
if $opts->{naming} eq 'current' ||
(ref $opts->{naming} eq 'HASH' && first { $_ eq 'current' } values %{$opts->{naming}});
+
sub {
my ($schema, $versions) = @_;
'SHSchema::' . $count++, $opts, \@ci
);
my $sl_schema = $new_schema->connect(@ci);
- $code->($sl_schema, $versions)
+ try {
+ $code->($sl_schema, $versions)
+ } catch {
+ if (m/Can't find source for (.+?) at/) {
+ my @presentsources = map {
+ (distance($_, $1))[0] < 3 ? "$_ <== Possible Match\n" : "$_\n";
+ } $sl_schema->sources;
+
+ die <<"ERR";
+$_
+You are seeing this error because the DBIx::Class::ResultSource in your
+migration script called "$1" is not part of the schema that ::Schema::Loader
+has inferred from your existing database.
+
+To help you debug this issue, here's a list of the actual sources that the
+schema available to your migration knows about:
+
+ @presentsources
+ERR
+ }
+ die $_;
+ }
}
}