Re: [Perl-workflow-devel] patch for passing in date format
Brought to you by:
jonasbn
|
From: Jim B. <cb...@bu...> - 2007-08-13 14:42:19
|
Sorry about that. Maybe it's the linebreaks or some platform issue? The
patch is attached. On my Mac, I was able to get this to work:
10:35am brandt1{~/test}->chmod -R 775 Workflow-0.28
10:35am brandt1{~/test}->cd Workflow-0.28
10:35am brandt1{~/test/Workflow-0.28}->cp ../workflow_patch .
10:35am brandt1{~/test/Workflow-0.28}->patch -p2 <workflow_patch
patching file lib/Workflow/Action/InputField.pm
patching file lib/Workflow/Persister/DBI.pm
patching file t/TestUtil.pm
patching file t/persister_dbi.t
If it still bombs, I can try to regenerate it on a different box.
Jim
jonasbn wrote:
> Hi Jim,
>
> Thanks very much for the patch.
>
> I made a branch in an attempt to apply it, so after some attempts I got
> around to actual patching (I should not work when I am tired), anyway I
> am experiencing some problems with your patch, which I attempt to apply
> the following way:
>
> hyperstation ~/Desktop/Workflow-0.28
> % patch -p2 <dateformat.patch
> patching file lib/Workflow/Action/InputField.pm
> Hunk #1 FAILED at 17.
> 1 out of 1 hunk FAILED -- saving rejects to file
> lib/Workflow/Action/InputField.pm.rej
> patching file lib/Workflow/Persister/DBI.pm
> Hunk #1 FAILED at 17.
> Hunk #2 FAILED at 47.
> Hunk #3 FAILED at 188.
> Hunk #4 FAILED at 254.
> Hunk #5 FAILED at 268.
> Hunk #6 FAILED at 298.
> Hunk #7 FAILED at 373.
> Hunk #8 FAILED at 535.
> Hunk #9 succeeded at 713 with fuzz 2.
> 8 out of 9 hunks FAILED -- saving rejects to file
> lib/Workflow/Persister/DBI.pm.rej
> patching file t/TestUtil.pm
> Hunk #1 FAILED at 95.
> 1 out of 1 hunk FAILED -- saving rejects to file t/TestUtil.pm.rej
> patching file t/persister_dbi.t
> Hunk #1 FAILED at 5.
> Hunk #2 FAILED at 18.
> Hunk #3 FAILED at 25.
> Hunk #4 FAILED at 38.
> Hunk #5 FAILED at 56.
> Hunk #6 FAILED at 64.
> Hunk #7 FAILED at 95.
> Hunk #8 FAILED at 106.
> 8 out of 8 hunks FAILED -- saving rejects to file t/persister_dbi.t.rej
> hyperstation ~/Desktop/Workflow-0.28
>
> I went away from the branch and attempted to work on a unpacked release
> tar-ball instead, but I get the same errors.
>
> I had to correct a few lines in your patch since some of the lines were
> broken into two lines.
>
> -my $parser = DateTime::Format::Strptime->new( pattern => '%Y-%m-%d
> %H:%M' );
>
> Should be one line I believe. If you can send me the same patch as an
> attachment it would be appreciated.
>
> Any other suggestions or advice?
>
> jonasbn
> --
> AIM: BjonasN Gtalk: jo...@gm...
> ICQ: 62401545 MSN: jo...@io...
>
>
> On 10/08/2007, at 19.13, Jim Brandt wrote:
>
>> Hello,
>>
>> Pasted below is a patch that allows you to pass in a date format for
>> Persister::DBI. A few notes:
>>
>> * It perpetuates the issue I brought up with subclassing I mentioned
>> before since you need to set up date_format and parser in your own init
>> if you subclass Persister::DBI and don't call SUPER::init.
>>
>> * I think a took care of a few warnings from the TODO:
>>
>> - Eliminate warnings from DBD::Mock
>>
>> should be fixed
>>
>> - Investigate failings tests in t/persister_dbi.t,
>>
>> Yes, this was related to dates. $NOW was set at the top of the file and
>> then used throughout, so the time could be off by the end of the file.
>> This was easy to see in the debugger if you stopped the program for a
>> while and then continued.
>>
>> I improved it by putting the actual code in each call when the date is
>> needed, but I think this issue can still come up if the second flips
>> while running. It should be less likely now.
>>
>> I didn't update any versions. Let me know if you can use the diff for
>> some reason.
>>
>> Thanks,
>> Jim
>>
>>
>>
>> diff -urX workflow.exclude
>> orig/Workflow-0.28/lib/Workflow/Action/InputField.pm
>> working/Workflow-0.28/lib/Workflow/Action/InputField.pm
>> --- orig/Workflow-0.28/lib/Workflow/Action/InputField.pm 2007-07-06
>> 10:43:11.000000000 -0400
>> +++ working/Workflow-0.28/lib/Workflow/Action/InputField.pm 2007-08-10
>> 11:35:40.000000000 -0400
>> @@ -17,7 +17,8 @@
>> sub new {
>> my ( $class, $params ) = @_;
>> my $log = get_logger();
>> - $log->debug( "Instantiating new field '$params->{name}'" );
>> + $log->debug( "Instantiating new field '$params->{name}'" )
>> + if $params->{name};
>>
>> my $self = bless( {}, $class );
>>
>> diff -urX workflow.exclude
>> orig/Workflow-0.28/lib/Workflow/Persister/DBI.pm
>> working/Workflow-0.28/lib/Workflow/Persister/DBI.pm
>> --- orig/Workflow-0.28/lib/Workflow/Persister/DBI.pm 2007-07-06
>> 10:43:11.000000000 -0400
>> +++ working/Workflow-0.28/lib/Workflow/Persister/DBI.pm 2007-08-10
>> 12:49:31.000000000 -0400
>> @@ -17,11 +17,10 @@
>> $Workflow::Persister::DBI::VERSION = '1.19';
>>
>> my @FIELDS = qw( handle dsn user password driver
>> - workflow_table history_table );
>> + workflow_table history_table date_format parser);
>> __PACKAGE__->mk_accessors( @FIELDS );
>>
>> my ( $log );
>> -my $parser = DateTime::Format::Strptime->new( pattern => '%Y-%m-%d
>> %H:%M' );
>> my @WF_FIELDS = ();
>> my @HIST_FIELDS = ();
>>
>> @@ -48,10 +47,16 @@
>> $log->info( "Assigned workflow table '", $self->workflow_table,
>> "'; ",
>> "history table '", $self->history_table, "'" );
>>
>> - for ( qw( dsn user password ) ) {
>> + # Default to old date format if not provided so we don't break old
>> configurations.
>> + $self->date_format( '%Y-%m-%d %H:%M' );
>> +
>> + for ( qw( dsn user password date_format ) ) {
>> $self->$_( $params->{ $_ } ) if ( $params->{ $_ } );
>> }
>>
>> + my $parser = DateTime::Format::Strptime->new( pattern =>
>> $self->date_format );
>> + $self->parser($parser);
>> +
>> my $dbh = eval {
>> DBI->connect( $self->dsn, $self->user, $self->password )
>> || die "Cannot connect to database: $DBI::errstr";
>> @@ -183,7 +188,7 @@
>> my @fields = @WF_FIELDS[1,2,3];
>> my @values = ( $wf->type,
>> $wf->state,
>> - DateTime->now->strftime( '%Y-%m-%d %H:%M' ) );
>> + DateTime->now->strftime( $self->date_format() ) );
>> my $dbh = $self->handle;
>>
>> my $id = $self->workflow_id_generator->pre_fetch_id( $dbh );
>> @@ -249,7 +254,7 @@
>> my $row = $sth->fetchrow_arrayref;
>> return undef unless ( $row );
>> return { state => $row->[0],
>> - last_update => $parser->parse_datetime( $row->[1] ), };
>> + last_update => $self->parser->parse_datetime( $row->[1]
>> ), };
>> }
>>
>> sub update_workflow {
>> @@ -263,7 +268,7 @@
>> WHERE $WF_FIELDS[0] = ?
>> };
>> $sql = sprintf( $sql, $self->workflow_table );
>> - my $update_date = DateTime->now->strftime( '%Y-%m-%d %H:%M' );
>> + my $update_date = DateTime->now->strftime( $self->date_format() );
>>
>> if ( $log->is_debug ) {
>> $log->debug( "Will use SQL\n$sql" );
>> @@ -293,7 +298,7 @@
>> my $id = $generator->pre_fetch_id( $dbh );
>> my @fields = @HIST_FIELDS[1..6];
>> my @values = ( $wf->id, $h->action, $h->description, $h->state,
>> - $h->user, $h->date->strftime( '%Y-%m-%d %H:%M'
>> ) );
>> + $h->user, $h->date->strftime(
>> $self->date_format() ) );
>> if ( $id ) {
>> push @fields, $HIST_FIELDS[0];
>> push @values, $id;
>> @@ -368,7 +373,7 @@
>> description => $row->[3],
>> state => $row->[4],
>> user => $row->[5],
>> - date => $parser->parse_datetime( $row->[6] ),
>> + date => $self->parser->parse_datetime( $row->[6] ),
>> });
>> $log->is_debug &&
>> $log->debug( "Fetched history object '$row->[0]'" );
>> @@ -530,6 +535,15 @@
>>
>> Password for C<user> to login with.
>>
>> +=item B<date_format>
>> +
>> +Date format to use when working with the database. Accepts a format
>> string
>> +that can be processed by the DateTime module. See
>> +L<http://search.cpan.org/~drolsky/DateTime-0.39/lib/DateTime.pm#strftime_Specifiers>
>>
>> +for the format options.
>> +
>> +The default is '%Y-%m-%d %H:%M' for backward compatibility.
>> +
>> =item B<workflow_table>
>>
>> Table to use for persisting workflow. Default is 'workflow'.
>> @@ -699,4 +713,4 @@
>>
>> Chris Winters E<lt>ch...@cw...<gt>, original author.
>>
>> -=cut
>> \ No newline at end of file
>> +=cut
>> diff -urX workflow.exclude orig/Workflow-0.28/t/TestUtil.pm
>> working/Workflow-0.28/t/TestUtil.pm
>> --- orig/Workflow-0.28/t/TestUtil.pm 2007-07-06 10:43:11.000000000
>> -0400
>> +++ working/Workflow-0.28/t/TestUtil.pm 2007-08-10
>> 11:31:31.000000000 -0400
>> @@ -95,6 +95,7 @@
>> name => 'TestPersister',
>> class => 'Workflow::Persister::DBI',
>> dsn => 'DBI:Mock:',
>> + user => 'DBTester',
>> );
>> $factory->add_config( persister => [ \%persister ] );
>> }
>> diff -urX workflow.exclude orig/Workflow-0.28/t/persister_dbi.t
>> working/Workflow-0.28/t/persister_dbi.t
>> --- orig/Workflow-0.28/t/persister_dbi.t 2007-07-06
>> 10:43:11.000000000 -0400
>> +++ working/Workflow-0.28/t/persister_dbi.t 2007-08-10
>> 11:27:49.000000000 -0400
>> @@ -5,7 +5,7 @@
>> use strict;
>> use lib 't';
>> use TestUtil;
>> -use constant NUM_TESTS => 41;
>> +use constant NUM_TESTS => 43;
>> use Test::More;
>>
>> eval "require DBI";
>> @@ -18,7 +18,6 @@
>>
>> my $TICKET_CLASS = 'TestApp::Ticket';
>> my $DATE_FORMAT = '%Y-%m-%d %H:%M';
>> -my $NOW = DateTime->now->strftime( $DATE_FORMAT );
>>
>> require_ok( 'Workflow::Persister::DBI' );
>>
>> @@ -26,6 +25,8 @@
>> name => 'TestPersister',
>> class => 'Workflow::Persister::DBI',
>> dsn => 'DBI:Mock:',
>> + user => 'DBTester',
>> + date_format => $DATE_FORMAT,
>> });
>>
>> my $factory = Workflow::Factory->instance;
>> @@ -37,6 +38,9 @@
>> my $persister = $factory->get_persister( 'TestPersister' );
>> my $handle = $persister->handle;
>>
>> +is ($persister->dsn(), 'DBI:Mock:', 'Got back dsn from config.');
>> +is ($persister->date_format(), '%Y-%m-%d %H:%M', 'Got back date format
>> from config.');
>> +
>> my ( $wf );
>>
>> {
>> @@ -52,7 +56,7 @@
>> qr/^INSERT INTO workflow \( type, state, last_update,
>> workflow_id \)/,
>> [ 'type', 'state', 'current date',
>> 'random ID of correct length' ],
>> - [ 'Ticket', 'INITIAL', $NOW,
>> + [ 'Ticket', 'INITIAL', DateTime->now->strftime( $DATE_FORMAT ),
>> sub { my ( $val ) = @_; return ( length( $val ), 8 ) } ]
>> );
>>
>> @@ -60,7 +64,7 @@
>> TestUtil->check_workflow_history(
>> $hst_history,
>> [ $wf_id, 'Create workflow', 'Create new workflow',
>> - 'INITIAL', 'n/a', $NOW,
>> + 'INITIAL', 'n/a', DateTime->now->strftime( $DATE_FORMAT ),
>> sub { my ( $val ) = @_; return ( length( $val ), 8 ) } ]
>> );
>> $handle->{mock_clear_history} = 1;
>> @@ -91,7 +95,7 @@
>> 'due date', 'last update' ],
>> [ $ticket_id, $ticket_info{type}, $ticket_info{subject},
>> $ticket_info{description}, $ticket_info{creator}, $old_state,
>> - $ticket_info{due_date}->strftime( '%Y-%m-%d' ), $NOW ]
>> + $ticket_info{due_date}->strftime( '%Y-%m-%d' ),
>> DateTime->now->strftime( $DATE_FORMAT ) ]
>> );
>>
>> my $link_create = $history->[1];
>> @@ -102,7 +106,7 @@
>> TestUtil->check_workflow_history(
>> $hst_update,
>> [ $wf_id, 'Create ticket', $history_desc,
>> - 'TIX_CREATED', $ticket_info{creator}, $NOW,
>> + 'TIX_CREATED', $ticket_info{creator},
>> DateTime->now->strftime( $DATE_FORMAT ),
>> sub { my ( $val ) = @_; return ( length( $val ), 8 ) } ]
>> );
>>
>>
>>
>> --
>> Jim Brandt
>> Administrative Computing Services
>> University at Buffalo
>>
>>
>>
>> -------------------------------------------------------------------------
>> This SF.net email is sponsored by: Splunk Inc.
>> Still grepping through log files to find problems? Stop.
>> Now Search log events and configuration files using AJAX and a browser.
>> Download your FREE copy of Splunk now >> http://get.splunk.com/
>> _______________________________________________
>> Perl-workflow-devel mailing list
>> Per...@li...
>> https://lists.sourceforge.net/lists/listinfo/perl-workflow-devel
>
--
Jim Brandt
Administrative Computing Services
University at Buffalo
|