infocalypse
 
(Steve Dougherty)
2013-06-20: Correct mistaken merge.

Correct mistaken merge.

diff --git a/infocalypse/__init__.py b/infocalypse/__init__.py
--- a/infocalypse/__init__.py
+++ b/infocalypse/__init__.py
@@ -386,14 +386,14 @@ def infocalypse_create(ui_, repo, **opts
     elif opts['uri'] != '':
         insert_uri = opts['uri']
     elif opts['wot'] != '':
-        # Expecting nick_prefix/repo_name.R<redundancy num>/edition/
-        nick_prefix, repo_desc = opts['wot'].split('/', 1)
+        # Expecting wot_id/repo_name.R<redundancy num>/edition/
+        wot_id, repo_desc = opts['wot'].split('/', 1)
 
         import wot
 
         ui_.status("Querying WoT for local identities.\n")
 
-        attributes = wot.resolve_local_identity(ui_, nick_prefix)
+        attributes = wot.resolve_local_identity(ui_, wot_id)
         if attributes is None:
             # Something went wrong; the function already printed an error.
             return
@@ -537,18 +537,7 @@ def infocalypse_pull(ui_, repo, **opts):
         # TODO: How to handle redundancy? Does Infocalypse automatically try
         # an R0 if an R1 fails?
 
-        nickname_prefix = ''
-        key_prefix=''
-        # Could be nick@key, nick, @key
-        split = wot_id.split('@')
-        nickname_prefix = split[0]
-
-        if len(split) == 2:
-            key_prefix = split[1]
-
-        repositories = wot.read_repo_listing(ui_, truster,
-                                             nickname_prefix=nickname_prefix,
-                                             key_prefix=key_prefix)
+        repositories = wot.read_repo_listing(ui_, truster, wot_id)
         if repo_name not in repositories:
             ui_.warn("Could not find repository named \"{0}\".\n".format(repo_name))
             return
@@ -939,6 +928,11 @@ cmdtable = {
                 + AGGRESSIVE_OPT,
                 "[options]"),
 
+    "fn-pull-request": (infocalypse_pull_request,
+                        WOT_OPTS +
+                        FCP_OPTS,
+                        "--wot id@key/repo"),
+
     "fn-push": (infocalypse_push,
                 [('', 'uri', '', 'insert URI to push to'),
                  # Buggy. Not well thought out.
@@ -1043,6 +1037,12 @@ cmdtable = {
                     WOT_OPTS,
                     "[options]"),
 
+    "fn-setupfreemail": (infocalypse_setupfreemail,
+                         [('', 'password', '', 'Freemail password')]
+                         + WOT_OPTS
+                         + FCP_OPTS,
+                         "[--truster nick@key] --password <password>"),
+
     "fn-archive": (infocalypse_archive,
                   [('', 'uri', '', 'Request URI for --pull, Insert URI ' +
                     'for --create, --push'),
@@ -1066,6 +1066,7 @@ commands.norepo += ' fn-setupfms'
 commands.norepo += ' fn-genkey'
 commands.norepo += ' fn-archive'
 commands.norepo += ' fn-setupwot'
+commands.norepo += ' fn-setupfreemail'
 
 
 ## Wrap core commands for use with freenet keys.
diff --git a/infocalypse/commands.py b/infocalypse/commands.py
--- a/infocalypse/commands.py
+++ b/infocalypse/commands.py
@@ -13,7 +13,7 @@ from wikicmds import execute_wiki, execu
 from arccmds import execute_arc_create, execute_arc_pull, execute_arc_push, \
      execute_arc_reinsert
 
-from config import read_freesite_cfg
+from config import read_freesite_cfg, Config
 from validate import is_hex_string, is_fms_id
 
 def set_target_version(ui_, repo, opts, params, msg_fmt):
@@ -195,18 +195,7 @@ def infocalypse_pull(ui_, repo, **opts):
         # TODO: How to handle redundancy? Does Infocalypse automatically try
         # an R0 if an R1 fails?
 
-        nickname_prefix = ''
-        key_prefix=''
-        # Could be nick@key, nick, @key
-        split = wot_id.split('@')
-        nickname_prefix = split[0]
-
-        if len(split) == 2:
-            key_prefix = split[1]
-
-        repositories = wot.read_repo_listing(ui_, truster,
-                                             nickname_prefix=nickname_prefix,
-                                             key_prefix=key_prefix)
+        repositories = wot.read_repo_listing(ui_, truster, wot_id)
         if repo_name not in repositories:
             ui_.warn("Could not find repository named \"{0}\".\n".format(repo_name))
             return
@@ -226,6 +215,11 @@ def infocalypse_pull(ui_, repo, **opts):
     # Hmmmm... can't really implement rev.
     execute_pull(ui_, repo, params, stored_cfg)
 
+def infocalypse_pull_request(ui, repo, **opts):
+    if not opts['wot']:
+        ui.warning("Who do you want to send the pull request to? Set --wot.")
+        return
+
 def infocalypse_push(ui_, repo, **opts):
     """ Push to an Infocalypse repository in Freenet. """
     params, stored_cfg = get_config_info(ui_, opts)
@@ -469,6 +463,21 @@ def infocalypse_setupwot(ui_, **opts):
     wot.execute_setup_wot(ui_, opts)
 
 
+# TODO: Should Freemail setup also be part of fn-setup?
+# TODO: Should there be per-Identity config? Then each one would have a list
+# of repos and optionally a Freemail password.
+# Nah, FMS config is global.
+def infocalypse_setupfreemail(ui, **opts):
+    if 'truster' in opts:
+        identity = opts['truster']
+    else:
+        cfg = Config().from_ui(ui)
+        identity = cfg.defaults['TRUSTER']
+    import wot
+    # TODO: Should this be part of the normal fn-setup?
+    wot.execute_setup_freemail(ui, identity)
+
+
 #----------------------------------------------------------"
 def do_archive_create(ui_, opts, params, stored_cfg):
     """ fn-archive --create."""