from paver.easy import *
from paver import doctools
from paver.setuputils import setup

options(
        sphinx=Bunch(builddir=".build"),
)

def sphinx_builddir(options):
    return path("docs") / options.sphinx.builddir / "html"


@task
def clean_docs(options):
    sphinx_builddir(options).rmtree()


@task
@needs("clean_docs", "paver.doctools.html")
def html(options):
    destdir = path("Documentation")
    destdir.rmtree()
    builtdocs = sphinx_builddir(options)
    builtdocs.move(destdir)


@task
@needs("clean_docs", "paver.doctools.html")
def ghdocs(options):
    builtdocs = sphinx_builddir(options)
    sh("sphinx-to-github", cwd=builtdocs)
    sh("git checkout gh-pages && \
            cp -r %s/* .    && \
            git commit . -m 'Rendered documentation for Github Pages.' && \
            git push origin gh-pages && \
            git checkout master" % builtdocs)


@task
@needs("clean_docs", "paver.doctools.html")
def upload_pypi_docs(options):
    builtdocs = path("docs") / options.builddir / "html"
    sh("python setup.py upload_sphinx --upload-dir='%s'" % (builtdocs))


@task
@needs("upload_pypi_docs", "ghdocs")
def upload_docs(options):
    pass


@task
def autodoc(options):
    sh("contrib/release/doc4allmods celery")


@task
def verifyindex(options):
    sh("contrib/release/verify-reference-index.sh")


@task
def flakes(options):
    sh("find celery -name '*.py' | xargs pyflakes")


@task
def clean_readme(options):
    path("README").unlink()
    path("README.rst").unlink()


@task
@needs("clean_readme")
def readme(options):
    sh("python contrib/release/sphinx-to-rst.py docs/templates/readme.txt \
            > README.rst")
    sh("ln -sf README.rst README")


@task
def bump(options):
    sh("bump -c celery")


@task
@cmdopts([
    ("coverage", "c", "Enable coverage"),
    ("quick", "q", "Quick test"),
    ("verbose", "V", "Make more noise"),
])
def test(options):
    cmd = "CELERY_LOADER=default PYTHONPATH=tests nosetests"
    if getattr(options, "coverage", False):
        cmd += " --with-coverage3"
    if getattr(options, "quick", False):
        cmd = "QUICKTEST=1 SKIP_RLIMITS=1 %s" % cmd
    if getattr(options, "verbose", False):
        cmd += " --verbosity=2"
    sh(cmd)


@task
@cmdopts([
    ("noerror", "E", "Ignore errors"),
])
def pep8(options):
    noerror = getattr(options, "noerror", False)
    return sh("""find . -name "*.py" | xargs pep8 | perl -nle'\
            print; $a=1 if $_}{exit($a)'""", ignore_error=noerror)


@task
def removepyc(options):
    sh("find . -name '*.pyc' | xargs rm")


@task
@needs("removepyc")
def gitclean(options):
    sh("git clean -xdn")


@task
@needs("removepyc")
def gitcleanforce(options):
    sh("git clean -xdf")


@task
@needs("pep8", "autodoc", "verifyindex", "test", "gitclean")
def releaseok(options):
    pass


@task
@needs("releaseok", "removepyc", "upload_docs")
def release(options):
    pass

@@ -305,38 +305,24 @@
 task%0A@needs(
-%22clean_docs%22, 
 %22paver.docto
@@ -328,24 +328,24 @@
 ools.html%22)%0A
+
 def html(opt
@@ -391,29 +391,8 @@
 n%22)%0A
-    destdir.rmtree()%0A
     
@@ -428,24 +428,49 @@
 ptions)%0A    
+sh(%22rsync -az %25s/ %25s%22 %25 (
 builtdocs.mo
@@ -470,22 +470,18 @@
 docs
-.move(
+, 
 destdir)
 %0A%0A%0A@
@@ -476,16 +476,17 @@
 destdir)
+)
 %0A%0A%0A@task

Use rsync instead of mv.