The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/env perl

use strict;
use warnings;
use 5.010;

use File::Find::Rule;
use Data::Dumper;
use App::TimeTracker::Data::Task;
use DateTime;
use Path::Class;
use Try::Tiny;

$|=1;
my ($in, $out) = @ARGV;
die "please specify dir containing old-style files" unless -d $in;
die "please specify dir to contain new-style files" unless -d $out;
$out = Path::Class::dir($out);

my @files = File::Find::Rule->file()->name(qr/\.(done|current)$/)
    ->in( $in );

foreach my $old (@files) {
    open( my $fh, "<", $old ) || die "Cannot read file $old: $!";

    try {

        my %data;
        while ( my $line = <$fh> ) {
            chomp($line);
            next unless $line =~ /^(\w+): (.*)/;
            $data{$1} = $2;
        }

        my @tags;
        if ($data{tags}) {
            foreach (split(/\s+/,$data{tags})) {
                push(@tags,$_);
            }
        }

        my $task = App::TimeTracker::Data::Task->new({
                start=>DateTime->from_epoch(epoch=>$data{start}, time_zone=>'local'),
                stop=>DateTime->from_epoch(epoch=>$data{stop}, time_zone=>'local'),
                project=>$data{project},
                tags=>\@tags,
        });

        $task->save($out);
        print '.';
    }
    catch {
        die "An error occurred converting $old";
    }
}

say "Finished processing " . scalar @files . " historic Tasks";