Revision history for {{$dist->name}}
{{$NEXT}}
+ - Added much more helpful error for "Can't find source for..." error in
+ migration scripts, based on code from DBIx::Class::Migration
- Test suite now is fully parallelizable
- Switch ::ScriptHelpers to Sub::Exporter::Progressive
- Switch from Test::Exception to Test::Fatal
Context::Preserve = 0.01
File::Temp = 0
Sub::Exporter::Progressive = 0
+Text::Brew = 0.02
};
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 $_;
+ }
}
}
use Test::More;
use DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::ScriptHelpers ':all';;
+use Test::Fatal;
use lib 't/lib';
RaiseError => 1,
ignore_version => 1,
});
+
+ subtest '({ dbh_maker => ..., ... })' => $build_sl_test->({
+ dbh_maker => sub { DBICDHTest->dbh },
+ RaiseError => 1,
+ ignore_version => 1,
+ });
+
+ subtest 'error handling' => sub {
+ my $outer_schema = DBICVersion::Schema->connect(
+ 'dbi:SQLite::memory:', undef, undef,
+ { RaiseError => 1 },
+ { ignore_version => 1 },
+ );
+ $outer_schema->deploy;
+ like(exception {
+ schema_from_schema_loader({ naming => 'v4' }, sub {
+ my ($schema, $versions) = @_;
+
+ $schema->resultset('foo')
+ })->($outer_schema, [2,3]);
+ }, qr/Foo <== Possible Match/, 'correct error');
+ };
};
done_testing;