git-goose 0.2.3__tar.gz → 0.3.1__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 (61) hide show
  1. {git_goose-0.2.3 → git_goose-0.3.1}/.github/workflows/ci.yaml +3 -3
  2. {git_goose-0.2.3 → git_goose-0.3.1}/.github/workflows/release.yaml +1 -1
  3. git_goose-0.3.1/.goose/node/manifest.json +1 -0
  4. git_goose-0.3.1/.goose/python/manifest.json +1 -0
  5. git_goose-0.3.1/.goose/python/requirements.txt +25 -0
  6. git_goose-0.3.1/.goose/type-check/manifest.json +1 -0
  7. {git_goose-0.2.3 → git_goose-0.3.1}/.goose/type-check/requirements.txt +33 -28
  8. {git_goose-0.2.3 → git_goose-0.3.1}/Dockerfile +5 -5
  9. {git_goose-0.2.3 → git_goose-0.3.1}/PKG-INFO +6 -6
  10. {git_goose-0.2.3 → git_goose-0.3.1}/README.md +3 -3
  11. {git_goose-0.2.3 → git_goose-0.3.1}/goose.yaml +3 -3
  12. {git_goose-0.2.3 → git_goose-0.3.1}/pyproject.toml +3 -3
  13. {git_goose-0.2.3 → git_goose-0.3.1}/requirements.txt +4 -4
  14. {git_goose-0.2.3 → git_goose-0.3.1}/src/git_goose.egg-info/PKG-INFO +6 -6
  15. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/__main__.py +103 -0
  16. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/_version.py +2 -2
  17. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/backend/node.py +1 -0
  18. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/backend/python.py +1 -0
  19. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/environment.py +45 -9
  20. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/manifest.py +7 -0
  21. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/scheduler.py +4 -6
  22. git_goose-0.2.3/.goose/node/manifest.json +0 -1
  23. git_goose-0.2.3/.goose/python/manifest.json +0 -1
  24. git_goose-0.2.3/.goose/python/requirements.txt +0 -76
  25. git_goose-0.2.3/.goose/type-check/manifest.json +0 -1
  26. {git_goose-0.2.3 → git_goose-0.3.1}/.dockerignore +0 -0
  27. {git_goose-0.2.3 → git_goose-0.3.1}/.editorconfig +0 -0
  28. {git_goose-0.2.3 → git_goose-0.3.1}/.github/dependabot.yml +0 -0
  29. {git_goose-0.2.3 → git_goose-0.3.1}/.gitignore +0 -0
  30. {git_goose-0.2.3 → git_goose-0.3.1}/.goose/node/package-lock.json +0 -0
  31. {git_goose-0.2.3 → git_goose-0.3.1}/.goose/node/package.json +0 -0
  32. {git_goose-0.2.3 → git_goose-0.3.1}/LICENSE +0 -0
  33. {git_goose-0.2.3 → git_goose-0.3.1}/Makefile +0 -0
  34. {git_goose-0.2.3 → git_goose-0.3.1}/ruff.toml +0 -0
  35. {git_goose-0.2.3 → git_goose-0.3.1}/setup.cfg +0 -0
  36. {git_goose-0.2.3 → git_goose-0.3.1}/src/git_goose.egg-info/SOURCES.txt +0 -0
  37. {git_goose-0.2.3 → git_goose-0.3.1}/src/git_goose.egg-info/dependency_links.txt +0 -0
  38. {git_goose-0.2.3 → git_goose-0.3.1}/src/git_goose.egg-info/requires.txt +0 -0
  39. {git_goose-0.2.3 → git_goose-0.3.1}/src/git_goose.egg-info/top_level.txt +0 -0
  40. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/__init__.py +0 -0
  41. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/_utils/__init__.py +0 -0
  42. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/_utils/pydantic.py +0 -0
  43. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/asyncio.py +0 -0
  44. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/backend/__init__.py +0 -0
  45. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/backend/base.py +0 -0
  46. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/backend/index.py +0 -0
  47. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/config.py +0 -0
  48. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/context.py +0 -0
  49. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/executable_unit.py +0 -0
  50. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/filter.py +0 -0
  51. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/git/__init__.py +0 -0
  52. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/git/shared.py +0 -0
  53. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/git/status.py +0 -0
  54. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/orphan_environments.py +0 -0
  55. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/parallel.py +0 -0
  56. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/paths.py +0 -0
  57. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/process.py +0 -0
  58. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/py.typed +0 -0
  59. {git_goose-0.2.3 → git_goose-0.3.1}/src/goose/targets.py +0 -0
  60. {git_goose-0.2.3 → git_goose-0.3.1}/tests/__init__.py +0 -0
  61. {git_goose-0.2.3 → git_goose-0.3.1}/tests/test_targets.py +0 -0
@@ -23,7 +23,7 @@ jobs:
23
23
  - uses: actions/checkout@v4
24
24
  - uses: actions/setup-python@v5
25
25
  with:
26
- python-version: "3.12"
26
+ python-version: "3.13"
27
27
  cache: pip
28
28
  cache-dependency-path: .goose/**/manifest.json
29
29
  check-latest: true
@@ -31,9 +31,9 @@ jobs:
31
31
  uses: actions/cache@v4
32
32
  with:
33
33
  path: ~/.cache/goose
34
- key: ${{ runner.os }}-goose-3.12-${{ hashFiles('.goose/**/manifest.json') }}
34
+ key: ${{ runner.os }}-goose-3.13-${{ hashFiles('.goose/**/manifest.json') }}
35
35
  restore-keys: |
36
- ${{ runner.os }}-goose-3.12
36
+ ${{ runner.os }}-goose-3.13
37
37
  ${{ runner.os }}-goose
38
38
  - run: python3 -m pip install --require-hashes --no-dependencies -r requirements.txt
39
39
  - run: python3 -m pip install --no-dependencies .
@@ -17,7 +17,7 @@ jobs:
17
17
  - uses: actions/checkout@v4
18
18
  - uses: actions/setup-python@v5
19
19
  with:
20
- python-version: 3.12
20
+ python-version: 3.13
21
21
  cache: pip
22
22
  cache-dependency-path: pyproject.toml
23
23
  check-latest: true
@@ -0,0 +1 @@
1
+ {"source_ecosystem":{"language":"node","version":"23.0.0"},"source_dependencies":["prettier"],"lock_files":[{"path":"package-lock.json","checksum":"sha256:c72f3206d345d7285c175a9363dc4d7efbb56729dd02e4828c9356ecfaaad0ca"},{"path":"package.json","checksum":"sha256:c5008cb00d6009f6d901cfe35523169a3deb91979b71fce65d6ac79fdace548b"}],"checksum":"sha256:e130609d6f3cb3681a612f936c5fac5c409019253d18071772d86949766d0bbb"}
@@ -0,0 +1 @@
1
+ {"source_ecosystem":{"language":"python","version":"3.13"},"source_dependencies":["pre-commit-hooks","ruff"],"lock_files":[{"path":"requirements.txt","checksum":"sha256:f649a1f943c1cfbd71571de02aedcf7d88e7427c0e985ec26f399d8c40970c8e"}],"checksum":"sha256:2087aaf2b95093aae8f2cfef2b6a55aaddd9e94d1814b268ea2fd699f0a10f11"}
@@ -0,0 +1,25 @@
1
+ pre-commit-hooks==5.0.0 \
2
+ --hash=sha256:10626959a9eaf602fbfc22bc61b6e75801436f82326bfcee82bb1f2fc4bc646e \
3
+ --hash=sha256:8d71cfb582c5c314a5498d94e0104b6567a8b93fb35903ea845c491f4e290a7a
4
+ ruamel-yaml==0.18.6 \
5
+ --hash=sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636 \
6
+ --hash=sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b
7
+ ruff==0.7.0 \
8
+ --hash=sha256:0cdf20c2b6ff98e37df47b2b0bd3a34aaa155f59a11182c1303cce79be715628 \
9
+ --hash=sha256:10842f69c245e78d6adec7e1db0a7d9ddc2fff0621d730e61657b64fa36f207e \
10
+ --hash=sha256:194d6c46c98c73949a106425ed40a576f52291c12bc21399eb8f13a0f7073495 \
11
+ --hash=sha256:1eb54986f770f49edb14f71d33312d79e00e629a57387382200b1ef12d6a4ef9 \
12
+ --hash=sha256:211d877674e9373d4bb0f1c80f97a0201c61bcd1e9d045b6e9726adc42c156aa \
13
+ --hash=sha256:214b88498684e20b6b2b8852c01d50f0651f3cc6118dfa113b4def9f14faaf06 \
14
+ --hash=sha256:47a86360cf62d9cd53ebfb0b5eb0e882193fc191c6d717e8bef4462bc3b9ea2b \
15
+ --hash=sha256:496494d350c7fdeb36ca4ef1c9f21d80d182423718782222c29b3e72b3512737 \
16
+ --hash=sha256:4b406c2dce5be9bad59f2de26139a86017a517e6bcd2688da515481c05a2cb11 \
17
+ --hash=sha256:630fce3fefe9844e91ea5bbf7ceadab4f9981f42b704fae011bb8efcaf5d84be \
18
+ --hash=sha256:82c2579b82b9973a110fab281860403b397c08c403de92de19568f32f7178598 \
19
+ --hash=sha256:9af971fe85dcd5eaed8f585ddbc6bdbe8c217fb8fcf510ea6bca5bdfff56040e \
20
+ --hash=sha256:ab7d98c7eed355166f367597e513a6c82408df4181a937628dbec79abb2a1fe4 \
21
+ --hash=sha256:b641c7f16939b7d24b7bfc0be4102c56562a18281f84f635604e8a6989948914 \
22
+ --hash=sha256:d71672336e46b34e0c90a790afeac8a31954fd42872c1f6adaea1dff76fd44f9 \
23
+ --hash=sha256:dc452ba6f2bb9cf8726a84aa877061a2462afe9ae0ea1d411c53d226661c601d \
24
+ --hash=sha256:f6c968509f767776f524a8430426539587d5ec5c662f6addb6aa25bc2e8195ec \
25
+ --hash=sha256:ff4aabfbaaba880e85d394603b9e75d32b0693152e16fa659a3064a85df7fce2
@@ -0,0 +1 @@
1
+ {"source_ecosystem":{"language":"python","version":"3.13"},"source_dependencies":["identify==2.6.0","mypy","pydantic==2.8.2","rich==13.7.1","typer==0.12.3","types-pyyaml==6.0.12.20240724"],"lock_files":[{"path":"requirements.txt","checksum":"sha256:30a32dcd426ab99471b1d43f5a575db3d8df2b5b64ce3dc756ce730f7f0b388c"}],"checksum":"sha256:40b81307cd69b710976f92453cdf92ef743fdd9882eabea9c6b6b6688779a516"}
@@ -13,34 +13,39 @@ markdown-it-py==3.0.0 \
13
13
  mdurl==0.1.2 \
14
14
  --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
15
15
  --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
16
- mypy==1.11.1 \
17
- --hash=sha256:0624bdb940255d2dd24e829d99a13cfeb72e4e9031f9492148f410ed30bcab54 \
18
- --hash=sha256:0bc71d1fb27a428139dd78621953effe0d208aed9857cb08d002280b0422003a \
19
- --hash=sha256:0bd53faf56de9643336aeea1c925012837432b5faf1701ccca7fde70166ccf72 \
20
- --hash=sha256:11965c2f571ded6239977b14deebd3f4c3abd9a92398712d6da3a772974fad69 \
21
- --hash=sha256:1a81cf05975fd61aec5ae16501a091cfb9f605dc3e3c878c0da32f250b74760b \
22
- --hash=sha256:2684d3f693073ab89d76da8e3921883019ea8a3ec20fa5d8ecca6a2db4c54bbe \
23
- --hash=sha256:2c63350af88f43a66d3dfeeeb8d77af34a4f07d760b9eb3a8697f0386c7590b4 \
24
- --hash=sha256:45df906e8b6804ef4b666af29a87ad9f5921aad091c79cc38e12198e220beabd \
25
- --hash=sha256:4c956b49c5d865394d62941b109728c5c596a415e9c5b2be663dd26a1ff07bc0 \
26
- --hash=sha256:64f4a90e3ea07f590c5bcf9029035cf0efeae5ba8be511a8caada1a4893f5525 \
27
- --hash=sha256:749fd3213916f1751fff995fccf20c6195cae941dc968f3aaadf9bb4e430e5a2 \
28
- --hash=sha256:79c07eb282cb457473add5052b63925e5cc97dfab9812ee65a7c7ab5e3cb551c \
29
- --hash=sha256:7b6343d338390bb946d449677726edf60102a1c96079b4f002dedff375953fc5 \
30
- --hash=sha256:886c9dbecc87b9516eff294541bf7f3655722bf22bb898ee06985cd7269898de \
31
- --hash=sha256:a2b43895a0f8154df6519706d9bca8280cda52d3d9d1514b2d9c3e26792a0b74 \
32
- --hash=sha256:a32fc80b63de4b5b3e65f4be82b4cfa362a46702672aa6a0f443b4689af7008c \
33
- --hash=sha256:a707ec1527ffcdd1c784d0924bf5cb15cd7f22683b919668a04d2b9c34549d2e \
34
- --hash=sha256:a831671bad47186603872a3abc19634f3011d7f83b083762c942442d51c58d58 \
35
- --hash=sha256:b639dce63a0b19085213ec5fdd8cffd1d81988f47a2dec7100e93564f3e8fb3b \
36
- --hash=sha256:b868d3bcff720dd7217c383474008ddabaf048fad8d78ed948bb4b624870a417 \
37
- --hash=sha256:c1952f5ea8a5a959b05ed5f16452fddadbaae48b5d39235ab4c3fc444d5fd411 \
38
- --hash=sha256:d44be7551689d9d47b7abc27c71257adfdb53f03880841a5db15ddb22dc63edb \
39
- --hash=sha256:e1e30dc3bfa4e157e53c1d17a0dad20f89dc433393e7702b813c10e200843b03 \
40
- --hash=sha256:e4fe9f4e5e521b458d8feb52547f4bade7ef8c93238dfb5bbc790d9ff2d770ca \
41
- --hash=sha256:f39918a50f74dc5969807dcfaecafa804fa7f90c9d60506835036cc1bc891dc8 \
42
- --hash=sha256:f404a0b069709f18bbdb702eb3dcfe51910602995de00bd39cea3050b5772d08 \
43
- --hash=sha256:fca4a60e1dd9fd0193ae0067eaeeb962f2d79e0d9f0f66223a0682f26ffcc809
16
+ mypy==1.12.0 \
17
+ --hash=sha256:060a07b10e999ac9e7fa249ce2bdcfa9183ca2b70756f3bce9df7a92f78a3c0a \
18
+ --hash=sha256:06de0498798527451ffb60f68db0d368bd2bae2bbfb5237eae616d4330cc87aa \
19
+ --hash=sha256:0eff042d7257f39ba4ca06641d110ca7d2ad98c9c1fb52200fe6b1c865d360ff \
20
+ --hash=sha256:1ebf9e796521f99d61864ed89d1fb2926d9ab6a5fab421e457cd9c7e4dd65aa9 \
21
+ --hash=sha256:20c7c5ce0c1be0b0aea628374e6cf68b420bcc772d85c3c974f675b88e3e6e57 \
22
+ --hash=sha256:233e11b3f73ee1f10efada2e6da0f555b2f3a5316e9d8a4a1224acc10e7181d3 \
23
+ --hash=sha256:2c40658d4fa1ab27cb53d9e2f1066345596af2f8fe4827defc398a09c7c9519b \
24
+ --hash=sha256:2f106db5ccb60681b622ac768455743ee0e6a857724d648c9629a9bd2ac3f721 \
25
+ --hash=sha256:4397081e620dc4dc18e2f124d5e1d2c288194c2c08df6bdb1db31c38cd1fe1ed \
26
+ --hash=sha256:48d3e37dd7d9403e38fa86c46191de72705166d40b8c9f91a3de77350daa0893 \
27
+ --hash=sha256:4ae8959c21abcf9d73aa6c74a313c45c0b5a188752bf37dace564e29f06e9c1b \
28
+ --hash=sha256:4b86de37a0da945f6d48cf110d5206c5ed514b1ca2614d7ad652d4bf099c7de7 \
29
+ --hash=sha256:52b9e1492e47e1790360a43755fa04101a7ac72287b1a53ce817f35899ba0521 \
30
+ --hash=sha256:5bc81701d52cc8767005fdd2a08c19980de9ec61a25dbd2a937dfb1338a826f9 \
31
+ --hash=sha256:5feee5c74eb9749e91b77f60b30771563327329e29218d95bedbe1257e2fe4b0 \
32
+ --hash=sha256:65a22d87e757ccd95cbbf6f7e181e6caa87128255eb2b6be901bb71b26d8a99d \
33
+ --hash=sha256:684a9c508a283f324804fea3f0effeb7858eb03f85c4402a967d187f64562469 \
34
+ --hash=sha256:6b5df6c8a8224f6b86746bda716bbe4dbe0ce89fd67b1fa4661e11bfe38e8ec8 \
35
+ --hash=sha256:6cabe4cda2fa5eca7ac94854c6c37039324baaa428ecbf4de4567279e9810f9e \
36
+ --hash=sha256:77278e8c6ffe2abfba6db4125de55f1024de9a323be13d20e4f73b8ed3402bd1 \
37
+ --hash=sha256:8462655b6694feb1c99e433ea905d46c478041a8b8f0c33f1dab00ae881b2164 \
38
+ --hash=sha256:923ea66d282d8af9e0f9c21ffc6653643abb95b658c3a8a32dca1eff09c06475 \
39
+ --hash=sha256:9b9ce1ad8daeb049c0b55fdb753d7414260bad8952645367e70ac91aec90e07e \
40
+ --hash=sha256:a64ee25f05fc2d3d8474985c58042b6759100a475f8237da1f4faf7fcd7e6309 \
41
+ --hash=sha256:bfe012b50e1491d439172c43ccb50db66d23fab714d500b57ed52526a1020bb7 \
42
+ --hash=sha256:c72861b7139a4f738344faa0e150834467521a3fba42dc98264e5aa9507dd601 \
43
+ --hash=sha256:dcfb754dea911039ac12434d1950d69a2f05acd4d56f7935ed402be09fad145e \
44
+ --hash=sha256:dee78a8b9746c30c1e617ccb1307b351ded57f0de0d287ca6276378d770006c0 \
45
+ --hash=sha256:e478601cc3e3fa9d6734d255a59c7a2e5c2934da4378f3dd1e3411ea8a248642 \
46
+ --hash=sha256:eafc1b7319b40ddabdc3db8d7d48e76cfc65bbeeafaa525a4e0fa6b76175467f \
47
+ --hash=sha256:faca7ab947c9f457a08dcb8d9a8664fd438080e002b0fa3e41b0535335edcf7f \
48
+ --hash=sha256:fd313226af375d52e1e36c383f39bf3836e1f192801116b31b090dfcd3ec5266
44
49
  mypy-extensions==1.0.0 \
45
50
  --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \
46
51
  --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782
@@ -1,4 +1,4 @@
1
- FROM python:3.12.6-bullseye AS build
1
+ FROM python:3.13.0-bookworm AS build
2
2
 
3
3
  ARG RELEASE_VERSION="dev"
4
4
  ENV SETUPTOOLS_SCM_PRETEND_VERSION_FOR_GIT_GOOSE=$RELEASE_VERSION
@@ -6,9 +6,9 @@ ENV SETUPTOOLS_SCM_PRETEND_VERSION_FOR_GIT_GOOSE=$RELEASE_VERSION
6
6
  ENV PYTHONDONTWRITEBYTECODE 1
7
7
  ENV PYTHONUNBUFFERED 1
8
8
  ENV PIP_REQUIRE_VIRTUALENV true
9
- ENV PIP_VERSION 24.1.2
10
- ENV SETUPTOOLS_VERSION 70.3.0
11
- ENV WHEEL_VERSION 0.43.0
9
+ ENV PIP_VERSION 24.2
10
+ ENV SETUPTOOLS_VERSION 75.2.0
11
+ ENV WHEEL_VERSION 0.44.0
12
12
  # Permanently activate virtualenv.
13
13
  ENV PATH="/venv/bin:$PATH"
14
14
 
@@ -29,7 +29,7 @@ RUN --mount=type=cache,target=/root/.cache/pip \
29
29
  && pip install --no-dependencies /app-src \
30
30
  && pip check
31
31
 
32
- FROM python:3.12.6-slim-bullseye AS final
32
+ FROM python:3.13.0-slim-bookworm AS final
33
33
 
34
34
  ARG UID="1000"
35
35
  ARG GID="1000"
@@ -1,16 +1,16 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: git-goose
3
- Version: 0.2.3
3
+ Version: 0.3.1
4
4
  Summary: A picky and eager Git hook runner.
5
5
  Author-email: Anton Agestam <git@antonagestam.se>
6
6
  License: BSD 3-Clause
7
7
  Project-URL: Source Repository, https://github.com/antonagestam/goose
8
8
  Classifier: Intended Audience :: Developers
9
9
  Classifier: Operating System :: OS Independent
10
- Classifier: Programming Language :: Python :: 3.12
10
+ Classifier: Programming Language :: Python :: 3.14
11
11
  Classifier: Development Status :: 4 - Beta
12
12
  Classifier: Typing :: Typed
13
- Requires-Python: <3.13,>3.12
13
+ Requires-Python: <3.14,>=3.13
14
14
  Description-Content-Type: text/markdown; charset=UTF-8
15
15
  License-File: LICENSE
16
16
  Requires-Dist: pydantic
@@ -93,7 +93,7 @@ environments:
93
93
  - id: python
94
94
  ecosystem:
95
95
  language: python
96
- version: "3.12"
96
+ version: "3.13"
97
97
  dependencies:
98
98
  - ruff
99
99
 
@@ -183,7 +183,7 @@ environments:
183
183
  - id: python
184
184
  ecosystem:
185
185
  language: python
186
- version: "3.12"
186
+ version: "3.13"
187
187
  dependencies:
188
188
  - pre-commit-hooks
189
189
 
@@ -237,7 +237,7 @@ environments:
237
237
  - id: mypy
238
238
  ecosystem:
239
239
  language: python
240
- version: "3.12"
240
+ version: "3.13"
241
241
  dependencies:
242
242
  - mypy
243
243
 
@@ -70,7 +70,7 @@ environments:
70
70
  - id: python
71
71
  ecosystem:
72
72
  language: python
73
- version: "3.12"
73
+ version: "3.13"
74
74
  dependencies:
75
75
  - ruff
76
76
 
@@ -160,7 +160,7 @@ environments:
160
160
  - id: python
161
161
  ecosystem:
162
162
  language: python
163
- version: "3.12"
163
+ version: "3.13"
164
164
  dependencies:
165
165
  - pre-commit-hooks
166
166
 
@@ -214,7 +214,7 @@ environments:
214
214
  - id: mypy
215
215
  ecosystem:
216
216
  language: python
217
- version: "3.12"
217
+ version: "3.13"
218
218
  dependencies:
219
219
  - mypy
220
220
 
@@ -2,7 +2,7 @@ environments:
2
2
  - id: type-check
3
3
  ecosystem:
4
4
  language: python
5
- version: "3.12"
5
+ version: "3.13"
6
6
  dependencies:
7
7
  - mypy
8
8
  - pydantic==2.8.2
@@ -14,7 +14,7 @@ environments:
14
14
  - id: python
15
15
  ecosystem:
16
16
  language: python
17
- version: "3.12"
17
+ version: "3.13"
18
18
  dependencies:
19
19
  - ruff
20
20
  - pre-commit-hooks
@@ -22,7 +22,7 @@ environments:
22
22
  - id: node
23
23
  ecosystem:
24
24
  language: node
25
- version: "21.7.1"
25
+ version: "23.0.0"
26
26
  dependencies:
27
27
  - prettier
28
28
 
@@ -27,11 +27,11 @@ authors = [
27
27
  ]
28
28
  description = "A picky and eager Git hook runner."
29
29
  license = {text = "BSD 3-Clause"}
30
- requires-python = ">3.12,<3.13"
30
+ requires-python = ">=3.13,<3.14"
31
31
  classifiers = [
32
32
  "Intended Audience :: Developers",
33
33
  "Operating System :: OS Independent",
34
- "Programming Language :: Python :: 3.12",
34
+ "Programming Language :: Python :: 3.14",
35
35
  "Development Status :: 4 - Beta",
36
36
  "Typing :: Typed",
37
37
  ]
@@ -59,7 +59,7 @@ upgrade = true
59
59
 
60
60
 
61
61
  [tool.mypy]
62
- python_version = 3.12
62
+ python_version = 3.13
63
63
  show_error_codes = true
64
64
  pretty = true
65
65
  files = ["src", "tests"]
@@ -1,5 +1,5 @@
1
1
  #
2
- # This file is autogenerated by pip-compile with Python 3.12
2
+ # This file is autogenerated by pip-compile with Python 3.13
3
3
  # by the following command:
4
4
  #
5
5
  # 'make requirements'
@@ -182,9 +182,9 @@ pyyaml==6.0.2 \
182
182
  --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \
183
183
  --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4
184
184
  # via git-goose (pyproject.toml)
185
- rich==13.8.1 \
186
- --hash=sha256:1760a3c0848469b97b558fc61c85233e3dafb69c7a071b4d60c38099d3cd4c06 \
187
- --hash=sha256:8260cda28e3db6bf04d2d1ef4dbc03ba80a824c88b0e7668a0f23126a424844a
185
+ rich==13.9.2 \
186
+ --hash=sha256:51a2c62057461aaf7152b4d611168f93a9fc73068f8ded2790f29fe2b5366d0c \
187
+ --hash=sha256:8c82a3d3f8dcfe9e734771313e606b39d8247bb6b826e196f4914b333b743cf1
188
188
  # via
189
189
  # git-goose (pyproject.toml)
190
190
  # typer
@@ -1,16 +1,16 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: git-goose
3
- Version: 0.2.3
3
+ Version: 0.3.1
4
4
  Summary: A picky and eager Git hook runner.
5
5
  Author-email: Anton Agestam <git@antonagestam.se>
6
6
  License: BSD 3-Clause
7
7
  Project-URL: Source Repository, https://github.com/antonagestam/goose
8
8
  Classifier: Intended Audience :: Developers
9
9
  Classifier: Operating System :: OS Independent
10
- Classifier: Programming Language :: Python :: 3.12
10
+ Classifier: Programming Language :: Python :: 3.14
11
11
  Classifier: Development Status :: 4 - Beta
12
12
  Classifier: Typing :: Typed
13
- Requires-Python: <3.13,>3.12
13
+ Requires-Python: <3.14,>=3.13
14
14
  Description-Content-Type: text/markdown; charset=UTF-8
15
15
  License-File: LICENSE
16
16
  Requires-Dist: pydantic
@@ -93,7 +93,7 @@ environments:
93
93
  - id: python
94
94
  ecosystem:
95
95
  language: python
96
- version: "3.12"
96
+ version: "3.13"
97
97
  dependencies:
98
98
  - ruff
99
99
 
@@ -183,7 +183,7 @@ environments:
183
183
  - id: python
184
184
  ecosystem:
185
185
  language: python
186
- version: "3.12"
186
+ version: "3.13"
187
187
  dependencies:
188
188
  - pre-commit-hooks
189
189
 
@@ -237,7 +237,7 @@ environments:
237
237
  - id: mypy
238
238
  ecosystem:
239
239
  language: python
240
- version: "3.12"
240
+ version: "3.13"
241
241
  dependencies:
242
242
  - mypy
243
243
 
@@ -20,17 +20,24 @@ from rich.table import Table
20
20
  from rich.text import Text
21
21
 
22
22
  from goose.backend.base import RunResult
23
+ from goose.config import EnvironmentId
23
24
  from goose.config import HookConfig
24
25
 
26
+ from . import __version__
25
27
  from .asyncio import asyncio_entrypoint
26
28
  from .context import gather_context
29
+ from .environment import Environment
30
+ from .environment import InitialState
27
31
  from .environment import NeedsFreeze
32
+ from .environment import SyncedState
33
+ from .environment import UninitializedState
28
34
  from .environment import prepare_environment
29
35
  from .orphan_environments import probe_orphan_environments
30
36
  from .scheduler import Scheduler
31
37
  from .scheduler import UnitFinished
32
38
  from .scheduler import UnitScheduled
33
39
  from .targets import Selector
40
+ from .targets import filter_hook_targets
34
41
  from .targets import get_targets
35
42
 
36
43
  ConfigOption: TypeAlias = Annotated[
@@ -221,6 +228,82 @@ async def run(
221
228
  print_summary(console, scheduler)
222
229
 
223
230
 
231
+ @cli.command()
232
+ @asyncio_entrypoint
233
+ async def environment(
234
+ selected_environment: Optional[str] = typer.Argument(default=None), # noqa
235
+ config_path: ConfigOption = default_config,
236
+ ) -> None:
237
+ console = Console()
238
+ error_console = Console(stderr=True)
239
+ ctx = gather_context(config_path)
240
+
241
+ def print_environment(environment: Environment) -> None:
242
+ console.print(f"{environment.config.id}")
243
+ console.print(f" config.ecosystem: {environment.config.ecosystem}")
244
+ console.print(f" path: {environment._path}")
245
+ console.print(f" lock-files-path: {environment.lock_files_path}")
246
+
247
+ state = environment.state
248
+ if isinstance(state, UninitializedState):
249
+ console.print(" state: uninitialized")
250
+ elif isinstance(state, InitialState):
251
+ console.print(" state: initial")
252
+ console.print(f" state.stage: {state.stage.value}")
253
+ console.print(f" state.ecosystem: {state.ecosystem}")
254
+ elif isinstance(state, SyncedState):
255
+ console.print(" state: synced")
256
+ console.print(f" state.stage: {state.stage.value}")
257
+ console.print(f" state.ecosystem: {state.ecosystem}")
258
+ console.print(f" state.checksum: {state.checksum!r}")
259
+
260
+ else:
261
+ assert_never(state)
262
+
263
+ if selected_environment is None:
264
+ for environment in ctx.environments.values():
265
+ print_environment(environment)
266
+ return
267
+
268
+ try:
269
+ environment = ctx.environments[EnvironmentId(selected_environment)]
270
+ except KeyError:
271
+ error_console.print("No such environment")
272
+ raise typer.Exit(1) from None
273
+
274
+ print_environment(environment)
275
+
276
+
277
+ @cli.command()
278
+ @asyncio_entrypoint
279
+ async def select(
280
+ selected_hook: str = typer.Argument(),
281
+ config_path: ConfigOption = default_config,
282
+ select: Selector = typer.Option(default="diff"),
283
+ ) -> None:
284
+ """Show file selection for a given hook."""
285
+ error_console = Console(stderr=True)
286
+ console = Console()
287
+ ctx = gather_context(config_path)
288
+
289
+ try:
290
+ hook = next(hook for hook in ctx.config.hooks if hook.id == selected_hook)
291
+ except StopIteration:
292
+ error_console.print("No such hook.")
293
+ raise typer.Exit(1) from None
294
+
295
+ if not hook.parameterize:
296
+ error_console.print(
297
+ "Hook is not parameterized, no target files are passed to it."
298
+ )
299
+ return
300
+
301
+ targets = await get_targets(ctx.config, select)
302
+ target_files = filter_hook_targets(hook, targets)
303
+ for file in target_files:
304
+ console.print(file)
305
+
306
+
224
307
  template = """\
225
308
  #!/usr/bin/env bash
226
309
  set -euo pipefail
@@ -247,5 +330,25 @@ async def git_hook(
247
330
  hook_path.chmod(0o755)
248
331
 
249
332
 
333
+ def version_callback(print_version: bool) -> None:
334
+ if not print_version:
335
+ return
336
+ print(f"goose version {__version__}")
337
+ raise typer.Exit()
338
+
339
+
340
+ @cli.callback()
341
+ def main(
342
+ version: bool = typer.Option(
343
+ None,
344
+ "--version",
345
+ callback=version_callback,
346
+ is_eager=True,
347
+ help="Print version information.",
348
+ ),
349
+ ) -> None:
350
+ pass
351
+
352
+
250
353
  if __name__ == "__main__":
251
354
  cli()
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.2.3'
16
- __version_tuple__ = version_tuple = (0, 2, 3)
15
+ __version__ = version = '0.3.1'
16
+ __version_tuple__ = version_tuple = (0, 3, 1)
@@ -116,6 +116,7 @@ async def freeze(
116
116
 
117
117
  package_lock_json_path = lock_files_path / "package-lock.json"
118
118
  manifest = build_manifest(
119
+ source_ecosystem=config.ecosystem,
119
120
  source_dependencies=config.dependencies,
120
121
  lock_files=(
121
122
  package_json_path,
@@ -138,6 +138,7 @@ async def freeze(
138
138
  raise RuntimeError("Failed freezing dependencies {process.returncode=}")
139
139
 
140
140
  manifest = build_manifest(
141
+ source_ecosystem=config.ecosystem,
141
142
  source_dependencies=config.dependencies,
142
143
  lock_files=(requirements_txt,),
143
144
  lock_files_path=lock_files_path,
@@ -1,5 +1,7 @@
1
+ import asyncio
1
2
  import enum
2
3
  import os
4
+ import shutil
3
5
  import sys
4
6
  from collections.abc import Mapping
5
7
  from pathlib import Path
@@ -15,6 +17,7 @@ from ._utils.pydantic import BaseModel
15
17
  from .backend.base import RunResult
16
18
  from .backend.index import load_backend
17
19
  from .config import Config
20
+ from .config import EcosystemConfig
18
21
  from .config import EnvironmentConfig
19
22
  from .config import EnvironmentId
20
23
  from .executable_unit import ExecutableUnit
@@ -27,7 +30,6 @@ class NeedsFreeze(Exception): ...
27
30
 
28
31
 
29
32
  class InitialStage(enum.Enum):
30
- new = "new"
31
33
  bootstrapped = "bootstrapped"
32
34
  frozen = "frozen"
33
35
 
@@ -39,23 +41,30 @@ class SyncedStage(enum.Enum):
39
41
  class SyncedState(BaseModel):
40
42
  stage: SyncedStage
41
43
  checksum: str
44
+ ecosystem: EcosystemConfig
42
45
 
43
46
 
44
47
  class InitialState(BaseModel):
45
48
  stage: InitialStage
49
+ ecosystem: EcosystemConfig
46
50
 
47
51
 
48
- _PersistedState = RootModel[InitialState | SyncedState]
52
+ class UninitializedState: ...
49
53
 
50
54
 
51
- def read_state(env_dir: Path) -> InitialState | SyncedState:
55
+ type State = SyncedState | InitialState | UninitializedState
56
+
57
+ _PersistedState = RootModel[SyncedState | InitialState]
58
+
59
+
60
+ def read_state(env_dir: Path) -> State:
52
61
  state_file = env_dir / "goose-state.json"
53
62
  if not state_file.exists():
54
- return InitialState(stage=InitialStage.new)
63
+ return UninitializedState()
55
64
  return _PersistedState.model_validate_json(state_file.read_bytes()).root
56
65
 
57
66
 
58
- def write_state(env_dir: Path, state: InitialState | SyncedState) -> None:
67
+ def write_state(env_dir: Path, state: SyncedState | InitialState) -> None:
59
68
  state_file = env_dir / "goose-state.json"
60
69
  state_file.write_text(state.model_dump_json())
61
70
 
@@ -67,7 +76,7 @@ class Environment:
67
76
  config: EnvironmentConfig,
68
77
  path: Path,
69
78
  lock_files_path: Path,
70
- discovered_state: InitialState | SyncedState,
79
+ discovered_state: State,
71
80
  ) -> None:
72
81
  self.config: Final = config
73
82
  self._backend: Final = load_backend(config.ecosystem)
@@ -80,8 +89,13 @@ class Environment:
80
89
  def __repr__(self) -> str:
81
90
  return f"Environment(id={self.config.id}, ecosystem={self._backend.ecosystem})"
82
91
 
92
+ def check_should_teardown(self) -> bool:
93
+ if isinstance(self.state, UninitializedState):
94
+ return False
95
+ return self.config.ecosystem != self.state.ecosystem
96
+
83
97
  def check_should_bootstrap(self) -> bool:
84
- if self.state.stage is InitialStage.new:
98
+ if isinstance(self.state, UninitializedState):
85
99
  return True
86
100
  if not self._path.exists():
87
101
  print("State mismatch: environment does not exist")
@@ -153,12 +167,19 @@ class Environment:
153
167
  else:
154
168
  assert_never(state)
155
169
 
170
+ async def teardown(self) -> None:
171
+ await asyncio.to_thread(shutil.rmtree, self._path)
172
+ self.state = UninitializedState()
173
+
156
174
  async def bootstrap(self) -> None:
157
175
  await self._backend.bootstrap(
158
176
  env_path=self._path,
159
177
  config=self.config,
160
178
  )
161
- self.state = InitialState(stage=InitialStage.bootstrapped)
179
+ self.state = InitialState(
180
+ stage=InitialStage.bootstrapped,
181
+ ecosystem=self.config.ecosystem,
182
+ )
162
183
  write_state(self._path, self.state)
163
184
 
164
185
  async def freeze(self) -> None:
@@ -167,7 +188,10 @@ class Environment:
167
188
  config=self.config,
168
189
  lock_files_path=self.lock_files_path,
169
190
  )
170
- self.state = InitialState(stage=InitialStage.frozen)
191
+ self.state = InitialState(
192
+ stage=InitialStage.frozen,
193
+ ecosystem=self.config.ecosystem,
194
+ )
171
195
  write_state(self._path, self.state)
172
196
  os.sync()
173
197
 
@@ -181,6 +205,7 @@ class Environment:
181
205
  self.state = SyncedState(
182
206
  stage=SyncedStage.synced,
183
207
  checksum=manifest.checksum,
208
+ ecosystem=self.config.ecosystem,
184
209
  )
185
210
  write_state(self._path, self.state)
186
211
 
@@ -228,6 +253,17 @@ async def prepare_environment(
228
253
  ) -> None:
229
254
  log_prefix = f"[{environment.config.id}] "
230
255
 
256
+ if environment.check_should_teardown():
257
+ print(
258
+ f"{log_prefix}Environment needs rebuilding, tearing down ...",
259
+ file=sys.stderr,
260
+ )
261
+ await environment.teardown()
262
+ print(
263
+ f"{log_prefix}Environment deleted.",
264
+ file=sys.stderr,
265
+ )
266
+
231
267
  if environment.check_should_bootstrap():
232
268
  print(f"{log_prefix}Bootstrapping environment ...", file=sys.stderr)
233
269
  await environment.bootstrap()
@@ -13,6 +13,7 @@ from pydantic import ValidationInfo
13
13
  from pydantic import field_validator
14
14
 
15
15
  from ._utils.pydantic import BaseModel
16
+ from .config import EcosystemConfig
16
17
  from .config import EnvironmentConfig
17
18
 
18
19
 
@@ -35,6 +36,7 @@ C = TypeVar("C", bound=Collection)
35
36
 
36
37
 
37
38
  class LockManifest(BaseModel):
39
+ source_ecosystem: EcosystemConfig
38
40
  source_dependencies: tuple[str, ...]
39
41
  lock_files: tuple[LockFile, ...]
40
42
  checksum: str
@@ -94,6 +96,7 @@ def read_lock_file(lock_files_path: Path, path: Path) -> LockFile:
94
96
 
95
97
 
96
98
  def build_manifest(
99
+ source_ecosystem: EcosystemConfig,
97
100
  source_dependencies: Iterable[str],
98
101
  lock_files: Iterable[Path],
99
102
  lock_files_path: Path,
@@ -102,6 +105,7 @@ def build_manifest(
102
105
  sorted(read_lock_file(lock_files_path, path) for path in lock_files)
103
106
  )
104
107
  return LockManifest(
108
+ source_ecosystem=source_ecosystem,
105
109
  source_dependencies=tuple(sorted(source_dependencies)),
106
110
  lock_files=lock_file_instances,
107
111
  checksum=_get_accumulated_checksum(lock_file_instances),
@@ -140,6 +144,9 @@ def check_lock_files(
140
144
  except FileNotFoundError:
141
145
  return LockFileState.config_manifest_mismatch
142
146
 
147
+ if config.ecosystem != manifest.source_ecosystem:
148
+ return LockFileState.config_manifest_mismatch
149
+
143
150
  if set(config.dependencies) ^ set(manifest.source_dependencies):
144
151
  return LockFileState.config_manifest_mismatch
145
152
 
@@ -7,7 +7,6 @@ from collections.abc import Sequence
7
7
  from itertools import chain
8
8
  from typing import Final
9
9
  from typing import NamedTuple
10
- from typing import TypeAlias
11
10
 
12
11
  from .backend.base import RunResult
13
12
  from .config import HookConfig
@@ -26,11 +25,10 @@ class UnitFinished(NamedTuple):
26
25
  result: RunResult
27
26
 
28
27
 
29
- SchedulerEvent: TypeAlias = UnitScheduled | UnitFinished
30
-
31
-
32
- SchedulerState: TypeAlias = Mapping[
33
- HookConfig, Mapping[ExecutableUnit, RunResult | asyncio.Task[RunResult] | None]
28
+ type SchedulerEvent = UnitScheduled | UnitFinished
29
+ type SchedulerState = Mapping[
30
+ HookConfig,
31
+ Mapping[ExecutableUnit, RunResult | asyncio.Task[RunResult] | None],
34
32
  ]
35
33
 
36
34
 
@@ -1 +0,0 @@
1
- {"source_dependencies":["prettier"],"lock_files":[{"path":"package-lock.json","checksum":"sha256:c72f3206d345d7285c175a9363dc4d7efbb56729dd02e4828c9356ecfaaad0ca"},{"path":"package.json","checksum":"sha256:c5008cb00d6009f6d901cfe35523169a3deb91979b71fce65d6ac79fdace548b"}],"checksum":"sha256:e130609d6f3cb3681a612f936c5fac5c409019253d18071772d86949766d0bbb"}
@@ -1 +0,0 @@
1
- {"source_dependencies":["pre-commit-hooks","ruff"],"lock_files":[{"path":"requirements.txt","checksum":"sha256:34f3c46f4be307cedefb0b07cddca78fded07e95b1c002d1fff7b3a6ee7c1b15"}],"checksum":"sha256:f0c588fafbbf1e1c33bde83a8804b3a84c4e6f25bf8b15257a17d926860849c8"}
@@ -1,76 +0,0 @@
1
- pre-commit-hooks==4.6.0 \
2
- --hash=sha256:a69199e6a2d45ec59c1020a81ca1549abddc2afb798276d9a0d951752d6abbfe \
3
- --hash=sha256:eb1f43ee67869cd41b4c59017fad4a0f9d4d61201d163f2135535aaf65035a2b
4
- ruamel-yaml==0.18.6 \
5
- --hash=sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636 \
6
- --hash=sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b
7
- ruamel-yaml-clib==0.2.8 \
8
- --hash=sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d \
9
- --hash=sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001 \
10
- --hash=sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462 \
11
- --hash=sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9 \
12
- --hash=sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe \
13
- --hash=sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b \
14
- --hash=sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b \
15
- --hash=sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615 \
16
- --hash=sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62 \
17
- --hash=sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15 \
18
- --hash=sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b \
19
- --hash=sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1 \
20
- --hash=sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9 \
21
- --hash=sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675 \
22
- --hash=sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899 \
23
- --hash=sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7 \
24
- --hash=sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7 \
25
- --hash=sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312 \
26
- --hash=sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa \
27
- --hash=sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91 \
28
- --hash=sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b \
29
- --hash=sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6 \
30
- --hash=sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3 \
31
- --hash=sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334 \
32
- --hash=sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5 \
33
- --hash=sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3 \
34
- --hash=sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe \
35
- --hash=sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c \
36
- --hash=sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed \
37
- --hash=sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337 \
38
- --hash=sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880 \
39
- --hash=sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f \
40
- --hash=sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d \
41
- --hash=sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248 \
42
- --hash=sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d \
43
- --hash=sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf \
44
- --hash=sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512 \
45
- --hash=sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069 \
46
- --hash=sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb \
47
- --hash=sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942 \
48
- --hash=sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d \
49
- --hash=sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31 \
50
- --hash=sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92 \
51
- --hash=sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5 \
52
- --hash=sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28 \
53
- --hash=sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d \
54
- --hash=sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1 \
55
- --hash=sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2 \
56
- --hash=sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875 \
57
- --hash=sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412
58
- ruff==0.5.6 \
59
- --hash=sha256:07c9e3c2a8e1fe377dd460371c3462671a728c981c3205a5217291422209f642 \
60
- --hash=sha256:111a99cdb02f69ddb2571e2756e017a1496c2c3a2aeefe7b988ddab38b416d36 \
61
- --hash=sha256:1f77c1c3aa0669fb230b06fb24ffa3e879391a3ba3f15e3d633a752da5a3e670 \
62
- --hash=sha256:4d394940f61f7720ad371ddedf14722ee1d6250fd8d020f5ea5a86e7be217daf \
63
- --hash=sha256:563a7ae61ad284187d3071d9041c08019975693ff655438d8d4be26e492760bd \
64
- --hash=sha256:57c6c0dd997b31b536bff49b9eee5ed3194d60605a4427f735eeb1f9c1b8d264 \
65
- --hash=sha256:80521b88d26a45e871f31e4b88938fd87db7011bb961d8afd2664982dfc3641a \
66
- --hash=sha256:94fe60869bfbf0521e04fd62b74cbca21cbc5beb67cbb75ab33fe8c174f54414 \
67
- --hash=sha256:a0ef5930799a05522985b9cec8290b185952f3fcd86c1772c3bdbd732667fdcd \
68
- --hash=sha256:b652dc14f6ef5d1552821e006f747802cc32d98d5509349e168f6bf0ee9f8f42 \
69
- --hash=sha256:c476acb43c3c51e3c614a2e878ee1589655fa02dab19fe2db0423a06d6a5b1b6 \
70
- --hash=sha256:c94e084ba3eaa80c2172918c2ca2eb2230c3f15925f4ed8b6297260c6ef179ad \
71
- --hash=sha256:d7fe7dccb1a89dc66785d7aa0ac283b2269712d8ed19c63af908fdccca5ccc1a \
72
- --hash=sha256:d9bc8f328a9f1309ae80e4d392836e7dbc77303b38ed4a7112699e63d3b066ab \
73
- --hash=sha256:e2ff8003f5252fd68425fd53d27c1f08b201d7ed714bb31a55c9ac1d4c13e2eb \
74
- --hash=sha256:e395daba77a79f6dc0d07311f94cc0560375ca20c06f354c7c99af3bf4560c5d \
75
- --hash=sha256:e6a584c1de6f8591c2570e171cc7ce482bb983d49c70ddf014393cd39e9dfaed \
76
- --hash=sha256:f908148c93c02873210a52cad75a6eda856b2cbb72250370ce3afef6fb99b1ed
@@ -1 +0,0 @@
1
- {"source_dependencies":["identify==2.6.0","mypy","pydantic==2.8.2","rich==13.7.1","typer==0.12.3","types-pyyaml==6.0.12.20240724"],"lock_files":[{"path":"requirements.txt","checksum":"sha256:f02806bfbb5243ece11b6c0ad0ac86e0d4994d107765c8c3b12884267eefdabf"}],"checksum":"sha256:10f76a6df6fa9d3a8d3722f84379c993ebd6df4cdb2e92e5ca2d1d38bc27c87f"}
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
File without changes
File without changes