[Distutils] Proposal: a 'release' command in distutils

Tarek Ziadé ziade.tarek at gmail.com
Fri Mar 21 12:35:15 CET 2008


Hello,

Working with several PyPI servers is making the command lines quite long and
hard to keep up.

For instance, If I want to upload an egg on two servers I have to do this:

$ python setup.py register sdist bdist_egg upload -r http://my.cool.server/
$ python setup.py register sdist bdist_egg upload -r
http://pypi.python.org/pypi

Brrrr.... :)

The setuptools `alias` command make things easier, but we still need to add
in setup.cfg these
alias, and have to call several commands to commit just one egg to several
places.

I would like to propose a new command in distutils to make things easier.
This proposal is based on the `.pypirc` syntax of my previous proposal
(http://wiki.python.org/moin/EnhancedPyPI)

1. Defining releasing strategies for each repository

For each repository, we could add `release` value
to tell distutils the sequence to be run when `release` is called::

  [distutils]
  index-servers =
    pypi
    my-other-server
    my-other-server-with-its-own-realm

  [pypi]
  repository:http://pypi.python.org/pypi/

  username:tarek2
  password:secret
  release:register sdist build_mo bdist_egg upload
  release-strategy : *

  [my-other-server]
  username:tarek2
  password:secret
  repository:http://example.com/repository
  release:register sdist build_mo bdist_egg upload
  release-strategy:
        acme.*
        specific.package

  [my-other-server-with-its-own-realm]
  username:tarek3
  password:secret3
  repository:http://example2.com/repository
  realm:acme
  release:register sdist build_mo bdist_egg upload
  release-strategy:
        acme.*
        acme2.*

The `release-strategy` value would be a set of glob-like expressions
that will be used to match the package being released, in order
to qualify it for the given repository.

- when `release` is not provided, the repository is ommited by the release
command
- when `release` is provided, but not `release-strategy`, the default value
  for `release-strategy` would be *

Of course these are just optional shorcuts

2. Making a release

This call:

  $ cd acme.package
  $ python setup.py release

Would then look in .pypirc where "acme.package" (defined in the package
meta-data name) needs to be released, and will do this equivalent sequence:

  $ python setup.py register sdist build_mo bdist_egg upload -r pypi
  $ python setup.py register sdist build_mo bdist_egg upload -r
my-other-server-with-its-own-realm

The interesting thing about glob expressions is that it allows setting a
release strategy
upon the namespaces. For example, it makes it possible to upload the eggs of
a given
company to a dedicated server, and defines specific eggs to be released at
pypi.


Tarek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/distutils-sig/attachments/20080321/0fd2224a/attachment.htm 


More information about the Distutils-SIG mailing list