Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Request Tracker: Commit

rt branch, 4.0/time-fields-on-merge, updated. rt-4.0.6-251-gb1c32c6

 

 

Request Tracker commit RSS feed   Index | Next | Previous | View Threaded


ruz at bestpractical

Jul 26, 2012, 8:59 AM

Post #1 of 1 (73 views)
Permalink
rt branch, 4.0/time-fields-on-merge, updated. rt-4.0.6-251-gb1c32c6

The branch, 4.0/time-fields-on-merge has been updated
via b1c32c61c675c34acfa85ef0d68d046f772eb9cc (commit)
from ce5520aa140d236b0cfe7259cf1e326db9de8616 (commit)

Summary of changes:
etc/upgrade/time-worked-history.pl | 63 ++++++++++++++++++++++++++++++++++++++
1 file changed, 63 insertions(+)
create mode 100644 etc/upgrade/time-worked-history.pl

- Log -----------------------------------------------------------------
commit b1c32c61c675c34acfa85ef0d68d046f772eb9cc
Author: Ruslan Zakirov <ruz [at] bestpractical>
Date: Thu Jul 26 19:31:21 2012 +0400

script that deletes bad (Set, TimeWorked) txns

It try to fix history and do it as safe as possible.
It calcs time worked using history, by the way collects
candidates for deletion. Transactions are deleted only
if time on ticket is equal to time from history minus
time on candidates.

It's probably possible to write similar script for TimeLeft
and TimeEstimated, but it's much harder to do as the value
is not recorded on Create unlike time worked which is stored
in TimeTaken column.

diff --git a/etc/upgrade/time-worked-history.pl b/etc/upgrade/time-worked-history.pl
new file mode 100644
index 0000000..7ed5535
--- /dev/null
+++ b/etc/upgrade/time-worked-history.pl
@@ -0,0 +1,63 @@
+#!/usr/bin/env perl
+use 5.8.3;
+use strict;
+use warnings;
+
+use RT;
+RT::LoadConfig();
+RT->Config->Set('LogToScreen' => 'info');
+RT::Init();
+
+my $dbh = $RT::Handle->dbh;
+my $ids = $dbh->selectcol_arrayref(
+ "SELECT t1.id FROM Tickets t1, Tickets t2 WHERE t1.id = t2.EffectiveId"
+ ." AND t2.id != t2.EffectiveId AND t2.EffectiveId = t1.id"
+);
+foreach my $id ( @$ids ) {
+ my $t = RT::Ticket->new( RT->SystemUser );
+ $t->Load( $id );
+ unless ( $t->id ) {
+ $RT::Logger->error("Couldn't load ticket #$id");
+ next;
+ }
+
+ fix_time_worked_history($t);
+}
+
+sub fix_time_worked_history {
+ my ($t) = (@_);
+
+ my $history = 0;
+ my $candidate = undef;
+ my @delete = ();
+ my $delete_time = 0;
+
+ my $txns = $t->Transactions;
+ while ( my $txn = $txns->Next ) {
+ if ( $txn->Type =~ /^(Create|Correspond|Comment)$/ ) {
+ $history += $txn->TimeTaken || 0;
+ } elsif ( $txn->Type eq 'Set' && $txn->Field eq 'TimeWorked' ) {
+ $history += $txn->NewValue - $txn->OldValue;
+ $candidate = $txn;
+ } elsif ( $candidate && $txn->Field eq 'MergedInto' ) {
+ if ($candidate->Creator eq $txn->Creator ) {
+ push @delete, $candidate;
+ $delete_time += $candidate->NewValue - $candidate->OldValue;
+ }
+
+ $candidate = undef;
+ }
+ }
+
+ if ( $history == $t->TimeWorked ) {
+ $RT::Logger->info("Ticket #". $t->id . " has TimeWorked matching history. Skipping");
+ } elsif ( $history - $delete_time == $t->TimeWorked ) {
+ $RT::Logger->warn( "Ticket #". $t->id ." has TimeWorked mismatch. Deleting transactions" );
+ foreach my $dtxn ( @delete ) {
+ my ($status, $msg) = $dtxn->Delete;
+ $RT::Logger->error("Couldn't delete transaction: $msg") unless $status;
+ }
+ } else {
+ $RT::Logger->error( "Ticket #". $t->id ." has TimeWorked mismatch, but we couldn't find correct transactions to delete. Skipping" );
+ }
+}

-----------------------------------------------------------------------
_______________________________________________
Rt-commit mailing list
Rt-commit [at] lists
http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-commit

Request Tracker commit RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.