(Steve Dougherty)
2013-08-09: Move fn-connect to separate module. Move fn-connect to separate module. Though it may make use of wot module methods, it shouldn't be performing its own queries to WoT.
diff --git a/infocalypse/commands.py b/infocalypse/commands.py
--- a/infocalypse/commands.py
+++ b/infocalypse/commands.py
@@ -238,8 +238,8 @@ def infocalypse_check_notifications(ui,
def infocalypse_connect(ui, repo, **opts):
- import wot
- wot.connect(ui, repo)
+ import plugin_connect
+ plugin_connect.connect(ui, repo)
def infocalypse_push(ui_, repo, **opts):
diff --git a/infocalypse/plugin_connect.py b/infocalypse/plugin_connect.py
new file mode 100644
--- /dev/null
+++ b/infocalypse/plugin_connect.py
@@ -0,0 +1,65 @@
+import fcp
+import threading
+from mercurial import util
+from config import Config
+
+PLUGIN_NAME = "org.freenetproject.plugin.dvcs_webui.main.Plugin"
+
+
+def connect(ui, repo):
+ node = fcp.FCPNode()
+
+ # TODO: Should I be using this? Looks internal. The identifier needs to
+ # be consistent though.
+ fcp_id = node._getUniqueId()
+
+ ui.status("Connecting as '%s'.\n" % fcp_id)
+
+ def ping():
+ pong = node.fcpPluginMessage(plugin_name=PLUGIN_NAME, id=fcp_id,
+ plugin_params={'Message': 'Ping'})[0]
+ if pong['Replies.Message'] == 'Error':
+ raise util.Abort(pong['Replies.Description'])
+ # Must be faster than the timeout threshold. (5 seconds)
+ threading.Timer(4.0, ping).start()
+
+ # Start self-perpetuating pinging in the background.
+ t = threading.Timer(0.0, ping)
+ # Daemon threads do not hold up the process exiting. Allows prompt
+ # response to - for instance - SIGTERM.
+ t.daemon = True
+ t.start()
+
+ while True:
+ sequenceID = node._getUniqueId()
+ # The event-querying is single-threaded, which makes things slow as
+ # everything waits on the completion of the current operation.
+ # Asynchronous code would require changes on the plugin side but
+ # potentially have much lower latency.
+ command = node.fcpPluginMessage(plugin_name=PLUGIN_NAME, id=fcp_id,
+ plugin_params=
+ {'Message': 'ClearToSend',
+ 'SequenceID': sequenceID})[0]
+ # TODO: Look up handlers in a dictionary.
+ print command
+
+ # Reload the config each time - it may have changed between messages.
+ cfg = Config.from_ui(ui)
+
+ response = command['Replies.Message']
+ if response == 'Error':
+ raise util.Abort(command['Replies.Description'])
+ elif response == 'ListLocalRepos':
+ params = {'Message': 'RepoList',
+ 'SequenceID': sequenceID}
+
+ # Request USKs are keyed by repo path.
+ repo_index = 0
+ for path in cfg.request_usks.iterkeys():
+ params['Repo%s' % repo_index] = path
+ repo_index += 1
+
+ ack = node.fcpPluginMessage(plugin_name=PLUGIN_NAME, id=fcp_id,
+ plugin_params=params)[0]
+ print ack
+
diff --git a/infocalypse/wot.py b/infocalypse/wot.py
--- a/infocalypse/wot.py
+++ b/infocalypse/wot.py
@@ -8,76 +8,16 @@ from keys import USK
import yaml
from email.mime.text import MIMEText
import imaplib
-import threading
from wot_id import Local_WoT_ID, WoT_ID
FREEMAIL_SMTP_PORT = 4025
FREEMAIL_IMAP_PORT = 4143
VCS_TOKEN = "[vcs]"
-PLUGIN_NAME = "org.freenetproject.plugin.dvcs_webui.main.Plugin"
# "infocalypse" is lower case in case it is used somewhere mixed case can
# cause problems like a filesystem path. Used for machine-readable VCS name.
VCS_NAME = "infocalypse"
-def connect(ui, repo):
- node = fcp.FCPNode()
-
- # TODO: Should I be using this? Looks internal. The identifier needs to
- # be consistent though.
- fcp_id = node._getUniqueId()
-
- ui.status("Connecting as '%s'.\n" % fcp_id)
-
- def ping():
- pong = node.fcpPluginMessage(plugin_name=PLUGIN_NAME, id=fcp_id,
- plugin_params={'Message': 'Ping'})[0]
- if pong['Replies.Message'] == 'Error':
- raise util.Abort(pong['Replies.Description'])
- # Must be faster than the timeout threshold. (5 seconds)
- threading.Timer(4.0, ping).start()
-
- # Start self-perpetuating pinging in the background.
- t = threading.Timer(0.0, ping)
- # Daemon threads do not hold up the process exiting. Allows prompt
- # response to - for instance - SIGTERM.
- t.daemon = True
- t.start()
-
- while True:
- sequenceID = node._getUniqueId()
- # The event-querying is single-threaded, which makes things slow as
- # everything waits on the completion of the current operation.
- # Asynchronous code would require changes on the plugin side but
- # potentially have much lower latency.
- command = node.fcpPluginMessage(plugin_name=PLUGIN_NAME, id=fcp_id,
- plugin_params=
- {'Message': 'ClearToSend',
- 'SequenceID': sequenceID})[0]
- # TODO: Look up handlers in a dictionary.
- print command
-
- # Reload the config each time - it may have changed between messages.
- cfg = Config.from_ui(ui)
-
- response = command['Replies.Message']
- if response == 'Error':
- raise util.Abort(command['Replies.Description'])
- elif response == 'ListLocalRepos':
- params = {'Message': 'RepoList',
- 'SequenceID': sequenceID}
-
- # Request USKs are keyed by repo path.
- repo_index = 0
- for path in cfg.request_usks.iterkeys():
- params['Repo%s' % repo_index] = path
- repo_index += 1
-
- ack = node.fcpPluginMessage(plugin_name=PLUGIN_NAME, id=fcp_id,
- plugin_params=params)[0]
- print ack
-
-
def send_pull_request(ui, repo, from_identity, to_identity, to_repo_name):
"""
Prompt for a pull request message, and send a pull request from