Skip to content

Commit f3e13bb

Browse files
Merge pull request #67 from RoboStack/allowcustombuildnumberforsinglepackage
Allow to specify a different build number for a single package and remove full_rebuild and skip_all_deps options
2 parents aa102b2 + debb33e commit f3e13bb

File tree

4 files changed

+54
-39
lines changed

4 files changed

+54
-39
lines changed

vinca/main.py

Lines changed: 33 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from .distro import Distro
1717

1818
from vinca import config
19-
from vinca.utils import get_repodata
19+
from vinca.utils import get_repodata, get_pkg_build_number
2020

2121
unsatisfied_deps = set()
2222
distro = None
@@ -218,6 +218,11 @@ def read_vinca_yaml(filepath):
218218

219219
vinca_conf["trigger_new_versions"] = vinca_conf.get("trigger_new_versions", False)
220220

221+
if (Path(filepath).parent / "pkg_additional_info.yaml").exists():
222+
vinca_conf["_pkg_additional_info"] = yaml.load(open(Path(filepath).parent / "pkg_additional_info.yaml"))
223+
else:
224+
vinca_conf["_pkg_additional_info"] = {}
225+
221226
return vinca_conf
222227

223228

@@ -671,17 +676,16 @@ def get_selected_packages(distro, vinca_conf):
671676
for i in vinca_conf["packages_select_by_deps"]:
672677
i = i.replace("-", "_")
673678
selected_packages = selected_packages.union([i])
674-
if "skip_all_deps" not in vinca_conf or not vinca_conf["skip_all_deps"]:
675-
if i in skipped_packages:
676-
continue
677-
try:
678-
pkgs = distro.get_depends(i, ignore_pkgs=skipped_packages)
679-
except KeyError:
680-
# handle (rare) package names that use "-" as separator
681-
pkgs = distro.get_depends(i.replace("_", "-"))
682-
selected_packages.remove(i)
683-
selected_packages.add(i.replace("_", "-"))
684-
selected_packages = selected_packages.union(pkgs)
679+
if i in skipped_packages:
680+
continue
681+
try:
682+
pkgs = distro.get_depends(i, ignore_pkgs=skipped_packages)
683+
except KeyError:
684+
# handle (rare) package names that use "-" as separator
685+
pkgs = distro.get_depends(i.replace("_", "-"))
686+
selected_packages.remove(i)
687+
selected_packages.add(i.replace("_", "-"))
688+
selected_packages = selected_packages.union(pkgs)
685689

686690
result = sorted(list(selected_packages))
687691
return result
@@ -864,6 +868,7 @@ def main():
864868
base_dir = os.path.abspath(arguments.dir)
865869
vinca_yaml = os.path.join(base_dir, "vinca.yaml")
866870
vinca_conf = read_vinca_yaml(vinca_yaml)
871+
867872
snapshot = read_snapshot(arguments.snapshot)
868873

869874
from .template import generate_bld_ament_cmake
@@ -946,19 +951,19 @@ def main():
946951
# only URLs
947952
if "://" in fn:
948953
selected_bn = vinca_conf.get("build_number", 0)
949-
distro = vinca_conf["ros_distro"]
950-
all_pkgs = repodata.get("packages", {})
951-
all_pkgs.update(repodata.get("packages.conda", {}))
952-
for pkg_name, pkg in all_pkgs.items():
953-
if pkg_name.startswith(f"ros-{distro}"):
954-
if pkg_name.rsplit("-", 2)[0] in additional_recipe_names:
955-
print(
956-
f"Skipping additional recipe for build number computation {pkg_name}"
957-
)
958-
continue
959-
selected_bn = max(selected_bn, pkg["build_number"])
960-
961-
print(f"Selected build number: {selected_bn}")
954+
if not vinca_conf.get("use_explicit_build_number", True):
955+
distro = vinca_conf["ros_distro"]
956+
all_pkgs = repodata.get("packages", {})
957+
all_pkgs.update(repodata.get("packages.conda", {}))
958+
for pkg_name, pkg in all_pkgs.items():
959+
if pkg_name.startswith(f"ros-{distro}"):
960+
if pkg_name.rsplit("-", 2)[0] in additional_recipe_names:
961+
print(
962+
f"Skipping additional recipe for build number computation {pkg_name}"
963+
)
964+
continue
965+
selected_bn = max(selected_bn, pkg["build_number"])
966+
962967

963968
explicitly_selected_pkgs = [
964969
f"ros-{distro}-{pkg.replace('_', '-')}"
@@ -969,16 +974,9 @@ def main():
969974
for _, pkg in all_pkgs.items():
970975
is_built = False
971976
if selected_bn is not None:
972-
if vinca_conf.get("full_rebuild", True):
973-
if pkg["build_number"] == selected_bn:
974-
is_built = True
975-
else:
976-
# remove all packages except explicitly selected ones
977-
if (
978-
pkg["name"] not in explicitly_selected_pkgs
979-
or pkg["build_number"] == selected_bn
980-
):
981-
is_built = True
977+
pkg_build_number = get_pkg_build_number(selected_bn, pkg["name"], vinca_conf)
978+
if pkg["build_number"] == pkg_build_number:
979+
is_built = True
982980
else:
983981
is_built = True
984982

vinca/migrate.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ def create_migration_instructions(arch, packages_to_migrate, trigger_branch):
113113
print("Final names: ", ros_names)
114114

115115
vinca_conf["packages_select_by_deps"] = ros_names
116-
vinca_conf["skip_all_deps"] = True
117116
vinca_conf["is_migration"] = True
118117
vinca_conf["skip_existing"] = []
119118

vinca/template.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
from ruamel import yaml
88
from pathlib import Path
99

10+
from vinca.utils import get_pkg_build_number
11+
1012
TEMPLATE = """\
1113
# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
1214
@@ -71,7 +73,6 @@ def copyfile_with_exec_permissions(source_file, destination_file):
7173
os.chmod(destination_file, current_permissions | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH)
7274

7375
def write_recipe(source, outputs, vinca_conf, single_file=True):
74-
build_number = vinca_conf.get("build_number", 0)
7576
# single_file = False
7677
if single_file:
7778
file = yaml.YAML()
@@ -84,7 +85,7 @@ def write_recipe(source, outputs, vinca_conf, single_file=True):
8485
meta["package"]["version"] = f"{datetime.datetime.now():%Y.%m.%d}"
8586
meta["recipe"] = meta["package"]
8687
del meta["package"]
87-
meta["build"]["number"] = build_number
88+
meta["build"]["number"] = vinca_conf.get("build_number", 0)
8889
meta["build"]["post_process"] = post_process_items
8990
with open("recipe.yaml", "w") as stream:
9091
file.dump(meta, stream)
@@ -102,7 +103,7 @@ def write_recipe(source, outputs, vinca_conf, single_file=True):
102103
meta["package"]["name"] = o["package"]["name"]
103104
meta["package"]["version"] = o["package"]["version"]
104105

105-
meta["build"]["number"] = build_number
106+
meta["build"]["number"] = get_pkg_build_number(vinca_conf.get("build_number", 0), o["package"]["name"], vinca_conf)
106107
meta["build"]["post_process"] = post_process_items
107108

108109
if test := vinca_conf["_tests"].get(o["package"]["name"]):

vinca/utils.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,20 @@ def get_repodata(url_or_path, platform=None):
6565
with open(fn, "w") as fcache:
6666
fcache.write(content.decode("utf-8"))
6767
return json.loads(content)
68+
69+
def ensure_name_is_without_distro_prefix_and_with_underscores(name, vinca_conf):
70+
"""
71+
Ensure that the name is without distro prefix and with underscores
72+
e.g. "ros-humble-pkg-name" -> "pkg_name"
73+
"""
74+
newname = name.replace("-", "_")
75+
distro_prefix = "ros_" + vinca_conf.get("ros_distro") + "_"
76+
if (newname.startswith(distro_prefix) ):
77+
newname = newname.replace(distro_prefix, "")
78+
79+
return newname
80+
81+
def get_pkg_build_number(default_build_number, pkg_name, vinca_conf):
82+
normalized_name = ensure_name_is_without_distro_prefix_and_with_underscores(pkg_name, vinca_conf)
83+
pkg_additional_info = vinca_conf["_pkg_additional_info"].get(normalized_name, {})
84+
return pkg_additional_info.get("build_number", default_build_number)

0 commit comments

Comments
 (0)