summaryrefslogtreecommitdiff
path: root/doc/source/index.rst
diff options
context:
space:
mode:
Diffstat (limited to 'doc/source/index.rst')
-rw-r--r--doc/source/index.rst186
1 files changed, 183 insertions, 3 deletions
diff --git a/doc/source/index.rst b/doc/source/index.rst
index 266988a..018b800 100644
--- a/doc/source/index.rst
+++ b/doc/source/index.rst
@@ -1,9 +1,189 @@
-pbr - Python Build Reasonableness
-=================================
+===================================
+ pbr - Python Build Reasonableness
+===================================
A library for managing setuptools packaging needs in a consistent manner.
-PBR is not a library about beer.
+`pbr` reads and then filters the `setup.cfg` data through a setup hook to
+fill in default values and provide more sensible behaviors, and then feeds
+the results in as the arguments to a call to `setup.py` - so the heavy
+lifting of handling python packaging needs is still being done by
+`setuptools`.
+
+What It Does
+============
+
+PBR can and does do a bunch of things for you:
+
+ * **Version**: Manage version number based on git revisions and tags
+ * **AUTHORS**: Generate AUTHORS file from git log
+ * **ChangeLog**: Generate ChangeLog from git log
+ * **Sphinx Autodoc**: Generate autodoc stub files for your whole module
+ * **Requirements**: Store your dependencies in a pip requirements file
+ * **long_description**: Use your README file as a long_description
+ * **Smart find_packages**: Smartly find packages under your root package
+
+Version
+-------
+
+Version strings will be inferred from git. If a given revision is tagged,
+that's the version. If it's not, and you don't provide a version, the version
+will be very similar to git describe. If you do, then we'll assume that's the
+version you are working towards, and will generate alpha version strings
+based on commits since last tag and the current git sha.
+
+AUTHORS and ChangeLog
+---------------------
+
+Why keep an AUTHORS or a ChangeLog file, when git already has all of the
+information you need. AUTHORS generation supports filtering/combining based
+on a standard .mailmap file.
+
+Sphinx Autodoc
+--------------
+
+Sphinx can produce auto documentation indexes based on signatures and
+docstrings of your project- but you have to give it index files to tell it
+to autodoc each module. That's kind of repetitive and boring. PBR will
+scan your project, find all of your modules, and generate all of the stub
+files for you.
+
+Sphinx documentation setups are altered to generate man pages by default. They
+also have several pieces of information that are known to setup.py injected
+into the sphinx config.
+
+Requirements
+------------
+
+You may not have noticed, but there are differences in how pip
+requirements.txt files work and how distutils wants to be told about
+requirements. The pip way is nicer, because it sure does make it easier to
+popuplate a virtualenv for testing, or to just install everything you need.
+Duplicating the information, though, is super lame. So PBR will let you
+keep requirements.txt format files around describing the requirements for
+your project, will parse them and split them up approprirately, and inject
+them into the install_requires and/or tests_require and/or dependency_links
+arguments to setup. Voila!
+
+long_description
+----------------
+
+There is no need to maintain two long descriptions- and your README file is
+probably a good long_description. So we'll just inject the contents of your
+README.rst, README.txt or README file into your empty long_description. Yay
+for you.
+
+Usage
+=====
+pbr requires a distribution to use distribute. Your distribution
+must include a distutils2-like setup.cfg file, and a minimal setup.py script.
+
+A simple sample can be found in pbr s own setup.cfg
+(it uses its own machinery to install itself)::
+
+ [metadata]
+ name = pbr
+ author = OpenStack Foundation
+ author-email = openstack-dev@lists.openstack.org
+ summary = OpenStack's setup automation in a reuable form
+ description-file = README
+ license = Apache-2
+ classifier =
+ Development Status :: 4 - Beta
+ Environment :: Console
+ Environment :: OpenStack
+ Intended Audience :: Developers
+ Intended Audience :: Information Technology
+ License :: OSI Approved :: Apache Software License
+ Operating System :: OS Independent
+ Programming Language :: Python
+ keywords =
+ setup
+ distutils
+ [files]
+ packages =
+ pbr
+ data_files =
+ etc/init =
+ pbr.packaging.conf
+ pbr.version.conf
+ [entry_points]
+ console_scripts =
+ pbr = pbr.cmd:main
+ pbr.config.drivers =
+ plain = pbr.cfg.driver:Plain
+
+The minimal setup.py should look something like this::
+
+ #!/usr/bin/env python
+
+ from setuptools import setup
+
+ setup(
+ setup_requires=['pbr'],
+ pbr=True,
+ )
+
+Note that it's important to specify `pbr=True` or else the pbr functionality
+will not be enabled.
+
+It should also work fine if additional arguments are passed to `setup()`,
+but it should be noted that they will be clobbered by any options in the
+setup.cfg file.
+
+files
+-----
+
+The format of the files section is worth explaining. There are three
+fundamental keys one is likely to care about, `packages`,
+`namespace_packages`, and `data_files`.
+
+`packages` is a list of top-level packages that should be installed. The
+behavior of packages is similar to `setuptools.find_packages` in that it
+recurses the python package heirarchy below the given top level and installs
+all of it. If `packages` is not specified, it defaults to the name given
+in the `[metadata]` section.
+
+`namespace_packages` is the same, but is a list of packages that provide
+namespace packages.
+
+`data_files` lists files to be installed. The format is an indented block
+that contains key value pairs which specify target directory and source
+file to install there. More than one source file for a directory may be
+indicated with a further indented list. Source files are stripped of leading
+directories, so::
+
+ [files]
+ data_files =
+ etc/neutron =
+ etc/api-paste.ini
+ etc/dhcp-agent.ini
+ etc/init.d = neutron.init
+
+Will result in `/etc/neutron` containing `api-paste.ini` and `dhcp-agent.ini`,
+both of which pbr will expect to find in the `etc` directory in the root of
+the source tree. Additionally, `neutron.init` from that dir will be installed
+in `/etc/init.d`.
+
+entry_points
+------------
+
+The general syntax of specifying entry points is a top level name indicating
+the entry point group name, followed by one or more key value pairs naming
+the entry point to be installed. For instance::
+
+ [entry_points]
+ console_scripts =
+ pbr = pbr.cmd:main
+ pbr.config.drivers =
+ plain = pbr.cfg.driver:Plain
+ fancy = pbr.cfg.driver:Fancy
+
+Will cause a console script called `pbr` to be installed that executes the
+`main` function found in `pbr.cmd`. Additionally, two entry points will be
+installed for `pbr.config.drivers`, one called `plain` which maps to the
+`Plain` class in `pbr.cfg.driver` and one called `fancy` which maps to the
+`Fancy` class in `pbr.cfg.driver`.
Indices and tables
==================