[Rt-commit] rt branch, 4.0-trunk, updated. rt-4.0.18-39-g11b0efc
Alex Vandiver
alexmv at bestpractical.com
Thu Oct 31 18:52:06 EDT 2013
The branch, 4.0-trunk has been updated
via 11b0efca83aa408bbf6cf631521dd34dd3f1bcec (commit)
via 9e3fd223173f3994fac3da62fefb985e613d7d61 (commit)
via 94f99e840766e929be7cb231c0c54e23b2647919 (commit)
via b97865dd18f434585964403ac6c099a1109cae56 (commit)
via 4b53069ee84f61201dafe2269c8e3d8a78f90b65 (commit)
via 6dcfa73702f253a1a8a61e60a5d1447694c5269f (commit)
via a6e417fee855433ffc4e6ce5f1ce176668a4b0fa (commit)
via 5c37f5100210ef6f103d9feb361ea4a6fdcfc956 (commit)
via fe3cdc3a8644a3de6c566b305781cf49feded6e4 (commit)
via e5f431120ccadce6831f305843e3ee219e0127de (commit)
from 15dd4e79edfb3b840df8dc2d77dab97012ee63c8 (commit)
Summary of changes:
sbin/rt-dump-metadata.in | 189 ++++++++++++++++++++++++++++++++++++-----------
1 file changed, 147 insertions(+), 42 deletions(-)
- Log -----------------------------------------------------------------
commit e5f431120ccadce6831f305843e3ee219e0127de
Author: Alex Vandiver <alexmv at bestpractical.com>
Date: Thu Oct 31 18:06:01 2013 -0400
Switch to --all instead of an incomprehensible 0
diff --git a/sbin/rt-dump-metadata.in b/sbin/rt-dump-metadata.in
index 20c2853..d132764 100644
--- a/sbin/rt-dump-metadata.in
+++ b/sbin/rt-dump-metadata.in
@@ -79,7 +79,9 @@ BEGIN {
use Getopt::Long;
my %opt;
-GetOptions( \%opt, "help|h" );
+GetOptions( \%opt, "help|h",
+ "all|a",
+);
if ( $opt{help} ) {
require Pod::Usage;
@@ -93,8 +95,6 @@ require XML::Simple;
RT::LoadConfig();
RT::Init();
-my $LocalOnly = @ARGV ? shift(@ARGV) : 1;
-
my %RV;
my %Ignore = (
All => [
@@ -130,7 +130,7 @@ foreach my $class (@classes) {
$objects->OrderBy( FIELD => 'Id' );
}
- if ($LocalOnly) {
+ unless ($opt{all}) {
next if $class eq 'ACL'; # XXX - would go into infinite loop - XXX
$objects->Limit(
FIELD => 'LastUpdatedBy',
@@ -232,7 +232,7 @@ rt-dump-metadata - dump configuration metadata from an RT database
=head1 SYNOPSIS
- rt-dump-metdata [ 0 ]
+ rt-dump-metdata [--all]
=head1 DESCRIPTION
@@ -242,11 +242,19 @@ C<rt-setup-database>. To dump and load a full RT database, you should generally
use the native database tools instead, as well as performing any necessary
steps from UPGRADING.
-When run without arguments, the metadata dump will only include 'local'
+This is NOT a tool for backing up an RT database.
+
+=head1 OPTIONS
+
+=over
+
+=item C<--all>
+
+When run with C<--all>, the dump will include all configuration
+metadata; otherwise, the metadata dump will only include 'local'
configuration changes, i.e. those done manually in the web interface.
-When run with the argument '0', the dump will include all configuration
-metadata.
+=back
-This is NOT a tool for backing up an RT database.
+=cut
commit fe3cdc3a8644a3de6c566b305781cf49feded6e4
Author: Kai Storbeck <kai at xs4all.nl>
Date: Thu Oct 31 18:07:10 2013 -0400
Only ever dump UserDefined groups, even with --all
diff --git a/sbin/rt-dump-metadata.in b/sbin/rt-dump-metadata.in
index d132764..38bcac6 100644
--- a/sbin/rt-dump-metadata.in
+++ b/sbin/rt-dump-metadata.in
@@ -119,6 +119,11 @@ foreach my $class (@classes) {
my $objects = "RT::$class"->new( RT->SystemUser );
$objects->{find_disabled_rows} = 1;
$objects->UnLimit;
+ $objects->Limit(
+ FIELD => 'Domain',
+ OPERATOR => '=',
+ VALUE => 'UserDefined'
+ ) if $class eq 'Groups';
if ( $class eq 'CustomFields' ) {
$objects->OrderByCols(
@@ -142,11 +147,6 @@ foreach my $class (@classes) {
OPERATOR => '!=',
VALUE => $SystemUserId
) if $class eq 'Users';
- $objects->Limit(
- FIELD => 'Domain',
- OPERATOR => '=',
- VALUE => 'UserDefined'
- ) if $class eq 'Groups';
}
my %fields;
commit 5c37f5100210ef6f103d9feb361ea4a6fdcfc956
Author: Alex Vandiver <alexmv at bestpractical.com>
Date: Thu Oct 31 18:09:56 2013 -0400
fixup! Switch to --all instead of an incomprehensible 0
diff --git a/sbin/rt-dump-metadata.in b/sbin/rt-dump-metadata.in
index 38bcac6..2f2db30 100644
--- a/sbin/rt-dump-metadata.in
+++ b/sbin/rt-dump-metadata.in
@@ -248,7 +248,7 @@ This is NOT a tool for backing up an RT database.
=over
-=item C<--all>
+=item C<--all> or C<-a>
When run with C<--all>, the dump will include all configuration
metadata; otherwise, the metadata dump will only include 'local'
commit a6e417fee855433ffc4e6ce5f1ce176668a4b0fa
Author: Kai Storbeck <kai at xs4all.nl>
Date: Thu Oct 31 18:10:28 2013 -0400
Add a --limit-to-privileged option
diff --git a/sbin/rt-dump-metadata.in b/sbin/rt-dump-metadata.in
index 2f2db30..c7f8535 100644
--- a/sbin/rt-dump-metadata.in
+++ b/sbin/rt-dump-metadata.in
@@ -80,6 +80,7 @@ BEGIN {
use Getopt::Long;
my %opt;
GetOptions( \%opt, "help|h",
+ "limit-to-privileged|l",
"all|a",
);
@@ -119,6 +120,8 @@ foreach my $class (@classes) {
my $objects = "RT::$class"->new( RT->SystemUser );
$objects->{find_disabled_rows} = 1;
$objects->UnLimit;
+ $objects->LimitToPrivileged if $class eq 'Users'
+ && $opt{'limit-to-privileged'};
$objects->Limit(
FIELD => 'Domain',
OPERATOR => '=',
@@ -254,6 +257,10 @@ When run with C<--all>, the dump will include all configuration
metadata; otherwise, the metadata dump will only include 'local'
configuration changes, i.e. those done manually in the web interface.
+=item C<--limit-to-privileged> or C<-l>
+
+Causes the dumper to only dump privileged users.
+
=back
=cut
commit 6dcfa73702f253a1a8a61e60a5d1447694c5269f
Author: Kai Storbeck <kai at xs4all.nl>
Date: Thu Oct 31 18:11:22 2013 -0400
Add a --skip-disabled option
diff --git a/sbin/rt-dump-metadata.in b/sbin/rt-dump-metadata.in
index c7f8535..614f4bf 100644
--- a/sbin/rt-dump-metadata.in
+++ b/sbin/rt-dump-metadata.in
@@ -81,6 +81,7 @@ use Getopt::Long;
my %opt;
GetOptions( \%opt, "help|h",
"limit-to-privileged|l",
+ "skip-disabled|s",
"all|a",
);
@@ -118,7 +119,7 @@ my @classes = qw(
foreach my $class (@classes) {
require "RT/$class.pm";
my $objects = "RT::$class"->new( RT->SystemUser );
- $objects->{find_disabled_rows} = 1;
+ $objects->{find_disabled_rows} = 1 unless $opt{'skip-disabled'};
$objects->UnLimit;
$objects->LimitToPrivileged if $class eq 'Users'
&& $opt{'limit-to-privileged'};
@@ -261,6 +262,10 @@ configuration changes, i.e. those done manually in the web interface.
Causes the dumper to only dump privileged users.
+=item C<--skip-disabled> or C<-s>
+
+Ignores disabled rows in the database.
+
=back
=cut
commit 4b53069ee84f61201dafe2269c8e3d8a78f90b65
Author: Kai Storbeck <kai at xs4all.nl>
Date: Thu Oct 31 18:15:20 2013 -0400
Add Applies-To information about CF's
This still leaves in a small bug: Unused CF's on the sending side turn
into globally applied CF's when importing this metadata. Not a huge
deal IMO.
Note that in 4.2 this structure is renamed to ApplyTo together with a
field named LookupType.
diff --git a/sbin/rt-dump-metadata.in b/sbin/rt-dump-metadata.in
index 614f4bf..a62b407 100644
--- a/sbin/rt-dump-metadata.in
+++ b/sbin/rt-dump-metadata.in
@@ -198,6 +198,16 @@ foreach my $class (@classes) {
),
};
}
+ if ( $obj->LookupType eq 'RT::Queue-RT::Ticket' ) {
+ # XXX-TODO: unused CF's turn into global CF when importing
+ # as the sub InsertData in RT::Handle creates a global CF
+ # when no queue is specified.
+ $rv->{Queue} = [];
+ my $applies = $obj->AppliedTo;
+ while ( my $queue = $applies->Next ) {
+ push @{ $rv->{Queue} }, $queue->Name;
+ }
+ }
}
if ( eval { require RT::Attributes; 1 } ) {
commit b97865dd18f434585964403ac6c099a1109cae56
Author: Kai Storbeck <kai at xs4all.nl>
Date: Thu Oct 31 18:16:44 2013 -0400
Make dumped ACLs not include references to principal ids
diff --git a/sbin/rt-dump-metadata.in b/sbin/rt-dump-metadata.in
index a62b407..e93965c 100644
--- a/sbin/rt-dump-metadata.in
+++ b/sbin/rt-dump-metadata.in
@@ -154,6 +154,7 @@ foreach my $class (@classes) {
}
my %fields;
+OBJECT:
while ( my $obj = $objects->Next ) {
next
if $obj->can('LastUpdatedBy')
@@ -167,36 +168,106 @@ foreach my $class (@classes) {
my $rv;
- # next if $obj-> # skip default names
- foreach my $field ( sort keys %fields ) {
- my $value = $obj->__Value($field);
- $rv->{$field} = $value if ( defined($value) && length($value) );
- }
- delete $rv->{Disabled} unless $rv->{Disabled};
-
- foreach my $record ( map { /ACL/ ? 'ACE' : substr( $_, 0, -1 ) }
- @classes )
- {
- foreach my $key ( map "$record$_", ( '', 'Id' ) ) {
- next unless exists $rv->{$key};
- my $id = $rv->{$key} or next;
- my $obj = "RT::$record"->new( RT->SystemUser );
- $obj->LoadByCols( Id => $id ) or next;
- $rv->{$key} = $obj->__Value('Name') || 0;
+ if ( $class ne 'ACL' ) {
+ # next if $obj-> # skip default names
+ foreach my $field ( sort keys %fields ) {
+ my $value = $obj->__Value($field);
+ $rv->{$field} = $value if ( defined($value) && length($value) );
+ }
+ delete $rv->{Disabled} unless $rv->{Disabled};
+
+ foreach my $record ( map { /ACL/ ? 'ACE' : substr( $_, 0, -1 ) }
+ @classes )
+ {
+ foreach my $key ( map "$record$_", ( '', 'Id' ) ) {
+ next unless exists $rv->{$key};
+ my $id = $rv->{$key} or next;
+ my $obj = "RT::$record"->new( RT->SystemUser );
+ $obj->LoadByCols( Id => $id ) or next;
+ $rv->{$key} = $obj->__Value('Name') || 0;
+ }
+ }
+
+ if ( $class eq 'Users' and defined $obj->Privileged ) {
+ $rv->{Privileged} = int( $obj->Privileged );
+ } elsif ( $class eq 'CustomFields' ) {
+ my $values = $obj->Values;
+ while ( my $value = $values->Next ) {
+ push @{ $rv->{Values} }, {
+ map { ( $_ => $value->__Value($_) ) }
+ qw(
+ Name Description SortOrder
+ ),
+ };
+ }
+ if ( $obj->LookupType eq 'RT::Queue-RT::Ticket' ) {
+ # XXX-TODO: unused CF's turn into global CF when importing
+ # as the sub InsertData in RT::Handle creates a global CF
+ # when no queue is specified.
+ $rv->{Queue} = [];
+ my $applies = $obj->AppliedTo;
+ while ( my $queue = $applies->Next ) {
+ push @{ $rv->{Queue} }, $queue->Name;
+ }
+ }
}
}
+ else {
+ # 1) pick the right
+ $rv->{Right} = $obj->RightName;
+
+ # 2) Pick a level: Granted on Queue, CF, CF+Queue, or Globally?
+ for ( $obj->ObjectType ) {
+ if ( /^RT::Queue$/ ) {
+ next OBJECT if $opt{'skip-disabled'} && $obj->Object->Disabled;
+ $rv->{Queue} = $obj->Object->Name;
+ }
+ elsif ( /^RT::CustomField$/ ) {
+ next OBJECT if $opt{'skip-disabled'} && $obj->Object->Disabled;
+ $rv->{CF} = $obj->Object->Name;
+ }
+ elsif ( /^RT::Group$/ ) {
+ # No support for RT::Group ACLs in RT::Handle yet.
+ next OBJECT;
+ }
+ elsif ( /^RT::System$/ ) {
+ # skip setting anything on $rv;
+ # "Specifying none of the above will get you a global right."
+ }
+ }
- if ( $class eq 'Users' and defined $obj->Privileged ) {
- $rv->{Privileged} = int( $obj->Privileged );
- } elsif ( $class eq 'CustomFields' ) {
- my $values = $obj->Values;
- while ( my $value = $values->Next ) {
- push @{ $rv->{Values} }, {
- map { ( $_ => $value->__Value($_) ) }
- qw(
- Name Description SortOrder
- ),
- };
+ # 3) Pick a Principal; User or Group or Role
+ if ( $obj->PrincipalType eq 'Group' ) {
+ next OBJECT if $opt{'skip-disabled'} && $obj->PrincipalObj->Disabled;
+ my $group = $obj->PrincipalObj->Object;
+ for ( $group->Domain ) {
+ # An internal user group
+ if ( /^SystemInternal$/ ) {
+ $rv->{GroupDomain} = $group->Domain;
+ $rv->{GroupType} = $group->Type;
+ }
+ # An individual user
+ elsif ( /^ACLEquivalence$/ ) {
+ my $member = $group->MembersObj->Next->MemberObj;
+ next OBJECT if $opt{'skip-disabled'} && $member->Disabled;
+ $rv->{UserId} = $member->Object->Name;
+ }
+ # A group you created
+ elsif ( /^UserDefined$/ ) {
+ $rv->{GroupDomain} = 'UserDefined';
+ $rv->{GroupId} = $group->Name;
+ }
+ }
+ } else {
+ $rv->{GroupType} = $obj->PrincipalType;
+ # A system-level role
+ if ( $obj->ObjectType eq 'RT::System' ) {
+ $rv->{GroupDomain} = 'RT::System-Role';
+ }
+ # A queue-level role
+ elsif ( $obj->ObjectType eq 'RT::Queue' ) {
+ $rv->{GroupDomain} = 'RT::Queue-Role';
+ }
}
if ( $obj->LookupType eq 'RT::Queue-RT::Ticket' ) {
# XXX-TODO: unused CF's turn into global CF when importing
commit 94f99e840766e929be7cb231c0c54e23b2647919
Author: Alex Vandiver <alexmv at bestpractical.com>
Date: Thu Oct 31 18:17:03 2013 -0400
Add a pointer to the initialdata docs
diff --git a/sbin/rt-dump-metadata.in b/sbin/rt-dump-metadata.in
index e93965c..4c555ae 100644
--- a/sbin/rt-dump-metadata.in
+++ b/sbin/rt-dump-metadata.in
@@ -327,7 +327,8 @@ C<rt-setup-database>. To dump and load a full RT database, you should generally
use the native database tools instead, as well as performing any necessary
steps from UPGRADING.
-This is NOT a tool for backing up an RT database.
+This is NOT a tool for backing up an RT database. See also
+L<docs/initialdata> for more straightforward means of importing data.
=head1 OPTIONS
commit 9e3fd223173f3994fac3da62fefb985e613d7d61
Author: Kai Storbeck <kai at xs4all.nl>
Date: Wed Oct 16 10:40:43 2013 +0200
Do not dump references to tickets
Bookmarks shouldn't be dumped.
diff --git a/sbin/rt-dump-metadata.in b/sbin/rt-dump-metadata.in
index 4c555ae..798e0e4 100644
--- a/sbin/rt-dump-metadata.in
+++ b/sbin/rt-dump-metadata.in
@@ -285,6 +285,9 @@ OBJECT:
my $attributes = $obj->Attributes;
while ( my $attribute = $attributes->Next ) {
my $content = $attribute->Content;
+ if ( $class eq 'Users' and $attribute->Name eq 'Bookmarks' ) {
+ next;
+ }
$rv->{Attributes}{ $attribute->Name } = $content
if length($content);
}
commit 11b0efca83aa408bbf6cf631521dd34dd3f1bcec
Merge: 15dd4e7 9e3fd22
Author: Alex Vandiver <alexmv at bestpractical.com>
Date: Thu Oct 31 18:51:51 2013 -0400
Merge branch '4.0/dump-metadata-cleanups' into 4.0-trunk
-----------------------------------------------------------------------
More information about the Rt-commit
mailing list