3
0
mirror of https://github.com/pragma-/pbot.git synced 2024-11-30 16:09:28 +01:00

compiler_vm: Add ability to show/diff/copy another channel's snippet

This commit is contained in:
Pragmatic Software 2014-03-05 19:58:46 +00:00
parent 8cecad56d2
commit bc261e0965
2 changed files with 50 additions and 14 deletions

View File

@ -13,7 +13,7 @@ use warnings;
# These are set automatically by the build/commit script # These are set automatically by the build/commit script
use constant { use constant {
BUILD_NAME => "PBot", BUILD_NAME => "PBot",
BUILD_REVISION => 508, BUILD_REVISION => 509,
BUILD_DATE => "2014-03-05", BUILD_DATE => "2014-03-05",
}; };

View File

@ -152,6 +152,38 @@ my @last_code;
print " code: [$code]\n" if $debug; print " code: [$code]\n" if $debug;
my $subcode = $code;
while ($subcode =~ s/^\s*(-[^ ]+)\s*//) {}
my $copy_code;
if($subcode =~ s/^\s*copy\s+(\S+)\s*//) {
my $copy = $1;
if(open FILE, "< history/$copy.hist") {
$copy_code = <FILE>;
close FILE;
goto COPY_ERROR if not $copy_code;;
chomp $copy_code;
} else {
goto COPY_ERROR;
}
goto COPY_SUCCESS;
COPY_ERROR:
print "$nick: No history for $copy.\n";
exit 0;
COPY_SUCCESS:
$code = $copy_code;
$only_show = 1;
$save_last_code = 1;
}
if($subcode =~ m/^\s*(?:and\s+)?(?:diff|show)\s+(\S+)\s*$/) {
$channel = $1;
}
if(open FILE, "< history/$channel.hist") { if(open FILE, "< history/$channel.hist") {
while(my $line = <FILE>) { while(my $line = <FILE>) {
chomp $line; chomp $line;
@ -160,10 +192,9 @@ if(open FILE, "< history/$channel.hist") {
close FILE; close FILE;
} }
my $subcode = $code; unshift @last_code, $copy_code if defined $copy_code;
while ($subcode =~ s/^\s*(-[^ ]+)\s*//) {}
if($subcode =~ m/^\s*show\s*$/i) { if($subcode =~ m/^\s*(?:and\s+)?show(?:\s+\S+)?\s*$/i) {
if(defined $last_code[0]) { if(defined $last_code[0]) {
print "$nick: $last_code[0]\n"; print "$nick: $last_code[0]\n";
} else { } else {
@ -172,7 +203,7 @@ if($subcode =~ m/^\s*show\s*$/i) {
exit 0; exit 0;
} }
if($subcode =~ m/^\s*diff\s*$/i) { if($subcode =~ m/^\s*(?:and\s+)?diff(?:\s+\S+)?\s*$/i) {
if($#last_code < 1) { if($#last_code < 1) {
print "$nick: Not enough recent code to diff.\n" print "$nick: Not enough recent code to diff.\n"
} else { } else {
@ -193,12 +224,13 @@ if($subcode =~ m/^\s*diff\s*$/i) {
exit 0; exit 0;
} }
my $got_run = undef; my $got_run;
if($subcode =~ m/^\s*(run|paste)\s*$/i) { if($subcode =~ m/^\s*(?:and\s+)?(run|paste)\s*$/i) {
$got_run = lc $1; $got_run = lc $1;
if(defined $last_code[0]) { if(defined $last_code[0]) {
$code = $last_code[0]; $code = $last_code[0];
$only_show = 0;
} else { } else {
print "$nick: No recent code to $got_run.\n"; print "$nick: No recent code to $got_run.\n";
exit 0; exit 0;
@ -569,7 +601,11 @@ if($subcode =~ m/^\s*(run|paste)\s*$/i) {
$save_last_code = 1; $save_last_code = 1;
unless($got_undo and not $got_changes) { unless($got_undo and not $got_changes) {
$unshift_last_code = 1; $unshift_last_code = 1 unless $copy_code and not $got_changes;
}
if($copy_code and $got_changes) {
$only_show = 0;
} }
if($got_undo and not $got_changes) { if($got_undo and not $got_changes) {
@ -616,7 +652,7 @@ if($only_show) {
exit 0; exit 0;
} }
unless($got_run) { unless($got_run and $copy_code) {
open FILE, ">> log.txt"; open FILE, ">> log.txt";
print FILE "------------------------------------------------------------------------\n"; print FILE "------------------------------------------------------------------------\n";
print FILE localtime() . "\n"; print FILE localtime() . "\n";
@ -918,7 +954,7 @@ $input =~ s/[\n\r\t]/ /msg;
$input =~ s/:/ - /g; $input =~ s/:/ - /g;
$input =~ s/\s+/ /g; $input =~ s/\s+/ /g;
print FILE "$nick: [lang:$lang][args:$args][input:$input]\n", pretty($code), "\n" unless $got_run; print FILE "$nick: [lang:$lang][args:$args][input:$input]\n", pretty($code), "\n" unless $got_run and $copy_code;
my $pretty_code = pretty $code; my $pretty_code = pretty $code;
@ -929,7 +965,7 @@ $args =~ s/ -paste$// if defined $got_paste or $got_run eq "paste";
if($output =~ m/^\s*$/) { if($output =~ m/^\s*$/) {
$output = $nooutput $output = $nooutput
} else { } else {
unless($got_run) { unless($got_run and $copy_code) {
print FILE localtime() . "\n"; print FILE localtime() . "\n";
print FILE "$output\n"; print FILE "$output\n";
} }
@ -1025,7 +1061,7 @@ if($output =~ m/^\s*$/) {
# splint # splint
$output =~ s/Splint 3.1.2 --- 03 May 2009\s*//; $output =~ s/Splint 3.1.2 --- 03 May 2009\s*//;
$output =~ s/Finished checking --- \d+ code warning\s*//; $output =~ s/Finished checking --- \d+ code warning\s*//;
print FILE "splint: [$output]\n" unless $got_run; print FILE "splint: [$output]\n" unless $got_run and $copy_code;
$output =~ s/\s*\(in function main\)\s*Fresh\s*storage\s*.*?\s*not\s*released.*?reference\s+to\s+it\s+is\s+lost.\s*//msg; $output =~ s/\s*\(in function main\)\s*Fresh\s*storage\s*.*?\s*not\s*released.*?reference\s+to\s+it\s+is\s+lost.\s*//msg;
$output =~ s/\s*\(in function main\)\s*//g; $output =~ s/\s*\(in function main\)\s*//g;
$output =~ s/\s*\(Use\s+.*?\s+to\s+inhibit\s+warning\)//msg; $output =~ s/\s*\(Use\s+.*?\s+to\s+inhibit\s+warning\)//msg;
@ -1066,7 +1102,7 @@ if($warn_unterminated_define == 1) {
} }
} }
unless($got_run) { unless($got_run and $copy_code) {
print FILE "$nick: $output\n"; print FILE "$nick: $output\n";
close FILE; close FILE;
} }