Add tix-repository(8).

Support renaming, splitting, and deleting ports via RENAMES.
This commit is contained in:
Jonas 'Sortie' Termansen 2023-12-25 16:09:51 +01:00
parent f0caedab74
commit ddc60e265a
4 changed files with 104 additions and 0 deletions

View File

@ -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: \

View File

@ -31,6 +31,7 @@ tix-iso-add \
tix-iso-bootconfig \
tix-iso-liveconfig \
tix-port \
tix-repository \
MANPAGES8=\
tix-build.8 \

View File

@ -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

96
tix/tix-repository Executable file
View File

@ -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