# Changelog

<!-- towncrier release notes start -->

## 10.2.0 (2026-06-24)

### Added

- Restore Python 3.8 and 3.9 support, re-enabling use as a build dependency for projects like scikit-build that still support these versions. ([#1445](https://github.com/pypa/setuptools-scm/issues/1445))


### Miscellaneous

- Move PKG-INFO discovery tests from vcs-versioning to setuptools-scm where the entry points are registered. ([#1446](https://github.com/pypa/setuptools-scm/issues/1446))

## 10.1.2 (2026-06-22)

### Fixed

- Fix DeprecationWarning leak by threading VcsEnvironment through VersionInferenceConfig and using env.make_reader() in _should_write_to_source. ([#1424](https://github.com/pypa/setuptools-scm/issues/1424))

## 10.1.1 (2026-06-22)

### Fixed

- Update CI to use PyPy 3.11 as cryptography has no PyPy 3.10 build available ([#1421](https://github.com/pypa/setuptools-scm/issues/1421))

## 10.1.0 (2026-06-22)

### Added

- Add backward-compatible shims in ``setuptools_scm.git``, ``setuptools_scm.hg``, ``setuptools_scm.hg_git``, and ``setuptools_scm.scm_workdir`` so that external code calling ``get_scm_version(config)`` or ``run_describe(config)`` with an explicit ``Configuration`` continues to work. The shim automatically wires ``_config`` and ``VcsEnvironment`` onto the workdir. ([#compat-shims](https://github.com/pypa/setuptools-scm/issues/compat-shims))
- Write ``scm_version.json`` and ``scm_file_list.json`` into egg-info directories during ``egg_info``, enabling sdist fallback version inference when no VCS is present. Add ``ScmEggInfoMixin`` for workdir-based file finding in ``find_sources()``. ([#egg-info-metadata](https://github.com/pypa/setuptools-scm/issues/egg-info-metadata))
- Add `write_to_source` pyproject.toml option to control whether version files are written to the source tree. When unset, a deprecation warning advises setting it explicitly before the default changes in a future major release. The `SETUPTOOLS_SCM_WRITE_TO_SOURCE` environment variable overrides this setting. ([#1301](https://github.com/pypa/setuptools-scm/issues/1301))
- Adopt the workdir-centric pipeline from vcs-versioning: version discovery now follows an explicit ``env → config → workdir → version`` chain instead of relying on ambient globals and ``parse`` entry points. The ``egg_info`` command writes ``scm_version.json`` and ``scm_file_list.json`` metadata so sdists can infer versions without a VCS checkout. Requires ``vcs-versioning >= 2.0.0.dev0``. ([#1378](https://github.com/pypa/setuptools-scm/issues/1378))


### Fixed

- Fix worktree file listing test to expect relative paths from the file finder. The test now passes on Linux; Windows remains xfail due to a subprocess limitation with worktree directories. ([#620](https://github.com/pypa/setuptools-scm/issues/620))
- Remove the `_warn_on_old_setuptools()` check that incorrectly warned when a custom build-backend caused `setuptools.__version__` to return the project version instead of setuptools' version. The minimum setuptools version is now enforced via build-system requirements. ([#1192](https://github.com/pypa/setuptools-scm/issues/1192))
- Wrap version in ``setuptools.sic()`` when ``normalize = false`` to prevent setuptools from re-normalizing the version after our hook returns. This preserves CalVer zero-padding (e.g. ``2024.01.05``) and other non-canonical version strings in ``dist.metadata.version``. ([#1354](https://github.com/pypa/setuptools-scm/issues/1354))
- Skip writing non-package version files to build_lib, fixing incorrect inclusion of root-level version files in wheels. ([#1364](https://github.com/pypa/setuptools-scm/issues/1364))


### Documentation

- Rewrite the GitHub Actions CI/CD example to use a dedicated build job
  (via `build-and-inspect-python-package`) and OIDC Trusted Publishers
  instead of building in publishing jobs with long-lived API tokens. ([#1215](https://github.com/pypa/setuptools-scm/issues/1215))

## 10.0.5 (2026-03-27)

### Fixed

- Allow `dump_version()` deprecation warning to be silenced by passing `scm_version=None`. ([#1286](https://github.com/pypa/setuptools-scm/issues/1286))
- Remove `[tool.uv.sources]` from `setuptools-scm/pyproject.toml` to fix sdist builds outside the workspace — the workspace root already declares the source mapping for development. ([#1330](https://github.com/pypa/setuptools-scm/issues/1330))

## 10.0.4 (2026-03-27)

### Fixed

- Anchor ``get_version`` in ``setup.py`` with ``relative_to`` and ``fallback_root`` so SCM fallbacks (e.g. ``PKG-INFO``) do not resolve against the wrong directory when the build cwd is the workspace or repo root. ([#1302](https://github.com/pypa/setuptools-scm/issues/1302))
- Enter ``GlobalOverrides`` for ``SETUPTOOLS_SCM`` when using ``setuptools_scm.get_version`` / ``_get_version``, avoiding implicit context warnings for direct API callers. ([#1314](https://github.com/pypa/setuptools-scm/issues/1314))


### Miscellaneous

- Upgrade pre-commit hooks (Ruff, mypy, codespell), align locked Ruff with hooks, and add Ruff per-file configuration for setuptools_scm re-export modules. ([#1311](https://github.com/pypa/setuptools-scm/issues/1311))

## 10.0.3 (2026-03-26)

### Fixed

- Remove monorepo-only ``../vcs-versioning/src`` from ``build-system.backend-path`` so sdists install under PEP 517 (paths must stay inside the source tree). ([#1306](https://github.com/pypa/setuptools-scm/issues/1306))


### Miscellaneous

- Add `griffecli` to test dependencies so the API stability check keeps working after the Griffe CLI was split into a separate package. ([#1310](https://github.com/pypa/setuptools-scm/issues/1310))

## 10.0.2 (2026-03-25)

### Fixed

- Fix version file not generated for editable installs. Version files are now written to the source tree by default during inference (restoring pre-10.x behavior), and also registered as ``build_py`` outputs so strict editable installs include them in the persistent auxiliary directory. Set ``SETUPTOOLS_SCM_WRITE_TO_SOURCE=0`` to disable source-tree writing (e.g., for read-only source directories). ([#1298](https://github.com/pypa/setuptools-scm/issues/1298))

## 10.0.1 (2026-03-09)

### Miscellaneous

- Simplify release tag creation to use a single ``createRelease`` API call instead of separate ``createTag``/``createRef``/``createRelease`` calls, avoiding dangling tag objects on partial failures. ([#release-pipeline](https://github.com/pypa/setuptools-scm/issues/release-pipeline))

## 10.0.0 (2026-02-26)

### Removed

- Drop Python 3.8 and 3.9 support. Minimum Python version is now 3.10. ([#1228](https://github.com/pypa/setuptools-scm/issues/1228))


### Added

- setuptools-scm now depends on vcs-versioning for core version inference logic. This enables other build backends to use the same version inference without setuptools dependency. ([#1228](https://github.com/pypa/setuptools-scm/issues/1228))
- Version files (``write_to`` and ``version_file``) are now written to the build directory
  during ``build_py`` instead of the source tree during version inference.
  This enables installing packages from read-only source directories (e.g., Bazel builds).

  Path transformation is automatically applied for ``src/`` layouts - a configured path like
  ``src/mypackage/_version.py`` is correctly written to ``mypackage/_version.py`` in the
  build directory based on the ``package_dir`` configuration.

  To restore the old behavior of writing version files at inference time (useful for
  development workflows), set the environment variable ``SETUPTOOLS_SCM_WRITE_TO_SOURCE=1``. ([#1252](https://github.com/pypa/setuptools-scm/issues/1252))


### Fixed

- Fix issue #1231: Don't warn about tool.setuptools.dynamic.version conflict when only using file finder without version inference. ([#1231](https://github.com/pypa/setuptools-scm/issues/1231))


### Miscellaneous

- Refactored should_infer from method to standalone function for better code organization. ([#1228](https://github.com/pypa/setuptools-scm/issues/1228))
- Updated mypy version template test to use uvx, ensuring generated version files remain compatible with Python 3.8+ consumers. ([#1228](https://github.com/pypa/setuptools-scm/issues/1228))
- Refactored TestBuildPackageWithExtra into parametrized function with custom INI-based decorator for cleaner test data specification. ([#1228](https://github.com/pypa/setuptools-scm/issues/1228))
- Internal refactoring: modernized type annotations, improved CLI type safety, and enhanced release automation infrastructure. ([#1228](https://github.com/pypa/setuptools-scm/issues/1228))

## v9.2.2

### Fixed

- fix #1231: don't warn about `tool.setuptools.dynamic.version` when only using file finder.
  The warning about combining version guessing with setuptools dynamic versions should only
  be issued when setuptools-scm is performing version inference, not when it's only being
  used for its file finder functionality.


## v9.2.1

### Fixed

- fix #1216: accept and create a warning for usages of `version = attr:` in setuptools config.
  unfortunately dozens of projects cargo-culted that antipattern


## v9.2.0

### Added

- add simplified activation via `setuptools-scm[simple]` extra

  A new streamlined way to enable version inference without requiring a `[tool.setuptools_scm]` section.
  When `setuptools-scm[simple]` is in `build-system.requires` and `version` is in `project.dynamic`,
  version inference is automatically enabled with default settings.


### Removed

- unchecked simplified activation - too many projects use setups where it would fail

### Changed

- refine activation logic and add unittest for the relevant cases instead of trying to speedrun setuptools

## v9.1.1 (yanked)

### Fixed

- fix #1194: correctly handle version keyword when pyproject metadata is missing


## v9.1.0 (yanked)

### Fixed

- complete reiteration of the decision logic for enabling version inference on setuptools_scm

  - shared logic for the important parts
  - proper deferring based in precedence of finalize options vs version keyword
  - unittestable for the parsing parts and the decision steps



## v9.0.3 (yanked)

### Fixed

- fix #1184: verify version is dynamic if the dependency is used as indicator for enabling

## v9.0.2 (yanked)

### Fixed

- fix #1184: in case setuptools-scm is a indirect dependency and no pyproject.toml section exists - don't infer the version


## v9.0.1 (yanked)

### Fixed

- fix #1180: ensure version dumping works when no scm_version is given (problems in downstreams)
- fix #1181: config - reintroduce control over when we expect a section to be present
             as it turns out there's valid use cases where setuptools_scm is not direct part of the dependencies
- add codespell pre-commit hook

## v9.0.0 (yanked)

### Breaking

- fix #1019: pass python version build tags from scm version to results properly

### Added

- add `setuptools-scm` console_scripts entry point to make the CLI directly executable
- make Mercurial command configurable by environment variable `SETUPTOOLS_SCM_HG_COMMAND`
- fix #1099 use file modification times for dirty working directory timestamps instead of current time
- fix #1059: add `SETUPTOOLS_SCM_PRETEND_METADATA` environment variable to override individual ScmVersion fields
- add `scm` parameter support to `get_version()` function for nested SCM configuration
- fix #987: expand documentation on git archival files and add cli tools for good defaults
- fix #311: document github/gitlab ci pipelines that enable auto-upload to test-pypi/pypi
- fix #1022: allow `version_keyword` to override `infer_version` when configuration differs
- fix #554: document `fallback_root` parameter in programmatic usage and configuration


### Changed

- add `pip` to test optional dependencies for improved uv venv compatibility
- migrate to selectable entrypoints for better extensibility
- improve typing for entry_points
- refactor file modification time logic into shared helper function for better maintainability
- reduce complexity of HgWorkdir.get_meta method by extracting focused helper methods
- fix #1150: enable setuptools-scm when we are a build requirement
- feature #1154: add the commit id the the default version file template
- drop scriv
- fix #921: document setuptools version requirements more consistently - 61 as minimum asn 8 as recommended minimum

### Fixed

- fix #1145: ensure GitWorkdir.get_head_date returns consistent UTC dates regardless of local timezone
- fix #687: ensure calendar versioning tests use consistent time context to prevent failures around midnight in non-UTC timezones
- reintroduce Python 3.9 entrypoints shim for compatibility
- fix #1136: update customizing.md to fix missing import
- fix #1001: document the missing version schemes and add examples in the docs
- fix #1115: explicitly document file finder behaviour
- fix #879: add test that validates case different behavior on windows
- migrate git describe command to new scm config
- add support for failing on missing submodules
- fix #279: expand errors when scm can be found upwards and relative_to wasn't used
- fix #577: introduce explicit scmversion node and short node
- fix #1100: add workaround for readthedocs worktress to the docs
- fix #790: document shallow fail for rtd
- fix #474: expand version not found error message to provide clearer guidance about SETUPTOOLS_SCM_PRETEND_VERSION_FOR_* environment variables
- fix #324: document/recommend the v tag prefix
- fix #501: add py.typed
- fix #804: git - use fallback version instead of 0.0 when no version is found at all
- fix #1139: use logging.lastResort instead of a own replica to avoid polluting logging._handlerList
- fix #873: don't infer version in cli if --no-version is given
- fix #535: accept tags from a release action in the gh ui
- fix #1073: explain namespaces for release-branch-semver
- fix #1052: use consistent node hash length across all SCM backends
- fix #1045: reindent the `__all__` in the version template for better readability
- fix #968: harden environment override finding with better normalization and typo suggestions
- fix #846: add support for failing on missing submodules

## v8.3.1

### Fixed

- fixed #1131: allow self-build without importlib_metadata available on python3.9

## v8.3.0

### Fixed

- fix #1013: use modern importlib_metadata in all cases to dedup distribution objects that must shadow based on pythonpath priority
  starting with python 3.10 this is part of python itself

## v8.2.1 (yanked due to legacy python issues)

### Fixed

- fix #1119: also include pre/post release details in version_tuple
- fix #1112: unpin setuptools for own dependencies due to ubuntu lts bugs
- add python 3.13 to the support matrix

## v8.2.0

### Added

- fix #960: add a ``--force-write-version-files`` flag for the cli

### Changed

- fix #950: ensure to pass encodings to io usage
- fix #957: add subprocess timeout control env var
- add sp-repo-review pre-commit hook

### Fixed

- fix #1018: allow non-normalized versions for semver
- fix #1103: respect GIT_CEILING_DIRECTORIES when trying to find git toplevels
- fix #1081: add name normalized pipx entrypoint
- fix #1080: clean pdm from PYTHONPATH to protect mercurial

## v8.1.0

### Changed

- inclusion of `__all__` in autogenerated `version.py` files to aid IDE autoimports

## 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

### Fixed

- 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

### Fixed

- 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

### Fixed

- 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`
- renamed the project from `setuptools_scm` to `setuptools-scm`

### Added

- 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

### Fixed

- 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 handle 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

## v6.3.2

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

## v6.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

## v6.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

### Fixed

- 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

### Fixed

-   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: Reuse 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
    behavior 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
