[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