
General Information
===================
 * URL: http://incubator.apache.org/libcloud/devinfo.html

Git Repositories
===================
 * Official Git Mirror:  git://git.apache.org/libcloud.git
 * Github Mirror:        git://github.com/apache/libcloud.git

Using The Git-SVN Bridge (For Committers)
=========================================

 $ git clone git://git.apache.org/libcloud libcloud
 $ cd libcloud

 $ curl http://git.apache.org/authors.txt > .git/authors.txt
 $ git config svn.authorsfile ".git/authors.txt"

 # Optionally, set your Apache commiter info, if different from global
 $ git config user.name "Your Name"
 $ git config user.email "you@example.org"

 $ git svn init \
       --prefix=origin/ \
       --tags=tags \
       --trunk=trunk \
       --branches=branches \
       https://svn.apache.org/repos/asf/incubator/libcloud

 $ git svn rebase

 To push commits back to SVN:
 $ git svn dcommit

Testing
=======

 To run all suites:

  libcloud$ python setup.py test
  running test
  ................................................................................................
  ----------------------------------------------------------------------
  Ran 96 tests in 0.182s

  OK

 To run specific tests:

  libcloud$ PYTHONPATH=. python test/test_base.py
  .......
  ----------------------------------------------------------------------
  Ran 7 tests in 0.001s

  OK

Making a release
=======
 
 We have a script that runs the required setup.py commands and then hashes
 and signs the files.  To run it:

    cd dist
    ./release.sh -u yourusername@apache.org

 This should result in a set of apache-libcloud-${VERSION}.{tar.bz2,zip}{,asc,md5,sha1}
 files that are suitable to be uploaded for a release.
