--- /dev/null
+#!/usr/bin/perl -w
+my $file = pop(@ARGV);
+my %meta;
+$ENV{'P4PORT'} = 'bactrian:1667';
+$ENV{'P4CLIENT'} = 'camel-linux';
+open(FILE,$file) || die "Cannot open $file:$!";
+while (<FILE>)
+ {
+ if (/^(From|Subject|Date|Message-ID):(.*)$/i)
+ {
+ $meta{lc($1)} = $2;
+ }
+ }
+my @results = `patch @ARGV <$file 2>&1`;
+warn @results;
+my $code = $?;
+warn "$code from patch\n";
+foreach (@results)
+ {
+ if (/patching\s+file\s*(.*?)\s*$/)
+ {
+ push(@edit,$1);
+ }
+ }
+my @have = `p4 have @edit`;
+
+if ($code == 0)
+ {
+ System("p4 edit @edit");
+ open(PIPE,"|p4 change -i") || die "Cannot open pipe to p4:$!";
+ print PIPE "Change: new\n";
+ print PIPE "Description:\n";
+ foreach my $key (qw(Subject From Date Message-Id))
+ {
+ if (exists $meta{lc($key)})
+ {
+ print PIPE "\t$key: ",$meta{lc($key)},"\n";
+ print "$key: ",$meta{lc($key)},"\n";
+ }
+ }
+ print PIPE "Files:\n";
+ foreach (@have)
+ {
+ if (m,^(.*)#,)
+ {
+ print PIPE "\t$1\n"
+ }
+ }
+ close(PIPE);
+ }
+else
+ {
+ if (@edit)
+ {
+ System("p4 revert @edit");
+ }
+ }
+
+sub System
+{
+ my $cmd = join(' ',@_);
+ warn "$cmd\n";
+ if (fork)
+ {
+ wait;
+ }
+ else
+ {
+ _exit(exec $cmd);
+ }
+}