From: Joey Hess Date: Sat, 15 Mar 2008 18:19:49 +0000 (-0400) Subject: * external: Add getargv and setargv methods to allow access to ikiwiki's X-Git-Tag: 2.41~110 X-Git-Url: http://git.tremily.us/?p=ikiwiki.git;a=commitdiff_plain;h=ba480baa9ec9e2d5d04c6eb06fd3ab4dafd60794 * external: Add getargv and setargv methods to allow access to ikiwiki's @ARGV. --- diff --git a/IkiWiki/Plugin/external.pm b/IkiWiki/Plugin/external.pm index 2650a8cd1..300dee7ed 100644 --- a/IkiWiki/Plugin/external.pm +++ b/IkiWiki/Plugin/external.pm @@ -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; diff --git a/debian/changelog b/debian/changelog index 4db324aca..f85517c04 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 Sun, 02 Mar 2008 17:46:38 +0100 diff --git a/doc/bugs/external_plugins_cannot_access_ARGV_needed_for_getopt.mdwn b/doc/bugs/external_plugins_cannot_access_ARGV_needed_for_getopt.mdwn index cc82d1cd7..be7f16a79 100644 --- a/doc/bugs/external_plugins_cannot_access_ARGV_needed_for_getopt.mdwn +++ b/doc/bugs/external_plugins_cannot_access_ARGV_needed_for_getopt.mdwn @@ -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]] diff --git a/doc/plugins/write/external.mdwn b/doc/plugins/write/external.mdwn index fd343bda6..2ee841e61 100644 --- a/doc/plugins/write/external.mdwn +++ b/doc/plugins/write/external.mdwn @@ -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