
# v8.0.4

## Changed

- introduce scriv for changelog management
- reconfigure local build backend to use an attribute instead of star imports from setuptools
- introduce ruff as a linter
- ensure the setuptools version keyword correctly load pyproject.toml configuration
- add build and wheel to the test requirements for regression testing
- move internal toml handling to own module

## Fixed

- fix #925: allow `write_to` to be an absolute path when it's a subdirectory of the root
- fix #932: ensure type annotations in version file don't cause linter issues
- fix #930: temporary restore `DEFAULT_VERSION_SCHEME` and `DEFAULT_LOCAL_SCHEME` on the `setuptools_scm` package



# v8.0.3

## bugfix

- fix #918 for good - remove external importlib-metadata to avoid source only loop
- fix #926: ensure mypy on python3.8 works with the version file

# v8.0.2

## bugfix

- fix #919: restore legacy version-file behaviour for external callers + add Deprecation warning
- fix #918: use packaging from setuptools for self-build
- fix #914: ignore the deprecated git archival plugin as its integrated now
- fix #912: ensure mypy safety of the version template + regression test
- fix #913: use 240s timeout instead of 20 for `git unshallow`
  to account for large repos or slow connections


# v8.0.1

## bugfix

- update version file template to work on older python versions by using type comments
- ensure tag regex from setup.py is parsed into regex

# v8.0.0

## breaking

- remove legacy version parser api - config arg always required
- turn Configuration into a dataclass
- require configuration to always pass into helpers
- hide file-finders implementation in private module
- renamed setuptools_scm.hacks to setuptools_scm.fallbacks and drop support for pip-egg-info
- remove trace function and use logging instead
- unify `distance=None` and `distance=0` they should mean the same andwhere hiding dirty states that are now explicitly dirty
- depend on later importlib for the full selectable api
- move setuptools integration code to private sub-package
- use normalized dist names for the `SETUPTOOLS_SCM_PRETEND_VERSION_FOR_${DIST_NAME}` env var
- drop support for python 3.7
- introduce `version_file` as replacement for `write_to`

## features

- created a directory for the vcs-versioning package and added it to pypi
- git: expect main as possible default branch
- drop version_from_scm helper
- trim down exposed public api
- no longer self-call twice in setuptools
- add support for version schemes by import
- chores

    - migrate own metadata to pyproject.toml
    - consolidate version schemes
    - stricter tag typing
    - pre-compiled regex
    - move helpers to private modules

- support passing log levels to SETUPTOOLS_SCM_DEBUG
- support using rich.logging as console log handler if installed
- fix #527: type annotation in default version template
- fix #549: use fallbacks when scm search raises CommandNotFoundError

## bugfixes

- fix #883: use HeadersParser to ensure only mime metadata in headers is used
- fix #884: parse calver dates from versions with the v prefix
- don't use a C locale without UTF-8 support, when running commands.

# v7.1.0

- #748: use `tomllib` from stdlib
- fix #762: handle non-ascii in setup.cfg
- #752: implement fallback file finders for archives
- #765: removed coding header in python template
- declared Python 3.11 support
- fix #759: update .git_archival.txt templates match git-describe invocation
- fix #772: fix handling of .git-archival.txt from tagged commit

# v7.0.5

- fixes #742, #745: correctly hande accidentally released archival files

# v7.0.4

- fix #727: correctly handle incomplete archival from setuptools_scm_git_archival
- fix #691: correctly handle specifying root in pyproject.toml
- correct root override check condition (to ensure absolute path matching)
- allow root by the cli to be considered relative to the cli (using abspath)

# v7.0.3

- fix mercurial usage when pip primes a isolated environment
- fix regression for branch names on git + add a test

# v7.0.2

- fix #723 and #722: remove bootstrap dependencies
- ensure we read the distribution name from `setup.cfg` if needed even for `pyproject.toml`

# v7.0.1

- fix #718: Avoid `ModuleNotFoundError` by requiring `importlib_metadata` in `python<3.8`

# v7.0.0

- drop python 3.6 support
- include git archival support
- fix #707: support git version detection even when git protects against mismatched owners
  (common with misconfigured containers, thanks @chrisburr )
- fix #548: correctly handle parsing the commit timestamp of HEAD when `log.showSignature` is set

# v6.4.2

- fix #671: `NoReturn` is not available in painfully dead python 3.6

# v6.4.1

-   fix regression #669: restore get_version signature
-   fix #668: harden the self-test for distribution extras

# 6.4.0

-   compatibility adjustments for setuptools \>58
- only put minimal setuptools version into toml extra to warn people with old strict pins
- correctly handle hg-git self-use
- better mercurial detection
- modernize packaging setup
- python 3.10 support
- better handling of setuptools install command deprecation
- consider `pyproject.tomls` when running as command
- use list in git describe command to avoid shell expansions while supporting both windows and posix
- add `--strip-dev` flag to `python -m setuptools_scm` to print the next guessed version cleanly
- ensure no-guess-dev will fail on bad tags instead of generating invalid versions
- ensure we use utc everywhere to avoid confusion

# 6.3.2

- fix #629: correctly convert Version data in tags_to_version parser to avoid errors

# 6.3.1

- fix #625: restore tomli in install_requires after the regression changes in took it out
  and some users never added it even tho they have pyproject.toml files

# 6.3.0

## warning

This release explicitly warns on unsupported setuptools. This
unfortunately has to happen as the legacy `setup_requires` mechanism
incorrectly configures the setuptools working-set when a more recent
setuptools version than available is required.

As all releases of setuptools are affected as the historic mechanism for
ensuring a working setuptools setup was shipping a `ez_setup` file next
to `setup.py`, which would install the required version of setuptools.

This mechanism has long since been deprecated and removed as most people
haven\'t been using it

## bugfixes

- fix #612: depend on packaging to ensure version parsing parts
- fix #611: correct the typo that hid away the toml extra and add it in `setup.py` as well
- fix #615: restore support for the git_archive plugin which doesn't pass over the config
- restore the ability to run on old setuptools while to avoid breaking pipelines

# v6.2.0

-   fix #608: resolve tomli dependency issue by making it a hard
    dependency as all intended/supported install options use pip/wheel
    this is only a feature release
-   ensure python 3.10 works

# v6.1.1

-   fix #605: completely disallow bdist_egg - modern enough
    setuptools\>=45 uses pip
-   fix #606: re-integrate and harden toml parsing
-   fix #597: harden and expand support for figuring the current
    distribution name from [pyproject.toml]{.title-ref}
    ([project.name]{.title-ref} or
    [tool.setuptools_scm.dist_name]{.title-ref}) section or
    [setup.cfg]{.title-ref} ([metadata.name]{.title-ref})

# v6.1.0

-   fix #587: don\'t fail file finders when distribution is not given
-   fix #524: new parameters `normalize` and `version_cls` to customize
    the version normalization class.
-   fix #585: switch from toml to tomli for toml 1.0 support
-   fix #591: allow to opt in for searching parent directories in the
    api
-   fix #589: handle yaml encoding using the expected defaults
-   fix #575: recommend storing the version_module inside of
    `mypkg/_version.py`
-   fix #571: accept branches starting with `v` as release branches
-   fix #557: Use `packaging.version` for `version_tuple`
-   fix #544: enhance errors on unsupported python/setuptools versions

# v6.0.1

-   fix #537: drop node_date on old git to avoid errors on missing %cI

# v6.0.0

-   fix #517: drop dead python support \>3.6 required
-   drop dead setuptools support \> 45 required (can install wheels)
-   drop egg building (use wheels)
-   add git node_date metadata to get the commit time-stamp of HEAD
-   allow version schemes to be priority ordered lists of version
    schemes
-   support for calendar versioning (calver) by date

# v5.0.2

-   fix #415: use git for matching prefixes to support the windows
    situation

# v5.0.1

- fix #509: support `SETUPTOOLS_SCM_PRETEND_VERSION_FOR_${DISTRIBUTION_NAME}` for `pyproject.toml`

# v5.0.0

Breaking changes:

-   fix #339: strict errors on missing scm when parsing a scm dir to
    avoid false version lookups
-   fix #337: if relative_to is a directory instead of a file, consider
    it as direct target instead of the containing folder and print a
    warning

Bugfixes:

-   fix #352: add support for generally ignoring specific vcs roots
-   fix #471: better error for version bump failing on complex but
    accepted tag
-   fix #479: raise indicative error when tags carry non-parsable
    information
-   Add `no-guess-dev` which does no next version guessing,
    just adds `.post1.devN` in case there are new commits after the tag
-   add python3.9
-   enhance documentation
-   consider SOURCE_DATE_EPOCH for versioning
-   add a version_tuple to write_to templates
-   fix #321: add support for the
    `SETUPTOOLS_SCM_PRETEND_VERSION_FOR_${DISTRIBUTION_NAME}` env var to
    target the pretend key
-   fix #142: clearly list supported scm
-   fix #213: better error message for non-zero dev numbers in tags
-   fix #356: add git branch to version on describe failure

# v4.1.2

-   disallow git tags without dots by default again - #449

# v4.1.1

-   drop jaraco.windows from pyproject.toml, allows for wheel builds on
    python2

# v4.1.0

-   include python 3.9 via the deadsnakes action
-   return release_branch_semver scheme (it got dropped in a bad rebase)
-   undo the devendoring of the samefile backport for python2.7 on
    windows
-   re-enable the building of universal wheels
-   fix handling of missing git/hg on python2.7 (python 3 exceptions
    where used)
-   correct the tox flake8 invocation
-   trigger builds on tags again

# v4.0.0

-   Add `parentdir_prefix_version` to support installs from GitHub
    release tarballs.
-   use Coordinated Universal Time (UTC)
-   switch to github actions for ci
-   fix documentation for `tag_regex` and add support for single digit
    versions
-   document handling of enterprise distros with unsupported setuptools
    versions #312
-   switch to declarative metadata
-   drop the internal copy of samefile and use a dependency on
    jaraco.windows on legacy systems
-   select git tags based on the presence of numbers instead of dots
-   enable getting a version form a parent folder prefix
-   add release-branch-semver version scheme
-   make global configuration available to version metadata
-   drop official support for python 3.4

# v3.5.0

-   add `no-local-version` local scheme and improve documentation for
    schemes

# v3.4.4

-   fix #403: also sort out resource warnings when dealing with git file
    finding

# v3.4.3

-   fix #399: ensure the git file finder terminates subprocess after
    reading archive

# v3.4.2

-   fix #395: correctly transfer tag regex in the Configuration
    constructor
-   rollback \--first-parent for git describe as it turns out to be a
    regression for some users

# v3.4.1

-   pull in #377 to fix #374: correctly set up the default version
    scheme for pyproject usage. this bugfix got missed when rushing the
    release.

# v3.4.0

-   fix #181 - add support for projects built under setuptools
    declarative config by way of the
    setuptools.finalize_distribution_options hook in Setuptools 42.
-   fix #305 - ensure the git file finder closes file descriptors even
    when errors happen
-   fix #381 - clean out env vars from the git hook system to ensure
    correct function from within
-   modernize docs wrt importlib.metadata

*edited*

-   use \--first-parent for git describe

# v3.3.3

-   add eggs for python3.7 and 3.8 to the deploy

# v3.3.2

-   fix #335 - fix python3.8 support and add builds for up to python3.8

# v3.3.1

-   fix #333 (regression from #198) - use a specific fallback root when
    calling fallbacks. Remove old hack that resets the root when
    fallback entrypoints are present.

# v3.3.0

-   fix #198 by adding the `fallback_version` option, which sets the
    version to be used when everything else fails.

# v3.2.0

\* fix #303 and #283 by adding the option `git_describe_command` to
allow the user to control the way that [git describe]{.title-ref} is
called.

# v3.1.0

-   fix #297 - correct the invocation in version_from_scm and deprecate
    it as its exposed by accident
-   fix #298 - handle git file listing on empty repositories
-   fix #268 - deprecate ScmVersion.extra

# v3.0.6

-   fix #295 - correctly handle self install from tarballs

# v3.0.5

-   fix #292 - match leading `V` character as well

    <https://www.python.org/dev/peps/pep-0440/#preceding-v-character>

# v3.0.4

-   re-release of 3.0.3 after fixing the release process

v3.0.3 (pulled from pypi due to a packaging issue) ======

-   fix #286 - duo an oversight a helper function was returning a
    generator instead of a list

# v3.0.2

-   fix a regression from tag parsing - support for multi-dashed
    prefixes - #284

# v3.0.1

-   fix a regression in setuptools_scm.git.parse - reorder arguments so
    the positional invocation from before works as expected #281

# v3.0.0

-   introduce pre-commit and use black
-   print the origin module to help testing
-   switch to src layout (breaking change)
-   no longer alias tag and parsed_version in order to support
    understanding a version parse failure
-   require parse results to be ScmVersion or None (breaking change)
-   fix #266 by requiring the prefix word to be a word again (breaking
    change as the bug allowed arbitrary prefixes while the original
    feature only allowed words\")
-   introduce an internal config object to allow the configuration for
    tag parsing and prefixes (thanks to \@punkadiddle for introducing it
    and passing it through)

# v2.1.0

-   enhance docs for sphinx usage
-   add symlink support to file finder for git #247 (thanks Stéphane
    Bidoul)
-   enhance tests handling win32 (thanks Stéphane Bidoul)

# v2.0.0

-   fix #237 - correct imports in code examples
-   improve mercurial commit detection (thanks Aaron)
-   breaking change: remove support for setuptools before parsed
    versions
-   reintroduce manifest as the travis deploy can\'t use the file finder
-   reconfigure flake8 for future compatibility with black
-   introduce support for branch name in version metadata and support a
    opt-in simplified semver version scheme

# v1.17.0

-   fix regression in git support - use a function to ensure it works in
    egg installed mode

-   actually fail if file finding fails in order to see broken setups
    instead of generating broken dists

    (thanks Mehdi ABAAKOUK for both)

# v1.16.2

-   fix regression in handling git export ignores (thanks Mehdi
    ABAAKOUK)

# v1.16.1

-   fix regression in support for old setuptools versions (thanks Marco
    Clemencic)

# v1.16.0

-   drop support for eol python versions
-   #214 - fix misuse in surrogate-escape api
-   add the node-and-timestamp local version scheme
-   respect git export ignores
-   avoid shlex.split on windows
-   fix #218 - better handling of mercurial edge-cases with tag commits
    being considered as the tagged commit
-   fix #223 - remove the dependency on the internal `SetuptoolsVersion`
    as it was removed after long-standing deprecation

v1.15.7 ======

-   Fix #174 with #207: Re-use samefile backport as developed in
    jaraco.windows, and only use the backport where samefile is not
    available.

# v1.15.6

-   fix #171 by unpinning the py version to allow a fixed one to get
    installed

# v1.15.5

-   fix #167 by correctly respecting preformatted version metadata from
    PKG-INFO/EGG-INFO

# v1.15.4

-   fix issue #164: iterate all found entry points to avoid errors when
    pip remakes egg-info
-   enhance self-use to enable pip install from github again

# v1.15.3

-   bring back correctly getting our version in the own sdist, finalizes
    #114
-   fix issue #150: strip local components of tags

# v1.15.2

-   fix issue #128: return None when a scm specific parse fails in a
    worktree to ease parse reuse

# v1.15.1

-   fix issue #126: the local part of any tags is discarded when
    guessing new versions
-   minor performance optimization by doing fewer git calls in the usual
    cases

# v1.15.0

-   more sophisticated ignoring of mercurial tag commits when
    considering distance in commits (thanks Petre Mierlutiu)
-   fix issue #114: stop trying to be smart for the sdist and ensure it's
    always correctly using itself
-   update trove classifiers
-   fix issue #84: document using the installed package metadata for
    sphinx
-   fix issue #81: fail more gracious when git/hg are missing
-   address issue #93: provide an experimental api to customize
    behaviour on shallow git repos a custom parse function may pick pre
    parse actions to do when using git

# v1.14.1

- fix #109: when detecting a dirty git workdir

  don't consider untracked file (this was a regression due to #86 in v1.13.1)
- consider the distance 0 when the git node is unknown (happens when you haven't committed anything)

# v1.14.0

-   publish bdist_egg for python 2.6, 2.7 and 3.3-3.5
-   fix issue #107 - dont use node if it is None

# v1.13.1

-   fix issue #86 - detect dirty git workdir without tags

# v1.13.0

-   fix regression caused by the fix of #101
    -   assert types for version dumping
    -   strictly pass all versions through parsed version metadata

# v1.12.0

-   fix issue #97 - add support for mercurial plugins
-   fix issue #101 - write version cache even for pretend version
    (thanks anarcat for reporting and fixing)

# v1.11.1

-   fix issue #88 - better docs for sphinx usage (thanks Jason)
-   fix issue #89 - use normpath to deal with windows (thanks Te-jé
    Rodgers for reporting and fixing)

# v1.11.0

-   always run tag_to_version so in order to handle prefixes on old
    setuptools (thanks to Brian May)
-   drop support for python 3.2
-   extend the error message on missing scm metadata (thanks Markus
    Unterwaditzer)
-   fix bug when using callable version_scheme (thanks Esben Haabendal)

# v1.10.1

-   fix issue #73 - in hg pre commit merge, consider parent1 instead of
    failing

# v1.10.0

-   add support for overriding the version number via the environment
    variable SETUPTOOLS_SCM_PRETEND_VERSION

-   fix issue #63 by adding the `--match` parameter to the git describe
    call and prepare the possibility of passing more options to scm
    backends

-   fix issue #70 and #71 by introducing the parse keyword to specify
    custom scm parsing, it's an expert feature, use with caution

    this change also introduces the setuptools_scm.parse_scm_fallback
    entrypoint which can be used to register custom archive fallbacks

# v1.9.0

- Add `relative_to` parameter to `get_version` function, fixes #44 per #45.

# v1.8.0

- fix issue with setuptools wrong version warnings being printed to standard out. User is informed now by distutils-warnings.
- restructure root finding, we now reliably ignore outer scm and prefer PKG-INFO over scm, fixes #43 and #45

# v1.7.0

- correct the url to github thanks David Szotten
- enhance scm not found errors with a note on git tarballs thanks Markus
- add support for `write_to_template`

# v1.6.0

- bail out early if the scm is missing

  this brings issues with git tarballs and older devpi-client releases
  to light, before we would let the setup stay at version 0.0, now
  there is a ValueError

- properly raise errors on write_to misuse (thanks Te-jé Rodgers)

# v1.5.5

- Fix bug on Python 2 on Windows when environment has unicode fields.

# v1.5.4

- Fix bug on Python 2 when version is loaded from existing metadata.

# v1.5.3

- #28: Fix decoding error when PKG-INFO contains non-ASCII.

# v1.5.2

- add zip_safe flag

# v1.5.1

- fix file access bug I missed in 1.5

# v1.5.0

- moved setuptools integration related code to own file
- support storing version strings into a module/text file using the `write_to` configuration parameter

# v1.4.0

- proper handling for sdist
- fix file-finder failure from windows
- reshuffle docs

# v1.3.0

- support setuptools easy_install egg creation details by hardwire-ing the version in the sdist

# v1.2.0

- enhance self-use

# v1.1.0

- enable self-use

# v1.0.0

- documentation enhancements

# v0.26

- rename to setuptools_scm
- split into package, add lots of entry points for extension
- pluggable version schemes

# v0.25

- fix pep440 support this reshuffles the complete code for version guessing

# v0.24

- don't drop dirty flag on node finding
- fix distance for dirty flagged versions
- use dashes for time again, its normalisation with setuptools
- remove the own version attribute, it was too fragile to test for
- include file finding
- handle edge cases around dirty tagged versions

# v0.23

- windows compatibility fix (thanks stefan) drop samefile since it`s missing in some python2 versions on windows
- add tests to the source tarballs

# v0.22

- windows compatibility fix (thanks stefan) use samefile since it does path normalisation

# v0.21

- fix the own version attribute (thanks stefan)

# v0.20

- fix issue 11: always take git describe long format to avoid the source of the ambiguity
- fix issue 12: add a `__version__` attribute via pkginfo

# v0.19

- configurable next version guessing
- fix distance guessing (thanks stefan)
