use strict; opendir(D, '.') || die "Opendir failed $!"; foreach my $fname (grep { /^Item\d+\.txt$/ } readdir(D)) { open(F, "<$fname") || die "Open failed $fname: $!"; local $/ = undef; my $body ="\n".."\n"; close(F); $body =~ s/\r//gs; my $toplard = ''; while ($body =~ s/(\n%META:TOPIC.*?\n)/\n/s) { $toplard .= $1; } $toplard =~ s/^\n*(.*)\s*$/$1/s; $body =~ s/\n\n/\n/s; $body =~ s/\n%META:PREFERENCE{name="USERSTYLEURL".*}%\n/\n/m; $body =~ s/\n%META:FILEATTACHMENT{name="hidetextarea.css".*}%\n/\n/m; $body =~ s/^(.*)(%META:FORM{.*)$//s; $body = $1; my $fields = "\n$2\n"; # Move details into body if ($fields =~ s/\n%META:FIELD{name="Details" attributes="" title="Details" value="(.*)"}%\n/\n/m) { $body = $1; $body =~ s/%([0-9a-f]{2})/eval "chr(0x$1)"/gie; $body =~ s/\r//g; } $body =~ s/^\n*(.*)\s*$/$1/s; $fields =~ s/="ExtensionName"/="Component"/gs; # Remap Requirement to Urgent $fields =~ s/^(%META:FIELD{name="Priority".*value=")Requirement/$1Urgent/m; # Remap Actioning to Confirmed $fields =~ s/^(%META:FIELD{name="CurrentState".*value=")Actioning/$1Confirmed/m; # Remap Discarded to No ActionRequired $fields =~ s/^(%META:FIELD{name="CurrentState".*value=")Discarded/$1No Action Required/m; # Rename MergeTo to TargetRelease $fields =~ s/^(%META:FIELD{name=")MergeTo/$1TargetRelease/m; $fields .= '\n' unless $fields =~ /\n$/s; $fields =~ s/^\n*(.*)\s*$/$1/s; # Add WaitingForm $fields .= "\n".'%META:FIELD{name="WaitingFor" title="WaitingFor" value=""}%'; # Check in my $rno = `rlog $fname`; $rno =~ s/.*total revisions: (\d+);.*/$1/s; $toplard =~ s/(version="1.)(\d+)/$1.($rno+1)/se; my $body = "$toplard\n$body\n$fields\n"; print `/usr/bin/co -l -q $fname`; die if $!; open(F, ">$fname") || die "Open failed $fname: $!"; print F $body; close(F); print `/usr/bin/ci -u -m"Item" -t-none -wCrawfordCurrie -u $fname`; die if $!; }