prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  CI run to install the built package
  In light of bug #1645  we should amend our CI run to install the built package, in a new virtual env and run something simple like a redis.Redis().ping(). Eventually we could build up to running the full integration test against the package.
  CI run to install the built package
  In light of bug #1645  we should amend our CI run to install the built package, in a new virtual env and run something simple like a redis.Redis().ping(). Eventually we could build up to running the full integration test against the package.
  
  </issue>
  <code>
  [start of tasks.py]
  1 import os
  2 import shutil
  3 from invoke import task, run
  4 
  5 with open('tox.ini') as fp:
  6     lines = fp.read().split("\n")
  7     dockers = [line.split("=")[1].strip() for line in lines
  8                if line.find("name") != -1]
  9 
  10 
  11 @task
  12 def devenv(c):
  13     """Builds a development environment: downloads, and starts all dockers
  14     specified in the tox.ini file.
  15     """
  16     clean(c)
  17     cmd = 'tox -e devenv'
  18     for d in dockers:
  19         cmd += " --docker-dont-stop={}".format(d)
  20     run(cmd)
  21 
  22 
  23 @task
  24 def linters(c):
  25     """Run code linters"""
  26     run("tox -e linters")
  27 
  28 
  29 @task
  30 def all_tests(c):
  31     """Run all linters, and tests in redis-py. This assumes you have all
  32     the python versions specified in the tox.ini file.
  33     """
  34     linters(c)
  35     tests(c)
  36 
  37 
  38 @task
  39 def tests(c):
  40     """Run the redis-py test suite against the current python,
  41     with and without hiredis.
  42     """
  43     run("tox -e plain -e hiredis")
  44 
  45 
  46 @task
  47 def clean(c):
  48     """Stop all dockers, and clean up the built binaries, if generated."""
  49     if os.path.isdir("build"):
  50         shutil.rmtree("build")
  51     if os.path.isdir("dist"):
  52         shutil.rmtree("dist")
  53     run("docker rm -f {}".format(' '.join(dockers)))
  54 
  55 
  56 @task
  57 def package(c):
  58     """Create the python packages"""
  59     run("python setup.py build install")
  60
  [end of tasks.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/tasks.py b/tasks.py
  --- a/tasks.py
  +++ b/tasks.py
  @@ -56,4 +56,4 @@
   @task
   def package(c):
       """Create the python packages"""
  -    run("python setup.py build install")
  +    run("python setup.py sdist bdist_wheel")
  
verification_info: {"golden_diff": "diff --git a/tasks.py b/tasks.py\n--- a/tasks.py\n+++ b/tasks.py\n@@ -56,4 +56,4 @@\n @task\n def package(c):\n     \"\"\"Create the python packages\"\"\"\n-    run(\"python setup.py build install\")\n+    run(\"python setup.py sdist bdist_wheel\")\n", "issue": "CI run to install the built package\nIn light of bug #1645  we should amend our CI run to install the built package, in a new virtual env and run something simple like a redis.Redis().ping(). Eventually we could build up to running the full integration test against the package.\nCI run to install the built package\nIn light of bug #1645  we should amend our CI run to install the built package, in a new virtual env and run something simple like a redis.Redis().ping(). Eventually we could build up to running the full integration test against the package.\n", "before_files": [{"content": "import os\nimport shutil\nfrom invoke import task, run\n\nwith open('tox.ini') as fp:\n    lines = fp.read().split(\"\\n\")\n    dockers = [line.split(\"=\")[1].strip() for line in lines\n               if line.find(\"name\") != -1]\n\n\n@task\ndef devenv(c):\n    \"\"\"Builds a development environment: downloads, and starts all dockers\n    specified in the tox.ini file.\n    \"\"\"\n    clean(c)\n    cmd = 'tox -e devenv'\n    for d in dockers:\n        cmd += \" --docker-dont-stop={}\".format(d)\n    run(cmd)\n\n\n@task\ndef linters(c):\n    \"\"\"Run code linters\"\"\"\n    run(\"tox -e linters\")\n\n\n@task\ndef all_tests(c):\n    \"\"\"Run all linters, and tests in redis-py. This assumes you have all\n    the python versions specified in the tox.ini file.\n    \"\"\"\n    linters(c)\n    tests(c)\n\n\n@task\ndef tests(c):\n    \"\"\"Run the redis-py test suite against the current python,\n    with and without hiredis.\n    \"\"\"\n    run(\"tox -e plain -e hiredis\")\n\n\n@task\ndef clean(c):\n    \"\"\"Stop all dockers, and clean up the built binaries, if generated.\"\"\"\n    if os.path.isdir(\"build\"):\n        shutil.rmtree(\"build\")\n    if os.path.isdir(\"dist\"):\n        shutil.rmtree(\"dist\")\n    run(\"docker rm -f {}\".format(' '.join(dockers)))\n\n\n@task\ndef package(c):\n    \"\"\"Create the python packages\"\"\"\n    run(\"python setup.py build install\")\n", "path": "tasks.py"}]}