* external: Add getargv and setargv methods to allow access to ikiwiki's
authorJoey Hess <joey@kodama.kitenet.net>
Sat, 15 Mar 2008 18:19:49 +0000 (14:19 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Sat, 15 Mar 2008 18:19:49 +0000 (14:19 -0400)
  @ARGV.

IkiWiki/Plugin/external.pm
debian/changelog
doc/bugs/external_plugins_cannot_access_ARGV_needed_for_getopt.mdwn
doc/plugins/write/external.mdwn

index 2650a8cd14e3c31f026ef8d58768e6d997f20ce4..300dee7ed5fe89f96eff5d7d3e547c2e210678a3 100644 (file)
@@ -153,6 +153,18 @@ sub setstate ($$$$;@) { #{{{
        return $IkiWiki::pagestate{$page}{$id}{$key}=@_;
 } #}}}
 
+sub getargv ($) { #{{{
+       my $plugin=shift;
+
+       return @ARGV;
+} #}}}
+
+sub setargv ($@) { #{{{
+       my $plugin=shift;
+
+       @ARGV=@_;
+} #}}}
+
 sub inject ($@) { #{{{
        # Bind a given perl function name to a particular RPC request.
        my $plugin=shift;
index 4db324aca57ff74debf40c789165496b1cf0d3d2..f85517c04f2c7270fb520f5e47046d8cdd186056 100644 (file)
@@ -42,6 +42,8 @@ ikiwiki (2.41) UNRELEASED; urgency=low
   * French translation update. Closes: #471010
   * external: Fix support of XML::RPC::fault.
   * htmltidy: Pass --markup yes, in case tidy's config file disabled it.
+  * external: Add getargv and setargv methods to allow access to ikiwiki's
+    @ARGV.
 
  -- martin f. krafft <madduck@debian.org>  Sun, 02 Mar 2008 17:46:38 +0100
 
index cc82d1cd7590dffcc0badba78661e1bcaa4878ba..be7f16a796ace9558aabc55f76e0f36736012b2c 100644 (file)
@@ -1 +1,14 @@
 The `getopt` hook expects plugins to modify `@ARGV`. This is not exported via xml-rpc and thus external plugins cannot do anything. --[[madduck]]
+
+> I can think of two interfaces to handle this.
+> 
+> 1. Pass @ARGV to the hook, and remove any values the hook returns from @ARGV.
+> 2. Provide an XML-RPC interface for setting and getting ikiwiki's @ARGV.
+> 
+> The first is simpler, but requires keeping track of which options to
+> remove, which could be a pain, and probably precludes using regular
+> getopt libraries to process options. It also could theoretically cause
+> problems for existing perl getopt hooks.
+> 
+> The second should allow using regular getopt libraries, but does bloat
+> the RPC interface. Oh well, guess that's ok. [[done]] --[[Joey]]
index fd343bda6bc89b1dc2b6886d6a46e31146ea5773..2ee841e612d149dbddf3036f2474c5ff1803609c 100644 (file)
@@ -53,6 +53,9 @@ it, external plugins can use the `getstate` and `setstate` RPCs. To access
 stored state, call `getstate("page", "id", "key")`, and to store state,
 call `setstate("page", "id", "key", "value")`.
 
+To access ikiwiki's ARGV, call `getargv()`. To change its ARGV, call
+`setargv(value)`.
+
 ## Notes on function parameters
 
 The [[plugin_interface_documentation|write]] talks about functions that take
@@ -99,9 +102,6 @@ with functions that take or return such references. That means you can't
 FormBuilder perl objects), or use it to call `template()` (which returns a
 perl HTML::Template object).
 
-Also. the `getopt` hook doesn't work, as ARGV is not available to the external
-plugin.
-
 ## Performance issues
 
 Since each external plugin is a separate process, when ikiwiki is