This commit was generated by cvs2svn to compensate for changes in r5562,
[freeside.git] / FS / bin / freeside-upgrade
1 #!/usr/bin/perl -w
2
3 use strict;
4 use vars qw($opt_d $opt_q $opt_v);
5 use vars qw($DEBUG $DRY_RUN);
6 use Getopt::Std;
7 use DBIx::DBSchema 0.31;
8 use FS::UID qw(adminsuidsetup checkeuid datasrc );  #getsecrets);
9 use FS::CurrentUser;
10 use FS::Schema qw( dbdef dbdef_dist reload_dbdef );
11 use FS::Misc::prune qw(prune_applications);
12 use FS::Conf;
13 use FS::Record qw(qsearch);
14
15 die "Not running uid freeside!" unless checkeuid();
16
17 getopts("dq");
18
19 $DEBUG = !$opt_q;
20 #$DEBUG = $opt_v;
21
22 $DRY_RUN = $opt_d;
23
24 my $user = shift or die &usage;
25 $FS::CurrentUser::upgrade_hack = 1;
26 $FS::UID::callback_hack = 1;
27 my $dbh = adminsuidsetup($user);
28 $FS::UID::callback_hack = 0;
29
30 #needs to match FS::Schema...
31 my $dbdef_file = "%%%FREESIDE_CONF%%%/dbdef.". datasrc;
32
33 dbdef_create($dbh, $dbdef_file);
34
35 delete $FS::Schema::dbdef_cache{$dbdef_file}; #force an actual reload
36 reload_dbdef($dbdef_file);
37
38 $DBIx::DBSchema::DEBUG = $DEBUG;
39 $DBIx::DBSchema::Table::DEBUG = $DEBUG;
40 $DBIx::DBSchema::Index::DEBUG = $DEBUG;
41
42 if ( $DRY_RUN ) {
43   print join(";\n", dbdef->sql_update_schema( dbdef_dist, $dbh ) ). ";\n";
44   exit;
45 } else {
46   dbdef->update_schema( dbdef_dist, $dbh );
47 }
48
49 my $hashref = {};
50 $hashref->{dry_run} = 1 if $DRY_RUN;
51 $hashref->{debug} = 1 if $DEBUG;
52 print join "\n", prune_applications($hashref);
53 print "\n" if $DRY_RUN;
54
55
56 $dbh->commit or die $dbh->errstr;
57
58 dbdef_create($dbh, $dbdef_file);
59
60 $dbh->disconnect or die $dbh->errstr;
61
62 delete $FS::Schema::dbdef_cache{$dbdef_file}; #force an actual reload
63 $FS::UID::AutoCommit = 1;
64 $FS::UID::callback_hack = 1;
65 $dbh = adminsuidsetup($user);
66 $FS::UID::callback_hack = 0;
67 unless ( $DRY_RUN ) {
68   my $dir = "%%%FREESIDE_CONF%%%/conf.". datasrc;
69   if (!scalar(qsearch('conf', {}))) {
70     my $error = FS::Conf::init_config($dir);
71     if ($error) {
72       warn "CONFIGURATION UPGRADE FAILED\n";
73       $dbh->rollback or die $dbh->errstr;
74       die $error;
75     }
76   }
77 }
78 $dbh->commit or die $dbh->errstr;
79 $dbh->disconnect or die $dbh->errstr;
80
81 ###
82
83 sub dbdef_create { # reverse engineer the schema from the DB and save to file
84   my( $dbh, $file ) = @_;
85   my $dbdef = new_native DBIx::DBSchema $dbh;
86   $dbdef->save($file);
87 }
88
89 sub usage {
90   die "Usage:\n  freeside-upgrade [ -d ] [ -q | -v ] user\n"; 
91 }
92
93 =head1 NAME
94
95 freeside-upgrade - Upgrades database schema for new freeside verisons.
96
97 =head1 SYNOPSIS
98
99   freeside-upgrade [ -d ] [ -q | -v ]
100
101 =head1 DESCRIPTION
102
103 Reads your existing database schema and updates it to match the current schema,
104 adding any columns or tables necessary.
105
106 Also performs other upgrade functions:
107
108 =over 4
109
110 =item Calls FS:: Misc::prune::prune_applications (probably unnecessary every upgrade, but simply won't find any records to change)
111
112 =item If necessary, moves your configuration information from the filesystem in /usr/local/etc/freeside/conf.<datasrc> to the database.
113
114 =back
115
116   [ -d ]: Dry run; output SQL statements (to STDOUT) only, but do not execute
117           them.
118
119   [ -q ]: Run quietly.  This may become the default at some point.
120
121   [ -v ]: Run verbosely, sending debugging information to STDERR.  This is the
122           current default.
123
124 =head1 SEE ALSO
125
126 =cut
127