Stop deleting the wrong version
[dbsrgits/DBIx-Class-DeploymentHandler.git] / lib / DBIx / Class / DeploymentHandler / Dad.pm
index 064c093..1fb3520 100644 (file)
@@ -6,12 +6,17 @@ use Moose;
 use Method::Signatures::Simple;
 require DBIx::Class::Schema;    # loaded for type constraint
 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'
+  });
 
 has schema => (
   isa      => 'DBIx::Class::Schema',
   is       => 'ro',
   required => 1,
-  handles => ['schema_version'],
 );
 
 has backup_directory => (
@@ -22,12 +27,22 @@ has backup_directory => (
 
 has to_version => (
   is         => 'ro',
+  isa        => 'Str',
+  lazy_build => 1,
+);
+
+sub _build_to_version { $_[0]->schema_version }
+
+has schema_version => (
+  is         => 'ro',
+  isa        => 'StrSchemaVersion',
   lazy_build => 1,
 );
 
-sub _build_to_version { $_[0]->schema->schema_version }
+sub _build_schema_version { $_[0]->schema->schema_version }
 
 method install {
+  log_info { 'installing version ' . $self->to_version };
   croak 'Install not possible as versions table already exists in database'
     if $self->version_storage_is_installed;
 
@@ -40,9 +55,14 @@ method install {
 }
 
 sub upgrade {
+  log_info { 'upgrading' };
   my $self = shift;
+  my $ran_once = 0;
   while ( my $version_list = $self->next_version_set ) {
-    my ($ddl, $upgrade_sql) = @{$self->upgrade_single_step($version_list)||[]};
+    $ran_once = 1;
+    my ($ddl, $upgrade_sql) = @{
+      $self->upgrade_single_step({ version_set => $version_list })
+    ||[]};
 
     $self->add_database_version({
       version     => $version_list->[-1],
@@ -50,19 +70,28 @@ sub upgrade {
       upgrade_sql => $upgrade_sql,
     });
   }
+
+  log_warn { 'no need to run upgrade' } unless $ran_once;
 }
 
 sub downgrade {
+  log_info { 'downgrading' };
   my $self = shift;
+  my $ran_once = 0;
   while ( my $version_list = $self->previous_version_set ) {
-    $self->downgrade_single_step($version_list);
+    $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->[-1] });
+    $self->delete_database_version({ version => $version_list->[0] });
   }
+  log_warn { 'no version to run downgrade' } unless $ran_once;
 }
 
-method backup { $self->storage->backup($self->backup_directory) }
+method backup {
+  log_info { 'backing up' };
+  $self->storage->backup($self->backup_directory)
+}
 
 __PACKAGE__->meta->make_immutable;
 
@@ -79,6 +108,11 @@ __END__
 The L<DBIx::Class::Schema> (B<required>) that is used to talk to the database
 and generate the DDL.
 
+=attr schema_version
+
+The version that the schema is currently at.  Defaults to
+C<< $self->schema->schema_version >>.
+
 =attr backup_directory
 
 The directory where backups are stored
@@ -94,7 +128,7 @@ The version (defaults to schema's version) to migrate the database to
 Deploys the current schema into the database.  Populates C<version_storage> with
 C<version> and C<ddl>.
 
-B<Note>: you typically need to call C<< $dh->prepare_install >> before you call
+B<Note>: you typically need to call C<< $dh->prepare_deploy >> before you call
 this method.
 
 B<Note>: you cannot install on top of an already installed database
@@ -169,9 +203,9 @@ should probably implement these too, even if they are no-ops.
 
 see L<DBIx::Class::DeploymentHandler::HandlesVersionStorage/database_version>
 
-=head2 prepare_install
+=head2 prepare_deploy
 
-see L<DBIx::Class::DeploymentHandler::HandlesDeploy/prepare_install>
+see L<DBIx::Class::DeploymentHandler::HandlesDeploy/prepare_deploy>
 
 =head2 prepare_resultsource_install