git: 7e79bc8ce706 - main - release: use sets to select base packages
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 19 Sep 2025 01:16:40 UTC
The branch main has been updated by ivy:
URL: https://cgit.FreeBSD.org/src/commit/?id=7e79bc8ce70693a892c443c42af5ec16a95ba466
commit 7e79bc8ce70693a892c443c42af5ec16a95ba466
Author: Isaac Freund <ifreund@freebsdfoundation.org>
AuthorDate: 2025-09-16 19:38:54 +0000
Commit: Lexi Winter <ivy@FreeBSD.org>
CommitDate: 2025-09-19 01:15:10 +0000
release: use sets to select base packages
The introduction of package sets allows us to replace the current
fragile string matching with this simpler and more robust alternative.
Sponsored by: The FreeBSD Foundation
MFC after: 3 seconds
Reviewed by: emaste, ivy
Differential Revision: https://reviews.freebsd.org/D52592
---
release/scripts/pkgbase-stage.lua | 98 +++++++++++----------------------------
1 file changed, 28 insertions(+), 70 deletions(-)
diff --git a/release/scripts/pkgbase-stage.lua b/release/scripts/pkgbase-stage.lua
index 0cd4cbb5c438..9e968fd150f8 100755
--- a/release/scripts/pkgbase-stage.lua
+++ b/release/scripts/pkgbase-stage.lua
@@ -18,89 +18,47 @@ local function capture(command)
return output:match("(.-)\n$") or output
end
-local function append_list(list, other)
- for _, item in ipairs(other) do
- table.insert(list, item)
- end
-end
-
-- Returns a list of packages to be included in the given media
local function select_packages(pkg, media, all_libcompats)
- local components = {
- kernel = {},
- kernel_dbg = {},
- base = {},
- base_dbg = {},
- src = {},
- tests = {},
- }
-
- for compat in all_libcompats:gmatch("%S+") do
- components["lib" .. compat] = {}
- components["lib" .. compat .. "_dbg"] = {}
- end
-
+ local components = {}
local rquery = capture(pkg .. "rquery -U -r FreeBSD-base %n")
for package in rquery:gmatch("[^\n]+") do
- if package == "FreeBSD-src" or package:match("^FreeBSD%-src%-.*") then
- table.insert(components["src"], package)
- elseif package == "FreeBSD-tests" or package:match("^FreeBSD%-tests%-.*") then
- table.insert(components["tests"], package)
- elseif package:match("^FreeBSD%-kernel%-.*") and
- package ~= "FreeBSD-kernel-man"
- then
- -- Kernels other than FreeBSD-kernel-generic are ignored
- -- Note that on powerpc64 and powerpc64le the names are
- -- slightly different.
- if package:match("^FreeBSD%-kernel%-generic.*%-dbg") then
- table.insert(components["kernel_dbg"], package)
- elseif package:match("^FreeBSD%-kernel%-generic.*") then
- table.insert(components["kernel"], package)
- end
- elseif package:match(".*%-dbg$") then
- table.insert(components["base_dbg"], package)
- else
- local found = false
- for compat in all_libcompats:gmatch("%S+") do
- if package:match(".*%-dbg%-lib" .. compat .. "$") then
- table.insert(components["lib" .. compat .. "_dbg"], package)
- found = true
- break
- elseif package:match(".*%-lib" .. compat .. "$") then
- table.insert(components["lib" .. compat], package)
- found = true
- break
- end
- end
- if not found then
- table.insert(components["base"], package)
- end
+ local set = package:match("^FreeBSD%-set%-(.*)$")
+ if set then
+ components[set] = package
+ -- Kernels other than FreeBSD-kernel-generic are ignored
+ -- Note that on powerpc64 and powerpc64le the names are
+ -- slightly different.
+ elseif package:match("^FreeBSD%-kernel%-generic.*-dbg") then
+ components["kernel-dbg"] = package
+ elseif package:match("^FreeBSD%-kernel%-generic.*") then
+ components["kernel"] = package
end
end
- assert(#components["kernel"] == 1)
- assert(#components["base"] > 0)
+ assert(components["kernel"])
+ assert(components["base"])
local selected = {}
if media == "disc" then
- append_list(selected, components["base"])
- append_list(selected, components["kernel"])
- append_list(selected, components["kernel_dbg"])
- append_list(selected, components["src"])
- append_list(selected, components["tests"])
+ table.insert(selected, components["base"])
+ table.insert(selected, components["kernel"])
+ table.insert(selected, components["kernel-dbg"])
+ table.insert(selected, components["src"])
+ table.insert(selected, components["tests"])
for compat in all_libcompats:gmatch("%S+") do
- append_list(selected, components["lib" .. compat])
+ table.insert(selected, components["lib" .. compat])
end
else
assert(media == "dvd")
- append_list(selected, components["base"])
- append_list(selected, components["base_dbg"])
- append_list(selected, components["kernel"])
- append_list(selected, components["kernel_dbg"])
- append_list(selected, components["src"])
- append_list(selected, components["tests"])
+ table.insert(selected, components["base"])
+ table.insert(selected, components["base-dbg"])
+ table.insert(selected, components["kernel"])
+ table.insert(selected, components["kernel-dbg"])
+ table.insert(selected, components["src"])
+ table.insert(selected, components["tests"])
for compat in all_libcompats:gmatch("%S+") do
- append_list(selected, components["lib" .. compat])
- append_list(selected, components["lib" .. compat .. "_dbg"])
+ table.insert(selected, components["lib" .. compat])
+ table.insert(selected, components["lib" .. compat .. "-dbg"])
end
end
@@ -138,7 +96,7 @@ local function main()
local packages = select_packages(pkg, media, all_libcompats)
- assert(os.execute(pkg .. "fetch -o " .. target .. " " .. table.concat(packages, " ")))
+ assert(os.execute(pkg .. "fetch -d -o " .. target .. " " .. table.concat(packages, " ")))
assert(os.execute(pkg .. "repo " .. target))
end