From f135e4a2ea384d6a2bc369b02228ce56eeade98d Mon Sep 17 00:00:00 2001
From: Donald Stufft <donald@stufft.io>
Date: Sun, 17 Mar 2013 15:11:44 -0400
Subject: [PATCH] Move install.sodium into nacl proper and switch to using it

---
 .travis.yml             |  7 ++---
 nacl/invoke/__init__.py |  0
 nacl/invoke/sodium.py   | 49 ++++++++++++++++++++++++++++++
 setup.py                |  1 +
 tasks.py                | 66 ++++-------------------------------------
 5 files changed, 58 insertions(+), 65 deletions(-)
 create mode 100644 nacl/invoke/__init__.py
 create mode 100644 nacl/invoke/sodium.py

diff --git a/.travis.yml b/.travis.yml
index 2ce3d76c..b9daa5fc 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,10 +6,9 @@ python:
   - "3.3"
   # - "pypy"  # Travis only has PyPy 1.9, cffi requires 2.0 (Unreleased)
 install:
-  - sudo apt-get -q install python-pip
-  - sudo /usr/bin/pip -q install git+git://github.com/pyinvoke/invoke.git
-  - invoke install.sodium
-  - invoke install.requirements --dev
+  - pip install invoke
+  - pip install file://$PWD#egg=pynacl[tests]
+  - invoke sodium.install
 script:
   - invoke tests
 env:
diff --git a/nacl/invoke/__init__.py b/nacl/invoke/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/nacl/invoke/sodium.py b/nacl/invoke/sodium.py
new file mode 100644
index 00000000..58be064b
--- /dev/null
+++ b/nacl/invoke/sodium.py
@@ -0,0 +1,49 @@
+import hashlib
+import os
+
+try:
+    from urllib.request import urlopen
+except ImportError:
+    from urllib2 import urlopen
+
+from invoke import task, run
+
+LIBSODIUM_VERSION = "0.3"
+LIBSODIUM_URL = "http://download.dnscrypt.org/libsodium/releases/libsodium-0.3.tar.gz"
+LIBSODIUM_HASH = b"908a26f84bedb432305c81ec6773aa95b8e724ba2ece6234840685a74e033750"
+
+
+@task
+def install():
+    path = os.path.expanduser("~/libsodium-%s.tar.gz" % LIBSODIUM_VERSION)
+
+    # Download libsodium and verify it's hash
+    resp = urlopen(LIBSODIUM_URL)
+    content = resp.read()
+    content_hash = hashlib.sha256(content).hexdigest()
+
+    # Verify our content matches the expected hash
+    if content_hash != LIBSODIUM_HASH:
+        raise ValueError("Hash mismatch for downloaded sodium")
+
+    # Write out the tarball
+    with open(path, "wb") as fp:
+        fp.write(content)
+
+    curdir = os.getcwd()
+    try:
+        os.chdir(os.path.expanduser("~/"))
+
+        # Unpack the tarball
+        run("tar xf libsodium-%s.tar.gz" % LIBSODIUM_VERSION)
+
+        # Configure and install the library
+        os.chdir(os.path.expanduser("~/libsodium-%s/" % LIBSODIUM_VERSION))
+
+        run("./configure --disable-debug --disable-dependency-tracking",
+            hide="out",
+        )
+        run("make", hide="out")
+        run("sudo make install", hide="out")
+    finally:
+        os.chdir(curdir)
diff --git a/setup.py b/setup.py
index 9cec5549..e4c8e55d 100644
--- a/setup.py
+++ b/setup.py
@@ -50,6 +50,7 @@ setup(
 
     packages=[
         "nacl",
+        "nacl.invoke",
     ],
 
     ext_package="nacl",
diff --git a/tasks.py b/tasks.py
index 5a125526..1e42d4b9 100644
--- a/tasks.py
+++ b/tasks.py
@@ -1,68 +1,12 @@
-import hashlib
-import os
-import urllib2
+from invoke import Collection, task, run
 
-from invoke import task, run
+from nacl.invoke import sodium
 
-
-LIBSODIUM_VERSION = "0.3"
-LIBSODIUM_URL = "http://download.dnscrypt.org/libsodium/releases/libsodium-0.3.tar.gz"
-LIBSODIUM_HASH = b"908a26f84bedb432305c81ec6773aa95b8e724ba2ece6234840685a74e033750"
-LIBSODIUM_AUTOGEN = False
-
-
-@task(aliases=["install.sodium"])
-def install_sodium():
-    tarball_path = os.path.expanduser(
-                        "~/libsodium-{}.tar.gz".format(LIBSODIUM_VERSION),
-                    )
-
-    # Download libsodium and verify it's hash
-    resp = urllib2.urlopen(LIBSODIUM_URL)
-    content = resp.read()
-    content_hash = hashlib.sha256(content).hexdigest()
-
-    if content_hash != LIBSODIUM_HASH:
-        raise ValueError("Hash mismatch for downloaded libsodium")
-
-    with open(tarball_path, "wb") as fp:
-        fp.write(content)
-
-    curdir = os.getcwd()
-    try:
-        os.chdir(os.path.expanduser("~/"))
-
-        # Unpack the tarball
-        run("tar xf libsodium-{}.tar.gz".format(LIBSODIUM_VERSION))
-
-        # Configure and install the library
-        os.chdir(os.path.expanduser(
-                    "~/libsodium-{}/".format(LIBSODIUM_VERSION),
-                ))
-
-        if LIBSODIUM_AUTOGEN:
-            run("./autogen.sh", hide="out")
-
-        run("./configure --disable-debug --disable-dependency-tracking",
-            hide="out",
-        )
-        run("make", hide="out")
-        run("sudo make install", hide="out")
-    finally:
-        os.chdir(curdir)
-
-
-@task(aliases=["install.requirements"])
-def install_requirements(dev=False):
-    if dev:
-        # Install once to get the tests extra
-        run("pip install file://$PWD#egg=pynacl[tests]")
-        # Install again to get an editable install
-        run("pip install -e .")
-    else:
-        run("pip install .")
+ns = Collection()
+ns.add_collection(sodium)
 
 
+@ns.add_task
 @task
 def tests():
     run("py.test")
-- 
GitLab