vocker 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.
- {vocker-0.3.1 → vocker-0.3.2}/CHANGELOG.md +6 -0
- {vocker-0.3.1/src/vocker.egg-info → vocker-0.3.2}/PKG-INFO +1 -1
- {vocker-0.3.1 → vocker-0.3.2}/pyproject.toml +1 -1
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker/repo/io.py +13 -0
- {vocker-0.3.1 → vocker-0.3.2/src/vocker.egg-info}/PKG-INFO +1 -1
- {vocker-0.3.1 → vocker-0.3.2}/tests/test_repo.py +2 -1
- {vocker-0.3.1 → vocker-0.3.2}/DESIGN.md +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/MANIFEST.in +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/README.md +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/setup.cfg +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/setup.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker/__init__.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker/__main__.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker/cli.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker/dedup.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker/dedup_models.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker/image.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker/integer_to_path.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker/multihash.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker/py.typed +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker/repo/__init__.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker/repo/compression.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker/system.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker/util.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker/util_models.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker.egg-info/SOURCES.txt +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker.egg-info/dependency_links.txt +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker.egg-info/requires.txt +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/src/vocker.egg-info/top_level.txt +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/tests/__init__.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/tests/conftest.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/tests/test_dedup.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/tests/test_image_venv.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/tests/test_integer_to_path.py +0 -0
- {vocker-0.3.1 → vocker-0.3.2}/tests/test_manifest.py +0 -0
|
@@ -4,6 +4,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.3.2] - 2026-02-03
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Fix `ImageNotFoundError` due to incorrect manifest parsing when reusing cached content.
|
|
12
|
+
|
|
7
13
|
## [0.3.1] - 2026-02-02
|
|
8
14
|
|
|
9
15
|
### Changed
|
|
@@ -236,6 +236,15 @@ class RepoTransfer:
|
|
|
236
236
|
req = self.make_manifest_link_request(digest, destination, dict(open_file_once=_open))
|
|
237
237
|
self.dedup.run_batch([req])
|
|
238
238
|
|
|
239
|
+
if not reader.parser.eof:
|
|
240
|
+
# We skipped the download because we found cached content, so we need to feed the
|
|
241
|
+
# remaining cached content into the parser.
|
|
242
|
+
with destination.open("rb") as file:
|
|
243
|
+
file.seek(reader.input_position)
|
|
244
|
+
while block := file.read(65536):
|
|
245
|
+
_feed(block)
|
|
246
|
+
_feed(None)
|
|
247
|
+
|
|
239
248
|
return digest, reader.out_verified_data
|
|
240
249
|
|
|
241
250
|
@staticmethod
|
|
@@ -664,6 +673,10 @@ class ManifestNodeReader:
|
|
|
664
673
|
|
|
665
674
|
self.out_verified_data = ManifestNode.from_cbor_decoded(hf, cbor2.loads(bytes(q2)))
|
|
666
675
|
|
|
676
|
+
@property
|
|
677
|
+
def input_position(self) -> int:
|
|
678
|
+
return self.parser.position + len(self.parser.queue)
|
|
679
|
+
|
|
667
680
|
@classmethod
|
|
668
681
|
def from_bytes(cls, data):
|
|
669
682
|
(self := cls()).parser.feed(data).feed(None)
|
|
@@ -81,12 +81,13 @@ def test_repo_end_to_end(tmp_path):
|
|
|
81
81
|
run_cli(b2, ["repo", "remote", "add", "@foo", remote_path.as_uri()])
|
|
82
82
|
|
|
83
83
|
_export_image(b2, "@foo", image_id, import_path, tmp_path / "vex")
|
|
84
|
+
_export_image(b2, "@foo", image_id, import_path, tmp_path / "vex2")
|
|
84
85
|
|
|
85
86
|
# setup yet another system instance and clone the full thing, then export
|
|
86
87
|
b3 = tmp_path / "b3"
|
|
87
88
|
run_cli(b3, ["repo", "remote", "add", "@foo", remote_path.as_uri()])
|
|
88
89
|
run_cli(b3, ["repo", "download", "@foo", "loc"])
|
|
89
|
-
_export_image(b3, "loc", image_id, import_path, tmp_path / "
|
|
90
|
+
_export_image(b3, "loc", image_id, import_path, tmp_path / "vex3")
|
|
90
91
|
|
|
91
92
|
|
|
92
93
|
def _export_image(b, source_repo: str, image_id: str, import_path: Path, export_path: Path):
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|