From ddc60e265a7591a7d4127facc6bc0c2664936478 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Mon, 25 Dec 2023 16:09:51 +0100 Subject: [PATCH] Add tix-repository(8). Support renaming, splitting, and deleting ports via RENAMES. --- Makefile | 1 + tix/Makefile | 1 + tix/tix-build.c | 6 +++ tix/tix-repository | 96 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 104 insertions(+) create mode 100755 tix/tix-repository diff --git a/Makefile b/Makefile index 9a55b3c8..76f7ed4d 100644 --- a/Makefile +++ b/Makefile @@ -616,6 +616,7 @@ release-repository: sysroot $(SYSTEM_INITRD) $(SORTIX_RELEASE_DIR)/$(RELEASE)/re cp $(SORTIX_REPOSITORY_DIR)/$(HOST)/$$port.tix.tar.xz $(SORTIX_RELEASE_DIR)/$(RELEASE)/repository/$(HOST) && \ cp $(SORTIX_REPOSITORY_DIR)/$(HOST)/$$port.version $(SORTIX_RELEASE_DIR)/$(RELEASE)/repository/$(HOST); \ done + tix-repository --generation=3 $(SORTIX_RELEASE_DIR)/$(RELEASE)/repository/$(HOST) .PHONY: release-scripts release-scripts: \ diff --git a/tix/Makefile b/tix/Makefile index ff714318..38138d65 100644 --- a/tix/Makefile +++ b/tix/Makefile @@ -31,6 +31,7 @@ tix-iso-add \ tix-iso-bootconfig \ tix-iso-liveconfig \ tix-port \ +tix-repository \ MANPAGES8=\ tix-build.8 \ diff --git a/tix/tix-build.c b/tix/tix-build.c index efd99299..53533519 100644 --- a/tix/tix-build.c +++ b/tix/tix-build.c @@ -811,6 +811,9 @@ static void TixInfo(struct metainfo* minfo) // TODO: Shell escape the values if needed. fwrite_variable(tixinfo_fp, "TIX_VERSION", "3"); fwrite_variable(tixinfo_fp, "NAME", minfo->package_name); + const char* edition = metainfo_get(minfo, "EDITION", "pkg.edition"); + if ( edition ) + fwrite_variable(tixinfo_fp, "EDITION", edition); const char* version = metainfo_get(minfo, "VERSION", "VERSION"); if ( version ) fwrite_variable(tixinfo_fp, "VERSION", version); @@ -829,6 +832,9 @@ static void TixInfo(struct metainfo* minfo) else fwrite_variable(tixinfo_fp, "PREFIX", minfo->prefix); } + const char* renames = metainfo_get(minfo, "RENAMES", "pkg.renames"); + if ( renames ) + fwrite_variable(tixinfo_fp, "RENAMES", renames); } // TODO: After releasing Sortix 1.1, remove generation 2 compatibility. else diff --git a/tix/tix-repository b/tix/tix-repository new file mode 100755 index 00000000..d656cdcf --- /dev/null +++ b/tix/tix-repository @@ -0,0 +1,96 @@ +#!/bin/sh +# Copyright (c) 2023 Jonas 'Sortie' Termansen. +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +# tix-repository +# Generate repository metadata. + +set -e + +generation=3 + +unset repository + +operand=1 +dashdash= +previous_option= +for argument do + if [ -n "$previous_option" ]; then + eval $previous_option=\$argument + previous_option= + continue + fi + + case $argument in + *=?*) parameter=$(expr "X$argument" : '[^=]*=\(.*\)' || true) ;; + *=) parameter= ;; + *) parameter=yes ;; + esac + + case $dashdash$argument in + --) dashdash=yes ;; + --generation=*) generation=$parameter ;; + --generation) previous_option=generation ;; + -*) echo "$0: unrecognized option $argument" >&2 + exit 1 ;; + *) + if [ $operand = 1 ]; then + repository="$argument" + operand=2 + else + echo "$0: unexpected extra operand $argument" >&2 + exit 1 + fi + ;; + esac +done + +if [ -n "$previous_option" ]; then + echo "$0: option '$argument' requires an argument" >&2 + exit 1 +fi + +if [ -z "$repository" ]; then + echo "$0: error: No repository was specified" >&2 + exit 1 +fi + +if [ "$generation" != 3 ]; then + echo "$0: error: --generation=$generation is not supported by this version" >&2 + exit 1 +fi + +cd "$repository" + +ls | +grep -E '\.tix.tar.xz$' | +grep -Eo '^[^.]*' | +LC_ALL=C sort -o packages.list + +true > renames.list +true > manifest.list + +for package in $(cat packages.list); do + tar -xOf "$package.tix.tar.xz" "tix/tixinfo/$package" > "$package.info" + tar -xOf "$package.tix.tar.xz" "tix/manifest/$package" > "$package.manifest" + sha256sum "$package.tix.tar.xz" > "$package.tix.tar.xz.sha256sum" + tix-vars -d '' "$package.info" RENAMES | tr , '\n' | sed -E '/^$/d' >> renames.list + sed -E "s/$/:$package/" "$package.manifest" >> manifest.list +done + +LC_ALL=C sort -t: -k1,1 manifest.list -o manifest.list + +find -type f '!' -name 'sha256sum' '!' -name '*.sha256sum' -exec sha256sum '{}' '+' | +sed -E 's, \./, ,' | +LC_ALL=C sort -k 2 > sha256sum