wtg-cli 0.3.1__tar.gz → 0.3.2__tar.gz

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.
Files changed (41) hide show
  1. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/Cargo.lock +52 -69
  2. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/Cargo.toml +3 -3
  3. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/PKG-INFO +14 -2
  4. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/README.md +7 -0
  5. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/README.md +7 -0
  6. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/backend/github_backend.rs +1 -1
  7. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/git.rs +2 -4
  8. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/github.rs +3 -4
  9. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/output.rs +8 -26
  10. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/tests/offline.rs +1 -1
  11. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg-python/src/lib.rs +2 -2
  12. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/pyproject.toml +11 -3
  13. wtg_cli-0.3.2/rust-toolchain.toml +4 -0
  14. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/LICENSE +0 -0
  15. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/Cargo.toml +0 -0
  16. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/backend/combined_backend.rs +0 -0
  17. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/backend/git_backend.rs +0 -0
  18. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/backend/mod.rs +0 -0
  19. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/changelog.rs +0 -0
  20. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/cli.rs +0 -0
  21. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/constants.rs +0 -0
  22. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/error.rs +0 -0
  23. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/help.rs +0 -0
  24. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/lib.rs +0 -0
  25. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/main.rs +0 -0
  26. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/notice.rs +0 -0
  27. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/parse_input.rs +0 -0
  28. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/release_filter.rs +0 -0
  29. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/remote.rs +0 -0
  30. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/resolution.rs +0 -0
  31. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/src/semver.rs +0 -0
  32. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/tests/common/mod.rs +0 -0
  33. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/tests/fixtures/test-repo.zip +0 -0
  34. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/tests/integration.rs +0 -0
  35. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/tests/snapshots/integration__integration_identify_file.snap +0 -0
  36. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/tests/snapshots/integration__integration_identify_recent_commit.snap +0 -0
  37. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg/tests/snapshots/integration__integration_identify_tag.snap +0 -0
  38. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/crates/wtg-python/Cargo.toml +0 -0
  39. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/src/wtg_cli/__init__.py +0 -0
  40. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/src/wtg_cli/__main__.py +0 -0
  41. {wtg_cli-0.3.1 → wtg_cli-0.3.2}/src/wtg_cli/cli.py +0 -0
@@ -104,13 +104,13 @@ checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457"
104
104
 
105
105
  [[package]]
106
106
  name = "async-trait"
107
- version = "0.1.89"
107
+ version = "0.1.92"
108
108
  source = "registry+https://github.com/rust-lang/crates.io-index"
109
- checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
109
+ checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667"
110
110
  dependencies = [
111
111
  "proc-macro2",
112
112
  "quote",
113
- "syn",
113
+ "syn 3.0.9",
114
114
  ]
115
115
 
116
116
  [[package]]
@@ -287,7 +287,7 @@ dependencies = [
287
287
  "heck",
288
288
  "proc-macro2",
289
289
  "quote",
290
- "syn",
290
+ "syn 2.0.113",
291
291
  ]
292
292
 
293
293
  [[package]]
@@ -457,7 +457,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
457
457
  dependencies = [
458
458
  "proc-macro2",
459
459
  "quote",
460
- "syn",
460
+ "syn 2.0.113",
461
461
  ]
462
462
 
463
463
  [[package]]
@@ -494,7 +494,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a"
494
494
  dependencies = [
495
495
  "proc-macro2",
496
496
  "quote",
497
- "syn",
497
+ "syn 2.0.113",
498
498
  ]
499
499
 
500
500
  [[package]]
@@ -515,7 +515,7 @@ dependencies = [
515
515
  "convert_case",
516
516
  "proc-macro2",
517
517
  "quote",
518
- "syn",
518
+ "syn 2.0.113",
519
519
  ]
520
520
 
521
521
  [[package]]
@@ -559,7 +559,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
559
559
  dependencies = [
560
560
  "proc-macro2",
561
561
  "quote",
562
- "syn",
562
+ "syn 2.0.113",
563
563
  ]
564
564
 
565
565
  [[package]]
@@ -785,7 +785,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
785
785
  dependencies = [
786
786
  "proc-macro2",
787
787
  "quote",
788
- "syn",
788
+ "syn 2.0.113",
789
789
  ]
790
790
 
791
791
  [[package]]
@@ -1170,15 +1170,6 @@ dependencies = [
1170
1170
  "hashbrown",
1171
1171
  ]
1172
1172
 
1173
- [[package]]
1174
- name = "indoc"
1175
- version = "2.0.7"
1176
- source = "registry+https://github.com/rust-lang/crates.io-index"
1177
- checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
1178
- dependencies = [
1179
- "rustversion",
1180
- ]
1181
-
1182
1173
  [[package]]
1183
1174
  name = "inout"
1184
1175
  version = "0.1.4"
@@ -1243,7 +1234,7 @@ checksum = "e0c84ee7f197eca9a86c6fd6cb771e55eb991632f15f2bc3ca6ec838929e6e78"
1243
1234
  dependencies = [
1244
1235
  "proc-macro2",
1245
1236
  "quote",
1246
- "syn",
1237
+ "syn 2.0.113",
1247
1238
  ]
1248
1239
 
1249
1240
  [[package]]
@@ -1424,15 +1415,6 @@ version = "2.7.6"
1424
1415
  source = "registry+https://github.com/rust-lang/crates.io-index"
1425
1416
  checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
1426
1417
 
1427
- [[package]]
1428
- name = "memoffset"
1429
- version = "0.9.1"
1430
- source = "registry+https://github.com/rust-lang/crates.io-index"
1431
- checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
1432
- dependencies = [
1433
- "autocfg",
1434
- ]
1435
-
1436
1418
  [[package]]
1437
1419
  name = "miniz_oxide"
1438
1420
  version = "0.8.9"
@@ -1694,7 +1676,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
1694
1676
  dependencies = [
1695
1677
  "proc-macro2",
1696
1678
  "quote",
1697
- "syn",
1679
+ "syn 2.0.113",
1698
1680
  ]
1699
1681
 
1700
1682
  [[package]]
@@ -1810,35 +1792,32 @@ dependencies = [
1810
1792
 
1811
1793
  [[package]]
1812
1794
  name = "pyo3"
1813
- version = "0.27.1"
1795
+ version = "0.30.1"
1814
1796
  source = "registry+https://github.com/rust-lang/crates.io-index"
1815
- checksum = "37a6df7eab65fc7bee654a421404947e10a0f7085b6951bf2ea395f4659fb0cf"
1797
+ checksum = "229ca13b8a15bb0d1487b81ab975bfcd97513416499a8312011b6036e42e0de4"
1816
1798
  dependencies = [
1817
- "indoc",
1818
1799
  "libc",
1819
- "memoffset",
1820
1800
  "once_cell",
1821
1801
  "portable-atomic",
1822
1802
  "pyo3-build-config",
1823
1803
  "pyo3-ffi",
1824
1804
  "pyo3-macros",
1825
- "unindent",
1826
1805
  ]
1827
1806
 
1828
1807
  [[package]]
1829
1808
  name = "pyo3-build-config"
1830
- version = "0.27.1"
1809
+ version = "0.30.1"
1831
1810
  source = "registry+https://github.com/rust-lang/crates.io-index"
1832
- checksum = "f77d387774f6f6eec64a004eac0ed525aab7fa1966d94b42f743797b3e395afb"
1811
+ checksum = "70130e2b6dd1ee589a8788026a429561ca5c40fa7a2fa7914c2282eddae24700"
1833
1812
  dependencies = [
1834
1813
  "target-lexicon",
1835
1814
  ]
1836
1815
 
1837
1816
  [[package]]
1838
1817
  name = "pyo3-ffi"
1839
- version = "0.27.1"
1818
+ version = "0.30.1"
1840
1819
  source = "registry+https://github.com/rust-lang/crates.io-index"
1841
- checksum = "2dd13844a4242793e02df3e2ec093f540d948299a6a77ea9ce7afd8623f542be"
1820
+ checksum = "5e7ff73c555c286d212d4ce7e5fbda845a973c4f61bd5f160f5f2c3c2a04d1c4"
1842
1821
  dependencies = [
1843
1822
  "libc",
1844
1823
  "pyo3-build-config",
@@ -1846,27 +1825,26 @@ dependencies = [
1846
1825
 
1847
1826
  [[package]]
1848
1827
  name = "pyo3-macros"
1849
- version = "0.27.1"
1828
+ version = "0.30.1"
1850
1829
  source = "registry+https://github.com/rust-lang/crates.io-index"
1851
- checksum = "eaf8f9f1108270b90d3676b8679586385430e5c0bb78bb5f043f95499c821a71"
1830
+ checksum = "c46d2e5862c7bb8207e3b639f713dda3c499933444784154c11d013c5a691b60"
1852
1831
  dependencies = [
1853
1832
  "proc-macro2",
1854
1833
  "pyo3-macros-backend",
1855
1834
  "quote",
1856
- "syn",
1835
+ "syn 3.0.9",
1857
1836
  ]
1858
1837
 
1859
1838
  [[package]]
1860
1839
  name = "pyo3-macros-backend"
1861
- version = "0.27.1"
1840
+ version = "0.30.1"
1862
1841
  source = "registry+https://github.com/rust-lang/crates.io-index"
1863
- checksum = "70a3b2274450ba5288bc9b8c1b69ff569d1d61189d4bff38f8d22e03d17f932b"
1842
+ checksum = "38b89f066f2ae72a2aef52d1537ca2fcd104440ebfadee06e97aa90738a25b9b"
1864
1843
  dependencies = [
1865
1844
  "heck",
1866
1845
  "proc-macro2",
1867
- "pyo3-build-config",
1868
1846
  "quote",
1869
- "syn",
1847
+ "syn 3.0.9",
1870
1848
  ]
1871
1849
 
1872
1850
  [[package]]
@@ -2038,7 +2016,7 @@ dependencies = [
2038
2016
  "regex",
2039
2017
  "relative-path",
2040
2018
  "rustc_version",
2041
- "syn",
2019
+ "syn 2.0.113",
2042
2020
  "unicode-ident",
2043
2021
  ]
2044
2022
 
@@ -2221,7 +2199,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
2221
2199
  dependencies = [
2222
2200
  "proc-macro2",
2223
2201
  "quote",
2224
- "syn",
2202
+ "syn 2.0.113",
2225
2203
  ]
2226
2204
 
2227
2205
  [[package]]
@@ -2396,7 +2374,7 @@ dependencies = [
2396
2374
  "heck",
2397
2375
  "proc-macro2",
2398
2376
  "quote",
2399
- "syn",
2377
+ "syn 2.0.113",
2400
2378
  ]
2401
2379
 
2402
2380
  [[package]]
@@ -2455,7 +2433,7 @@ dependencies = [
2455
2433
  "heck",
2456
2434
  "proc-macro2",
2457
2435
  "quote",
2458
- "syn",
2436
+ "syn 2.0.113",
2459
2437
  ]
2460
2438
 
2461
2439
  [[package]]
@@ -2475,6 +2453,17 @@ dependencies = [
2475
2453
  "unicode-ident",
2476
2454
  ]
2477
2455
 
2456
+ [[package]]
2457
+ name = "syn"
2458
+ version = "3.0.9"
2459
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2460
+ checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b"
2461
+ dependencies = [
2462
+ "proc-macro2",
2463
+ "quote",
2464
+ "unicode-ident",
2465
+ ]
2466
+
2478
2467
  [[package]]
2479
2468
  name = "sync_wrapper"
2480
2469
  version = "1.0.2"
@@ -2489,7 +2478,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
2489
2478
  dependencies = [
2490
2479
  "proc-macro2",
2491
2480
  "quote",
2492
- "syn",
2481
+ "syn 2.0.113",
2493
2482
  ]
2494
2483
 
2495
2484
  [[package]]
@@ -2538,7 +2527,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
2538
2527
  dependencies = [
2539
2528
  "proc-macro2",
2540
2529
  "quote",
2541
- "syn",
2530
+ "syn 2.0.113",
2542
2531
  ]
2543
2532
 
2544
2533
  [[package]]
@@ -2604,7 +2593,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
2604
2593
  dependencies = [
2605
2594
  "proc-macro2",
2606
2595
  "quote",
2607
- "syn",
2596
+ "syn 2.0.113",
2608
2597
  ]
2609
2598
 
2610
2599
  [[package]]
@@ -2728,7 +2717,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
2728
2717
  dependencies = [
2729
2718
  "proc-macro2",
2730
2719
  "quote",
2731
- "syn",
2720
+ "syn 2.0.113",
2732
2721
  ]
2733
2722
 
2734
2723
  [[package]]
@@ -2776,12 +2765,6 @@ version = "0.2.2"
2776
2765
  source = "registry+https://github.com/rust-lang/crates.io-index"
2777
2766
  checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
2778
2767
 
2779
- [[package]]
2780
- name = "unindent"
2781
- version = "0.2.4"
2782
- source = "registry+https://github.com/rust-lang/crates.io-index"
2783
- checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"
2784
-
2785
2768
  [[package]]
2786
2769
  name = "unsafe-libyaml"
2787
2770
  version = "0.2.11"
@@ -2886,7 +2869,7 @@ dependencies = [
2886
2869
  "bumpalo",
2887
2870
  "proc-macro2",
2888
2871
  "quote",
2889
- "syn",
2872
+ "syn 2.0.113",
2890
2873
  "wasm-bindgen-shared",
2891
2874
  ]
2892
2875
 
@@ -2953,7 +2936,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
2953
2936
  dependencies = [
2954
2937
  "proc-macro2",
2955
2938
  "quote",
2956
- "syn",
2939
+ "syn 2.0.113",
2957
2940
  ]
2958
2941
 
2959
2942
  [[package]]
@@ -2964,7 +2947,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
2964
2947
  dependencies = [
2965
2948
  "proc-macro2",
2966
2949
  "quote",
2967
- "syn",
2950
+ "syn 2.0.113",
2968
2951
  ]
2969
2952
 
2970
2953
  [[package]]
@@ -3179,7 +3162,7 @@ checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
3179
3162
 
3180
3163
  [[package]]
3181
3164
  name = "wtg-cli"
3182
- version = "0.3.1"
3165
+ version = "0.3.2"
3183
3166
  dependencies = [
3184
3167
  "async-trait",
3185
3168
  "base64",
@@ -3207,7 +3190,7 @@ dependencies = [
3207
3190
 
3208
3191
  [[package]]
3209
3192
  name = "wtg-python"
3210
- version = "0.3.1"
3193
+ version = "0.3.2"
3211
3194
  dependencies = [
3212
3195
  "pyo3",
3213
3196
  "wtg-cli",
@@ -3232,7 +3215,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
3232
3215
  dependencies = [
3233
3216
  "proc-macro2",
3234
3217
  "quote",
3235
- "syn",
3218
+ "syn 2.0.113",
3236
3219
  "synstructure",
3237
3220
  ]
3238
3221
 
@@ -3253,7 +3236,7 @@ checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a"
3253
3236
  dependencies = [
3254
3237
  "proc-macro2",
3255
3238
  "quote",
3256
- "syn",
3239
+ "syn 2.0.113",
3257
3240
  ]
3258
3241
 
3259
3242
  [[package]]
@@ -3273,7 +3256,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
3273
3256
  dependencies = [
3274
3257
  "proc-macro2",
3275
3258
  "quote",
3276
- "syn",
3259
+ "syn 2.0.113",
3277
3260
  "synstructure",
3278
3261
  ]
3279
3262
 
@@ -3294,7 +3277,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
3294
3277
  dependencies = [
3295
3278
  "proc-macro2",
3296
3279
  "quote",
3297
- "syn",
3280
+ "syn 2.0.113",
3298
3281
  ]
3299
3282
 
3300
3283
  [[package]]
@@ -3327,7 +3310,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
3327
3310
  dependencies = [
3328
3311
  "proc-macro2",
3329
3312
  "quote",
3330
- "syn",
3313
+ "syn 2.0.113",
3331
3314
  ]
3332
3315
 
3333
3316
  [[package]]
@@ -3,7 +3,7 @@ resolver = "2"
3
3
  members = ["crates/wtg", "crates/wtg-python"]
4
4
 
5
5
  [workspace.package]
6
- version = "0.3.1"
6
+ version = "0.3.2"
7
7
  edition = "2024"
8
8
  description = "A snarky but helpful CLI tool to identify git commits, issues, PRs and file changes, and tell you which release they shipped in"
9
9
  authors = ["Mike Perlov"]
@@ -46,12 +46,12 @@ serde = { version = "1.0", features = ["derive"] }
46
46
  serde_yaml = "0.9"
47
47
  dirs = "6.0"
48
48
  chrono = "0.4"
49
- pyo3 = { version = "0.27", features = ["extension-module"] }
49
+ pyo3 = { version = "0.30.1", features = ["extension-module"] }
50
50
  regex = "1.12"
51
51
  percent-encoding = "2.3"
52
52
  url = "2.5"
53
53
  strum = { version = "0.27.2", features = ["derive", "strum_macros"] }
54
- async-trait = "0.1"
54
+ async-trait = "0.1.92"
55
55
  log = "0.4"
56
56
  env_logger = "0.11"
57
57
 
@@ -1,7 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wtg-cli
3
- Version: 0.3.1
3
+ Version: 0.3.2
4
4
  Classifier: Programming Language :: Python :: 3
5
+ Classifier: Programming Language :: Python :: 3.11
6
+ Classifier: Programming Language :: Python :: 3.12
7
+ Classifier: Programming Language :: Python :: 3.13
8
+ Classifier: Programming Language :: Python :: 3.14
9
+ Classifier: Programming Language :: Python :: 3.15
5
10
  Classifier: Programming Language :: Rust
6
11
  Classifier: License :: OSI Approved :: MIT License
7
12
  Classifier: Operating System :: OS Independent
@@ -10,7 +15,7 @@ License-File: LICENSE
10
15
  Summary: What The Git CLI – snarky Git history sleuth packaged for Python
11
16
  Author: Mike Perlov
12
17
  License: MIT
13
- Requires-Python: >=3.9
18
+ Requires-Python: >=3.11
14
19
  Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
15
20
 
16
21
  # What The Git (wtg) 🔍
@@ -177,3 +182,10 @@ MIT
177
182
 
178
183
  Found a bug? Want to add a snarky message? PRs welcome! Just make sure to keep the snark levels high and the code quality higher.
179
184
 
185
+ <details>
186
+ <summary>Python package compatibility</summary>
187
+
188
+ Python 3.11–3.15 is supported. Prebuilt CPython 3.11–3.15 wheels are available for macOS ARM64, Linux x86_64, and Windows x86_64. Other installations build from source and require a Rust toolchain.
189
+
190
+ </details>
191
+
@@ -161,3 +161,10 @@ MIT
161
161
  ## Contributing
162
162
 
163
163
  Found a bug? Want to add a snarky message? PRs welcome! Just make sure to keep the snark levels high and the code quality higher.
164
+
165
+ <details>
166
+ <summary>Python package compatibility</summary>
167
+
168
+ Python 3.11–3.15 is supported. Prebuilt CPython 3.11–3.15 wheels are available for macOS ARM64, Linux x86_64, and Windows x86_64. Other installations build from source and require a Rust toolchain.
169
+
170
+ </details>
@@ -161,3 +161,10 @@ MIT
161
161
  ## Contributing
162
162
 
163
163
  Found a bug? Want to add a snarky message? PRs welcome! Just make sure to keep the snark levels high and the code quality higher.
164
+
165
+ <details>
166
+ <summary>Python package compatibility</summary>
167
+
168
+ Python 3.11–3.15 is supported. Prebuilt CPython 3.11–3.15 wheels are available for macOS ARM64, Linux x86_64, and Windows x86_64. Other installations build from source and require a Rust toolchain.
169
+
170
+ </details>
@@ -224,7 +224,7 @@ impl Backend for GitHubBackend {
224
224
  .filter(|r| r.created_at.is_some_and(|d| d < current.created_at))
225
225
  .collect();
226
226
 
227
- candidates.sort_by(|a, b| b.created_at.cmp(&a.created_at));
227
+ candidates.sort_by_key(|release| std::cmp::Reverse(release.created_at));
228
228
 
229
229
  if let Some(prev) = candidates.first() {
230
230
  return self.find_tag(&prev.tag_name).await.map(Some);
@@ -249,8 +249,7 @@ impl GitRepo {
249
249
  fn collect_remotes(repo: &Repository) -> Vec<RemoteInfo> {
250
250
  let remote_names: Vec<String> = repo
251
251
  .remotes()
252
- .map(|names| names.iter().flatten().map(str::to_string).collect())
253
- .unwrap_or_default();
252
+ .map_or_default(|names| names.iter().flatten().map(str::to_string).collect());
254
253
 
255
254
  remote_names
256
255
  .into_iter()
@@ -733,8 +732,7 @@ impl GitRepo {
733
732
  self.with_repo(|repo| {
734
733
  Oid::from_str(commit_hash)
735
734
  .and_then(|oid| repo.find_commit(oid))
736
- .map(|c| c.time().seconds())
737
- .unwrap_or(0)
735
+ .map_or(0, |c| c.time().seconds())
738
736
  })
739
737
  }
740
738
 
@@ -32,8 +32,7 @@ impl From<RepoCommit> for CommitInfo {
32
32
 
33
33
  let (author_login, author_url) = commit
34
34
  .author
35
- .map(|author| (Some(author.login), Some(author.html_url.into())))
36
- .unwrap_or_default();
35
+ .map_or_default(|author| (Some(author.login), Some(author.html_url.into())));
37
36
 
38
37
  let date = commit
39
38
  .commit
@@ -171,7 +170,7 @@ impl From<octocrab::models::pulls::PullRequest> for PullRequestInfo {
171
170
  title: pr.title.unwrap_or_default(),
172
171
  body: pr.body,
173
172
  state: format!("{:?}", pr.state),
174
- url: pr.html_url.map(|u| u.to_string()).unwrap_or_default(),
173
+ url: pr.html_url.map_or_default(|u| u.to_string()),
175
174
  merged: pr.merged.unwrap_or(false),
176
175
  merge_commit_sha: pr.merge_commit_sha,
177
176
  author,
@@ -636,7 +635,7 @@ impl GitHubClient {
636
635
  // Sort releases by created_at descending
637
636
  current_page
638
637
  .items
639
- .sort_by(|a, b| b.created_at.cmp(&a.created_at));
638
+ .sort_by_key(|release| std::cmp::Reverse(release.created_at));
640
639
 
641
640
  for release in current_page.items {
642
641
  // Check if this release is too old
@@ -120,12 +120,12 @@ fn display_tag(result: &TagResult) {
120
120
  /// Display enriched info - the main display logic
121
121
  /// Order depends on what the user searched for
122
122
  fn display_enriched(info: EnrichedInfo, filter: &ReleaseFilter) {
123
+ display_identification(&info.entry_point);
124
+ println!();
125
+
123
126
  match &info.entry_point {
124
127
  EntryPoint::IssueNumber(_) => {
125
128
  // User searched for issue - lead with issue
126
- display_identification(&info.entry_point);
127
- println!();
128
-
129
129
  if let Some(issue) = &info.issue {
130
130
  display_issue_section(issue);
131
131
  println!();
@@ -140,18 +140,9 @@ fn display_enriched(info: EnrichedInfo, filter: &ReleaseFilter) {
140
140
  display_commit_section(commit_info, info.pr.as_ref());
141
141
  println!();
142
142
  }
143
-
144
- display_missing_info(&info);
145
-
146
- if info.commit.is_some() {
147
- display_release_info(info.release, filter);
148
- }
149
143
  }
150
144
  EntryPoint::PullRequestNumber(_) => {
151
145
  // User searched for PR - lead with PR
152
- display_identification(&info.entry_point);
153
- println!();
154
-
155
146
  if let Some(pr) = &info.pr {
156
147
  display_pr_section(pr, false); // false = not a fix, just a PR
157
148
  println!();
@@ -161,18 +152,9 @@ fn display_enriched(info: EnrichedInfo, filter: &ReleaseFilter) {
161
152
  display_commit_section(commit_info, info.pr.as_ref());
162
153
  println!();
163
154
  }
164
-
165
- display_missing_info(&info);
166
-
167
- if info.commit.is_some() {
168
- display_release_info(info.release, filter);
169
- }
170
155
  }
171
156
  _ => {
172
157
  // User searched for commit or something else - lead with commit
173
- display_identification(&info.entry_point);
174
- println!();
175
-
176
158
  if let Some(commit_info) = info.commit.as_ref() {
177
159
  display_commit_section(commit_info, info.pr.as_ref());
178
160
  println!();
@@ -187,13 +169,13 @@ fn display_enriched(info: EnrichedInfo, filter: &ReleaseFilter) {
187
169
  display_issue_section(issue);
188
170
  println!();
189
171
  }
172
+ }
173
+ }
190
174
 
191
- display_missing_info(&info);
175
+ display_missing_info(&info);
192
176
 
193
- if info.commit.is_some() {
194
- display_release_info(info.release, filter);
195
- }
196
- }
177
+ if info.commit.is_some() {
178
+ display_release_info(info.release, filter);
197
179
  }
198
180
  }
199
181
 
@@ -109,7 +109,7 @@ async fn test_identify_file(test_repo: TestRepoFixture) {
109
109
  assert_eq!(last_commit.author_name, "Another Author");
110
110
 
111
111
  // Check previous authors (should have at least one - the original author)
112
- assert!(!file_result.file_info.previous_authors.is_empty());
112
+ assert_ne!(file_result.file_info.previous_authors.len(), 0);
113
113
  let prev_author = &file_result.file_info.previous_authors[0];
114
114
  assert_eq!(prev_author.1, "Test User"); // name
115
115
 
@@ -21,8 +21,8 @@ fn run_cli(argv: Vec<String>) -> i32 {
21
21
  }
22
22
  }
23
23
 
24
- #[pymodule]
25
- fn _wtg(_py: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> {
24
+ #[pymodule(name = "_wtg")]
25
+ fn wtg_module(_py: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> {
26
26
  m.add_function(wrap_pyfunction!(run_cli, m)?)?;
27
27
  Ok(())
28
28
  }
@@ -1,5 +1,5 @@
1
1
  [build-system]
2
- requires = ["maturin>=1.6,<2.0"]
2
+ requires = ["maturin>=1.16,<2.0"]
3
3
  build-backend = "maturin"
4
4
 
5
5
  [project]
@@ -7,11 +7,16 @@ name = "wtg-cli"
7
7
  dynamic = ["version"]
8
8
  description = "What The Git CLI – snarky Git history sleuth packaged for Python"
9
9
  readme = "README.md"
10
- requires-python = ">=3.9"
10
+ requires-python = ">=3.11"
11
11
  authors = [{ name = "Mike Perlov" }]
12
12
  license = { text = "MIT" }
13
13
  classifiers = [
14
14
  "Programming Language :: Python :: 3",
15
+ "Programming Language :: Python :: 3.11",
16
+ "Programming Language :: Python :: 3.12",
17
+ "Programming Language :: Python :: 3.13",
18
+ "Programming Language :: Python :: 3.14",
19
+ "Programming Language :: Python :: 3.15",
15
20
  "Programming Language :: Rust",
16
21
  "License :: OSI Approved :: MIT License",
17
22
  "Operating System :: OS Independent",
@@ -28,7 +33,10 @@ python-source = "src"
28
33
  bindings = "pyo3"
29
34
  strip = true
30
35
  profile = "release"
31
- include = [{ path = "LICENSE", format = "sdist" }]
36
+ include = [
37
+ { path = "LICENSE", format = "sdist" },
38
+ { path = "rust-toolchain.toml", format = "sdist" },
39
+ ]
32
40
 
33
41
  [tool.uv]
34
42
  cache-keys = [{ file = "crates/wtg-python/Cargo.toml" }]
@@ -0,0 +1,4 @@
1
+ [toolchain]
2
+ channel = "1.100.0"
3
+ components = ["clippy", "rustfmt"]
4
+ profile = "minimal"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes