File: changes.md

package info (click to toggle)
feature-check 2.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 588 kB
  • sloc: perl: 1,061; python: 1,042; sh: 133; makefile: 111
file content (315 lines) | stat: -rw-r--r-- 12,147 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
<!--
SPDX-FileCopyrightText: Peter Pentchev <roam@ringlet.net>
SPDX-License-Identifier: BSD-2-Clause
-->

# Changelog

All notable changes to the feature-check project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [2.2.0] - 2024-07-29

### Fixes

- Python implementation:
    - intercept `pyparsing` errors and raise our own `ParseError` instead
    - handle separate option values starting with a dash by switching to `click` for
      command-line parsing
- Rust implementation:
    - handle separate option values starting with a dash
    - drop useless calls to `format!` when invoking `anyhow!` and `bail!`
- Testing framework:
    - Python:
        - use `minversion`, not `min_version`, to support Tox 3.x for a while longer
        - add some unit tests using the `hypothesis` library
    - Nix expressions:
        - explicitly invoke `python3.X` instead of `python3` to make sure
          the correct Python version is tested even if a "more preferable"
          one is installed within the Nix environment for some reason

### Additions

- Rust implementation:
    - allow the `Version` struct to be deserialized if needed
- Testing framework:
    - test different prefixes for the features line
    - test for separate option values starting with a dash, e.g.
      `feature-check -O --features`

### Other changes

- Python implementation:
    - let Ruff insist on trailing commas
- Rust implementation:
    - simplify a couple of doc references
    - use `clap_derive` and `serde_derive` as separate crates
- Documentation framework:
    - use `mkdocstrings` 0.25 with no changes
- Testing framework:
    - reuse:
        - use reuse 4.x
        - switch from `.reuse/dep5` to `REUSE.toml`
    - Python:
        - Ruff:
            - use Ruff 0.5.5
            - drop the obsolete `ANN101` and `BLE001` overrides
            - globally override the `DOC501` "exception not documented in
              the docstring" check
            - move the base configuration to `python/ruff-base.toml` and
              the full configuration to `python/pyproject.toml`
            - use the concise output format even in preview mode
        - vendor-import vetox 0.1.4
    - Nix expressions:
        - pass the Perl and Python versions as strings
        - only pass the minor Perl and Python versions, we use
          Perl 5.x and Python 3.x
        - use `uv` and `tox-uv` in the vetox test
        - drop the `py-ver` argument from the `perl-tap` expression
        - use Python 3.12 and Perl 5.38 by default

## [2.1.0] - 2024-02-10

### Semi-incompatible changes

- Python implementation:
    - drop support for Python 3.7, 3.8, and 3.9

### Additions

- Start some `MkDocs` documentation and move the changelog file there.
- Python implementation:
    - declare Python 3.12 and (tentatively) 3.13 as supported
    - rename the `VersionComponent.__cmp__()` method to `cmp()`; Python 3.x has
      never had a `__cmp__()` dunder method, so it is better to expose this one
    - provide a `__hash__()` method for `VersionComponent`
- Rust implementation:
    - implement the `IntoIterator` trait for `&Version` for easier looping
- Testing framework:
    - Python:
        - add tags to the Tox environments for the tox-stages tool
        - add the "reuse" test environment to check the SPDX tags
        - import the `vetox` tool for running Tox in a virtual environment and
          add a Nix shell expression for running it with multiple Python versions

### Other changes

- Switch to yearless copyright notices.
- Switch to SPDX copyright and license tags.
- Python implementation:
    - minor improvements and refactoring to make use of Python 3.10's features
    - switch from setuptools to hatchling for the PEP517 build
    - break the installation and test requirements into separate files
    - use Ruff's isort implementation
    - minor improvements and refactoring suggested by Ruff 0.2.1
    - switch from Black to Ruff for source code formatting
- Rust implementation:
    - minor improvements and refactoring suggested by Clippy
    - Clippy: allow blanket restriction lints and the question mark operator
- Testing framework:
    - Python:
        - drop the Python version from the mypy configuration, we have other
          means of testing with multiple Python versions
        - convert the `tox.ini` file to the Tox 4.x format
        - drop the "flake8" and "pylint" test environments in favor of
          the new "ruff" one
        - use mypy 1.x, pytest 8.x, and reuse 2.x with no changes
        - minor improvements to the Nix expressions for running the Python tests
        - run Ruff in preview mode
- fcheck-testdata:
    - use the `anyhow` and `thiserror` crates instead of `expect-exit` and `quick-error`
    - use the `tracing` crate instead of `config-diag`

## [2.0.0] - 2022-10-12

### Incompatible changes

- Rust implementation:
    - the numeric components of version strings are now unsigned (`u32`),
      whereas before a signed integer type (`i32`) was used
    - parse the examined program's features line into `Version` structs
      instead of free-form strings
    - use the `anyhow` and `thiserror` libraries instead of `quick-error`
      and, for the command-line tool, `expect-exit`; the exported enums and
      structs representing errors returned by the library functions have
      been reimplemented
- Python implementation:
    - use frozen dataclasses instead of reimplementing them poorly
    - introduce the `.version.VersionComponent` and `.version.Version` classes
      that provide an easy-to-use interface for parsing and comparing version
      strings
    - store a `BoolOp` object directly into the parsed `ExprOp` instead of
      referring to the former by a string name stored in the latter

### Semi-incompatible changes

- Python implementation:
    - bump the minimum supported Python version to 3.7:
        - use deferred type annotations, allowing us to use the lowercase type
          names instead of the `typing` generics
        - use `subprocess.run(capture_output=True)` instead of `Popen`
- Rust implementation:
    - use a `Termination` trait for the `main()` exit code and specify
      a minimum Rust version of 1.61

### Additions

- Add an EditorConfig definitions file.
- Python implementation:
    - declare Python 3.10 and 3.11 as supported versions
- Rust implementation:
    - add the `run-clippy.sh` tool to run a lot of diagnostic checks
- Testing framework:
    - add Nix shell expressions for running the test suites for the Perl and
      Python implementations in a clean ("pure") Nix environment

### Other changes

- Rust implementation:
    - refactor a lot according to many suggestions from Clippy
    - bump the version of the `expect-exit` dependency to 0.5 for
      the `bool.or_exit()` implementation
    - use a Nom-based parser for the `featurename` and `featurename op version`
      expressions that may be specified on the command line
    - use a Nom-based parser for the output of the examined program
    - keep the `Cargo.lock` file under version control
    - use the `clap` library for command-line arguments parsing
- Python implementation:
    - use black 22 for source code formatting, reformat with 100 characters
      per line
    - move the configuration of more static checkers to the `pyproject.toml`
      file
    - use `pytest.mark.parametrize()` instead of `ddt` for simpler tests
    - use a pyparsing-based parser for the `featurename` and
      `featurename op version` expressions that may be specified on
      the command line
    - use a pyparsing-based parser for the output of the examined program
    - drop a `type: ignore` comment for a bug fixed in the `mypy` tool
    - fix the `python/3/feature-check.sh` wrapper so that it does the right
      thing if the `PYTHONPATH` environment variable is already set
- Testing framework:
    - be more permissive when looking for the program's usage message in
      the incorrect command-line options output
    - skip some of the program usage message tests for the Rust implementation,
      too, since the `clap` library can format the text in different ways

## [1.0.1] - 2021-12-17

### Additions

- Python implementation:
    - add tests for comparisons against beta versions of features
    - actually install the py.typed marker file via the declarative
      setuptools configuration
- Rust implementation:
    - code clean-up:
        - add the `html_root_url` doc attribute

### Other changes

- Use common test definitions for the various implementations,
  generated and kept in sync via the new fcheck-testdata internal tool.
- Python implementation:
    - code clean-up:
        - add a version to the dependency on the "hacking" Python library in
          the tox.ini test definitions to help out pip's resolver
        - use f-strings instead of str.format()
        - use black's default line length of 88 characters
- Rust implementation:
    - code clean-up:
        - honor clippy's "needless borrow" suggestions
        - drop an unused internal structure field
        - get the crate version string from the Cargo manifest, one less place
          to update when bumping the version
        - move the module-level docs after the copyright notices
    - declare compatibility with the Rust 2021 edition with no changes
    - use the quick-error crate instead of writing boilerplate code

## [1.0.0] - 2021-06-24

### Incompatible changes

- Python implementation:
    - drop Python 2.x support

### Fixes

- Perl implementation:
    - fix a 2 < 10 version int/string bug
    - fix a 3.0.beta2 < 3.0 version int/string bug

### Additions

- Add a Rust implementation.

### Other changes

- Python implementation:
    - rework as more idiomatic Python 3.x
    - switch to a declarative setuptools config
    - add a PEP 517 pyproject.toml definition
    - reformat the source code using black
    - push the source into a src/ subdirectory

## [0.2.2] - 2019-01-09

### Fixes

- Fix the Python command-line tool's use of the standard Python
  JSON module if simplejson is not installed.

### Other changes

- Remove two unnecessary "pass" statements since the functions
  have a doc-string that serves as a null body.

## [0.2.1] - 2018-11-23

### Other changes

- Build universal Python wheels.
- Do not require the Python typing module, only use it when it is
  available, e.g. during type checking tests.

## [0.2.0] - 2018-11-22

### Additions

- Reorganize the Python implementation:
    - add flake8 and pylint checks
    - add some simple unit tests
    - add type hints

### Other changes

- Reorganize the Python implementation:
    - break it into modules

## [0.1.1] - 2018-05-08

### Fixes

- Perl 5.10 does not understand the ellipsis unimplemented statement,
  so replace it with a die() statement with an internal error message

## [0.1.0] - 2018-04-22

### Started

- first public release

[Unreleased]: https://gitlab.com/ppentchev/feature-check/-/compare/release%2F2.2.0...master
[2.2.0]: https://gitlab.com/ppentchev/feature-check/-/compare/release%2F2.1.0...release%2F2.2.0
[2.1.0]: https://gitlab.com/ppentchev/feature-check/-/compare/release%2F2.0.0...release%2F2.1.0
[2.0.0]: https://gitlab.com/ppentchev/feature-check/-/compare/release%2F1.0.1...release%2F2.0.0
[1.0.1]: https://gitlab.com/ppentchev/feature-check/-/compare/release%2F1.0.0...release%2F1.0.1
[1.0.0]: https://gitlab.com/ppentchev/feature-check/-/compare/release%2F0.2.2...release%2F1.0.0
[0.2.2]: https://gitlab.com/ppentchev/feature-check/-/compare/release%2F0.2.1...release%2F0.2.2
[0.2.1]: https://gitlab.com/ppentchev/feature-check/-/compare/release%2F0.2.0...release%2F0.2.1
[0.2.0]: https://gitlab.com/ppentchev/feature-check/-/compare/release%2F0.1.1...release%2F0.2.0
[0.1.1]: https://gitlab.com/ppentchev/feature-check/-/compare/release%2F0.1.0...release%2F0.1.1
[0.1.0]: https://gitlab.com/ppentchev/feature-check/-/tags/release%2F0.1.0