Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 19 Sep 2025 01:16:40 GMT
From:      Lexi Winter <ivy@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 7e79bc8ce706 - main - release: use sets to select base packages
Message-ID:  <202509190116.58J1GefE066059@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202509190116.58J1GefE066059>