freeside-upgrade: add'l documentation & turn on DBIx::DBSchema::Index debugging too
[freeside.git] / FS / bin / freeside-upgrade
index 5c646fe..1155af0 100755 (executable)
@@ -8,6 +8,9 @@ use DBIx::DBSchema 0.31;
 use FS::UID qw(adminsuidsetup checkeuid datasrc );  #getsecrets);
 use FS::CurrentUser;
 use FS::Schema qw( dbdef dbdef_dist reload_dbdef );
 use FS::UID qw(adminsuidsetup checkeuid datasrc );  #getsecrets);
 use FS::CurrentUser;
 use FS::Schema qw( dbdef dbdef_dist reload_dbdef );
+use FS::Misc::prune qw(prune_applications);
+use FS::Conf;
+use FS::Record qw(qsearch);
 
 die "Not running uid freeside!" unless checkeuid();
 
 
 die "Not running uid freeside!" unless checkeuid();
 
@@ -20,7 +23,9 @@ $DRY_RUN = $opt_d;
 
 my $user = shift or die &usage;
 $FS::CurrentUser::upgrade_hack = 1;
 
 my $user = shift or die &usage;
 $FS::CurrentUser::upgrade_hack = 1;
+$FS::UID::callback_hack = 1;
 my $dbh = adminsuidsetup($user);
 my $dbh = adminsuidsetup($user);
+$FS::UID::callback_hack = 0;
 
 #needs to match FS::Schema...
 my $dbdef_file = "%%%FREESIDE_CONF%%%/dbdef.". datasrc;
 
 #needs to match FS::Schema...
 my $dbdef_file = "%%%FREESIDE_CONF%%%/dbdef.". datasrc;
@@ -32,6 +37,7 @@ reload_dbdef($dbdef_file);
 
 $DBIx::DBSchema::DEBUG = $DEBUG;
 $DBIx::DBSchema::Table::DEBUG = $DEBUG;
 
 $DBIx::DBSchema::DEBUG = $DEBUG;
 $DBIx::DBSchema::Table::DEBUG = $DEBUG;
+$DBIx::DBSchema::Index::DEBUG = $DEBUG;
 
 if ( $DRY_RUN ) {
   print join(";\n", dbdef->sql_update_schema( dbdef_dist, $dbh ) ). ";\n";
 
 if ( $DRY_RUN ) {
   print join(";\n", dbdef->sql_update_schema( dbdef_dist, $dbh ) ). ";\n";
@@ -40,17 +46,37 @@ if ( $DRY_RUN ) {
   dbdef->update_schema( dbdef_dist, $dbh );
 }
 
   dbdef->update_schema( dbdef_dist, $dbh );
 }
 
+my $hashref = {};
+$hashref->{dry_run} = 1 if $DRY_RUN;
+$hashref->{debug} = 1 if $DEBUG;
+print join "\n", prune_applications($hashref);
+print "\n" if $DRY_RUN;
+
+
 $dbh->commit or die $dbh->errstr;
 
 dbdef_create($dbh, $dbdef_file);
 
 $dbh->disconnect or die $dbh->errstr;
 
 $dbh->commit or die $dbh->errstr;
 
 dbdef_create($dbh, $dbdef_file);
 
 $dbh->disconnect or die $dbh->errstr;
 
+delete $FS::Schema::dbdef_cache{$dbdef_file}; #force an actual reload
+$FS::UID::AutoCommit = 1;
+$FS::UID::callback_hack = 1;
+$dbh = adminsuidsetup($user);
+$FS::UID::callback_hack = 0;
 unless ( $DRY_RUN ) {
 unless ( $DRY_RUN ) {
-  my $init_config = "freeside-init-config -u $user ";
-  $init_config .= "%%%FREESIDE_CONF%%%/conf.". datasrc;
-  system "$init_config" ;
+  my $dir = "%%%FREESIDE_CONF%%%/conf.". datasrc;
+  if (!scalar(qsearch('conf', {}))) {
+    my $error = FS::Conf::init_config($dir);
+    if ($error) {
+      warn "CONFIGURATION UPGRADE FAILED\n";
+      $dbh->rollback or die $dbh->errstr;
+      die $error;
+    }
+  }
 }
 }
+$dbh->commit or die $dbh->errstr;
+$dbh->disconnect or die $dbh->errstr;
 
 ###
 
 
 ###
 
@@ -77,6 +103,16 @@ freeside-upgrade - Upgrades database schema for new freeside verisons.
 Reads your existing database schema and updates it to match the current schema,
 adding any columns or tables necessary.
 
 Reads your existing database schema and updates it to match the current schema,
 adding any columns or tables necessary.
 
+Also performs other upgrade functions:
+
+=over 4
+
+=item Calls FS:: Misc::prune::prune_applications (probably unnecessary every upgrade, but simply won't find any records to change)
+
+=item If necessary, moves your configuration information from the filesystem in /usr/local/etc/freeside/conf.<datasrc> to the database.
+
+=back
+
   [ -d ]: Dry run; output SQL statements (to STDOUT) only, but do not execute
           them.
 
   [ -d ]: Dry run; output SQL statements (to STDOUT) only, but do not execute
           them.