[Bps-public-commit] r16762 - in Prophet/trunk: . lib/Prophet lib/Prophet/CLI lib/Prophet/CLI/Command lib/Prophet/Replica lib/Prophet/Replica/svn

sartak at bestpractical.com sartak at bestpractical.com
Sat Nov 8 03:10:12 EST 2008


Author: sartak
Date: Sat Nov  8 03:10:12 2008
New Revision: 16762

Added:
   Prophet/trunk/lib/Prophet/CLI/Command/NotFound.pm
Removed:
   Prophet/trunk/lib/Prophet/CLI/Parameters.pm
Modified:
   Prophet/trunk/   (props changed)
   Prophet/trunk/lib/Prophet/App.pm
   Prophet/trunk/lib/Prophet/CLI.pm
   Prophet/trunk/lib/Prophet/CLI/Dispatcher.pm
   Prophet/trunk/lib/Prophet/CLIContext.pm
   Prophet/trunk/lib/Prophet/Change.pm
   Prophet/trunk/lib/Prophet/ChangeSet.pm
   Prophet/trunk/lib/Prophet/Config.pm
   Prophet/trunk/lib/Prophet/Replica.pm
   Prophet/trunk/lib/Prophet/Replica/prophet.pm
   Prophet/trunk/lib/Prophet/Replica/svn/Util.pm
   Prophet/trunk/lib/Prophet/Test.pm
   Prophet/trunk/t/publish-pull.t
   Prophet/trunk/t/real-conflicting-merge.t
   Prophet/trunk/t/simple-conflicting-merge.t
   Prophet/trunk/t/simple-push.t

Log:


Modified: Prophet/trunk/lib/Prophet/App.pm
==============================================================================
--- Prophet/trunk/lib/Prophet/App.pm	(original)
+++ Prophet/trunk/lib/Prophet/App.pm	Sat Nov  8 03:10:12 2008
@@ -46,18 +46,6 @@
 
 Prophet::App
 
-=head1 SYNOPSIS
-
-=head1 METHODS
-
-=head2 BUILD
-
-=cut
-
-=head2 default_replica_type
-
-Returns a string of the the default replica type for this application.
-
 =cut
 
 sub default_replica_type {
@@ -65,29 +53,18 @@
     return $ENV{'PROPHET_REPLICA_TYPE'} || DEFAULT_REPLICA_TYPE;
 }
 
-=head2 require
-
-=cut
-
 sub require {
     my $self = shift;
     my $class = shift;
     $self->_require(module => $class);
 }
 
-=head2 try_to_require
-
-=cut
-
 sub try_to_require {
     my $self = shift;
     my $class = shift;
     $self->_require(module => $class, quiet => 1);
 }
 
-=head2 _require
-
-=cut
 
 sub _require {
     my $self = shift;

Modified: Prophet/trunk/lib/Prophet/CLI.pm
==============================================================================
--- Prophet/trunk/lib/Prophet/CLI.pm	(original)
+++ Prophet/trunk/lib/Prophet/CLI.pm	Sat Nov  8 03:10:12 2008
@@ -47,7 +47,7 @@
 has interactive_shell => ( 
     is => 'rw',
     isa => 'Bool',
-    default => 0,
+    default => sub { 0}
 );
 
 
@@ -57,14 +57,78 @@
 
 =cut
 
-=head2 dispatcher_class -> Class
+=head2 dispatcher -> Class
 
 Returns the dispatcher used to dispatch command lines. You'll want to override
 this in your subclass.
 
 =cut
 
-sub dispatcher_class { "Prophet::CLI::Dispatcher" }
+sub dispatcher { "Prophet::CLI::Dispatcher" }
+
+=head2 _get_cmd_obj
+
+Attempts to determine a command object based on aliases and the currently
+set commands, arguments, and properties. Returns the class on success;
+dies on failure.
+
+This routine will use a C<CLI::Command::Shell> class if no arguments are
+specified.
+
+This routine will use a C<CLI::Command::NotFound> class as a last resort, so
+failure should occur rarely if ever.
+
+=cut
+
+sub _get_cmd_obj {
+    my $self = shift;
+
+    my $command = join ' ', @{ $self->context->primary_commands };
+
+    # yeah this kind of sucks but there's no sane way to tell 
+    my $class;
+    my %dispatcher_args = (
+        cli            => $self,
+        context        => $self->context,
+        got_command    => sub { $class = shift },
+        dispatching_on => $self->context->primary_commands,
+    );
+
+    $self->dispatcher->run($command, %dispatcher_args);
+    die "I don't know how to parse '$command'. Are you sure that's a valid command?\n" unless $class;
+
+    my %constructor_args = (
+        cli      => $self,
+        context  => $self->context,
+        commands => $self->context->primary_commands,
+        type     => $self->context->type,
+    );
+
+    # undef causes type constraint violations
+    for my $key (keys %constructor_args) {
+        delete $constructor_args{$key}
+            if !defined($constructor_args{$key});
+    }
+
+    $constructor_args{uuid} = $self->context->uuid
+        if $self->context->has_uuid;
+
+    return $class->new(%constructor_args);
+}
+
+sub _try_to_load_cmd_class {
+    my $self = shift;
+    my $class = shift;
+    Prophet::App->try_to_require($class);
+    return $class if $class->isa('Prophet::CLI::Command');
+
+    warn "Invalid class $class - not a subclass of Prophet::CLI::Command."
+        if $class !~ /::$/ # don't warn about "Prophet::CLI::Command::" (which happens on "./bin/sd")
+        && Prophet::App->already_required($class);
+
+    return undef;
+}
+
 
 =head2 run_one_command
 
@@ -86,17 +150,11 @@
 
      #  really, we shouldn't be doing this stuff from the command dispatcher
 
-    $self->context(Prophet::CLIContext->new(app_handle => $self->app_handle));
-    $self->context->setup_from_args(@args);
-
-    my $dispatcher = $self->dispatcher_class->new(cli => $self);
-
-    my $command = join ' ', @{ $self->context->primary_commands };
-    my $dispatch = $dispatcher->dispatch($command);
-
-    die "The command you ran, '$command', could not be found. Perhaps running '$0 help' would help?\n" unless $dispatch->has_matches;
-
-    $dispatch->run($dispatcher);
+   $self->context(Prophet::CLIContext->new( app_handle => $self->app_handle)); 
+   $self->context->setup_from_args(@args);
+    if ( my $cmd_obj = $self->_get_cmd_obj() ) {
+        $cmd_obj->run();
+    }
 }
 
 =head2 invoke outhandle, ARGV_COMPATIBLE_ARRAY
@@ -123,7 +181,6 @@
 
 __PACKAGE__->meta->make_immutable;
 no Moose;
-no MooseX::ClassAttribute;
 
 1;
 

Added: Prophet/trunk/lib/Prophet/CLI/Command/NotFound.pm
==============================================================================
--- (empty file)
+++ Prophet/trunk/lib/Prophet/CLI/Command/NotFound.pm	Sat Nov  8 03:10:12 2008
@@ -0,0 +1,14 @@
+package Prophet::CLI::Command::NotFound;
+use Moose;
+extends 'Prophet::CLI::Command';
+
+sub run {
+    my $self = shift;
+    $self->fatal_error( "The command you ran could not be found. Perhaps running '$0 help' would help?" );
+}
+
+__PACKAGE__->meta->make_immutable;
+no Moose;
+
+1;
+

Modified: Prophet/trunk/lib/Prophet/CLI/Dispatcher.pm
==============================================================================
--- Prophet/trunk/lib/Prophet/CLI/Dispatcher.pm	(original)
+++ Prophet/trunk/lib/Prophet/CLI/Dispatcher.pm	Sat Nov  8 03:10:12 2008
@@ -1,91 +1,70 @@
 package Prophet::CLI::Dispatcher;
+use strict;
+use warnings;
 use Path::Dispatcher::Declarative -base;
-use Moose;
-with 'Prophet::CLI::Parameters';
 
 # "ticket display $ID" -> "ticket display --id=$ID"
-on qr{^ (.*) \s+ ( \d+ | [A-Z0-9]{36} ) $ }x => sub {
-    my $self = shift;
-    $self->context->set_arg(id => $2);
-    run($1, $self, @_);
+on qr{ (.*) \s+ ( \d+ | [A-Z0-9]{36} ) $ }x => sub {
+    my %args = @_;
+    $args{cli}->set_arg(id => $2);
+    run($1, %args);
 };
 
-on [ ['create', 'new'] ]         => run_command("Create");
-on [ ['show', 'display'] ]       => run_command("Show");
-on [ ['update', 'edit'] ]        => run_command("Update");
-on [ ['delete', 'del', 'rm'] ]   => run_command("Delete");
-on [ ['search', 'list', 'ls' ] ] => run_command("Search");
-
-on merge    => run_command("Merge");
-on pull     => run_command("Pull");
-on publish  => run_command("Publish");
-on server   => run_command("Server");
-on config   => run_command("Config");
-on settings => run_command("Settings");
-on log      => run_command("Log");
-on shell    => run_command("Shell");
+on qr{^(\w+)} => sub {
+    my %args = @_;
 
-on export => sub {
-    my $self = shift;
-    $self->cli->handle->export_to(path => $self->context->arg('path'));
-};
+    my $cmd = __PACKAGE__->resolve_builtin_aliases($1);
 
-on push => sub {
-    my $self = shift;
+    my @possible_classes = (
+        ("Prophet::CLI::Command::" . ucfirst lc $cmd),
+        "Prophet::CLI::Command::NotFound",
+    );
 
-    die "Please specify a --to.\n" if !$self->context->has_arg('to');
+    my $cli = $args{cli};
 
-    $self->context->set_arg(from => $self->cli->app_handle->default_replica_type.":file://".$self->cli->handle->fs_root);
-    $self->context->set_arg(db_uuid => $self->cli->handle->db_uuid);
-    run('merge', $self, @_);
+    for my $class (@possible_classes) {
+        if ($cli->_try_to_load_cmd_class($class)) {
+            return $args{got_command}->($class);
+        }
+    }
 };
 
-on history => sub {
-    my $self = shift;
+on qr{^\s*$} => sub {
+    run(__PACKAGE__->default_command, @_);
 
-    $self->context->require_uuid;
-    my $record = $self->context->_load_record;
-    $self->record($record);
-    print $record->history_as_string;
 };
 
-sub run_command {
-    my $name = shift;
+my %CMD_MAP = (
+    ls      => 'search',
+    new     => 'create',
+    edit    => 'update',
+    rm      => 'delete',
+    del     => 'delete',
+    list    => 'search',
+    display => 'show',
+);
+
+sub resolve_builtin_aliases {
+    my $self = shift;
+    my @cmds = @_;
 
-    return sub {
-        my $self = shift;
+    if (my $replacement = $CMD_MAP{ lc $cmds[-1] }) {
+        $cmds[-1] = $replacement;
+    }
 
-        my %constructor_args = (
-            cli      => $self->cli,
-            context  => $self->context,
-            commands => $self->context->primary_commands,
-            type     => $self->context->type,
-            uuid     => $self->context->uuid,
-        );
-
-        # undef causes type constraint violations
-        for my $key (keys %constructor_args) {
-            delete $constructor_args{$key}
-                if !defined($constructor_args{$key});
-        }
+    @cmds = map { ucfirst lc } @cmds;
 
-        my @classes = $self->class_names($name);
-        for my $class (@classes) {
-            Prophet::App->try_to_require($class) or next;
-            $class->new(%constructor_args)->run;
-            last;
-        }
-    };
+    return wantarray ? @cmds : $cmds[-1];
 }
 
-sub class_names {
-    my $self = shift;
-    my $command = shift;
-    return "Prophet::CLI::Command::$command";
-}
+=head2 default_command
+
+Returns the "default" command for use when no arguments were specified on the
+command line. In Prophet, it's "shell" but your subclass can change that.
+
+=cut
 
-__PACKAGE__->meta->make_immutable;
-no Moose;
+sub default_command { "shell" }
 
 1;
 

Modified: Prophet/trunk/lib/Prophet/CLIContext.pm
==============================================================================
--- Prophet/trunk/lib/Prophet/CLIContext.pm	(original)
+++ Prophet/trunk/lib/Prophet/CLIContext.pm	Sat Nov  8 03:10:12 2008
@@ -266,6 +266,5 @@
 
 __PACKAGE__->meta->make_immutable;
 no Moose;
-no MooseX::ClassAttribute;
 
 1;

Modified: Prophet/trunk/lib/Prophet/Change.pm
==============================================================================
--- Prophet/trunk/lib/Prophet/Change.pm	(original)
+++ Prophet/trunk/lib/Prophet/Change.pm	Sat Nov  8 03:10:12 2008
@@ -133,10 +133,10 @@
     }
 
     return {
-        record_uuid  => $self->record_uuid,
-        record_type  => $self->record_type,
+        record_type    => $self->record_type,
         change_type  => $self->change_type,
-        prop_changes => $props,
+        prop_changes => $props
+
     };
 }
 
@@ -181,11 +181,8 @@
     my $class   = shift;
     my $uuid    = shift;
     my $hashref = shift;
-    my $self    = $class->new( {
-        record_type => $hashref->{'record_type'},
-        record_uuid => $uuid,
-        change_type => $hashref->{'change_type'},
-    } );
+    my $self    = $class->new(
+        { record_type => $hashref->{'record_type'}, record_uuid => $uuid, change_type => $hashref->{'change_type'} } );
     for my $prop ( keys %{ $hashref->{'prop_changes'} } ) {
         $self->add_prop_change(
             name => $prop,

Modified: Prophet/trunk/lib/Prophet/ChangeSet.pm
==============================================================================
--- Prophet/trunk/lib/Prophet/ChangeSet.pm	(original)
+++ Prophet/trunk/lib/Prophet/ChangeSet.pm	Sat Nov  8 03:10:12 2008
@@ -153,7 +153,9 @@
     my $self = shift;
     my $as_hash = { map { $_ => $self->$_() } @SERIALIZE_PROPS };
 
-    $as_hash->{'changes'} = [ map $_->as_hash, $self->changes ];
+    for my $change ( $self->changes ) {
+        $as_hash->{changes}->{ $change->record_uuid } = $change->as_hash;
+    }
 
     return $as_hash;
 }
@@ -176,8 +178,8 @@
     my $hashref = shift;
     my $self    = $class->new( { map { $_ => $hashref->{$_} } @SERIALIZE_PROPS } );
 
-    for my $change ( @{ $hashref->{changes} } ) {
-        $self->add_change( change => Prophet::Change->new_from_hashref( $change->{'record_uuid'} => $change ) );
+    for my $change ( keys %{ $hashref->{changes} } ) {
+        $self->add_change( change => Prophet::Change->new_from_hashref( $change => $hashref->{changes}->{$change} ) );
     }
     return $self;
 }

Modified: Prophet/trunk/lib/Prophet/Config.pm
==============================================================================
--- Prophet/trunk/lib/Prophet/Config.pm	(original)
+++ Prophet/trunk/lib/Prophet/Config.pm	Sat Nov  8 03:10:12 2008
@@ -1,16 +1,15 @@
 package Prophet::Config;
 use Moose;
 use MooseX::AttributeHelpers;
-use File::Spec;
 use Path::Class;
 
+
 has app_handle => (
     is => 'ro',
     weak_ref => 1,
     isa => 'Prophet::App',
     required => 0
 );
-
 has config_files => ( 
     is => 'rw',
     isa => 'ArrayRef' ,
@@ -34,15 +33,10 @@
     return $_[0]->config->{_aliases};
 }
 
-sub app_config_file {
+sub app_config_file { 
     my $self = shift;
 
-    return $self->file_if_exists($ENV{'PROPHET_APP_CONFIG'})
-        || $self->file_if_exists(
-            File::Spec->catfile(
-                $self->app_handle->handle->fs_root => 'prophetrc' ))
-        || $self->file_if_exists(
-            File::Spec->catfile( $ENV{'HOME'} => '.prophetrc' ));
+    $ENV{'PROPHET_APP_CONFIG'} || file( $self->app_handle->handle->fs_root => "prophetrc" ) ;
 }
 
 #my $singleton;
@@ -88,20 +82,6 @@
     return defined($friendly) ? $friendly : $uuid;
 }
 
-=head2 file_if_exists FILENAME
-
-Returns the given filename if it exists on the filesystem, and an
-empty string otherwise.
-
-=cut
-
-sub file_if_exists {
-    my $self = shift;
-    my $file = shift || ''; # quiet warnings
-
-    return (-e $file) ? $file : '';
-}
-
 __PACKAGE__->meta->make_immutable;
 no Moose;
 
@@ -115,15 +95,14 @@
 
 =head1 SYNOPSIS
 
-    In the Prophet config file (see L</app_config_file>):
+    In ~/.prophetrc:
 
-      prefer_luids: 1
-      summary_format_ticket = %4s },$luid | %-11.11s,status | %-70.70s,summary
+        prefer_luids: 1
 
 =head1 DESCRIPTION
 
-This class represents the configuration of Prophet and the application built on
-top of it.
+This class represents configuration of Prophet and the application built on top
+of it.
 
 =head1 METHODS
 
@@ -135,9 +114,8 @@
 
 =head2 app_config_file
 
-The file which controls configuration for this application
-(the $PROPHET_APP_CONFIG environmental variable, C<$PROPHET_REPO/prophetrc>,
-or C<$HOME/.prophetrc>, in that order).
+The file which controls configuration for this application.
+C<$PROPHET_REPO/prophetrc>.
 
 =head2 load_from_files [files]
 
@@ -158,7 +136,7 @@
 
 =head2 list
 
-Lists all configuration options.
+List all configuration options
 
 =head2 display_name_for_uuid UUID
 

Modified: Prophet/trunk/lib/Prophet/Replica.pm
==============================================================================
--- Prophet/trunk/lib/Prophet/Replica.pm	(original)
+++ Prophet/trunk/lib/Prophet/Replica.pm	Sat Nov  8 03:10:12 2008
@@ -467,10 +467,7 @@
 
     $self->traverse_changesets(
         after    => $args{for}->last_changeset_from_source( $self->uuid ),
-        callback => sub {
-            $args{callback}->( $_[0] ) if $self->should_send_changeset(
-                changeset => $_[0], to => $args{for}
-            );
+        callback => sub { $args{callback}->( $_[0] ) if $self->should_send_changeset( changeset => $_[0], to        => $args{for});
         }
     );
 }

Modified: Prophet/trunk/lib/Prophet/Replica/prophet.pm
==============================================================================
--- Prophet/trunk/lib/Prophet/Replica/prophet.pm	(original)
+++ Prophet/trunk/lib/Prophet/Replica/prophet.pm	Sat Nov  8 03:10:12 2008
@@ -639,8 +639,8 @@
     $self->log("Traversing changesets between $first_rev and $latest");
     for my $rev ( $first_rev .. $latest ) {
         my $changeset = $self->_get_changeset_index_entry(
-            sequence_no => $rev,
-            index_file  => $chgidx
+            sequence_no    => $rev,
+            index_file => $chgidx
         );
 
         $args{callback}->($changeset);

Modified: Prophet/trunk/lib/Prophet/Replica/svn/Util.pm
==============================================================================
--- Prophet/trunk/lib/Prophet/Replica/svn/Util.pm	(original)
+++ Prophet/trunk/lib/Prophet/Replica/svn/Util.pm	Sat Nov  8 03:10:12 2008
@@ -193,6 +193,5 @@
 
 __PACKAGE__->meta->make_immutable;
 no Moose;
-no MooseX::ClassAttribute;
 
 1;

Modified: Prophet/trunk/lib/Prophet/Test.pm
==============================================================================
--- Prophet/trunk/lib/Prophet/Test.pm	(original)
+++ Prophet/trunk/lib/Prophet/Test.pm	Sat Nov  8 03:10:12 2008
@@ -127,15 +127,6 @@
     };
 }
 
-=head2 _mk_cmp_closure EXPECTED, ERROR
-
-Takes references to an array of expected output lines and an array of
-error messages. Returns a subroutine that takes a list
-of output lines and compares them to its expected output lines,
-storing error messages for lines that don't match in ERROR.
-
-=cut
-
 sub _mk_cmp_closure {
     my ( $exp, $err ) = @_;
     my $line = 0;
@@ -158,6 +149,14 @@
         }
 }
 
+=head2 is_script_output SCRIPTNAME \@ARGS, \@STDOUT_MATCH, \@STDERR_MATCH, $MSG
+
+Runs the script, checking to see that its output matches
+
+
+
+=cut
+
 our $RUNCNT;
 
 sub _get_perl_cmd {
@@ -174,13 +173,6 @@
     return @cmd;
 }
 
-=head2 is_script_output SCRIPTNAME \@ARGS, \@STDOUT_MATCH, \@STDERR_MATCH, $MSG
-
-Runs the script, checking to see that its output matches. Error messages
-for lines that don't match are stored in C<\@STDOUT_MATCH>.
-
-=cut
-
 sub is_script_output {
     my ( $script, $arg, $exp_stdout, $exp_stderr, $msg ) = @_;
 
@@ -191,7 +183,7 @@
     my @cmd = _get_perl_cmd($script);
 
     my $ret = run3 [ @cmd, @$arg ], undef, _mk_cmp_closure( $exp_stdout, $stdout_err ),    # stdout
-    _mk_cmp_closure( $exp_stderr, $stdout_err );                    # stderr
+        _mk_cmp_closure( $exp_stderr, $stdout_err );                                       # stderr
 
     for my $line(@$exp_stdout) {
         next if !defined $line;
@@ -201,7 +193,7 @@
     my $test_name = join( ' ', $msg ? "$msg:" : '', $script, @$arg );
     is(scalar(@$stdout_err), 0, $test_name);
     if (@$stdout_err) {
-        diag( "Different in line: " . join( "\n", @$stdout_err ) );
+        diag( "Different in line: " . join( ',', @$stdout_err ) );
     }
 }
 

Modified: Prophet/trunk/t/publish-pull.t
==============================================================================
--- Prophet/trunk/t/publish-pull.t	(original)
+++ Prophet/trunk/t/publish-pull.t	Sat Nov  8 03:10:12 2008
@@ -104,10 +104,9 @@
 
     my $changeset = $args{changeset}->as_hash;
 
-    my $changes = [
-        {
+    my $changes = {
+        $args{record_uuid} => {
             change_type  => 'add_file',
-            record_uuid  => $args{record_uuid},
             record_type  => $args{record_type},
             prop_changes => {
                 status => {
@@ -128,7 +127,7 @@
                 },
             },
         },
-    ];
+    };
 
     if ($args{merge}) {
         my $change_type = $args{sequence_no} > 1
@@ -139,16 +138,15 @@
                                ? $args{sequence_no} - 1
                                : undef;
 
-        push @$changes, {
+        $changes->{ replica_uuid_for('alice') } = {
             change_type  => $change_type,
-            record_uuid  => replica_uuid_for('alice'),
             record_type  => '_merge_tickets',
             prop_changes => {
                 'last-changeset' => {
                     old_value => $prev_changeset_num,
                     new_value => $args{sequence_no},
                 }
-            },
+            }
         };
     }
 

Modified: Prophet/trunk/t/real-conflicting-merge.t
==============================================================================
--- Prophet/trunk/t/real-conflicting-merge.t	(original)
+++ Prophet/trunk/t/real-conflicting-merge.t	Sat Nov  8 03:10:12 2008
@@ -164,11 +164,10 @@
     my @hashes = map { $_->as_hash } @changesets;
     is_deeply(
         \@hashes,
-        [   {   changes => [
-                    {
+        [   {   changes => {
+                    $record_id => {
                         change_type  => 'update_file',
-                        record_uuid  => $record_id,
-                        record_type  => 'Bug',
+                        record_type    => 'Bug',
                         prop_changes => {
                             status => {
                                 old_value => 'stalled',
@@ -176,7 +175,7 @@
                             }
                         }
                     }
-                ],
+                },
                 creator              => undef,
                 created              => $changesets[0]->created,
                 is_nullification     => 1,
@@ -195,27 +194,30 @@
                 original_sequence_no => $ALICE_LAST_REV_CACHE,
                 source_uuid          => replica_uuid(),
                 original_source_uuid => as_alice { replica_uuid() },
-                changes              => [
-                    {
-                        record_uuid  => $record_id,
-                        record_type  => 'Bug',
+                changes              => {
+                    $record_id => {
+                        record_type    => 'Bug',
                         change_type  => 'update_file',
                         prop_changes => {
                             status => { old_value => 'new', new_value => 'open' }
-                        },
+
+                            }
+
                     },
-                    {
-                        record_uuid  => as_alice{ replica_uuid() },
-                        record_type  => '_merge_tickets',
+                    as_alice {
+                        replica_uuid();
+                    } => {
+                        record_type    => '_merge_tickets',
                         change_type  => 'update_file',
                         prop_changes => {
                             'last-changeset' => {
                                 old_value => $ALICE_LAST_REV_CACHE - 1,
                                 new_value => $ALICE_LAST_REV_CACHE
                             }
-                        }
+                            }
+
                     }
-                ],
+                }
             },
 
             {
@@ -227,16 +229,18 @@
                 original_sequence_no => replica_last_rev(),
                 source_uuid          => replica_uuid(),
                 original_source_uuid => replica_uuid(),
-                changes              => [
-                    {
-                        record_uuid  => $record_id,
-                        record_type  => 'Bug',
+                changes              => {
+                    $record_id => {
+                        record_type    => 'Bug',
                         change_type  => 'update_file',
                         prop_changes => {
                             status => { old_value => 'open', new_value => 'stalled' }
-                        },
+
+                            }
+
                     }
-                ]
+                    }
+
             }
         ],
         "Bob's final state is as we expect"

Modified: Prophet/trunk/t/simple-conflicting-merge.t
==============================================================================
--- Prophet/trunk/t/simple-conflicting-merge.t	(original)
+++ Prophet/trunk/t/simple-conflicting-merge.t	Sat Nov  8 03:10:12 2008
@@ -125,14 +125,14 @@
             original_source_uuid => undef,
             sequence_no          => undef,
             source_uuid          => undef,
-            changes              => [
-                {
+            changes              => {
+                $record_id => {
                     change_type  => 'update_file',
-                    record_uuid  => $record_id,
-                    record_type  => 'Bug',
+                    record_type    => 'Bug',
                     prop_changes => { status => { old_value => 'stalled', new_value => 'new' } }
-                }
-            ]
+                    }
+
+            }
         }
     );
 
@@ -165,28 +165,27 @@
             sequence_no          => undef,
             original_sequence_no => as_alice { replica_last_rev() },
             original_source_uuid => replica_uuid_for('alice'),
-            changes              => [
-                {
-                    record_uuid  => $record_id,
-                    record_type  => 'Bug',
+            changes              => {
+                $record_id => {
+                    record_type    => 'Bug',
                     change_type  => 'update_file',
                     prop_changes => { status => { old_value => 'new', new_value => 'stalled' } }
                 },
-                {
+
+                replica_uuid_for('alice') => {
                     change_type  => 'update_file',
-                    record_uuid  => replica_uuid_for('alice'),
-                    record_type  => '_merge_tickets',
+                    record_type    => '_merge_tickets',
                     prop_changes => {
                         'last-changeset' => {
                             old_value => as_alice { replica_last_rev() - 1 },
                             new_value => as_alice { replica_last_rev() }
                         }
+                        }
+
                     }
 
                 }
 
-            ],
-
         },
         "yay. the last rev from alice synced right"
     );

Modified: Prophet/trunk/t/simple-push.t
==============================================================================
--- Prophet/trunk/t/simple-push.t	(original)
+++ Prophet/trunk/t/simple-push.t	Sat Nov  8 03:10:12 2008
@@ -72,8 +72,8 @@
             'original_source_uuid' => replica_uuid_for('bob'),
             'is_resolution'        => undef,
             'source_uuid'          => replica_uuid_for('bob'),
-            'changes'              => [
-                {
+            'changes'              => {
+                $openbug => {
                     'change_type'  => 'add_file',
                     'prop_changes' => {
                         'from' => {
@@ -93,10 +93,9 @@
                             'old_value' => undef
                         },
                     },
-                    'record_uuid' => $openbug,
                     'record_type' => 'Bug'
                 }
-            ],
+            },
             'is_nullification' => undef,
         }
     ]
@@ -148,8 +147,8 @@
             'original_source_uuid' => replica_uuid_for('bob'),
             'is_resolution'        => undef,
             'source_uuid'          => replica_uuid_for('bob'),
-            'changes'              => [
-                {
+            'changes'              => {
+                $last_id => {
                     'change_type'  => 'add_file',
                     'prop_changes' => {
                         'from' => {
@@ -169,10 +168,9 @@
                             'old_value' => undef,
                         },
                     },
-                    'record_uuid' => $last_id,
-                    'record_type' => 'Bug',
+                    'record_type' => 'Bug'
                 }
-            ],
+            },
             'is_nullification' => undef,
         }
     ]



More information about the Bps-public-commit mailing list