[Rt-commit] rt branch, 4.4/serialize-json-initialdata, updated. rt-4.4.1-412-g079fd9b
Shawn Moore
shawn at bestpractical.com
Wed Mar 22 17:55:18 EDT 2017
The branch, 4.4/serialize-json-initialdata has been updated
via 079fd9bfb3de8984835233faab77dad9443042e6 (commit)
via be76b26b963545311687299ed73502cb636c6eee (commit)
via e8d41609b584a01b7ee71bfe85aa3c48e5e2b171 (commit)
via 64d17e84cc64e2718074412007dd57e8a672e4a7 (commit)
from a51767e94efb3da8bba9a9314ee51db245852836 (commit)
Summary of changes:
lib/RT/Migrate/Serializer/JSON.pm | 41 +++++++++++++++++++++++++++++++++------
1 file changed, 35 insertions(+), 6 deletions(-)
- Log -----------------------------------------------------------------
commit 64d17e84cc64e2718074412007dd57e8a672e4a7
Author: Shawn M Moore <shawn at bestpractical.com>
Date: Wed Mar 22 21:05:51 2017 +0000
Fix skipping RT_System
diff --git a/lib/RT/Migrate/Serializer/JSON.pm b/lib/RT/Migrate/Serializer/JSON.pm
index abc6e65..454d7f4 100644
--- a/lib/RT/Migrate/Serializer/JSON.pm
+++ b/lib/RT/Migrate/Serializer/JSON.pm
@@ -473,7 +473,7 @@ sub ShouldExcludeObject {
my $record = shift;
if ($class eq 'RT::User') {
- return 1 if $record->{Name} eq 'RT__System'
+ return 1 if $record->{Name} eq 'RT_System'
|| $record->{Name} eq 'Nobody';
}
elsif ($class eq 'RT::ACE') {
commit e8d41609b584a01b7ee71bfe85aa3c48e5e2b171
Author: Shawn M Moore <shawn at bestpractical.com>
Date: Wed Mar 22 21:26:04 2017 +0000
For stability, sort records consistently
diff --git a/lib/RT/Migrate/Serializer/JSON.pm b/lib/RT/Migrate/Serializer/JSON.pm
index 454d7f4..91abdd9 100644
--- a/lib/RT/Migrate/Serializer/JSON.pm
+++ b/lib/RT/Migrate/Serializer/JSON.pm
@@ -51,6 +51,7 @@ package RT::Migrate::Serializer::JSON;
use strict;
use warnings;
use JSON qw//;
+use List::MoreUtils 'uniq';
use base 'RT::Migrate::Serializer';
@@ -231,18 +232,22 @@ sub _CanonicalizeManyToMany {
my %args = (
object_class => '',
object_primary_ref => '',
+ object_sorter => '',
primary_class => '',
primary_key => 'ApplyTo',
add_to_primary => undef,
+ sort_uniq => 0,
canonicalize_object => sub { $_->{ObjectId} },
@_,
);
my $object_class = $args{object_class};
my $object_primary_ref = $args{object_primary_ref};
+ my $object_sorter = $args{object_sorter};
my $primary_class = $args{primary_class};
my $primary_key = $args{primary_key};
my $add_to_primary = $args{add_to_primary};
+ my $sort_uniq = $args{sort_uniq};
my $canonicalize_object = $args{canonicalize_object};
if (my $objects = delete $self->{Records}{$object_class}) {
@@ -255,9 +260,16 @@ sub _CanonicalizeManyToMany {
@{ $primary->{$primary_key} }
= grep defined,
map &$canonicalize_object,
- sort { $a->{SortOrder} <=> $b->{SortOrder} }
+ sort { $a->{SortOrder} <=> $b->{SortOrder}
+ || ($object_sorter ? $a->{$object_sorter} cmp $b->{$object_sorter} : 0) }
@{ $primary->{$primary_key} || [] };
+ if ($sort_uniq) {
+ @{ $primary->{$primary_key} }
+ = uniq sort
+ @{ $primary->{$primary_key} };
+ }
+
if (ref($add_to_primary) eq 'CODE') {
$add_to_primary->($primary);
}
@@ -397,6 +409,7 @@ sub CanonicalizeObjects {
object_class => 'RT::ObjectCustomField',
object_primary_ref => 'CustomField',
primary_class => 'RT::CustomField',
+ sort_uniq => 1,
canonicalize_object => sub {
my $id = $_->{ObjectId};
return $id if !ref($id);
@@ -408,6 +421,7 @@ sub CanonicalizeObjects {
$self->_CanonicalizeManyToMany(
object_class => 'RT::CustomFieldValue',
object_primary_ref => 'CustomField',
+ object_sorter => 'Name',
primary_class => 'RT::CustomField',
primary_key => 'Values',
canonicalize_object => sub {
@@ -421,6 +435,7 @@ sub CanonicalizeObjects {
object_class => 'RT::ObjectClass',
object_primary_ref => 'Class',
primary_class => 'RT::Class',
+ sort_uniq => 1,
canonicalize_object => sub {
my $id = $_->{ObjectId};
return $id if !ref($id);
@@ -433,6 +448,7 @@ sub CanonicalizeObjects {
object_class => 'RT::ObjectCustomRole',
object_primary_ref => 'CustomRole',
primary_class => 'RT::CustomRole',
+ sort_uniq => 1,
canonicalize_object => sub {
my $id = $_->{ObjectId};
return $id if !ref($id);
@@ -514,15 +530,23 @@ sub WriteFile {
$self->CanonicalizeCustomFields;
$self->CanonicalizeArticles;
- delete $self->{Records}{'RT::Attribute'};
+ my $all_records = $self->{Records};
- for my $intype (keys %{ $self->{Records} }) {
+ delete $all_records->{'RT::Attribute'};
+
+ for my $intype (keys %$all_records) {
my $outtype = $intype;
$outtype =~ s/^RT:://;
$outtype = $initialdataType{$outtype} || ($outtype . 's');
- for my $id (keys %{ $self->{Records}{$intype} }) {
- my $record = $self->{Records}{$intype}{$id};
+ my $records = $all_records->{$intype};
+
+ # sort by database id then serializer id for stability
+ for my $id (sort {
+ ($records->{$a}{id} || 0) <=> ($records->{$b}{id} || 0)
+ || $a cmp $b
+ } keys %$records) {
+ my $record = $records->{$id};
next if $self->ShouldExcludeObject($intype, $id, $record);
commit be76b26b963545311687299ed73502cb636c6eee
Author: Shawn M Moore <shawn at bestpractical.com>
Date: Wed Mar 22 21:39:36 2017 +0000
Clear user passwords and authtokens
diff --git a/lib/RT/Migrate/Serializer/JSON.pm b/lib/RT/Migrate/Serializer/JSON.pm
index 91abdd9..e32e7dc 100644
--- a/lib/RT/Migrate/Serializer/JSON.pm
+++ b/lib/RT/Migrate/Serializer/JSON.pm
@@ -319,6 +319,9 @@ sub CanonicalizeUsers {
delete $user->{Principal};
delete $user->{PrincipalId};
+ delete $user->{Password};
+ delete $user->{AuthToken};
+
my $object = RT::User->new(RT->SystemUser);
$object->Load($user->{id});
commit 079fd9bfb3de8984835233faab77dad9443042e6
Author: Shawn M Moore <shawn at bestpractical.com>
Date: Wed Mar 22 21:45:33 2017 +0000
Remove more empty fields
diff --git a/lib/RT/Migrate/Serializer/JSON.pm b/lib/RT/Migrate/Serializer/JSON.pm
index e32e7dc..cb51185 100644
--- a/lib/RT/Migrate/Serializer/JSON.pm
+++ b/lib/RT/Migrate/Serializer/JSON.pm
@@ -430,6 +430,8 @@ sub CanonicalizeObjects {
canonicalize_object => sub {
my %object = %$_;
delete @object{qw/id CustomField/};
+ delete $object{Category} if !length($object{Category});
+ delete $object{Description} if !length($object{Description});
return \%object;
},
);
-----------------------------------------------------------------------
More information about the rt-commit
mailing list