X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FDeploymentHandler%2FDad.pm;h=f3a8ec417be579b0f231777571d00484a132cfdc;hb=refs%2Fheads%2Fmoo-port;hp=6c92ab253e7ba5db46851f236b2c187b3a1425ea;hpb=6e2665d32fec2eb9c168202abaf45e26fa87470e;p=dbsrgits%2FDBIx-Class-DeploymentHandler.git diff --git a/lib/DBIx/Class/DeploymentHandler/Dad.pm b/lib/DBIx/Class/DeploymentHandler/Dad.pm index 6c92ab2..f3a8ec4 100644 --- a/lib/DBIx/Class/DeploymentHandler/Dad.pm +++ b/lib/DBIx/Class/DeploymentHandler/Dad.pm @@ -2,55 +2,54 @@ package DBIx::Class::DeploymentHandler::Dad; # ABSTRACT: Parent class for DeploymentHandlers -use Moose; -require DBIx::Class::Schema; # loaded for type constraint +use Moo; use Carp::Clan '^DBIx::Class::DeploymentHandler'; -use DBIx::Class::DeploymentHandler::Logger; -use DBIx::Class::DeploymentHandler::Types; -use Log::Contextual ':log', -package_logger => - DBIx::Class::DeploymentHandler::Logger->new({ - env_prefix => 'DBICDH' - }); +use DBIx::Class::DeploymentHandler::LogImporter ':log'; +use DBIx::Class::DeploymentHandler::Types 'StrSchemaVersion'; +use MooX::Types::MooseLike::Base qw(Str); has schema => ( - isa => 'DBIx::Class::Schema', is => 'ro', required => 1, ); has backup_directory => ( - isa => 'Str', + isa => Str, is => 'ro', predicate => 'has_backup_directory', ); has to_version => ( is => 'ro', - isa => 'Str', - lazy_build => 1, + isa => Str, + builder => '_build_to_version', ); sub _build_to_version { $_[0]->schema_version } has schema_version => ( is => 'ro', - isa => 'StrSchemaVersion', - lazy_build => 1, + isa => StrSchemaVersion, + builder => '_build_schema_version', ); sub _build_schema_version { $_[0]->schema->schema_version } sub install { my $self = shift; - log_info { 'installing version ' . $self->to_version }; + + my $version = (shift @_ || {})->{version} || $self->to_version; + log_info { "installing version $version" }; croak 'Install not possible as versions table already exists in database' if $self->version_storage_is_installed; - my $ddl = $self->deploy; + $self->txn_do(sub { + my $ddl = $self->deploy({ version=> $version }); - $self->add_database_version({ - version => $self->to_version, - ddl => $ddl, + $self->add_database_version({ + version => $version, + ddl => $ddl, + }); }); } @@ -58,18 +57,20 @@ sub upgrade { log_info { 'upgrading' }; my $self = shift; my $ran_once = 0; - while ( my $version_list = $self->next_version_set ) { - $ran_once = 1; - my ($ddl, $upgrade_sql) = @{ - $self->upgrade_single_step({ version_set => $version_list }) - ||[]}; - - $self->add_database_version({ - version => $version_list->[-1], - ddl => $ddl, - upgrade_sql => $upgrade_sql, - }); - } + $self->txn_do(sub { + while ( my $version_list = $self->next_version_set ) { + $ran_once = 1; + my ($ddl, $upgrade_sql) = @{ + $self->upgrade_single_step({ version_set => $version_list }) + ||[]}; + + $self->add_database_version({ + version => $version_list->[-1], + ddl => $ddl, + upgrade_sql => $upgrade_sql, + }); + } + }); log_warn { 'no need to run upgrade' } unless $ran_once; } @@ -78,24 +79,24 @@ sub downgrade { log_info { 'downgrading' }; my $self = shift; my $ran_once = 0; - while ( my $version_list = $self->previous_version_set ) { - $ran_once = 1; - $self->downgrade_single_step({ version_set => $version_list }); - - # do we just delete a row here? I think so but not sure - $self->delete_database_version({ version => $version_list->[0] }); - } + $self->txn_do(sub { + while ( my $version_list = $self->previous_version_set ) { + $ran_once = 1; + $self->downgrade_single_step({ version_set => $version_list }); + + # do we just delete a row here? I think so but not sure + $self->delete_database_version({ version => $version_list->[0] }); + } + }); log_warn { 'no version to run downgrade' } unless $ran_once; } sub backup { my $self = shift; log_info { 'backing up' }; - $self->storage->backup($self->backup_directory) + $self->schema->storage->backup($self->backup_directory) } -__PACKAGE__->meta->make_immutable; - 1; # vim: ts=2 sw=2 expandtab @@ -126,8 +127,12 @@ The version (defaults to schema's version) to migrate the database to $dh->install -Deploys the current schema into the database. Populates C with -C and C. +or + + $dh->install({ version => 1 }) + +Deploys the requested version into the database Version defaults to +L. Populates C with C and C. B: you typically need to call C<< $dh->prepare_deploy >> before you call this method. @@ -193,6 +198,10 @@ See L. See L. +=head2 txn_do + +See L. + =head1 ORTHODOX METHODS These methods are not actually B as things will probably still work