Skip to content

Commit

Permalink
Release v0.10.0
Browse files Browse the repository at this point in the history
  • Loading branch information
cpburnz committed Aug 31, 2022
1 parent 594176d commit 981559a
Show file tree
Hide file tree
Showing 3 changed files with 127 additions and 53 deletions.
4 changes: 2 additions & 2 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ Change History
==============


0.10.0 (TBD)
------------
0.10.0 (2022-08-30)
-------------------

Major changes:

Expand Down
174 changes: 124 additions & 50 deletions README-dist.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

*pathspec*: Path Specification
==============================
PathSpec
========

*pathspec* is a utility library for pattern matching of file paths. So
far this only includes Git's wildmatch pattern matching which itself is
Expand All @@ -19,7 +19,7 @@ certain files, and ignore others depending on certain conditions::
>>> import pathspec
>>> # The gitignore-style patterns for files to select, but we're including
>>> # instead of ignoring.
>>> spec = """
>>> spec_text = """
...
... # This is a comment because the line begins with a hash: "#"
...
Expand Down Expand Up @@ -51,23 +51,23 @@ certain files, and ignore others depending on certain conditions::
We want to use the ``GitWildMatchPattern`` class to compile our patterns. The
``PathSpec`` class provides an interface around pattern implementations::

>>> spec = pathspec.PathSpec.from_lines(pathspec.patterns.GitWildMatchPattern, spec.splitlines())
>>> spec = pathspec.PathSpec.from_lines(pathspec.patterns.GitWildMatchPattern, spec_text.splitlines())

That may be a mouthful but it allows for additional patterns to be implemented
in the future without them having to deal with anything but matching the paths
sent to them. ``GitWildMatchPattern`` is the implementation of the actual
pattern which internally gets converted into a regular expression.
``PathSpec`` is a simple wrapper around a list of compiled patterns.
pattern which internally gets converted into a regular expression. ``PathSpec``
is a simple wrapper around a list of compiled patterns.

To make things simpler, we can use the registered name for a pattern class
instead of always having to provide a reference to the class itself. The
``GitWildMatchPattern`` class is registered as **gitwildmatch**::

>>> spec = pathspec.PathSpec.from_lines('gitwildmatch', spec.splitlines())
>>> spec = pathspec.PathSpec.from_lines('gitwildmatch', spec_text.splitlines())

If we wanted to manually compile the patterns we can just do the following::

>>> patterns = map(pathspec.patterns.GitWildMatchPattern, spec.splitlines())
>>> patterns = map(pathspec.patterns.GitWildMatchPattern, spec_text.splitlines())
>>> spec = PathSpec(patterns)

``PathSpec.from_lines()`` is simply a class method which does just that.
Expand All @@ -90,6 +90,14 @@ Or check to see if an individual file matches::

>>> is_matched = spec.match_file(file_path)

There is a specialized class, ``pathspec.GitIgnoreSpec``, which more closely
implements the behavior of **gitignore**. This uses ``GitWildMatchPattern``
pattern by default and handles some edge cases differently from the generic
``PathSpec`` class. ``GitIgnoreSpec`` can be used without specifying the pattern
factory::

>>> spec = pathspec.GitIgnoreSpec.from_lines(spec_text.splitlines())


License
-------
Expand All @@ -113,51 +121,117 @@ Source
------

The source code for *pathspec* is available from the GitHub repo
`cpburnz/python-path-specification`_.
`cpburnz/python-pathspec`_.

.. _`cpburnz/python-path-specification`: https://github.com/cpburnz/python-path-specification
.. _`cpburnz/python-pathspec`: https://github.com/cpburnz/python-pathspec


Installation
------------

*pathspec* requires the following packages:
*pathspec* is available for install through `PyPI`_::

- `setuptools`_
pip install pathspec

*pathspec* can be installed from source with::
*pathspec* can also be built from source. The following packages will be
required:

python setup.py install
- `build`_ (>=0.6.0)
- `setuptools`_ (>=40.8.0)

*pathspec* is also available for install through `PyPI`_::
*pathspec* can then be built and installed with::

pip install pathspec
python -m build
pip install dist/pathspec-*-py3-none-any.whl

.. _`setuptools`: https://pypi.python.org/pypi/setuptools
.. _`PyPI`: http://pypi.python.org/pypi/pathspec
.. _`build`: https://pypi.org/project/build/
.. _`setuptools`: https://pypi.org/project/setuptools/


Documentation
-------------

Documentation for *pathspec* is available on `Read the Docs`_.

.. _`Read the Docs`: http://python-path-specification.readthedocs.io
.. _`Read the Docs`: https://python-path-specification.readthedocs.io


Other Languages
---------------

*pathspec* is also available as a `Ruby gem`_.
The related project `pathspec-ruby`_ (by *highb*) provides a similar library as
a `Ruby gem`_.

.. _`Ruby gem`: https://github.com/highb/pathspec-ruby
.. _`pathspec-ruby`: https://github.com/highb/pathspec-ruby
.. _`Ruby gem`: https://rubygems.org/gems/pathspec



Change History
==============


0.10.0 (2022-08-30)
-------------------

Major changes:

- Dropped support of EOL Python 2.7, 3.5, 3.6. See `Issue #47`_.
- The *gitwildmatch* pattern `dir/*` is now handled the same as `dir/`. This means `dir/*` will now match all descendants rather than only direct children. See `Issue #19`_.
- Added `pathspec.GitIgnoreSpec` class (see new features).
- Changed build system to `pyproject.toml`_ and build backend to `setuptools.build_meta`_ which may have unforeseen consequences.
- Renamed GitHub project from `python-path-specification`_ to `python-pathspec`_. See `Issue #35`_.

API changes:

- Deprecated: `pathspec.util.match_files()` is an old function no longer used.
- Deprecated: `pathspec.match_files()` is an old function no longer used.
- Deprecated: `pathspec.util.normalize_files()` is no longer used.
- Deprecated: `pathspec.util.iter_tree()` is an alias for `pathspec.util.iter_tree_files()`.
- Deprecated: `pathspec.iter_tree()` is an alias for `pathspec.util.iter_tree_files()`.
- Deprecated: `pathspec.pattern.Pattern.match()` is no longer used. Use or implement
`pathspec.pattern.Pattern.match_file()`.

New features:

- Added class `pathspec.gitignore.GitIgnoreSpec` (with alias `pathspec.GitIgnoreSpec`) to implement *gitignore* behavior not possible with standard `PathSpec` class. The particular *gitignore* behavior implemented is prioritizing patterns matching the file directly over matching an ancestor directory.

Bug fixes:

- `Issue #19`_: Files inside an ignored sub-directory are not matched.
- `Issue #41`_: Incorrectly (?) matches files inside directories that do match.
- `Issue #51`_: Refactor deprecated unittest aliases for Python 3.11 compatibility.
- `Issue #53`_: Symlink pathspec_meta.py breaks Windows.
- `Issue #54`_: test_util.py uses os.symlink which can fail on Windows.
- `Issue #55`_: Backslashes at start of pattern not handled correctly.
- `Issue #56`_: pyproject.toml: include subpackages in setuptools config
- `Issue #57`_: `!` doesn't exclude files in directories if the pattern doesn't have a trailing slash.

Improvements:

- Support Python 3.10, 3.11.
- Modernize code to Python 3.7.
- `Issue #52`_: match_files() is not a pure generator function, and it impacts tree_*() gravely.


.. _`python-path-specification`: https://github.com/cpburnz/python-path-specification
.. _`python-pathspec`: https://github.com/cpburnz/python-pathspec
.. _`pyproject.toml`: https://pip.pypa.io/en/stable/reference/build-system/pyproject-toml/
.. _`setuptools.build_meta`: https://setuptools.pypa.io/en/latest/build_meta.html
.. _`Issue #19`: https://github.com/cpburnz/python-pathspec/issues/19
.. _`Issue #35`: https://github.com/cpburnz/python-pathspec/issues/35
.. _`Issue #41`: https://github.com/cpburnz/python-pathspec/issues/41
.. _`Issue #47`: https://github.com/cpburnz/python-pathspec/issues/47
.. _`Issue #51`: https://github.com/cpburnz/python-pathspec/pull/51
.. _`Issue #52`: https://github.com/cpburnz/python-pathspec/issues/52
.. _`Issue #53`: https://github.com/cpburnz/python-pathspec/issues/53
.. _`Issue #54`: https://github.com/cpburnz/python-pathspec/issues/54
.. _`Issue #55`: https://github.com/cpburnz/python-pathspec/issues/55
.. _`Issue #56`: https://github.com/cpburnz/python-pathspec/pull/56
.. _`Issue #57`: https://github.com/cpburnz/python-pathspec/issues/57


0.9.0 (2021-07-17)
------------------

Expand All @@ -167,18 +241,18 @@ Change History
- API change: `util.normalize_files()` now returns a `Dict[str, List[pathlike]]` instead of a `Dict[str, pathlike]`.
- Added type hinting.

.. _`Issue #44`: https://github.com/cpburnz/python-path-specification/issues/44
.. _`Issue #45`: https://github.com/cpburnz/python-path-specification/pull/45
.. _`Issue #46`: https://github.com/cpburnz/python-path-specification/issues/46
.. _`Issue #50`: https://github.com/cpburnz/python-path-specification/pull/50
.. _`Issue #44`: https://github.com/cpburnz/python-pathspec/issues/44
.. _`Issue #45`: https://github.com/cpburnz/python-pathspec/pull/45
.. _`Issue #46`: https://github.com/cpburnz/python-pathspec/issues/46
.. _`Issue #50`: https://github.com/cpburnz/python-pathspec/pull/50


0.8.1 (2020-11-07)
------------------

- `Issue #43`_: Add support for addition operator.

.. _`Issue #43`: https://github.com/cpburnz/python-path-specification/pull/43
.. _`Issue #43`: https://github.com/cpburnz/python-pathspec/pull/43


0.8.0 (2020-04-09)
Expand All @@ -191,9 +265,9 @@ Change History
- API change: `match_tree()` has been renamed to `match_tree_files()`. The old name `match_tree()` is still available as an alias.
- API change: `match_tree_files()` now returns symlinks. This is a bug fix but it will change the returned results.

.. _`Issue #30`: https://github.com/cpburnz/python-path-specification/issues/30
.. _`Issue #31`: https://github.com/cpburnz/python-path-specification/issues/31
.. _`Issue #34`: https://github.com/cpburnz/python-path-specification/issues/34
.. _`Issue #30`: https://github.com/cpburnz/python-pathspec/issues/30
.. _`Issue #31`: https://github.com/cpburnz/python-pathspec/issues/31
.. _`Issue #34`: https://github.com/cpburnz/python-pathspec/issues/34


0.7.0 (2019-12-27)
Expand All @@ -202,8 +276,8 @@ Change History
- `Issue #28`_: Add support for Python 3.8, and drop Python 3.4.
- `Issue #29`_: Publish bdist wheel.

.. _`Issue #28`: https://github.com/cpburnz/python-path-specification/pull/28
.. _`Issue #29`: https://github.com/cpburnz/python-path-specification/pull/29
.. _`Issue #28`: https://github.com/cpburnz/python-pathspec/pull/28
.. _`Issue #29`: https://github.com/cpburnz/python-pathspec/pull/29


0.6.0 (2019-10-03)
Expand All @@ -213,9 +287,9 @@ Change History
- `Issue #25`_: Update README.rst.
- `Issue #26`_: Method to escape gitwildmatch.

.. _`Issue #24`: https://github.com/cpburnz/python-path-specification/pull/24
.. _`Issue #25`: https://github.com/cpburnz/python-path-specification/pull/25
.. _`Issue #26`: https://github.com/cpburnz/python-path-specification/pull/26
.. _`Issue #24`: https://github.com/cpburnz/python-pathspec/pull/24
.. _`Issue #25`: https://github.com/cpburnz/python-pathspec/pull/25
.. _`Issue #26`: https://github.com/cpburnz/python-pathspec/pull/26


0.5.9 (2018-09-15)
Expand All @@ -232,15 +306,15 @@ Change History
- Improved byte string handling in Python 3.
- `Issue #22`_: Handle dangling symlinks.

.. _`Issue #22`: https://github.com/cpburnz/python-path-specification/issues/22
.. _`Issue #22`: https://github.com/cpburnz/python-pathspec/issues/22


0.5.7 (2018-08-14)
------------------

- `Issue #21`_: Fix collections deprecation warning.

.. _`Issue #21`: https://github.com/cpburnz/python-path-specification/issues/21
.. _`Issue #21`: https://github.com/cpburnz/python-pathspec/issues/21


0.5.6 (2018-04-06)
Expand All @@ -250,7 +324,7 @@ Change History
- Improved type checking.
- `Issue #20`_: Support current directory prefix.

.. _`Issue #20`: https://github.com/cpburnz/python-path-specification/issues/20
.. _`Issue #20`: https://github.com/cpburnz/python-pathspec/issues/20


0.5.5 (2017-09-09)
Expand All @@ -265,7 +339,7 @@ Change History
- `Issue #17`_: Add link to Ruby implementation of *pathspec*.
- Add sphinx documentation.

.. _`Issue #17`: https://github.com/cpburnz/python-path-specification/pull/17
.. _`Issue #17`: https://github.com/cpburnz/python-pathspec/pull/17


0.5.3 (2017-07-01)
Expand All @@ -275,9 +349,9 @@ Change History
- `Issue #15`_: Include "LICENSE" in source package.
- `Issue #16`_: Support Python 2.6.

.. _`Issue #14`: https://github.com/cpburnz/python-path-specification/issues/14
.. _`Issue #15`: https://github.com/cpburnz/python-path-specification/pull/15
.. _`Issue #16`: https://github.com/cpburnz/python-path-specification/issues/16
.. _`Issue #14`: https://github.com/cpburnz/python-pathspec/issues/14
.. _`Issue #15`: https://github.com/cpburnz/python-pathspec/pull/15
.. _`Issue #16`: https://github.com/cpburnz/python-pathspec/issues/16


0.5.2 (2017-04-04)
Expand All @@ -291,7 +365,7 @@ Change History

- `Issue #13`_: Add equality methods to `PathSpec` and `RegexPattern`.

.. _`Issue #13`: https://github.com/cpburnz/python-path-specification/pull/13
.. _`Issue #13`: https://github.com/cpburnz/python-pathspec/pull/13


0.5.0 (2016-08-22)
Expand All @@ -301,7 +375,7 @@ Change History
- Renamed `gitignore.GitIgnorePattern` to `patterns.gitwildmatch.GitWildMatchPattern`.
- Deprecated `gitignore.GitIgnorePattern`.

.. _`Issue #12`: https://github.com/cpburnz/python-path-specification/issues/12
.. _`Issue #12`: https://github.com/cpburnz/python-pathspec/issues/12


0.4.0 (2016-07-15)
Expand All @@ -310,7 +384,7 @@ Change History
- `Issue #11`_: Support converting patterns into regular expressions without compiling them.
- API change: Subclasses of `RegexPattern` should implement `pattern_to_regex()`.

.. _`Issue #11`: https://github.com/cpburnz/python-path-specification/issues/11
.. _`Issue #11`: https://github.com/cpburnz/python-pathspec/issues/11


0.3.4 (2015-08-24)
Expand All @@ -322,9 +396,9 @@ Change History
- Fixed recursion detection.
- Fixed trivial incompatibility with Python 3.2.

.. _`Issue #7`: https://github.com/cpburnz/python-path-specification/pull/7
.. _`Issue #8`: https://github.com/cpburnz/python-path-specification/pull/8
.. _`Issue #9`: https://github.com/cpburnz/python-path-specification/pull/9
.. _`Issue #7`: https://github.com/cpburnz/python-pathspec/pull/7
.. _`Issue #8`: https://github.com/cpburnz/python-pathspec/pull/8
.. _`Issue #9`: https://github.com/cpburnz/python-pathspec/pull/9


0.3.3 (2014-11-21)
Expand All @@ -341,8 +415,8 @@ Change History
- Improved documentation.
- API change: `spec.match_tree()` and `spec.match_files()` now return iterators instead of sets.

.. _`Issue #5`: https://github.com/cpburnz/python-path-specification/pull/5
.. _`Issue #6`: https://github.com/cpburnz/python-path-specification/issues/6
.. _`Issue #5`: https://github.com/cpburnz/python-pathspec/pull/5
.. _`Issue #6`: https://github.com/cpburnz/python-pathspec/issues/6


0.3.1 (2014-09-17)
Expand All @@ -358,8 +432,8 @@ Change History
- `Issue #4`_: Fixed test for trailing slash in gitignore patterns.
- Added registered patterns.

.. _`Issue #3`: https://github.com/cpburnz/python-path-specification/pull/3
.. _`Issue #4`: https://github.com/cpburnz/python-path-specification/pull/4
.. _`Issue #3`: https://github.com/cpburnz/python-pathspec/pull/3
.. _`Issue #4`: https://github.com/cpburnz/python-pathspec/pull/4


0.2.2 (2013-12-17)
Expand Down
2 changes: 1 addition & 1 deletion pathspec/_meta.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,4 @@
"jack1142 <https://github.com/jack1142>",
]
__license__ = "MPL 2.0"
__version__ = "0.10.0.dev1"
__version__ = "0.10.0"

0 comments on commit 981559a

Please sign in to comment.