(Steve Dougherty)
2013-08-20: Add local repo list. Add local repo list.
diff --git a/infocalypse/plugin_connect.py b/infocalypse/plugin_connect.py --- a/infocalypse/plugin_connect.py +++ b/infocalypse/plugin_connect.py @@ -4,9 +4,11 @@ import fcp import threading from mercurial import util import sys +from config import Config PLUGIN_NAME = "org.freenetproject.plugin.dvcs_webui.main.Plugin" + def connect(ui, repo): node = fcp.FCPNode() @@ -66,6 +68,9 @@ def connect(ui, repo): t.start() while True: + # Load the config each time - it could change. + cfg = Config.from_ui(ui) + query_identifier = node._getUniqueId() # The event-querying is single-threaded, which makes things slow as # everything waits on the completion of the current operation. @@ -83,11 +88,11 @@ def connect(ui, repo): raise util.Abort(command['Replies.Description']) if response not in handlers: - raise util.Abort("Unsupported query '{0}'\n") + raise util.Abort("Unsupported query '{0}'\n".format(response)) # Handlers are indexed by the query message name, take the query # message, and return (result_name, plugin_params). - result_name, plugin_params = handlers[response](command) + result_name, plugin_params = handlers[response](command, cfg=cfg) plugin_params['Message'] = result_name plugin_params['QueryIdentifier'] = query_identifier @@ -103,10 +108,27 @@ def connect(ui, repo): # Handlers return two items: result message name, message-specific parameters. # The sending code handles the plugin name, required parameters and plugin name. +# TODO: Is it reasonable to lock in the "NameQuery"/"NameResult" naming pattern? +# TODO: Docstrings on handlers. Or would it make more sense to document on +# the plugin side? Both? +# Keywords arguments handlers can use: TODO: Appropriate to ignore others? +# * cfg - configuration -def VoidQuery(query): +def VoidQuery(_, **opts): return "VoidResult", {} + +def LocalRepoQuery(_, cfg, **opts): + params = {} + # Request USKs are keyed by repo path. + repo_index = 0 + for path in cfg.request_usks.iterkeys(): + params['Path.{0}'.format(repo_index)] = path + repo_index += 1 + + return "LocalRepoResult", params + # TODO: Perhaps look up method by name directly? -handlers = {'VoidQuery': VoidQuery} +handlers = {'VoidQuery': VoidQuery, + 'LocalRepoQuery': LocalRepoQuery}