[Rt-commit] rt branch, 4.2/upgrade-history, updated. rt-4.0.5-297-gac0cf0a

Jim Brandt jbrandt at bestpractical.com
Thu Jul 26 14:45:59 EDT 2012


The branch, 4.2/upgrade-history has been updated
       via  ac0cf0af56571f79c563e7ccd4fe6d0d3c6347cb (commit)
      from  05eb3685f42ef9b5935816d70c0984cc32df6984 (commit)

Summary of changes:
 lib/RT/System.pm          | 20 ++++++++++----------
 sbin/rt-setup-database.in | 34 +++++++++++++++++++++++++++-------
 2 files changed, 37 insertions(+), 17 deletions(-)

- Log -----------------------------------------------------------------
commit ac0cf0af56571f79c563e7ccd4fe6d0d3c6347cb
Author: Jim Brandt <jbrandt at bestpractical.com>
Date:   Thu Jul 26 14:40:09 2012 -0400

    Add component and version options to rt-setup-database for upgrade history
    
    Rename realm to component and allow this value to be passed as an
    argument to rt-setup-database. This allows extensions to store upgrade
    history under their own key.
    
    Add a ext-version argument for extension version and add this as
    an optional entry in the upgrade hash.
    
    Module::Install::RTx needs updates to use these new options for
    make initdb.

diff --git a/lib/RT/System.pm b/lib/RT/System.pm
index f2ff57e..409ebed 100644
--- a/lib/RT/System.pm
+++ b/lib/RT/System.pm
@@ -260,7 +260,7 @@ sub QueueCacheNeedsUpdate {
 
 =head2 AddUpgradeHistory realm, data
 
-Adds an entry to the upgrade history database. The realm can be either C<RT>
+Adds an entry to the upgrade history database. The component can be either C<RT>
 for core RT upgrades, or the fully qualified name of a plugin. The data must be
 a hash reference.
 
@@ -268,7 +268,7 @@ a hash reference.
 
 sub AddUpgradeHistory {
     my $self  = shift;
-    my $realm = shift;
+    my $component = shift;
     my $data  = shift;
 
     $data->{timestamp}  ||= time;
@@ -277,7 +277,7 @@ sub AddUpgradeHistory {
     my $upgrade_history_attr = $self->FirstAttribute('UpgradeHistory');
     my $upgrade_history = $upgrade_history_attr ? $upgrade_history_attr->Content : {};
 
-    push @{ $upgrade_history->{$realm} }, $data;
+    push @{ $upgrade_history->{$component} }, $data;
 
     $self->SetAttribute(
         Name    => 'UpgradeHistory',
@@ -285,23 +285,23 @@ sub AddUpgradeHistory {
     );
 }
 
-=head2 UpgradeHistory [realm]
+=head2 UpgradeHistory [component]
 
-Returns the entries of RT's upgrade history. If a realm is specified, the list
-of upgrades for that realm will be returned. Otherwise a hash reference of
-C<< realm => [upgrades] >> will be returned.
+Returns the entries of RT's upgrade history. If a component is specified, the list
+of upgrades for that component will be returned. Otherwise a hash reference of
+C<< component => [upgrades] >> will be returned.
 
 =cut
 
 sub UpgradeHistory {
     my $self  = shift;
-    my $realm = shift;
+    my $component = shift;
 
     my $upgrade_history_attr = $self->FirstAttribute('UpgradeHistory');
     my $upgrade_history = $upgrade_history_attr ? $upgrade_history_attr->Content : {};
 
-    if ($realm) {
-        return @{ $upgrade_history->{$realm} || [] };
+    if ($component) {
+        return @{ $upgrade_history->{$component} || [] };
     }
 
     return $upgrade_history;
diff --git a/sbin/rt-setup-database.in b/sbin/rt-setup-database.in
index e137aee..31ad3a2 100755
--- a/sbin/rt-setup-database.in
+++ b/sbin/rt-setup-database.in
@@ -82,6 +82,7 @@ GetOptions(
     'force', 'debug',
     'dba=s', 'dba-password=s', 'prompt-for-dba-password',
     'datafile=s', 'datadir=s', 'skip-create', 'root-password-file=s',
+    'component=s', 'ext-version=s',
     'help|h',
 );
 
@@ -185,6 +186,9 @@ print "Working with:\n"
     ."Type:\t$db_type\nHost:\t$db_host\nName:\t$db_name\n"
     ."User:\t$db_user\nDBA:\t$dba_user" . ($args{'skip-create'} ? ' (No DBA)' : '') . "\n";
 
+my $component = $args{'component'} || 'RT';
+my $ext_version = $args{'ext-version'};
+
 foreach my $action ( @actions ) {
     no strict 'refs';
     my ($status, $msg) = *{ 'action_'. $action }{'CODE'}->( %args );
@@ -303,12 +307,15 @@ sub action_insert {
 
     RT->ConnectToDatabase();
 
-    RT->System->AddUpgradeHistory(RT => {
+    my %upgrade_data = (
         action   => 'insert',
         filename => $file,
         content  => $content,
-        stage    => 'after',
-    });
+        stage    => 'after',);
+
+    $upgrade_data{'ext_version'} = $ext_version if $ext_version;
+
+    RT->System->AddUpgradeHistory($component => \%upgrade_data);
 
     my $db_type = RT->Config->Get('DatabaseType');
     $RT::Handle->Disconnect() unless $db_type eq 'SQLite';
@@ -401,7 +408,7 @@ sub action_upgrade {
     RT->InitLogging();
     RT->InitSystemObjects();
 
-    RT->System->AddUpgradeHistory(RT => {
+    RT->System->AddUpgradeHistory($component => {
         type      => 'full upgrade',
         action    => 'upgrade',
         stage     => 'before',
@@ -417,7 +424,7 @@ sub action_upgrade {
         my @back = grep {-e $_} map {"$base_dir/$versions[$_]/backcompat"} $n+1..$#versions;
         print "Processing $v\n";
 
-        RT->System->AddUpgradeHistory(RT => {
+        RT->System->AddUpgradeHistory($component => {
             action => 'upgrade',
             type   => 'individual upgrade',
             stage  => 'before',
@@ -445,7 +452,7 @@ sub action_upgrade {
 
 	RT->ConnectToDatabase();
 
-        RT->System->AddUpgradeHistory(RT => {
+        RT->System->AddUpgradeHistory($component => {
             action => 'upgrade',
             type   => 'individual upgrade',
             stage  => 'after',
@@ -456,7 +463,7 @@ sub action_upgrade {
         $previous = $v;
     }
 
-    RT->System->AddUpgradeHistory(RT => {
+    RT->System->AddUpgradeHistory($component => {
         type      => 'full upgrade',
         action    => 'upgrade',
         stage     => 'after',
@@ -650,4 +657,17 @@ administrator privileges
 for 'init' and 'insert': rather than using the default administrative password
 for RT's "root" user, use the password in this file.
 
+=item component
+
+the name of the entity performing a create or upgrade. Used for logging changes
+in the DB. Defaults to RT, but can be the name of an extension or plugin making
+changes to the DB.
+
+=item ext-version
+
+current version of extension making a change. Not needed for RT since RT has a
+more elaborate system to track upgrades across multiple versions.
+
 =back
+
+=cut

-----------------------------------------------------------------------


More information about the Rt-commit mailing list