]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/Plugin/external.pm
fix setstate
[ikiwiki.git] / IkiWiki / Plugin / external.pm
index a5afdc4bef4b28b849b8b25ed414d1f4757f17b8..4c2e5d2feb28ce5d842dcf75dab275a3e7855493 100644 (file)
@@ -59,15 +59,17 @@ sub rpc_call ($$;@) { #{{{
                        error("XML RPC parser failure: $r") unless ref $r;
                        if ($r->isa('RPC::XML::response')) {
                                my $value=$r->value;
                        error("XML RPC parser failure: $r") unless ref $r;
                        if ($r->isa('RPC::XML::response')) {
                                my $value=$r->value;
-                               if ($value->isa('RPC::XML::array')) {
+                               if ($r->is_fault($value)) {
+                                       # throw the error as best we can
+                                       print STDERR $value->string."\n";
+                                       return "";
+                               }
+                               elsif ($value->isa('RPC::XML::array')) {
                                        return @{$value->value};
                                }
                                elsif ($value->isa('RPC::XML::struct')) {
                                        return %{$value->value};
                                }
                                        return @{$value->value};
                                }
                                elsif ($value->isa('RPC::XML::struct')) {
                                        return %{$value->value};
                                }
-                               elsif ($value->isa('RPC::XML::fault')) {
-                                       die $value->string;
-                               }
                                else {
                                        return $value->value;
                                }
                                else {
                                        return $value->value;
                                }
@@ -126,9 +128,10 @@ sub setvar ($$$;@) { #{{{
        my $plugin=shift;
        my $varname="IkiWiki::".shift;
        my $key=shift;
        my $plugin=shift;
        my $varname="IkiWiki::".shift;
        my $key=shift;
+       my $value=shift;
 
        no strict 'refs';
 
        no strict 'refs';
-       my $ret=$varname->{$key}=@_;
+       my $ret=$varname->{$key}=$value;
        use strict 'refs';
        return $ret;
 } #}}}
        use strict 'refs';
        return $ret;
 } #}}}
@@ -147,8 +150,22 @@ sub setstate ($$$$;@) { #{{{
        my $page=shift;
        my $id=shift;
        my $key=shift;
        my $page=shift;
        my $id=shift;
        my $key=shift;
+       my $value=shift;
+
+       return $IkiWiki::pagestate{$page}{$id}{$key}=$value;
+} #}}}
+
+sub getargv ($) { #{{{
+       my $plugin=shift;
+
+       return \@ARGV;
+} #}}}
+
+sub setargv ($@) { #{{{
+       my $plugin=shift;
+       my $array=shift;
 
 
-       return $IkiWiki::pagestate{$page}{$id}{$key}=@_;
+       @ARGV=@$array;
 } #}}}
 
 sub inject ($@) { #{{{
 } #}}}
 
 sub inject ($@) { #{{{
@@ -177,7 +194,8 @@ sub hook ($@) { #{{{
        delete $params{call};
 
        IkiWiki::hook(%params, call => sub {
        delete $params{call};
 
        IkiWiki::hook(%params, call => sub {
-               IkiWiki::Plugin::external::rpc_call($plugin, $callback, @_)
+               my $ret=IkiWiki::Plugin::external::rpc_call($plugin, $callback, @_);
+               return $ret;
        });
 } #}}}
 
        });
 } #}}}