Let Mr. Developer help you win the everlasting buildout battle!
mr.developer is a zc.buildout extension that makes it easy to work with buildouts containing lots of packages, of which you only want to develop some. The basic idea comes from Wichert Akkerman's plonenext effort.
mr.developer to the
extensions entry in your
[buildout] extensions = mr.developer
This enables additional
- This specifies the name of a section which lists the repository
information for your packages. Defaults to
- This specifies the default directory where your development packages will
be placed. Defaults to
- This specifies the names of packages which should be checked out during
buildout. Packages already checked out are skipped. You can use
*as a wildcard for all packages in
- This defaults to
false. If it's
true, then all packages specified by
auto-checkoutand currently in develop mode are updated during each buildout run. If set to
force, then packages are updated even when they are dirty instead of asking interactively.
- This defaults to
false. If it's
true, invalid server certificates are accepted without asking (for subversion repositories).
The format of entries in the
[sources] section is:
[sources] name = kind url [key=value ...]
Where individual parts are:
- The package name.
- The kind of repository. Currently supported are
- The location of the repository. This value is specific to the version control system used.
- You can add options for each individual package with this. No whitespace is
value, and around the equal sign. For a description of the options see below.
The per-package options are:
- Common options
pathoption allows you to set the base directory where the package will be checked out. The name of the package will be appended to the base path. If
pathis not set,
full-pathyou can set the directory where the package will be checked out. This is the actual destination, nothing will be added.
updateoption allows you to specify whether a package will be updated during buildout or not. If it's
true, then it will always be updated. If it's
false, then it will never be updated, even if the global
always-checkoutoption is set.
eggoption makes it possible to manage packages which are not eggs with
egg=false. All commands like
updatework as expected, but the package isn't added to the
developbuildout option and the
deactivatecommands skip the package.
urlis one of the urls supported by subversion.
You can specify a url with a revision pin, like
You can also set the
revisionoption, which is either a pin like with
rev=123or a minimum revision like
rev=>=123. When you set a minimum revision, the repository is updated when the current revision is lower.
branchoption allows you to use a specific branch instead of master.
revoption allows you to use a specific revision (usually a tag) instead of the HEAD.
Note that the
revoption are mutually exclusive.
branchoption allows you to use a specific branch instead of default.
revoption allows you to use a specific revision. Use of this option with forced updates will overwrite any local commits -- it will not attempt a merge, regardless of whether the revision pin specified is newer or older than the current committed revision. The revision specified can be numeric, a tag, or other identifier matching Bazaar revision identification rules.
- Currently no additional options.
cvs_rootoption can be used to override the setting of the $CVSROOT environment variable. The
tagoption forces checkout/update of the given tag instead of CVS HEAD.
This allows you to add packages on the filesystem without a version control system, or with an unsupported one. You can activate and deactivate packages, but you don't get status info and can't update etc.
urlneeds to be the same as the
nameof the package.
Here's an example of how your
buildout.cfg may look like:
[buildout] extensions = mr.developer auto-checkout = my.package [sources] my.package = svn http://example.com/svn/my.package/trunk update=true some.other.package = git git://example.com/git/some.other.package.git
When you run buildout, the script
bin/develop is created in your
buildout directory. With this script you can perform various actions on
packages, like checking out their source code, without the need to know where
the repositories are located.
For help on what the script can do, run
If you checked out the source code of a package, you must run buildout again.
The new package will then be marked as a development egg and have its version
pin cleared (if any). You can control the list of development eggs explicitely
You get an error like:
ERROR: Can't switch package 'foo' to 'https://example.com/svn/foo/trunk/' because it's dirty.
If you have not modified the package files under src/foo, then you can check
what's going on with
status -v. One common cause is a
which gets generated every time you run buildout and this shows up as an
untracked item in svn status.
You should add .egg-info to your global Subversion ignores in
~/.subversion/config, like this:
global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo *.rej *~ #*# .#* .*.swp .DS_Store *.egg-info
The best way to handle https certificates at the moment, is to accept them permanently when checking out the source manually.
Mercurial reports mismatching URL
This happens if you use lp:// URLs from launchpad. The problem is, that hg reports the actual URL, not the lp shortcut.