Skip to content
This repository has been archived by the owner on Oct 21, 2022. It is now read-only.

Refactor schemaVersion to distinguish between 2 and 3, and drop support for 1 #531

Merged
merged 5 commits into from
Apr 5, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 50 additions & 26 deletions planex/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -286,39 +286,63 @@ def _parse_name(name):
return int(idx)


class InvalidSchemaVersion(KeyError):
"""Error raised if the schemaVersion field in the pins is not supported"""
pass


def update_with_schema_version_2(spec, link):
"""Update spec with a schemaVersion 2 link"""
for name, value in link.patch_sources.items():
idx = _parse_name(name)
spec.add_archive(name, value["URL"], link.path,
value["patches"])

for name, value in link.patchqueue_sources.items():
idx = _parse_name(name)
spec.add_patchqueue(idx, value["URL"], link.path,
value["patchqueue"])


def update_with_schema_version_3(spec, link):
"""Update spec with a schemaVersion 3 link"""
for name, value in link.sources.items():
idx = _parse_name(name)
if value["URL"].startswith("ssh://"):
spec.add_gitarchive(idx, value["URL"],
link.path, value.get("prefix"),
value.get("commitish"))
else:
spec.add_source(idx, value["URL"], link.path)

for name, value in link.patch_sources.items():
idx = _parse_name(name)
spec.add_archive(idx, value["URL"], link.path,
value["patches"])

for name, value in link.patchqueue_sources.items():
idx = _parse_name(name)
spec.add_patchqueue(idx, value["URL"], link.path,
value["patchqueue"])


def load(specpath, link=None, check_package_name=True, defines=None):
"""
Load the spec file at specpath and apply link if provided.
"""

spec = Spec(specpath, check_package_name=check_package_name,
defines=defines)
if link:
if link.schema_version == 1:
if link.sources:
spec.add_archive(0, link.url, link.path, link.sources)
if link.patches:
spec.add_archive(1, link.url, link.path, link.patches)
if link.patchqueue:
spec.add_patchqueue(0, link.url, link.path,
link.patchqueue)
elif link.schema_version >= 2:
for name, value in link.sources.items():
idx = _parse_name(name)
if value["URL"].startswith("ssh://"):
spec.add_gitarchive(idx, value["URL"],
link.path, value.get("prefix"),
value.get("commitish"))
else:
spec.add_source(idx, value["URL"], link.path)
for name, value in link.patch_sources.items():
idx = _parse_name(name)
spec.add_archive(idx, value["URL"], link.path,
value["patches"])
for name, value in link.patchqueue_sources.items():
idx = _parse_name(name)
spec.add_patchqueue(idx, value["URL"], link.path,
value["patchqueue"])

if link is None:
return spec

if link.schema_version == 2:
update_with_schema_version_2(spec, link)
elif link.schema_version == 3:
update_with_schema_version_3(spec, link)
else:
raise InvalidSchemaVersion(link.schema_version)

return spec

Expand Down
2 changes: 1 addition & 1 deletion tests/data/ocaml-cohttp.lnk
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"SchemaVersion": "2",
"SchemaVersion": "3",
"Source1":
{
"URL": "tests/data/ocaml-cohttp-init"
Expand Down
2 changes: 1 addition & 1 deletion tests/data/ocaml-cstruct.lnk
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"SchemaVersion": "2",
"SchemaVersion": "3",
"Source":
{
"URL": "tests/data/test-git.tar.gz"
Expand Down
9 changes: 6 additions & 3 deletions tests/specs/SPECS/PQ.lnk
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
{
"URL": "https://github.com/xenserver/nsource/archive/PQ.tar.gz",
"patchqueue": "master"
}
"SchemaVersion": "3",
"PatchQueue0": {
"URL": "https://github.com/xenserver/nsource/archive/PQ.tar.gz",
"patchqueue": "master"
}
}
9 changes: 6 additions & 3 deletions tests/specs/SPECS/RP.lnk
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
{
"URL": "https://github.com/xenserver/nsource/archive/RP.tar.gz",
"patches": "SOURCES"
}
"SchemaVersion": "3",
"Patch0": {
"URL": "https://github.com/xenserver/nsource/archive/RP.tar.gz",
"patches": "SOURCES"
}
}