Add tix-repository(8).
Support renaming, splitting, and deleting ports via RENAMES.
This commit is contained in:
parent
f62e045008
commit
91952d7e51
7 changed files with 245 additions and 0 deletions
1
Makefile
1
Makefile
|
@ -680,6 +680,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 metadata $(SORTIX_RELEASE_DIR)/$(RELEASE)/repository/$(HOST)
|
||||
|
||||
.PHONY: release-scripts
|
||||
release-scripts: \
|
||||
|
|
|
@ -178,6 +178,18 @@ number matched in the first subexpression.
|
|||
.Sy ARCHIVE
|
||||
and
|
||||
.Sy VERSION_REGEX )
|
||||
.It Sy EDITION
|
||||
An increasing number used to distinguish this edition of the package from any previous packages by
|
||||
the same name.
|
||||
A new pacckage with the same name and a different edition will considered a different package.
|
||||
Upgrades will uninstall the old package and will not upgrade to the new edition as if the package
|
||||
has stopped existing.
|
||||
The
|
||||
.Sy RENAMES
|
||||
variable can be used in combination with
|
||||
.Sy EDITION
|
||||
to rename and split packages.
|
||||
The default edition is 1.
|
||||
.It Sy LICENSE
|
||||
Primary license identifier for the installed files from the
|
||||
.Lk https://spdx.org/licenses/ "SPDX License List" .
|
||||
|
@ -253,6 +265,19 @@ Locate new upstream versions of the port by searching
|
|||
.Sy RELEASE_SEARCH_PAGE
|
||||
using this regular expression matching the new version number in the first
|
||||
subexpression.
|
||||
.It Sy RENAMES
|
||||
Comma-separated list of package renames.
|
||||
Each rename is expressed as the name of a package followed by a
|
||||
.Sq "@"
|
||||
and its
|
||||
.Sy EDITION ,
|
||||
followed by a
|
||||
.Sq ":"
|
||||
and then a potentially-empty space separated list of replacement packages, each
|
||||
taking the form of a replacement package name followed by
|
||||
.Sq "@"
|
||||
and then the replacement package
|
||||
.Sy EDITION .
|
||||
.It Sy RUNTIME_DEPS
|
||||
Space delimited list of ports needed at run time.
|
||||
.It Sy SHA256SUM
|
||||
|
|
|
@ -69,6 +69,25 @@ releasing Sortix x.y, foo." to allow the maintainer to easily
|
|||
.Xr grep 1
|
||||
for it after a release.
|
||||
.Sh CHANGES
|
||||
.Ss Add tix-repository(8)
|
||||
The new
|
||||
.Xr tix-repository 8
|
||||
program is used to generate repository metadata in releases.
|
||||
The new
|
||||
.Sy EDITION
|
||||
and
|
||||
.Sy RENAMES
|
||||
variables in
|
||||
.Xr port 5
|
||||
are used to rename and split packages and requires a new
|
||||
.Xr tix-build 8 .
|
||||
.Pp
|
||||
Tix must be upgraded:
|
||||
.Bd -literal
|
||||
cd /src/tix &&
|
||||
make clean &&
|
||||
make install
|
||||
.Ed
|
||||
.Ss Add init groups
|
||||
The
|
||||
.Xr setinit 2
|
||||
|
|
|
@ -31,6 +31,7 @@ tix-iso-add \
|
|||
tix-iso-bootconfig \
|
||||
tix-iso-liveconfig \
|
||||
tix-port \
|
||||
tix-repository \
|
||||
|
||||
MANPAGES8=\
|
||||
tix-build.8 \
|
||||
|
@ -41,6 +42,7 @@ tix-iso-add.8 \
|
|||
tix-iso-bootconfig.8 \
|
||||
tix-iso-liveconfig.8 \
|
||||
tix-port.8 \
|
||||
tix-repository.8 \
|
||||
tix-rmdiff.8 \
|
||||
tix-rmpatch.8 \
|
||||
tix-vars.8 \
|
||||
|
|
|
@ -803,6 +803,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);
|
||||
|
@ -821,6 +824,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
|
||||
|
|
115
tix/tix-repository
Executable file
115
tix/tix-repository
Executable file
|
@ -0,0 +1,115 @@
|
|||
#!/bin/sh
|
||||
# Copyright (c) 2023, 2024 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 command
|
||||
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
|
||||
command="$argument"
|
||||
operand=2
|
||||
elif [ $operand = 2 ]; then
|
||||
repository="$argument"
|
||||
operand=3
|
||||
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 "$command" ]; then
|
||||
echo "$0: error: No command was specified" >&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"
|
||||
|
||||
case "$command" in
|
||||
metadata)
|
||||
ls |
|
||||
grep -E '\.tix.tar.xz$' |
|
||||
grep -Eo '^[^.]*' |
|
||||
LC_ALL=C sort -o packages.list
|
||||
|
||||
true > dependencies.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
|
||||
(printf "%s: " "$package" && tix-vars -d '' "$package.info" RUNTIME_DEPS | sed -E 's/ +$//') >> dependencies.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
|
||||
|
||||
;;
|
||||
*)
|
||||
echo "$0: error: unknown command: $command" >&2
|
||||
exit 1
|
||||
esac
|
77
tix/tix-repository.8
Normal file
77
tix/tix-repository.8
Normal file
|
@ -0,0 +1,77 @@
|
|||
.Dd November 22, 2024
|
||||
.Dt TIX-REPOSITORY 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm tix-repository
|
||||
.Nd manage a tix repository
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op Fl \-generation Ns = Ns Ar level
|
||||
.Sy metadata
|
||||
.Ar repository
|
||||
.Sh DESCRIPTION
|
||||
.Nm
|
||||
prepares a tix repository for publication with the appropriate release metadata.
|
||||
.Pp
|
||||
A top-level release directory contains the
|
||||
.Pa sha256sum
|
||||
file, along with the
|
||||
.Pa repository
|
||||
directory with per-platform repository subdirectories named after the platform
|
||||
triplets.
|
||||
.Pp
|
||||
A tix release is prepared for publication by creating the directory structure,
|
||||
populating the per-platform
|
||||
.Pa repository/$platform
|
||||
subdirectories with the
|
||||
.Pa .tix.tar.xz
|
||||
and
|
||||
.Pa .version
|
||||
files produced by
|
||||
.Xr tix-port 8 ,
|
||||
and running the
|
||||
.Nm
|
||||
.Sy metadata
|
||||
command on each platform repository.
|
||||
.Pp
|
||||
The first operand selects a command to execute:
|
||||
.Bl -tag -width "1234"
|
||||
.It Sy metadata
|
||||
Generate metadata files in the per-platform
|
||||
.Ar repository
|
||||
subdirectory:
|
||||
.Bl -bullet -compact
|
||||
.It
|
||||
.Pa dependencies.list
|
||||
.It
|
||||
.Pa manifest.list
|
||||
.It
|
||||
.Pa packages.list
|
||||
.It
|
||||
.Pa renames.list
|
||||
.It
|
||||
.Pa sets.list
|
||||
.It
|
||||
.Pa sha256sum
|
||||
.El
|
||||
.El
|
||||
.Pp
|
||||
The options are as follows:
|
||||
.Bl -tag -width "12345678"
|
||||
.It Fl \-generation Ns = Ns Ar generation
|
||||
Select tix metadata generation level
|
||||
(Default: 3)
|
||||
.El
|
||||
.Sh EXIT STATUS
|
||||
.Nm
|
||||
will exit 0 on success and non-zero otherwise.
|
||||
.Sh SEE ALSO
|
||||
.Xr port 5 ,
|
||||
.Xr tix 8 ,
|
||||
.Xr tix-build 8 ,
|
||||
.Xr tix-collection 8 ,
|
||||
.Xr tix-install 8 ,
|
||||
.Xr tix-port 8
|
||||
.Sh HISTORY
|
||||
.Nm
|
||||
originally appeared in Sortix 1.1.
|
Loading…
Add table
Reference in a new issue