commitfmt-linux 0.1.5__py3-none-any.whl → 0.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,314 @@
1
+ Metadata-Version: 2.4
2
+ Name: commitfmt_linux
3
+ Version: 0.3.0
4
+ Summary: Utility for formatting and verifying the commit message.
5
+ Author-email: Mikhael Khrustik <misha@myrt.co>
6
+ License: MIT
7
+ Keywords: git,hook
8
+ Classifier: License :: OSI Approved :: MIT License
9
+ Classifier: Development Status :: 5 - Production/Stable
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Programming Language :: Python :: 3.9
12
+ Classifier: Programming Language :: Python :: 3.10
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Operating System :: POSIX :: Linux
17
+ Requires-Python: >=3.9
18
+ Description-Content-Type: text/markdown
19
+
20
+ <p align="center">
21
+ <img width="350" src="./docs/assets/logo.svg" alt="commitfmt logo" />
22
+ <br />
23
+ <br />
24
+ Utility for formatting and verifying commit messages.
25
+ </p>
26
+
27
+ ---
28
+
29
+ <p align="center">
30
+ <a href="https://github.com/mishamyrt/commitfmt/actions/workflows/qa.yaml">
31
+ <img src="https://github.com/mishamyrt/commitfmt/actions/workflows/qa.yaml/badge.svg" alt="Quality Assurance" />
32
+ </a>
33
+ <a href="https://npmjs.com/package/commitfmt">
34
+ <img src="https://img.shields.io/npm/v/commitfmt.svg?color=red" alt="NPM Version" />
35
+ </a>
36
+ <a href="https://pypi.org/project/commitfmt/">
37
+ <img src="https://img.shields.io/pypi/v/commitfmt.svg?color=blue" alt="PyPI Version" />
38
+ </a>
39
+ </p>
40
+
41
+ It's not a linter. At least not a complete replacement for [commitlint](https://commitlint.js.org), because commitfmt can't prevent you from writing a body or force you to write a description in uppercase (I don't know why you might want to do that), but it will help keep git history clean and readable.
42
+
43
+ By design, commitfmt runs on the `prepare-commit-msg` hook and formats the message according to git standards and [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) in particular.
44
+
45
+ ## Features
46
+
47
+ ### Formatting
48
+
49
+ commitfmt by default transforms a message like this:
50
+
51
+ ```
52
+ feat ( scope , scope ) : add new feature.
53
+ body description
54
+ ```
55
+
56
+ into well-formatted message:
57
+
58
+ ```
59
+ feat(scope, scope): add new feature
60
+
61
+ body description
62
+ ```
63
+
64
+ ### Linting
65
+
66
+ commitfmt can check that developers follow the rules set by the project.
67
+
68
+ For example, check that only allowed types and scopes are used. To do this, add the following to the <nobr>[configuration file](#configuration)</nobr>:
69
+
70
+ ```toml
71
+ [lint.header]
72
+ # Check allowed commit type
73
+ type-enum = ["chore", "ci", "feat", "fix", "refactor", "style", "test"]
74
+ # Check allowed commit scopes
75
+ scope-enum = ["cc", "config", "git", "linter"]
76
+
77
+ [lint.footer]
78
+ # Check required footers
79
+ exists = ["Issue-ID", "Authored-By"]
80
+ ```
81
+
82
+ ### Performance
83
+
84
+ commitfmt is very fast because its code is written in Rust with memory consumption and performance in mind.
85
+
86
+ It natively supports following platforms:
87
+
88
+ | OS | Architecture |
89
+ | --- | --- |
90
+ | macOS | x86_64, arm64 |
91
+ | Windows | x86_64, i686 |
92
+ | Linux | x86_64, i686, arm64 |
93
+
94
+ ## Installation
95
+
96
+ ### Script
97
+
98
+ You can use a simple [script](https://github.com/mishamyrt/commitfmt/blob/refs/heads/main/scripts/install.sh) to install commitfmt.
99
+ It will download the latest version of the binary and install it to the system.
100
+
101
+ ```bash
102
+ # Install latest version
103
+ curl -sSfL https://raw.githubusercontent.com/mishamyrt/commitfmt/refs/heads/main/scripts/install.sh | bash
104
+ ```
105
+
106
+ ### pnpm
107
+
108
+ ```bash
109
+ pnpm add --save-dev commitfmt
110
+ ```
111
+
112
+ ### npm
113
+
114
+ ```bash
115
+ npm install --save-dev commitfmt
116
+ ```
117
+
118
+ ### yarn
119
+
120
+ ```bash
121
+ yarn add --dev commitfmt
122
+ ```
123
+
124
+ ### pip
125
+
126
+ ```bash
127
+ pip install commitfmt
128
+ ```
129
+
130
+ ## Hook
131
+
132
+ After installing the package, you need to add a hook to the `prepare-commit-msg` event. You can use any hook manager.
133
+
134
+ > **Important:** if you are using a pnpm, yarn or any other package manager, you need to run `pnpm commitfmt`, `yarn commitfmt`, etc. instead of `commitfmt`.
135
+
136
+ ### Script
137
+
138
+ You can use a simple script to add a hook.
139
+
140
+ ```bash
141
+ echo "#!/bin/sh" > .git/hooks/prepare-commit-msg
142
+ echo "commitfmt" >> .git/hooks/prepare-commit-msg
143
+ chmod +x .git/hooks/prepare-commit-msg
144
+ ```
145
+
146
+ ### [Lefthook](https://github.com/evilmartians/lefthook)
147
+
148
+ Add to your `lefthook.yml` file:
149
+
150
+ ```yaml
151
+ prepare-commit-msg:
152
+ - name: format commit message
153
+ run: commitfmt
154
+ ```
155
+
156
+ ### [Husky](https://github.com/typicode/husky)
157
+
158
+ Add to your `.husky` folder `prepare-commit-msg` file with the following content:
159
+
160
+ ```bash
161
+ #!/bin/sh
162
+ commitfmt
163
+ ```
164
+
165
+ ## Configuration
166
+
167
+ In commitfmt, you cannot customize basic formatting rules such as extra spaces removal.
168
+
169
+ It is an opinionated formatter and the author has established best practices that should not harm anyone.
170
+
171
+ ### Linting
172
+
173
+ Most of the linting rules are disabled by default. Default config contains 3 rules as they can be safely auto-fixed:
174
+
175
+ ```toml
176
+ [lint.header]
177
+ full-stop = true
178
+
179
+ [lint.body]
180
+ new-line = true
181
+
182
+ [lint.footer]
183
+ breaking-exclamation = true
184
+ ```
185
+
186
+ To enable more rules, create a `commitfmt.toml` or (`.commitfmt.toml`) file in the root of your project. Available lint rules can be found in the [rules.md](https://github.com/mishamyrt/commitfmt/blob/main/crates/commitfmt_linter/docs/rules.md) file.
187
+
188
+ If there is a problem with an enabled rule and it cannot be automatically fixed, the commit process will be aborted.
189
+
190
+ #### Unsafe fixes
191
+
192
+ Some rules may be fixed, but in certain contexts this fix may not be what is desired. For example, adding a full stop to the end of body will be useful in most cases, if there is a log at the end of the message, the period may distort it. You can see which rules have unsafe patches in the same `rules.md` file mentioned above.
193
+
194
+ To enable unsafe fixes, add the following to your config file:
195
+
196
+ ```toml
197
+ [lint]
198
+ unsafe-fixes = true
199
+ ```
200
+
201
+ ### Extending
202
+
203
+ You can extend the configuration of the parent project by adding the `extends` key to your config file:
204
+
205
+ ```toml
206
+ extends = "node_modules/commitfmt-config-standard/commitfmt.toml"
207
+ ```
208
+
209
+ Extension is only possible for the current configuration. If the current configuration extends another configuration, which in turn extends a third configuration, commitfmt will throw an error when trying to load such a configuration.
210
+
211
+ ### Parser Configuration
212
+
213
+ commitfmt can be configured to use custom footer separators and comment symbols for parsing commit messages.
214
+
215
+ #### Footer separators
216
+
217
+ By default, commitfmt uses git's `trailer.separators` configuration to determine which characters separate footer keys from values. You can override this in your config file:
218
+
219
+ ```toml
220
+ footer-separators = ":#"
221
+ ```
222
+
223
+ This allows footers like `Issue-ID: 123` or `Issue-ID #123` to be recognized.
224
+
225
+ #### Comment symbol
226
+
227
+ By default, commitfmt uses git's `core.commentChar` or `core.commentString` configuration to identify comment lines in commit messages. You can override this:
228
+
229
+ ```toml
230
+ comment-symbol = "//"
231
+ ```
232
+
233
+ Lines starting with the comment symbol will be ignored during parsing.
234
+
235
+ ### Additional footers
236
+
237
+ commitfmt can add additional footers to the commit message.
238
+
239
+ #### Value template
240
+
241
+ You can use a template to format the value of the footer. Inside of template expression you can use any shell command available at the `PATH`.
242
+
243
+ For example, to add the `Authored-By` footer with the current user name, add the following to your config file:
244
+
245
+ ```toml
246
+ [additional-footers]
247
+ key = "Authored-By"
248
+ value-template = "{{ echo $USER }}"
249
+ ```
250
+
251
+ #### Branch value pattern
252
+
253
+ You can also add the ticket number from the task tracker to the footer if it is in the branch name:
254
+
255
+ ```toml
256
+ [additional-footers]
257
+ key = "Ticket-ID"
258
+ branch-value-pattern = "(?:.*)/([A-Z0-9-]+)/?(?:.*)"
259
+ ```
260
+
261
+ For example, if your branch name is `feature/CC-123/add-new-feature` or `feature/CC-123`, the `Ticket-ID` footer will be added to the commit message with the value `CC-123`.
262
+
263
+ If the ticket number is not found in the branch name, footer will be skipped.
264
+
265
+ You can use [rustexp](https://rustexp.lpil.uk) to test your pattern.
266
+
267
+ ##### Recipes
268
+
269
+ Examples of patterns for branch names in git flow format:
270
+
271
+ - Jira/YouTrack: `(?:.*)/([A-Z0-9-]+)/?(?:.*)`
272
+ - `feature/CFMT-123`
273
+ - `feature/CFMT-123/add-new-feature`
274
+ - GitHub: `(?:.*)/#?([0-9-]+)/?(?:.*)`
275
+ - `feature/#123`
276
+ - `feature/123`
277
+ - `feature/#123/add-new-feature`
278
+
279
+ #### On conflict
280
+
281
+ If the footer already exists in the commit message, you can specify what to do with it. By default, the footer will be skipped.
282
+
283
+ ```toml
284
+ [additional-footers]
285
+ key = "Ticket-ID"
286
+ branch-value-pattern = "(?:.*)/([A-Z0-9-]+)/?(?:.*)"
287
+ on-conflict = "skip" # skip, append, error
288
+ ```
289
+
290
+ Available options:
291
+
292
+ - `skip` - skip the footer if it already exists
293
+ - `append` - append the footer to the end of the footer list
294
+ - `error` - abort the commit
295
+
296
+ ## Testing
297
+
298
+ To test the configuration and the work of commitfmt, run the following command:
299
+
300
+ ```bash
301
+ echo "chore ( test ) : test commit" | commitfmt
302
+ # or
303
+ cat commit_text.txt | commitfmt
304
+ ```
305
+
306
+ ## History testing
307
+
308
+ To test the history of commits, run the following command:
309
+
310
+ ```bash
311
+ commitfmt --from HEAD~20
312
+ # or
313
+ commitfmt --from 1234567890 --to 1234567890
314
+ ```
@@ -0,0 +1,5 @@
1
+ commitfmt_linux/__init__.py,sha256=N5cpNKEYYrVRlEGVenMAfJyE80zm2znA33zwxjuo0e0,25
2
+ commitfmt_linux-0.3.0.dist-info/METADATA,sha256=dCHzANJfumIq9k-vHx6TLtEolcKm7QJ4tkMHsJkv768,8984
3
+ commitfmt_linux-0.3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
4
+ commitfmt_linux-0.3.0.dist-info/top_level.txt,sha256=KwB-TV2AfS1HLrHQ_it0d9NqEFJv8rKLW0B-x_vRFio,16
5
+ commitfmt_linux-0.3.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (76.0.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,20 +0,0 @@
1
- Metadata-Version: 2.2
2
- Name: commitfmt_linux
3
- Version: 0.1.5
4
- Summary: Utility for formatting and verifying the commit message.
5
- Author-email: Mikhael Khrustik <misha@myrt.co>
6
- License: MIT
7
- Keywords: git,hook
8
- Classifier: License :: OSI Approved :: MIT License
9
- Classifier: Development Status :: 5 - Production/Stable
10
- Classifier: Intended Audience :: Developers
11
- Classifier: Programming Language :: Python :: 3.9
12
- Classifier: Programming Language :: Python :: 3.10
13
- Classifier: Programming Language :: Python :: 3.11
14
- Classifier: Programming Language :: Python :: 3.12
15
- Classifier: Programming Language :: Python :: 3.13
16
- Classifier: Operating System :: POSIX :: Linux
17
- Requires-Python: >=3.9
18
- Description-Content-Type: text/markdown
19
-
20
- # commitfmt python wrapper
@@ -1,5 +0,0 @@
1
- commitfmt_linux/__init__.py,sha256=N5cpNKEYYrVRlEGVenMAfJyE80zm2znA33zwxjuo0e0,25
2
- commitfmt_linux-0.1.5.dist-info/METADATA,sha256=uTWrbP4JiXGrpPe1UcnS6QI_lU5joJnwwk0YV8IEeto,747
3
- commitfmt_linux-0.1.5.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
4
- commitfmt_linux-0.1.5.dist-info/top_level.txt,sha256=KwB-TV2AfS1HLrHQ_it0d9NqEFJv8rKLW0B-x_vRFio,16
5
- commitfmt_linux-0.1.5.dist-info/RECORD,,