<?xml version="1.0" encoding="UTF-8" ?>
<rdf:RDF xmlns="http://usefulinc.com/ns/doap#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Project><name>iw.recipe.subversion</name>
<shortdesc>ZC buildout recipe to checkout a dir from a svn repository and archive it in a folder</shortdesc>
<description>====================
iw.recipe.subversion
====================

This product is used to download packages from svn and tar them in a directory.

We need some buildout vars::

    &gt;&gt;&gt; write('buildout.cfg',
    ... """
    ... [buildout]
    ... parts=svn-package
    ...
    ... [svn-package]
    ... recipe=iw.recipe.subversion
    ... urls=
    ...   file:///%s/my_package/trunk my_package
    ... """ % repository)

We need a repository::

    &gt;&gt;&gt; create_repository()

Then, the recipe should work::

    &gt;&gt;&gt; print system(buildout)
    Installing svn-package.
    A    /sample-buildout/parts/svn-package/my_package/__init__.py
    A    /sample-buildout/parts/svn-package/my_package/sub
    A    /sample-buildout/parts/svn-package/my_package/sub/__init__.py
    A    /sample-buildout/parts/svn-package/my_package/README.txt
    ...
    &lt;BLANKLINE&gt;

Ok, we got it::

    &gt;&gt;&gt; ls('parts', 'svn-package')
    d my_package

If a download-cache directory is given, then an archive is created in the
specified path::

    &gt;&gt;&gt; write('buildout.cfg',
    ... """
    ... [buildout]
    ... download-cache=cache
    ... parts=svn-package
    ...
    ... [svn-package]
    ... recipe=iw.recipe.subversion
    ... urls=
    ...   file:///%s/my_package/trunk my_package
    ... """ % repository)

    &gt;&gt;&gt; rmtree('parts')
    &gt;&gt;&gt; cache = join(os.getcwd(), 'cache')
    &gt;&gt;&gt; mkdir(cache)

    &gt;&gt;&gt; print system(buildout)
    Creating directory '/sample-buildout/parts'.
    Uninstalling svn-package.
    Installing svn-package.
    A    /sample-buildout/parts/svn-package/my_package/__init__.py
    A    /sample-buildout/parts/svn-package/my_package/sub
    A    /sample-buildout/parts/svn-package/my_package/sub/__init__.py
    A    /sample-buildout/parts/svn-package/my_package/README.txt
    ...
    Creating archive: my_package-dev.tar.gz

    &gt;&gt;&gt; ls(cache)
    d  dist
    -  my_package-dev.tar.gz

Ok, now we can work offline. The package will be installed from the cache
directory::

    &gt;&gt;&gt; write('buildout.cfg',
    ... """
    ... [buildout]
    ... install-from-cache=true
    ... download-cache=cache
    ... parts=svn-package
    ...
    ... [svn-package]
    ... recipe=iw.recipe.subversion
    ... urls=
    ...   file:///%s/my_package/trunk my_package
    ... """ % repository)

    &gt;&gt;&gt; rmtree(repository)
    &gt;&gt;&gt; rmtree('parts')
    &gt;&gt;&gt; print system(buildout)
    Creating directory '/sample-buildout/parts'.
    Uninstalling svn-package.
    Installing svn-package.
    &lt;BLANKLINE&gt;


    &gt;&gt;&gt; ls('parts', 'svn-package')
    d  my_package

    &gt;&gt;&gt; ls('parts', 'svn-package', 'my_package')
    -  README.txt
    -  __init__.py
    d  sub

Well, it's ok for a trunk url. But when working with tagged version, we don't want to use subversion if we already have an archive::

    &gt;&gt;&gt; write('buildout.cfg',
    ... """
    ... [buildout]
    ... download-cache=cache
    ... parts=svn-package
    ...
    ... [svn-package]
    ... recipe=iw.recipe.subversion
    ... urls=
    ...   file:///%s/my_package/tags/v1_0_0 my_package
    ... """ % repository)


At the first time, we need to update and built the archive::

    &gt;&gt;&gt; create_repository()
    &gt;&gt;&gt; print system(buildout)
    Uninstalling svn-package.
    Installing svn-package.
    A    /sample-buildout/parts/svn-package/my_package/__init__.py
    A    /sample-buildout/parts/svn-package/my_package/sub
    A    /sample-buildout/parts/svn-package/my_package/sub/__init__.py
    A    /sample-buildout/parts/svn-package/my_package/README.txt
    ...
    Creating archive: my_package-v1_0_0.tar.gz
    &lt;BLANKLINE&gt;

    &gt;&gt;&gt; ls('parts', 'svn-package', 'my_package')
    d  .svn
    -  README.txt
    -  __init__.py
    d  sub

    &gt;&gt;&gt; ls(cache)
    d  dist
    -  my_package-v1_0_0.tar.gz

Then we work can work offline::

    &gt;&gt;&gt; write('buildout.cfg',
    ... """
    ... [buildout]
    ... offline=true
    ... download-cache=cache
    ... parts=svn-package
    ...
    ... [svn-package]
    ... recipe=iw.recipe.subversion
    ... urls=
    ...   file:///%s/my_package/tags/v1_0_0 my_package
    ... """ % repository)

    &gt;&gt;&gt; rmtree(repository)
    &gt;&gt;&gt; rmtree('parts')
    &gt;&gt;&gt; print system(buildout)
    Creating directory '/sample-buildout/parts'.
    Uninstalling svn-package.
    Installing svn-package.
    &lt;BLANKLINE&gt;

    &gt;&gt;&gt; ls('parts', 'svn-package', 'my_package')
    -  README.txt
    -  __init__.py
    d  sub</description>
<homepage rdf:resource="http://plone.org/products/iw-recipes" />
<maintainer><foaf:Person><foaf:name>Ingeniweb</foaf:name>
<foaf:mbox_sha1sum>ce647768fc2915c7851be5591bf96a90966761ef</foaf:mbox_sha1sum></foaf:Person></maintainer>
<release><Version><revision>0.3.1</revision></Version></release>
</Project></rdf:RDF>