infocalypse
 
(Steve Dougherty)
2013-08-30: Set a path after resolving a push URI.

Set a path after resolving a push URI. This is to avoid problems with deceptive nickname collisions when doing lookups without the full identity ID.

diff --git a/infocalypse/__init__.py b/infocalypse/__init__.py
--- a/infocalypse/__init__.py
+++ b/infocalypse/__init__.py
@@ -602,7 +602,7 @@ def freenetpathtouri(ui, path, operation
         import wot
         if operation == "pull":
             truster = get_truster(ui, repo, truster_identifier)
-            return wot.resolve_pull_uri(ui, path, truster)
+            return wot.resolve_pull_uri(ui, path, truster, repo)
         elif operation == "push":
             return wot.resolve_push_uri(ui, path)
         elif operation == "clone-push":
@@ -793,6 +793,8 @@ def freenetclone(orig, *args, **opts):
 
         infocalypse_create(ui, repo, local_identity, **opts)
 
+        # TODO: Function for adding paths? It's currently here, for pull,
+        # and in WoT pull URI resolution.
         with repo.opener("hgrc", "a", text=True) as f:
             f.write("""[paths]
 default-push = freenet:{0}
diff --git a/infocalypse/commands.py b/infocalypse/commands.py
--- a/infocalypse/commands.py
+++ b/infocalypse/commands.py
@@ -232,7 +232,7 @@ def infocalypse_pull(ui_, repo, **opts):
         import wot
         truster = get_truster(ui_, repo, opts['truster'])
 
-        request_uri = wot.resolve_pull_uri(ui_, opts['wot'], truster)
+        request_uri = wot.resolve_pull_uri(ui_, opts['wot'], truster, repo)
     elif opts['uri']:
         request_uri = parse_repo_path(opts['uri'])
 
diff --git a/infocalypse/wot.py b/infocalypse/wot.py
--- a/infocalypse/wot.py
+++ b/infocalypse/wot.py
@@ -392,7 +392,7 @@ def fetch_edition(uri):
         return node.get(str(uri), priority=1)
 
 
-def resolve_pull_uri(ui, path, truster):
+def resolve_pull_uri(ui, path, truster, repo=None):
         """
         Return a pull URI for the given path.
         Print an error message and abort on failure.
@@ -406,6 +406,7 @@ def resolve_pull_uri(ui, path, truster):
         :param ui: For feedback.
         :param path: path describing a repo. nick@key/reponame
         :param truster: identity whose trust list to use.
+        :param repo: If given, add a path that points to the resolved URI.
         :return:
         """
         # Expecting <id stuff>/reponame
@@ -416,7 +417,22 @@ def resolve_pull_uri(ui, path, truster):
         # TODO: How to handle redundancy? Does Infocalypse automatically try
         # an R0 if an R1 fails?
 
-        return find_repo(ui, identity, repo_name)
+        request_uri = find_repo(ui, identity, repo_name)
+
+        if repo:
+            # TODO: Writing paths in this way preserves comments,
+            # but does not allow dealing intelligently with paths of the same
+            # name. Also it's duplicated in the clone support.
+            ui.status("Adding this repository as path '{0}'. To pull from the "
+                      "same repository in the future use this path.\n"
+                      .format(identity.nickname))
+            with repo.opener("hgrc", "a", text=True) as f:
+                f.write("""
+[paths]
+{0} = freenet:{1}
+""".format(identity.nickname, request_uri))
+
+        return request_uri
 
 
 def resolve_push_uri(ui, path, resolve_edition=True):