[Bps-public-commit] r15509 - in Prophet/trunk/lib/Prophet: CLI CLI/Command Resolver
jesse at bestpractical.com
jesse at bestpractical.com
Wed Aug 27 02:26:43 EDT 2008
Author: jesse
Date: Wed Aug 27 02:26:43 2008
New Revision: 15509
Modified:
Prophet/trunk/lib/Prophet/CLI/Command.pm
Prophet/trunk/lib/Prophet/CLI/Command/Log.pm
Prophet/trunk/lib/Prophet/Change.pm
Prophet/trunk/lib/Prophet/ChangeSet.pm
Prophet/trunk/lib/Prophet/ConflictingChange.pm
Prophet/trunk/lib/Prophet/Record.pm
Prophet/trunk/lib/Prophet/Resolver/IdenticalChanges.pm
Log:
* Cleanups to allow the log command to be subcalssed more easily
Modified: Prophet/trunk/lib/Prophet/CLI/Command.pm
==============================================================================
--- Prophet/trunk/lib/Prophet/CLI/Command.pm (original)
+++ Prophet/trunk/lib/Prophet/CLI/Command.pm Wed Aug 27 02:26:43 2008
@@ -15,17 +15,12 @@
has context => (
is => 'rw',
isa => 'Prophet::CLIContext',
- lazy => 1,
handles => [
qw/args set_arg arg has_arg delete_arg arg_names/,
qw/props set_prop prop has_prop delete_prop prop_names/,
'add_to_prop_set', 'prop_set',
],
- default => sub {
- return Prophet::CLIContext->new( app_handle => shift->app_handle);
- }
-
);
Modified: Prophet/trunk/lib/Prophet/CLI/Command/Log.pm
==============================================================================
--- Prophet/trunk/lib/Prophet/CLI/Command/Log.pm (original)
+++ Prophet/trunk/lib/Prophet/CLI/Command/Log.pm Wed Aug 27 02:26:43 2008
@@ -3,25 +3,49 @@
extends 'Prophet::CLI::Command';
sub run {
- my $self = shift;
+ my $self = shift;
my $handle = $self->handle;
my $newest = $self->arg('last') || $handle->latest_sequence_no;
- my $start = $newest - ($self->arg('count') || '20');
+ my $start = $newest - ( $self->arg('count') || '20' );
$start = 0 if $start < 0;
$handle->traverse_changesets(
after => $start,
callback => sub {
my $changeset = shift;
- print $changeset->as_string(change_header => sub {
- my $change = shift;
- return " # " . $change->record_type. " ".$self->app_handle->handle->find_or_create_luid(uuid => $change->record_uuid)." (" . $change->record_uuid.")\n";
-
- });
+ $self->handle_changeset($changeset);
+
},
);
+}
+
+
+sub handle_changeset {
+ my $self = shift;
+ my $changeset = shift;
+ print $changeset->as_string(
+ change_header => sub {
+ my $change = shift;
+ $self->change_header($change);
+ }
+ );
+
+}
+sub change_header {
+ my $self = shift;
+ my $change = shift;
+ return
+ " # "
+ . $change->record_type . " "
+ . $self->app_handle->handle->find_or_create_luid(
+ uuid => $change->record_uuid )
+ . " ("
+ . $change->record_uuid . ")\n";
}
+
+__PACKAGE__->meta->make_immutable;
+no Moose;
1;
Modified: Prophet/trunk/lib/Prophet/Change.pm
==============================================================================
--- Prophet/trunk/lib/Prophet/Change.pm (original)
+++ Prophet/trunk/lib/Prophet/Change.pm Wed Aug 27 02:26:43 2008
@@ -121,6 +121,23 @@
};
}
+sub as_string {
+ my $self = shift;
+ my %args = validate( @_, { header_callback => 0, } );
+ my $out = "";
+ my @prop_changes = $self->prop_changes;
+ next if @prop_changes == 0;
+ $out .= $args{header_callback}->($self) if ( $args{header_callback} );
+
+ for my $prop_change (@prop_changes) {
+ $out .= " " . $prop_change->summary . "\n";
+ }
+
+ return $out;
+
+}
+
+
sub new_from_hashref {
my $class = shift;
my $uuid = shift;
Modified: Prophet/trunk/lib/Prophet/ChangeSet.pm
==============================================================================
--- Prophet/trunk/lib/Prophet/ChangeSet.pm (original)
+++ Prophet/trunk/lib/Prophet/ChangeSet.pm Wed Aug 27 02:26:43 2008
@@ -162,45 +162,36 @@
sub as_string {
my $self = shift;
- my %args = validate(@_, {
- change_filter => 0,
- change_header => 0,
- });
-
- my $change_filter = $args{change_filter};
-
- my $out = '';
-
- $out .= sprintf "Change %d by %s at %s\n\t\t\t\t\(%d@%s)\n\n",
- $self->sequence_no,
- ($self->creator || '(unknown)'),
- $self->created,
- $self->original_sequence_no,
- $self->original_source_uuid;
-
- for my $change ($self->changes) {
- my @prop_changes = $change->prop_changes;
- next if @prop_changes == 0;
-
- if ($change_filter) {
- next unless $change_filter->($change);
+ my %args = validate(
+ @_,
+ { change_filter => 0,
+ change_header => 0,
+ header_callback => 0
}
+ );
- if ($args{change_header}) {
- $out .= $args{change_header}->($change);
- }
- for my $prop_change (@prop_changes) {
- $out .= " " . $prop_change->summary . "\n";
- }
+ my $out = $args{header_callback} ? $args{header_callback}->($self) : $self->description_as_string;
+
+ for my $change ( $self->changes ) {
+ next if $args{change_filter} && !$args{change_filter}->($change);
+ $out .= $change->as_string( header_callback => $args{change_header} );
$out .= "\n";
}
$out .= "\n";
-
return $out;
}
+sub description_as_string {
+ my $self = shift;
+ sprintf "Change %d by %s at %s\n\t\t\t\t\(%d@%s)\n\n",
+ $self->sequence_no,
+ ( $self->creator || '(unknown)' ),
+ $self->created,
+ $self->original_sequence_no,
+ $self->original_source_uuid;
+ }
__PACKAGE__->meta->make_immutable;
no Moose;
Modified: Prophet/trunk/lib/Prophet/ConflictingChange.pm
==============================================================================
--- Prophet/trunk/lib/Prophet/ConflictingChange.pm (original)
+++ Prophet/trunk/lib/Prophet/ConflictingChange.pm Wed Aug 27 02:26:43 2008
@@ -73,7 +73,7 @@
my $struct = $self->as_hash;
for ( @{ $struct->{prop_conflicts} } ) {
- $_->{choices} = [ sort ( delete $_->{source_new_value}, delete $_->{target_value} ) ];
+ $_->{choices} = [ sort grep { defined} ( delete $_->{source_new_value}, delete $_->{target_value} ) ];
}
return sha1_hex(to_json($struct, {utf8 => 1, canonical => 1}));
Modified: Prophet/trunk/lib/Prophet/Record.pm
==============================================================================
--- Prophet/trunk/lib/Prophet/Record.pm (original)
+++ Prophet/trunk/lib/Prophet/Record.pm Wed Aug 27 02:26:43 2008
@@ -330,7 +330,7 @@
return $self->handle->get_record_props(
uuid => $self->uuid,
type => $self->type
- );
+ ) || {};
}
=head2 prop $name
Modified: Prophet/trunk/lib/Prophet/Resolver/IdenticalChanges.pm
==============================================================================
--- Prophet/trunk/lib/Prophet/Resolver/IdenticalChanges.pm (original)
+++ Prophet/trunk/lib/Prophet/Resolver/IdenticalChanges.pm Wed Aug 27 02:26:43 2008
@@ -45,7 +45,11 @@
my $resolution = Prophet::Change->new_from_conflict($conflicting_change);
for my $prop_change ( @{ $conflicting_change->prop_conflicts } ) {
- return 0 unless $prop_change->target_value eq $prop_change->source_new_value;
+ next if ((!defined $prop_change->target_value || $prop_change->target_value eq '')
+
+ && ( !defined $prop_change->source_new_value || $prop_change->source_new_value eq ''));
+ next if $prop_change->target_value eq $prop_change->source_new_value;
+ return 0;
}
$conflict->autoresolved(1);
More information about the Bps-public-commit
mailing list