Support RPC::XML 0.69's incompatable object instantiation method.
authorJoey Hess <joey@gnu.kitenet.net>
Tue, 29 Sep 2009 17:35:30 +0000 (13:35 -0400)
committerJoey Hess <joey@gnu.kitenet.net>
Tue, 29 Sep 2009 17:35:30 +0000 (13:35 -0400)
IkiWiki/Plugin/external.pm
debian/changelog
plugins/externaldemo

index 0d292dfc2520e0020e5eee164084d4ab93751a10..ec91c79db2149a1b58a63f34aedc4b83b7a76a4a 100644 (file)
@@ -8,7 +8,6 @@ use warnings;
 use strict;
 use IkiWiki 3.00;
 use RPC::XML;
-use RPC::XML::Parser;
 use IPC::Open2;
 use IO::Handle;
 
@@ -55,7 +54,19 @@ sub rpc_call ($$;@) {
                $plugin->{accum}.=$_;
                while ($plugin->{accum} =~ /^\s*(<\?xml\s.*?<\/(?:methodCall|methodResponse)>)\n(.*)/s) {
                        $plugin->{accum}=$2;
-                       my $r = RPC::XML::Parser->new->parse($1);
+                       my $parser;
+                       eval q{
+                               use RPC::XML::ParserFactory;
+                               $parser = RPC::XML::ParserFactory->new;
+                       };
+                       if ($@) {
+                               # old interface
+                               eval q{
+                                       use RPC::XML::Parser;
+                                       $parser = RPC::XML::Parser->new;
+                               };
+                       }
+                       my $r=$parser->parse($1);
                        error("XML RPC parser failure: $r") unless ref $r;
                        if ($r->isa('RPC::XML::response')) {
                                my $value=$r->value;
@@ -72,9 +83,9 @@ sub rpc_call ($$;@) {
 
                                        # XML-RPC v1 does not allow for
                                        # nil/null/None/undef values to be
-                                       # transmitted, so until
-                                       # XML::RPC::Parser honours v2
-                                       # (<nil/>), external plugins send
+                                       # transmitted. The <nil/> extension
+                                       # is the right fix, but for
+                                       # back-compat, let external plugins send
                                        # a hash with one key "null" pointing
                                        # to an empty string.
                                        if (exists $hash{null} &&
index b368618b430ea96d373f86ae1b12dea9e2a6cf2e..b948aaf56dd2347b118f95acc7ea625863c959b0 100644 (file)
@@ -6,6 +6,7 @@ ikiwiki (3.14159266) UNRELEASED; urgency=low
   * img: Fix dependency code for full size images.
   * toggle, relativedate: Support templates that add attributes
     to the body tag.
+  * Support RPC::XML 0.69's incompatable object instantiation method.
 
  -- Joey Hess <joeyh@debian.org>  Sun, 27 Sep 2009 17:40:03 -0400
 
index be7aba8b929807db3a6b56a6846e7d34b3c79a25..24861dcc91d4c9dfe44e4277e80ce357f1e56577 100755 (executable)
@@ -8,7 +8,6 @@ use strict;
 print STDERR "externaldemo plugin running as pid $$\n";
 
 use RPC::XML;
-use RPC::XML::Parser;
 use IO::Handle;
 
 # autoflush stdout
@@ -31,7 +30,19 @@ sub rpc_read {
                        $accum=$2; # the rest
        
                        # Now parse the XML RPC.
-                       my $r = RPC::XML::Parser->new->parse($1);
+                       my $parser;
+                       eval q{
+                               use RPC::XML::ParserFactory;
+                               $parser = RPC::XML::ParserFactory->new;
+                       };
+                       if ($@) {
+                               # old interface
+                               eval q{
+                                       use RPC::XML::Parser;
+                                       $parser = RPC::XML::Parser->new;
+                               };
+                       }
+                       my $r=$parser->parse($1);
                        if (! ref $r) {
                                die "error: XML RPC parse failure $r";
                        }