Module Expr Str Import alias alias alias ImportFrom alias ImportFrom alias identifier ImportFrom alias identifier Assign NameStore NameLoad Assign NameStore NameLoad Assign NameStore NameLoad Assign NameStore NameLoad Assign NameStore Str Assign NameStore Str Import alias Import alias Import alias FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam defaults NameLoad NameLoad NameLoad body Assert Call NameLoad NameLoad NameLoad Assign NameStore NameLoad For NameStore NameLoad body TryExcept body Assign NameStore Call AttributeLoad NameLoad attr BinOpAdd ListLoad NameLoad NameLoad keyword NameLoad keyword AttributeLoad NameLoad attr keyword IfExp NameLoad AttributeLoad NameLoad attr NameLoad Break handlers ExceptHandler type NameLoad body Assign NameStore SubscriptLoad Call AttributeLoad NameLoad attr Index Num If CompareEq AttributeLoad NameLoad attr AttributeLoad NameLoad attr body Continue If NameLoad body Print BinOpMod Str SubscriptLoad NameLoad Index Num Print NameLoad Return NameLoad orelse If NameLoad body Print BinOpMod Str TupleLoad NameLoad Return NameLoad Assign NameStore Call AttributeLoad SubscriptLoad Call AttributeLoad NameLoad attr Index Num attr If CompareGtE AttributeLoad NameLoad attr Str body Assign NameStore Call AttributeLoad NameLoad attr If CompareNotEq AttributeLoad NameLoad attr Num body If NameLoad body Print BinOpMod Str SubscriptLoad NameLoad Index Num Return NameLoad Return NameLoad decorator_list Import alias Import alias Import alias FunctionDef arguments args NameParam defaults body Assign NameStore Dict TryExcept body Assign NameStore Call NameLoad NameLoad Str For NameStore Call AttributeLoad NameLoad attr body If Call AttributeLoad Call AttributeLoad NameLoad attr attr Str body Assign NameStore Call AttributeLoad NameLoad attr Str NameLoad If NameLoad body Assign SubscriptStore NameLoad Index Str Call AttributeLoad NameLoad attr Num If Call AttributeLoad Call AttributeLoad NameLoad attr attr Str body Assign NameStore Call AttributeLoad NameLoad attr Str NameLoad If NameLoad body Assign SubscriptStore NameLoad Index Str Call AttributeLoad NameLoad attr Num Expr Call AttributeLoad NameLoad attr handlers ExceptHandler type NameLoad body Pass Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults NameLoad body Assign NameStore Call AttributeLoad SubscriptLoad NameLoad Index Str attr If Call AttributeLoad NameLoad attr Str body If NameLoad body Print Str Return Dict Assign NameStore Call NameLoad ListComp Call AttributeLoad NameLoad attr comprehension NameStore Call AttributeLoad Call AttributeLoad NameLoad attr Str attr Str Assign NameStore Str Assign NameStore Call NameLoad ListComp SubscriptLoad NameLoad Slice Call NameLoad NameLoad comprehension NameStore NameLoad Call AttributeLoad NameLoad attr NameLoad If UnaryOpNot NameLoad body Assign NameStore Call NameLoad ListComp NameLoad comprehension NameStore NameLoad Call AttributeLoad NameLoad attr Str NameLoad If NameLoad body Print BinOpMod Str Call AttributeLoad Str attr BinOpSub NameLoad NameLoad If NameLoad body Print BinOpMod Str Call AttributeLoad Str attr Call NameLoad NameLoad For NameStore Call NameLoad NameLoad body If Call AttributeLoad NameLoad attr NameLoad body Assign NameStore SubscriptLoad NameLoad Slice Call NameLoad NameLoad If NameLoad body Print BinOpMod Str NameLoad Return Dict Str Str NameLoad Call AttributeLoad SubscriptLoad NameLoad Index Str attr If NameLoad body Print Str Return Dict Str Str Call AttributeLoad SubscriptLoad NameLoad Index Str attr Call AttributeLoad SubscriptLoad NameLoad Index Str attr decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults NameLoad body If UnaryOpNot Call AttributeLoad AttributeLoad NameLoad attr attr Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad Str body If NameLoad body Print BinOpMod Str NameLoad Return Dict Assign NameStore ListLoad Str If CompareEq AttributeLoad NameLoad attr Str body Assign NameStore ListLoad Str Str Assign NameStore Call NameLoad NameLoad ListLoad Str Str Str Str keyword NameLoad If CompareIs NameLoad NameLoad body Return Dict If UnaryOpNot Call AttributeLoad NameLoad attr NameLoad body If NameLoad body Print BinOpMod Str TupleLoad NameLoad NameLoad Return Dict Assign NameStore SubscriptLoad NameLoad Slice Call NameLoad NameLoad Assign NameStore Call NameLoad NameLoad ListLoad Str Str keyword NameLoad If CompareIs NameLoad NameLoad body Return Dict Assign NameStore Call AttributeLoad NameLoad attr If Call AttributeLoad NameLoad attr Str body AugAssignAdd NameStore Str Return Dict Str Str NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults NameLoad body Assign NameStore Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad If UnaryOpNot Call AttributeLoad NameLoad attr NameLoad body If NameLoad body Print BinOpMod Str TupleLoad NameLoad NameLoad NameLoad Return NameLoad Return Dict Str Str SubscriptLoad NameLoad Slice Call NameLoad NameLoad Str decorator_list Import alias Import alias FunctionDef arguments args NameParam NameParam defaults AttributeLoad AttributeLoad NameLoad attr attr body Expr Str If UnaryOpNot NameLoad body Raise Call NameLoad Str Assign NameStore ListComp NameLoad comprehension NameStore Call AttributeLoad Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad attr AttributeLoad AttributeLoad NameLoad attr attr NameLoad Assign NameStore ListComp NameLoad comprehension NameStore Call AttributeLoad Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad attr AttributeLoad AttributeLoad NameLoad attr attr NameLoad Assign NameStore Call NameLoad Call AttributeLoad AttributeLoad NameLoad attr attr ListLoad NameLoad NameLoad Assign NameStore BinOpAdd BinOpMult ListLoad AttributeLoad AttributeLoad NameLoad attr attr BinOpSub Call NameLoad NameLoad NameLoad SubscriptLoad NameLoad Slice NameLoad If UnaryOpNot NameLoad body Return AttributeLoad AttributeLoad NameLoad attr attr Return Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Assign NameStore ListLoad Str If CompareEq AttributeLoad NameLoad attr Str body Assign NameStore ListLoad Str Str Assign NameStore ListLoad NameLoad NameLoad NameLoad TryExcept body Assign NameStore NameLoad If BoolOpOr Call AttributeLoad NameLoad attr Str Call AttributeLoad NameLoad attr Str body Assign NameStore BinOpAdd SubscriptLoad Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad Index Num Str Assign NameStore Call NameLoad NameLoad handlers ExceptHandler type NameLoad body Assign NameStore Str Expr Call AttributeLoad NameLoad attr NameLoad Assign NameStore NameLoad TryExcept body Assign NameStore Call NameLoad Str Str For NameStore Call AttributeLoad NameLoad attr body If Call AttributeLoad Call AttributeLoad NameLoad attr attr NameLoad body If CompareIn Str SubscriptLoad Call AttributeLoad Call AttributeLoad NameLoad attr attr Slice Num body Assign NameStore NameLoad Expr Call AttributeLoad NameLoad attr handlers ExceptHandler type NameLoad body Pass If UnaryOpNot NameLoad body Assign NameStore Call NameLoad Str Str Expr Call AttributeLoad NameLoad attr BinOpMod Str NameLoad Expr Call AttributeLoad NameLoad attr Expr Call AttributeLoad NameLoad attr Str Expr Call NameLoad NameLoad BinOpAdd ListLoad Str Str NameLoad decorator_list Assign NameStore Str Assign NameStore Dict Str Str Str Str FunctionDef arguments args NameParam defaults body Assign NameStore Dict TryExcept body Assign NameStore Call NameLoad NameLoad handlers ExceptHandler type NameLoad body Return NameLoad For NameStore Call AttributeLoad NameLoad attr body Assign NameStore Call AttributeLoad NameLoad attr Str NameLoad If NameLoad body Assign SubscriptStore NameLoad Index Str Call AttributeLoad NameLoad attr Num Assign NameStore Call AttributeLoad NameLoad attr Str NameLoad If NameLoad body Assign SubscriptStore NameLoad Index Str Call AttributeLoad NameLoad attr Num Expr Call AttributeLoad NameLoad attr Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam defaults body Assign NameStore Call NameLoad NameLoad Str Expr Call AttributeLoad NameLoad attr BinOpMod NameLoad NameLoad Expr Call AttributeLoad NameLoad attr Print BinOpMod Str TupleLoad NameLoad SubscriptLoad NameLoad Index Str decorator_list FunctionDef arguments args defaults body TryExcept body Return Call AttributeLoad AttributeLoad NameLoad attr attr Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad handlers ExceptHandler type NameLoad body Return Call AttributeLoad AttributeLoad NameLoad attr attr Call AttributeLoad AttributeLoad NameLoad attr attr SubscriptLoad AttributeLoad NameLoad attr Index Num decorator_list FunctionDef arguments args NameParam NameParam defaults NameLoad NameLoad body Assert CompareIsNot NameLoad NameLoad Str Assert CompareIsNot NameLoad NameLoad Str Assert CompareIsNot NameLoad NameLoad Str Assign NameStore Call NameLoad Assign NameStore Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad NameLoad Assign NameStore Call NameLoad NameLoad If NameLoad body Assign NameStore Call NameLoad NameLoad NameLoad If NameLoad body If NameLoad body Print BinOpMod Str NameLoad Return NameLoad Assign NameStore Call NameLoad NameLoad If NameLoad body If NameLoad body Print BinOpMod Str TupleLoad NameLoad NameLoad Return NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad If NameLoad body If NameLoad body Print BinOpMod Str NameLoad Return NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad If NameLoad body If NameLoad body Print BinOpMod Str NameLoad Return NameLoad If NameLoad body Print BinOpMod Str NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam defaults NameLoad body Return SubscriptLoad Call NameLoad keyword NameLoad Index Str decorator_list ClassDef bases NameLoad body Assign NameStore Str Assign NameStore ListLoad Assign NameStore ListLoad FunctionDef arguments args NameParam defaults body Pass decorator_list FunctionDef arguments args NameParam defaults body Pass decorator_list FunctionDef arguments args NameParam defaults body Assign NameStore Call NameLoad keyword NameLoad Print BinOpMod Str NameLoad decorator_list decorator_list ClassDef bases NameLoad body FunctionDef arguments args NameParam defaults body Assign NameStore Call NameLoad keyword NameLoad Expr Call AttributeLoad NameLoad attr NameLoad Assign NameStore Call AttributeLoad AttributeLoad NameLoad attr attr AttributeLoad NameLoad attr NameLoad Print BinOpMod Str NameLoad Expr Call AttributeLoad NameLoad attr NameLoad Assign NameStore Call NameLoad NameLoad Str Expr Call AttributeLoad NameLoad attr BinOpMod NameLoad NameLoad Expr Call AttributeLoad NameLoad attr decorator_list decorator_list If CompareIn Str AttributeLoad NameLoad attr body ImportFrom alias identifier ClassDef bases NameLoad body FunctionDef arguments args NameParam defaults body Assign NameStore Call NameLoad keyword NameLoad Assign NameStore NameLoad Print BinOpMod Str NameLoad Expr Call AttributeLoad NameLoad attr NameLoad Assign NameStore Call NameLoad NameLoad Str Expr Call AttributeLoad NameLoad attr BinOpMod NameLoad NameLoad Expr Call AttributeLoad NameLoad attr Expr Call AttributeLoad NameLoad attr NameLoad Expr Call AttributeLoad NameLoad attr NameLoad Assign NameStore Call NameLoad NameLoad Str Expr Call AttributeLoad NameLoad attr BinOpMod NameLoad Dict Str Str Str Str Str NameLoad NameLoad NameLoad Expr Call AttributeLoad NameLoad attr decorator_list decorator_list ClassDef bases NameLoad body FunctionDef arguments args NameParam defaults body Assign NameStore Call NameLoad keyword NameLoad Assign AttributeStore NameLoad attr NameLoad Assign AttributeStore AttributeLoad AttributeLoad NameLoad attr attr attr SubscriptLoad NameLoad Index Str Return Call AttributeLoad NameLoad attr NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Call AttributeLoad NameLoad attr NameLoad NameLoad NameLoad Assign NameStore Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad NameLoad Print BinOpMod Str NameLoad Expr Call AttributeLoad NameLoad attr NameLoad Assign NameStore Call NameLoad NameLoad Str Expr Call AttributeLoad NameLoad attr BinOpMod NameLoad AttributeLoad NameLoad attr Expr Call AttributeLoad NameLoad attr decorator_list decorator_list Assign NameStore Str ClassDef bases NameLoad body Assign NameStore Str Assign NameStore ListLoad Assign NameStore ListLoad FunctionDef arguments args NameParam defaults body Pass decorator_list FunctionDef arguments args NameParam defaults body Pass decorator_list FunctionDef arguments args NameParam defaults body Print BinOpMod Str NameLoad Assign NameStore Call NameLoad NameLoad Str Expr Call AttributeLoad NameLoad attr BinOpMod NameLoad Dict Str Str Str Str Str NameLoad NameLoad NameLoad Expr Call AttributeLoad NameLoad attr Assign NameStore Call AttributeLoad AttributeLoad NameLoad attr attr Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad Str TryExcept body Assign NameStore Call AttributeLoad Call NameLoad NameLoad Str attr handlers ExceptHandler type NameLoad body Assign NameStore Str If CompareNotIn NameLoad NameLoad body Print BinOpMod Str NameLoad Assign NameStore Call NameLoad NameLoad Str Expr Call AttributeLoad NameLoad attr NameLoad Expr Call AttributeLoad NameLoad attr orelse Print BinOpMod Str NameLoad Assign NameStore Call AttributeLoad AttributeLoad NameLoad attr attr Call NameLoad Str Assign NameStore Call NameLoad TryExcept body For NameStore Call AttributeLoad Call NameLoad NameLoad Str attr body If Call AttributeLoad NameLoad attr Str body For NameStore SubscriptLoad Call AttributeLoad NameLoad attr Slice Num body Expr Call AttributeLoad NameLoad attr NameLoad handlers ExceptHandler type NameLoad body Pass If CompareNotIn Str NameLoad body Print Str Assign NameStore Call NameLoad NameLoad Str Expr Call AttributeLoad NameLoad attr Str Expr Call AttributeLoad NameLoad attr orelse Print Str If CompareNotIn NameLoad NameLoad body Print BinOpMod Str NameLoad Assign NameStore Call NameLoad NameLoad Str Expr Call AttributeLoad NameLoad attr BinOpMod Str NameLoad Expr Call AttributeLoad NameLoad attr orelse Print Str Expr Call NameLoad NameLoad NameLoad NameLoad decorator_list decorator_list FunctionDef arguments args defaults body Assign NameStore Dict Str Str Str Str NameLoad NameLoad NameLoad NameLoad If CompareIn Str AttributeLoad NameLoad attr body Assign SubscriptStore NameLoad Index Str NameLoad Delete SubscriptDel NameLoad Index Str Return NameLoad decorator_list
N/A N/A 
The Versioneer
==============

* like a rocketeer, but for versions!
* https://github.com/warner/python-versioneer
* Brian Warner
* License: Public Domain
* Compatible With: python2.6, 2.7, and 3.2, 3.3

[![Build Status](https://travis-ci.org/warner/python-versioneer.png?branch=master)](https://travis-ci.org/warner/python-versioneer)

This is a tool for managing a recorded version number in distutils-based
python projects. The goal is to remove the tedious and error-prone "update
the embedded version string" step from your release process. Making a new
release should be as easy as recording a new tag in your version-control
system, and maybe making new tarballs.


## Quick Install

* `pip install versioneer` to somewhere to your $PATH
* run `versioneer-installer` in your source tree: this installs `versioneer.py`
* follow the instructions below (also in the `versioneer.py` docstring)

## Version Identifiers

Source trees come from a variety of places:

* a version-control system checkout (mostly used by developers)
* a nightly tarball, produced by build automation
* a snapshot tarball, produced by a web-based VCS browser, like github's
  "tarball from tag" feature
* a release tarball, produced by "setup.py sdist", distributed through PyPI

Within each source tree, the version identifier (either a string or a number,
this tool is format-agnostic) can come from a variety of places:

* ask the VCS tool itself, e.g. "git describe" (for checkouts), which knows
  about recent "tags" and an absolute revision-id
* the name of the directory into which the tarball was unpacked
* an expanded VCS variable ($Id$, etc)
* a `_version.py` created by some earlier build step

For released software, the version identifier is closely related to a VCS
tag. Some projects use tag names that include more than just the version
string (e.g. "myproject-1.2" instead of just "1.2"), in which case the tool
needs to strip the tag prefix to extract the version identifier. For
unreleased software (between tags), the version identifier should provide
enough information to help developers recreate the same tree, while also
giving them an idea of roughly how old the tree is (after version 1.2, before
version 1.3). Many VCS systems can report a description that captures this,
for example 'git describe --tags --dirty --always' reports things like
"0.7-1-g574ab98-dirty" to indicate that the checkout is one revision past the
0.7 tag, has a unique revision id of "574ab98", and is "dirty" (it has
uncommitted changes.

The version identifier is used for multiple purposes:

* to allow the module to self-identify its version: `myproject.__version__`
* to choose a name and prefix for a 'setup.py sdist' tarball

## Theory of Operation

Versioneer works by adding a special `_version.py` file into your source
tree, where your `__init__.py` can import it. This `_version.py` knows how to
dynamically ask the VCS tool for version information at import time. However,
when you use "setup.py build" or "setup.py sdist", `_version.py` in the new
copy is replaced by a small static file that contains just the generated
version data.

`_version.py` also contains `$Revision$` markers, and the installation
process marks `_version.py` to have this marker rewritten with a tag name
during the "git archive" command. As a result, generated tarballs will
contain enough information to get the proper version.


## Installation

First, decide on values for the following configuration variables:

* `versionfile_source`:

  A project-relative pathname into which the generated version strings should
  be written. This is usually a `_version.py` next to your project's main
  `__init__.py` file. If your project uses `src/myproject/__init__.py`, this
  should be `src/myproject/_version.py`. This file should be checked in to
  your VCS as usual: the copy created below by `setup.py versioneer` will
  include code that parses expanded VCS keywords in generated tarballs. The
  'build' and 'sdist' commands will replace it with a copy that has just the
  calculated version string.

*  `versionfile_build`:

  Like `versionfile_source`, but relative to the build directory instead of
  the source directory. These will differ when your setup.py uses
  'package_dir='. If you have `package_dir={'myproject': 'src/myproject'}`,
  then you will probably have `versionfile_build='myproject/_version.py'` and
  `versionfile_source='src/myproject/_version.py'`.

* `tag_prefix`:

  a string, like 'PROJECTNAME-', which appears at the start of all VCS tags.
  If your tags look like 'myproject-1.2.0', then you should use
  tag_prefix='myproject-'. If you use unprefixed tags like '1.2.0', this
  should be an empty string.

* `parentdir_prefix`:

  a string, frequently the same as tag_prefix, which appears at the start of
  all unpacked tarball filenames. If your tarball unpacks into
  'myproject-1.2.0', this should be 'myproject-'.

This tool provides one script, named `versioneer-installer`. That script does
one thing: write a copy of `versioneer.py` into the current directory.

To versioneer-enable your project:

* 1: Run `versioneer-installer` to copy `versioneer.py` into the top of your
  source tree.

* 2: add the following lines to the top of your `setup.py`, with the
  configuration values you decided earlier:

        import versioneer
        versioneer.versionfile_source = 'src/myproject/_version.py'
        versioneer.versionfile_build = 'myproject/_version.py'
        versioneer.tag_prefix = '' # tags are like 1.2.0
        versioneer.parentdir_prefix = 'myproject-' # dirname like 'myproject-1.2.0'

* 3: add the following arguments to the setup() call in your setup.py:

        version=versioneer.get_version(),
        cmdclass=versioneer.get_cmdclass(),

* 4: now run `setup.py versioneer`, which will create `_version.py`, and
  will modify your `__init__.py` to define `__version__` (by calling a
  function from `_version.py`). It will also modify your `MANIFEST.in` to
  include both `versioneer.py` and the generated `_version.py` in sdist
  tarballs.

* 5: commit these changes to your VCS. To make sure you won't forget,
  `setup.py versioneer` will mark everything it touched for addition.

## Post-Installation Usage

Once established, all uses of your tree from a VCS checkout should get the
current version string. All generated tarballs should include an embedded
version string (so users who unpack them will not need a VCS tool installed).

If you distribute your project through PyPI, then the release process should
boil down to two steps:

* 1: git tag 1.0
* 2: python setup.py register sdist upload

If you distribute it through github (i.e. users use github to generate
tarballs with `git archive`), the process is:

* 1: git tag 1.0
* 2: git push; git push --tags

Currently, all version strings must be based upon a tag. Versioneer will
report "unknown" until your tree has at least one tag in its history. This
restriction will be fixed eventually (see issue #12).

## Version-String Flavors

Code which uses Versioneer can learn about its version string at runtime by
importing `_version` from your main `__init__.py` file and running the
`get_versions()` function. From the "outside" (e.g. in `setup.py`), you can
import the top-level `versioneer.py` and run `get_versions()`.

Both functions return a dictionary with different keys for different flavors
of the version string:

* `['version']`: condensed tag+distance+shortid+dirty identifier. For git,
  this uses the output of `git describe --tags --dirty --always` but strips
  the tag_prefix. For example "0.11-2-g1076c97-dirty" indicates that the tree
  is like the "1076c97" commit but has uncommitted changes ("-dirty"), and
  that this commit is two revisions ("-2-") beyond the "0.11" tag. For
  released software (exactly equal to a known tag), the identifier will only
  contain the stripped tag, e.g. "0.11".

* `['full']`: detailed revision identifier. For Git, this is the full SHA1
  commit id, followed by "-dirty" if the tree contains uncommitted changes,
  e.g. "1076c978a8d3cfc70f408fe5974aa6c092c949ac-dirty".

Some variants are more useful than others. Including `full` in a bug report
should allow developers to reconstruct the exact code being tested (or
indicate the presence of local changes that should be shared with the
developers). `version` is suitable for display in an "about" box or a CLI
`--version` output: it can be easily compared against release notes and lists
of bugs fixed in various releases.

In the future, this will also include a
[PEP-0440](http://legacy.python.org/dev/peps/pep-0440/) -compatible flavor
(e.g. `1.2.post0.dev123`). This loses a lot of information (and has no room
for a hash-based revision id), but is safe to use in a `setup.py`
"`version=`" argument. It also enables tools like *pip* to compare version
strings and evaluate compatibility constraint declarations.

The `setup.py versioneer` command adds the following text to your
`__init__.py` to place a basic version in `YOURPROJECT.__version__`:

    from ._version import get_versions
    __version = get_versions()['version']
    del get_versions

## Updating Versioneer

To upgrade your project to a new release of Versioneer, do the following:

* install the new Versioneer (`pip install -U versioneer` or equivalent)
* re-run `versioneer-installer` in your source tree to replace `versioneer.py`
* edit `setup.py`, if necessary, to include any new configuration settings indicated by the release notes
* re-run `setup.py versioneer` to replace `SRC/_version.py`
* commit any changed files

## Future Directions

This tool is designed to make it easily extended to other version-control
systems: all VCS-specific components are in separate directories like
src/git/ . The top-level `versioneer.py` script is assembled from these
components by running make-versioneer.py . In the future, make-versioneer.py
will take a VCS name as an argument, and will construct a version of
`versioneer.py` that is specific to the given VCS. It might also take the
configuration arguments that are currently provided manually during
installation by editing setup.py . Alternatively, it might go the other
direction and include code from all supported VCS systems, reducing the
number of intermediate scripts.


## License

To make Versioneer easier to embed, all its code is hereby released into the
public domain. The `_version.py` that it creates is also in the public
domain.

 N/A os sys re distutils.core Command distutils.command.sdist sdist _sdist distutils.command.build build _build N/A versionfile_source None N/A versionfile_build None N/A tag_prefix None N/A parentdir_prefix None N/A VCS git N/A LONG_VERSION_PY 
# This file helps to compute a version number in source trees obtained from
# git-archive tarball (such as those provided by githubs download-from-tag
# feature). Distribution tarballs (build by setup.py sdist) and build
# directories (produced by setup.py build) will contain a much shorter file
# that just contains the computed version number.

# This file is released into the public domain. Generated by
# versioneer-0.10 (https://github.com/warner/python-versioneer)

# these strings will be replaced by git during git-archive
git_refnames = "%(DOLLAR)sFormat:%%d%(DOLLAR)s"
git_full = "%(DOLLAR)sFormat:%%H%(DOLLAR)s"


import subprocess
import sys
import errno


def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False):
    assert isinstance(commands, list)
    p = None
    for c in commands:
        try:
            # remember shell=False, so use git.cmd on windows, not just git
            p = subprocess.Popen([c] + args, cwd=cwd, stdout=subprocess.PIPE,
                                 stderr=(subprocess.PIPE if hide_stderr
                                         else None))
            break
        except EnvironmentError:
            e = sys.exc_info()[1]
            if e.errno == errno.ENOENT:
                continue
            if verbose:
                print("unable to run %%s" %% args[0])
                print(e)
            return None
    else:
        if verbose:
            print("unable to find command, tried %%s" %% (commands,))
        return None
    stdout = p.communicate()[0].strip()
    if sys.version >= '3':
        stdout = stdout.decode()
    if p.returncode != 0:
        if verbose:
            print("unable to run %%s (error)" %% args[0])
        return None
    return stdout


import sys
import re
import os.path

def get_expanded_variables(versionfile_abs):
    # the code embedded in _version.py can just fetch the value of these
    # variables. When used from setup.py, we don't want to import
    # _version.py, so we do it with a regexp instead. This function is not
    # used from _version.py.
    variables = {}
    try:
        f = open(versionfile_abs,"r")
        for line in f.readlines():
            if line.strip().startswith("git_refnames ="):
                mo = re.search(r'=\s*"(.*)"', line)
                if mo:
                    variables["refnames"] = mo.group(1)
            if line.strip().startswith("git_full ="):
                mo = re.search(r'=\s*"(.*)"', line)
                if mo:
                    variables["full"] = mo.group(1)
        f.close()
    except EnvironmentError:
        pass
    return variables

def versions_from_expanded_variables(variables, tag_prefix, verbose=False):
    refnames = variables["refnames"].strip()
    if refnames.startswith("$Format"):
        if verbose:
            print("variables are unexpanded, not using")
        return {} # unexpanded, so not in an unpacked git-archive tarball
    refs = set([r.strip() for r in refnames.strip("()").split(",")])
    # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of
    # just "foo-1.0". If we see a "tag: " prefix, prefer those.
    TAG = "tag: "
    tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)])
    if not tags:
        # Either we're using git < 1.8.3, or there really are no tags. We use
        # a heuristic: assume all version tags have a digit. The old git %%d
        # expansion behaves like git log --decorate=short and strips out the
        # refs/heads/ and refs/tags/ prefixes that would let us distinguish
        # between branches and tags. By ignoring refnames without digits, we
        # filter out many common branch names like "release" and
        # "stabilization", as well as "HEAD" and "master".
        tags = set([r for r in refs if re.search(r'\d', r)])
        if verbose:
            print("discarding '%%s', no digits" %% ",".join(refs-tags))
    if verbose:
        print("likely tags: %%s" %% ",".join(sorted(tags)))
    for ref in sorted(tags):
        # sorting will prefer e.g. "2.0" over "2.0rc1"
        if ref.startswith(tag_prefix):
            r = ref[len(tag_prefix):]
            if verbose:
                print("picking %%s" %% r)
            return { "version": r,
                     "full": variables["full"].strip() }
    # no suitable tags, so we use the full revision id
    if verbose:
        print("no suitable tags, using full revision id")
    return { "version": variables["full"].strip(),
             "full": variables["full"].strip() }

def versions_from_vcs(tag_prefix, root, verbose=False):
    # this runs 'git' from the root of the source tree. This only gets called
    # if the git-archive 'subst' variables were *not* expanded, and
    # _version.py hasn't already been rewritten with a short version string,
    # meaning we're inside a checked out source tree.

    if not os.path.exists(os.path.join(root, ".git")):
        if verbose:
            print("no .git in %%s" %% root)
        return {}

    GITS = ["git"]
    if sys.platform == "win32":
        GITS = ["git.cmd", "git.exe"]
    stdout = run_command(GITS, ["describe", "--tags", "--dirty", "--always"],
                         cwd=root)
    if stdout is None:
        return {}
    if not stdout.startswith(tag_prefix):
        if verbose:
            print("tag '%%s' doesn't start with prefix '%%s'" %% (stdout, tag_prefix))
        return {}
    tag = stdout[len(tag_prefix):]
    stdout = run_command(GITS, ["rev-parse", "HEAD"], cwd=root)
    if stdout is None:
        return {}
    full = stdout.strip()
    if tag.endswith("-dirty"):
        full += "-dirty"
    return {"version": tag, "full": full}


def versions_from_parentdir(parentdir_prefix, root, verbose=False):
    # Source tarballs conventionally unpack into a directory that includes
    # both the project name and a version string.
    dirname = os.path.basename(root)
    if not dirname.startswith(parentdir_prefix):
        if verbose:
            print("guessing rootdir is '%%s', but '%%s' doesn't start with prefix '%%s'" %%
                  (root, dirname, parentdir_prefix))
        return None
    return {"version": dirname[len(parentdir_prefix):], "full": ""}

tag_prefix = "%(TAG_PREFIX)s"
parentdir_prefix = "%(PARENTDIR_PREFIX)s"
versionfile_source = "%(VERSIONFILE_SOURCE)s"

def get_versions(default={"version": "unknown", "full": ""}, verbose=False):
    # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have
    # __file__, we can work backwards from there to the root. Some
    # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which
    # case we can only use expanded variables.

    variables = { "refnames": git_refnames, "full": git_full }
    ver = versions_from_expanded_variables(variables, tag_prefix, verbose)
    if ver:
        return ver

    try:
        root = os.path.abspath(__file__)
        # versionfile_source is the relative path from the top of the source
        # tree (where the .git directory might live) to this file. Invert
        # this to find the root from __file__.
        for i in range(len(versionfile_source.split("/"))):
            root = os.path.dirname(root)
    except NameError:
        return default

    return (versions_from_vcs(tag_prefix, root, verbose)
            or versions_from_parentdir(parentdir_prefix, root, verbose)
            or default)

 N/A subprocess N/A sys N/A errno run_command N/A N/A commands args cwd verbose hide_stderr N/A None False False N/A N/A N/A isinstance commands list N/A p None N/A c commands N/A N/A N/A N/A p N/A N/A subprocess Popen N/A N/A c args cwd cwd stdout N/A subprocess PIPE stderr N/A hide_stderr N/A subprocess PIPE None N/A N/A N/A N/A EnvironmentError N/A N/A e N/A N/A N/A sys exc_info N/A 1 N/A N/A N/A e errno N/A errno ENOENT N/A N/A N/A verbose N/A N/A N/A unable to run %s N/A args N/A 0 N/A e N/A None N/A N/A verbose N/A N/A N/A unable to find command, tried %s N/A commands N/A None N/A stdout N/A N/A N/A N/A N/A p communicate N/A 0 strip N/A N/A N/A sys version 3 N/A N/A stdout N/A N/A stdout decode N/A N/A N/A p returncode 0 N/A N/A verbose N/A N/A N/A unable to run %s (error) N/A args N/A 0 N/A None N/A stdout N/A N/A sys N/A re N/A os.path get_expanded_variables N/A N/A versionfile_abs N/A N/A N/A variables N/A N/A N/A N/A f N/A open versionfile_abs r N/A line N/A N/A f readlines N/A N/A N/A N/A N/A N/A line strip startswith git_refnames = N/A N/A mo N/A N/A re search =\s*"(.*)" line N/A mo N/A N/A N/A variables N/A refnames N/A N/A mo group 1 N/A N/A N/A N/A N/A line strip startswith git_full = N/A N/A mo N/A N/A re search =\s*"(.*)" line N/A mo N/A N/A N/A variables N/A full N/A N/A mo group 1 N/A N/A N/A f close N/A N/A N/A EnvironmentError N/A N/A N/A variables N/A versions_from_expanded_variables N/A N/A variables tag_prefix verbose N/A False N/A N/A refnames N/A N/A N/A variables N/A refnames strip N/A N/A N/A refnames startswith $Format N/A N/A verbose N/A N/A variables are unexpanded, not using N/A N/A N/A refs N/A set N/A N/A N/A r strip N/A r N/A N/A N/A N/A refnames strip () split , N/A TAG tag:  N/A tags N/A set N/A N/A r N/A N/A len TAG N/A r refs N/A N/A r startswith TAG N/A N/A tags N/A N/A tags N/A set N/A r N/A r refs N/A N/A re search \d r N/A verbose N/A N/A N/A discarding '%s', no digits N/A N/A , join N/A refs tags N/A verbose N/A N/A N/A likely tags: %s N/A N/A , join N/A sorted tags N/A ref N/A sorted tags N/A N/A N/A N/A ref startswith tag_prefix N/A N/A r N/A ref N/A N/A len tag_prefix N/A verbose N/A N/A N/A picking %s r N/A N/A version full r N/A N/A N/A variables N/A full strip N/A verbose N/A N/A no suitable tags, using full revision id N/A N/A version full N/A N/A N/A variables N/A full strip N/A N/A N/A variables N/A full strip N/A versions_from_vcs N/A N/A tag_prefix root verbose N/A False N/A N/A N/A N/A N/A N/A os path exists N/A N/A N/A os path join root .git N/A N/A verbose N/A N/A N/A no .git in %s root N/A N/A N/A GITS N/A git N/A N/A N/A sys platform win32 N/A N/A GITS N/A git.cmd git.exe N/A stdout N/A run_command GITS N/A describe --tags --dirty --always cwd root N/A N/A stdout None N/A N/A N/A N/A N/A N/A N/A stdout startswith tag_prefix N/A N/A verbose N/A N/A N/A tag '%s' doesn't start with prefix '%s' N/A stdout tag_prefix N/A N/A N/A tag N/A stdout N/A N/A len tag_prefix N/A stdout N/A run_command GITS N/A rev-parse HEAD cwd root N/A N/A stdout None N/A N/A N/A N/A full N/A N/A stdout strip N/A N/A N/A tag endswith -dirty N/A N/A full -dirty N/A N/A version full tag full N/A versions_from_parentdir N/A N/A parentdir_prefix root verbose N/A False N/A N/A dirname N/A N/A N/A os path basename root N/A N/A N/A N/A dirname startswith parentdir_prefix N/A N/A verbose N/A N/A N/A guessing rootdir is '%s', but '%s' doesn't start with prefix '%s' N/A root dirname parentdir_prefix N/A None N/A N/A version full N/A dirname N/A N/A len parentdir_prefix N/A N/A os.path N/A sys os_path_relpath N/A N/A path start N/A N/A N/A os path curdir N/A N/A Return a relative version of a path N/A N/A path N/A N/A N/A ValueError no path specified N/A start_list N/A x N/A x N/A N/A N/A N/A N/A os path abspath start split N/A N/A os path sep x N/A path_list N/A x N/A x N/A N/A N/A N/A N/A os path abspath path split N/A N/A os path sep x N/A i N/A len N/A N/A N/A os path commonprefix N/A start_list path_list N/A rel_list N/A N/A N/A N/A N/A os path pardir N/A N/A len start_list i N/A path_list N/A i N/A N/A rel_list N/A N/A N/A N/A os path curdir N/A N/A N/A N/A os path join rel_list N/A do_vcs_install N/A N/A manifest_in versionfile_source ipy N/A N/A N/A GITS N/A git N/A N/A N/A sys platform win32 N/A N/A GITS N/A git.cmd git.exe N/A files N/A manifest_in versionfile_source ipy N/A N/A N/A me __file__ N/A N/A N/A N/A me endswith .pyc N/A N/A me endswith .pyo N/A N/A me N/A N/A N/A N/A N/A os path splitext me N/A 0 .py N/A versioneer_file N/A os_path_relpath me N/A N/A N/A NameError N/A N/A versioneer_file versioneer.py N/A N/A N/A files append versioneer_file N/A present False N/A N/A N/A f N/A open .gitattributes r N/A line N/A N/A f readlines N/A N/A N/A N/A N/A N/A line strip startswith versionfile_source N/A N/A N/A export-subst N/A N/A N/A N/A N/A line strip split N/A 1 N/A N/A present True N/A N/A N/A f close N/A N/A N/A EnvironmentError N/A N/A N/A N/A present N/A N/A f N/A open .gitattributes a+ N/A N/A N/A f write N/A %s export-subst
 versionfile_source N/A N/A N/A f close N/A N/A N/A files append .gitattributes N/A N/A run_command GITS N/A N/A add -- files N/A N/A SHORT_VERSION_PY 
# This file was generated by 'versioneer.py' (0.10) from
# revision-control system data, or from the parent directory name of an
# unpacked source archive. Distribution tarballs contain a pre-generated copy
# of this file.

version_version = '%(version)s'
version_full = '%(full)s'
def get_versions(default={}, verbose=False):
    return {'version': version_version, 'full': version_full}

 N/A DEFAULT N/A version full unknown unknown versions_from_file N/A N/A filename N/A N/A N/A versions N/A N/A N/A N/A f N/A open filename N/A N/A N/A EnvironmentError N/A N/A versions N/A line N/A N/A f readlines N/A N/A mo N/A N/A re match version_version = '([^']+)' line N/A mo N/A N/A N/A versions N/A version N/A N/A mo group 1 N/A mo N/A N/A re match version_full = '([^']+)' line N/A mo N/A N/A N/A versions N/A full N/A N/A mo group 1 N/A N/A N/A f close N/A versions N/A write_to_version_file N/A N/A filename versions N/A N/A N/A f N/A open filename w N/A N/A N/A f write N/A SHORT_VERSION_PY versions N/A N/A N/A f close N/A N/A set %s to '%s' N/A filename N/A versions N/A version N/A get_root N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A os path dirname N/A N/A N/A os path abspath __file__ N/A N/A N/A NameError N/A N/A N/A N/A N/A os path dirname N/A N/A N/A os path abspath N/A N/A sys argv N/A 0 N/A get_versions N/A N/A default verbose N/A DEFAULT False N/A N/A N/A versionfile_source None please set versioneer.versionfile_source N/A N/A tag_prefix None please set versioneer.tag_prefix N/A N/A parentdir_prefix None please set versioneer.parentdir_prefix N/A root N/A get_root N/A versionfile_abs N/A N/A N/A os path join root versionfile_source N/A variables N/A get_expanded_variables versionfile_abs N/A variables N/A N/A ver N/A versions_from_expanded_variables variables tag_prefix N/A ver N/A N/A verbose N/A N/A N/A got version from expanded variable %s ver N/A ver N/A ver N/A versions_from_file versionfile_abs N/A ver N/A N/A verbose N/A N/A N/A got version from file %s %s N/A versionfile_abs ver N/A ver N/A ver N/A versions_from_vcs tag_prefix root verbose N/A ver N/A N/A verbose N/A N/A N/A got version from git %s ver N/A ver N/A ver N/A versions_from_parentdir parentdir_prefix root verbose N/A ver N/A N/A verbose N/A N/A N/A got version from parentdir %s ver N/A ver N/A verbose N/A N/A N/A got version from default %s ver N/A default N/A get_version N/A N/A verbose N/A False N/A N/A N/A N/A get_versions verbose verbose N/A version N/A cmd_version N/A Command N/A N/A description report generated version string N/A user_options N/A N/A boolean_options N/A initialize_options N/A N/A self N/A N/A N/A N/A finalize_options N/A N/A self N/A N/A N/A N/A run N/A N/A self N/A N/A N/A ver N/A get_version verbose True N/A N/A Version is currently: %s ver N/A N/A cmd_build N/A _build N/A run N/A N/A self N/A N/A N/A versions N/A get_versions verbose True N/A N/A N/A _build run self N/A target_versionfile N/A N/A N/A os path join N/A self build_lib versionfile_build N/A N/A UPDATING %s target_versionfile N/A N/A N/A os unlink target_versionfile N/A f N/A open target_versionfile w N/A N/A N/A f write N/A SHORT_VERSION_PY versions N/A N/A N/A f close N/A N/A N/A N/A cx_Freeze N/A sys modules N/A cx_Freeze.dist build_exe _build_exe cmd_build_exe N/A _build_exe N/A run N/A N/A self N/A N/A N/A versions N/A get_versions verbose True N/A target_versionfile versionfile_source N/A N/A UPDATING %s target_versionfile N/A N/A N/A os unlink target_versionfile N/A f N/A open target_versionfile w N/A N/A N/A f write N/A SHORT_VERSION_PY versions N/A N/A N/A f close N/A N/A N/A _build_exe run self N/A N/A N/A os unlink target_versionfile N/A f N/A open versionfile_source w N/A N/A N/A f write N/A LONG_VERSION_PY N/A DOLLAR TAG_PREFIX PARENTDIR_PREFIX VERSIONFILE_SOURCE $ tag_prefix parentdir_prefix versionfile_source N/A N/A N/A f close N/A N/A cmd_sdist N/A _sdist N/A run N/A N/A self N/A N/A N/A versions N/A get_versions verbose True N/A N/A self _versioneer_generated_versions versions N/A N/A N/A N/A self distribution metadata version N/A versions N/A version N/A N/A N/A _sdist run self N/A make_release_tree N/A N/A self base_dir files N/A N/A N/A N/A N/A _sdist make_release_tree self base_dir files N/A target_versionfile N/A N/A N/A os path join base_dir versionfile_source N/A N/A UPDATING %s target_versionfile N/A N/A N/A os unlink target_versionfile N/A f N/A open target_versionfile w N/A N/A N/A f write N/A SHORT_VERSION_PY N/A self _versioneer_generated_versions N/A N/A N/A f close N/A N/A N/A INIT_PY_SNIPPET 
from ._version import get_versions
__version__ = get_versions()['version']
del get_versions
 cmd_update_files N/A Command N/A N/A description install/upgrade Versioneer files: __init__.py SRC/_version.py N/A user_options N/A N/A boolean_options N/A initialize_options N/A N/A self N/A N/A N/A N/A finalize_options N/A N/A self N/A N/A N/A N/A run N/A N/A self N/A N/A N/A N/A  creating %s versionfile_source N/A f N/A open versionfile_source w N/A N/A N/A f write N/A LONG_VERSION_PY N/A DOLLAR TAG_PREFIX PARENTDIR_PREFIX VERSIONFILE_SOURCE $ tag_prefix parentdir_prefix versionfile_source N/A N/A N/A f close N/A ipy N/A N/A N/A os path join N/A N/A N/A os path dirname versionfile_source __init__.py N/A N/A N/A old N/A N/A N/A open ipy r read N/A N/A N/A EnvironmentError N/A N/A old N/A N/A INIT_PY_SNIPPET old N/A N/A N/A  appending to %s ipy N/A f N/A open ipy a N/A N/A N/A f write INIT_PY_SNIPPET N/A N/A N/A f close N/A N/A N/A  %s unmodified ipy N/A manifest_in N/A N/A N/A os path join N/A get_root MANIFEST.in N/A simple_includes N/A set N/A N/A N/A line N/A N/A N/A open manifest_in r readlines N/A N/A N/A N/A line startswith include  N/A N/A include N/A N/A N/A line split N/A 1 N/A N/A N/A N/A simple_includes add include N/A N/A N/A EnvironmentError N/A N/A N/A N/A versioneer.py simple_includes N/A N/A  appending 'versioneer.py' to MANIFEST.in N/A f N/A open manifest_in a N/A N/A N/A f write include versioneer.py
 N/A N/A N/A f close N/A N/A  'versioneer.py' already in MANIFEST.in N/A N/A versionfile_source simple_includes N/A N/A N/A  appending versionfile_source ('%s') to MANIFEST.in versionfile_source N/A f N/A open manifest_in a N/A N/A N/A f write N/A include %s
 versionfile_source N/A N/A N/A f close N/A N/A  versionfile_source already in MANIFEST.in N/A N/A do_vcs_install manifest_in versionfile_source ipy N/A N/A get_cmdclass N/A N/A N/A N/A N/A cmds N/A version versioneer build sdist cmd_version cmd_update_files cmd_build cmd_sdist N/A N/A cx_Freeze N/A sys modules N/A N/A N/A cmds N/A build_exe cmd_build_exe N/A N/A cmds N/A build N/A cmds N/A