diff options
author | Efraim Flashner <efraim@flashner.co.il> | 2023-01-30 11:33:18 +0200 |
---|---|---|
committer | Efraim Flashner <efraim@flashner.co.il> | 2023-01-30 12:39:40 +0200 |
commit | 4cf1acc7f3033b50b0bf19e02c9f522d522d338c (patch) | |
tree | 9fd64956ee60304c15387eb394cd649e49f01467 /etc | |
parent | edb8c09addd186d9538d43b12af74d6c7aeea082 (diff) | |
parent | 595b53b74e3ef57a1c0c96108ba86d38a170a241 (diff) |
Merge remote-tracking branch 'origin/master' into core-updates
Conflicts:
doc/guix.texi
gnu/local.mk
gnu/packages/admin.scm
gnu/packages/base.scm
gnu/packages/chromium.scm
gnu/packages/compression.scm
gnu/packages/databases.scm
gnu/packages/diffoscope.scm
gnu/packages/freedesktop.scm
gnu/packages/gnome.scm
gnu/packages/gnupg.scm
gnu/packages/guile.scm
gnu/packages/inkscape.scm
gnu/packages/llvm.scm
gnu/packages/openldap.scm
gnu/packages/pciutils.scm
gnu/packages/ruby.scm
gnu/packages/samba.scm
gnu/packages/sqlite.scm
gnu/packages/statistics.scm
gnu/packages/syndication.scm
gnu/packages/tex.scm
gnu/packages/tls.scm
gnu/packages/version-control.scm
gnu/packages/xml.scm
guix/build-system/copy.scm
guix/scripts/home.scm
Diffstat (limited to 'etc')
-rw-r--r-- | etc/guix-daemon.cil.in | 21 | ||||
-rw-r--r-- | etc/guix-daemon.service.in | 8 | ||||
-rwxr-xr-x | etc/guix-install.sh | 144 | ||||
-rw-r--r-- | etc/guix-publish.service.in | 4 | ||||
-rw-r--r-- | etc/kernels-manifest.scm | 35 | ||||
-rw-r--r-- | etc/news.scm | 395 | ||||
-rw-r--r-- | etc/release-manifest.scm | 15 | ||||
-rw-r--r-- | etc/snippets/tempel/text-mode | 258 | ||||
-rw-r--r-- | etc/snippets/yas/log-edit-mode/guix-vc-commit-message-add-package | 9 | ||||
-rw-r--r-- | etc/snippets/yas/log-edit-mode/guix-vc-commit-message-remove-package | 9 | ||||
-rw-r--r-- | etc/snippets/yas/log-edit-mode/guix-vc-commit-message-rename-package | 14 | ||||
-rw-r--r-- | etc/snippets/yas/log-edit-mode/guix-vc-commit-message-update-package | 12 | ||||
-rw-r--r-- | etc/snippets/yas/log-edit-mode/guix-vc-commit-message-use-https-home-page | 9 | ||||
-rw-r--r-- | etc/teams.scm.in | 182 |
14 files changed, 893 insertions, 222 deletions
diff --git a/etc/guix-daemon.cil.in b/etc/guix-daemon.cil.in index f4767ff666..f55ef226c1 100644 --- a/etc/guix-daemon.cil.in +++ b/etc/guix-daemon.cil.in @@ -1,6 +1,6 @@ ; -*- lisp -*- ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2018, 2022 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2020 Daniel Brooks <db48x@db48x.net> ;;; Copyright © 2020 Marius Bakke <marius@gnu.org> ;;; @@ -37,11 +37,13 @@ (block guix_daemon ;; Require existing types + (typeattributeset cil_gen_require domain) (typeattributeset cil_gen_require init_t) - (typeattributeset cil_gen_require tmp_t) + (typeattributeset cil_gen_require init_var_run_t) (typeattributeset cil_gen_require nscd_var_run_t) + (typeattributeset cil_gen_require system_dbusd_var_run_t) + (typeattributeset cil_gen_require tmp_t) (typeattributeset cil_gen_require var_log_t) - (typeattributeset cil_gen_require domain) ;; Declare own types (type guix_daemon_t) @@ -92,6 +94,9 @@ (allow init_t guix_store_content_t (file (open read execute))) + (allow init_t + guix_profiles_t + (dir (setattr))) ;; guix-daemon needs to know the names of users (allow guix_daemon_t @@ -284,6 +289,14 @@ guix_store_content_t (sock_file (create getattr setattr unlink write))) + ;; Access to run state directories + (allow guix_daemon_t + system_dbusd_var_run_t + (dir (search))) + (allow guix_daemon_t + init_var_run_t + (dir (search))) + ;; Access to configuration files and directories (allow guix_daemon_t guix_daemon_conf_t @@ -447,6 +460,8 @@ any (unconfined_u object_r guix_store_content_t (low low))) (filecon "@prefix@/bin/guix-daemon" file (system_u object_r guix_daemon_exec_t (low low))) + (filecon "@guix_localstatedir@/guix/profiles/per-user/[^/]+/current-guix/bin/guix-daemon" + file (system_u object_r guix_daemon_exec_t (low low))) (filecon "@storedir@/.+-(guix-.+|profile)/bin/guix-daemon" file (system_u object_r guix_daemon_exec_t (low low))) (filecon "@storedir@/[a-z0-9]+-guix-daemon" diff --git a/etc/guix-daemon.service.in b/etc/guix-daemon.service.in index 17b54eaeb0..9dbc3b5678 100644 --- a/etc/guix-daemon.service.in +++ b/etc/guix-daemon.service.in @@ -9,10 +9,16 @@ Description=Build daemon for GNU Guix ExecStart=@localstatedir@/guix/profiles/per-user/root/current-guix/bin/guix-daemon \ --build-users-group=guixbuild --discover=no Environment='GUIX_LOCPATH=@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale' LC_ALL=en_US.utf8 -RemainAfterExit=yes StandardOutput=syslog StandardError=syslog +# Work around a nasty systemd ‘feature’ that kills the entire process tree +# (including the daemon!) if any child, such as cc1plus, runs out of memory. +OOMPolicy=continue + +# Despite the name, this is rate-limited: a broken daemon will eventually fail. +Restart=always + # See <https://lists.gnu.org/archive/html/guix-devel/2016-04/msg00608.html>. # Some package builds (for example, go@1.8.1) may require even more than # 1024 tasks. diff --git a/etc/guix-install.sh b/etc/guix-install.sh index 300681e111..3ce9affc06 100755 --- a/etc/guix-install.sh +++ b/etc/guix-install.sh @@ -3,13 +3,14 @@ # Copyright © 2017 sharlatan <sharlatanus@gmail.com> # Copyright © 2018 Ricardo Wurmus <rekado@elephly.net> # Copyright © 2018 Efraim Flashner <efraim@flashner.co.il> -# Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr> +# Copyright © 2019–2020, 2022 Tobias Geerinckx-Rice <me@tobias.gr> # Copyright © 2020 Morgan Smith <Morgan.J.Smith@outlook.com> # Copyright © 2020 Simon Tournier <zimon.toutoune@gmail.com> # Copyright © 2020 Daniel Brooks <db48x@db48x.net> # Copyright © 2021 Jakub Kądziołka <kuba@kadziolka.net> # Copyright © 2021 Chris Marusich <cmmarusich@gmail.com> -# Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com> +# Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com> +# Copyright © 2022 Prafulla Giri <prafulla.giri@protonmail.com> # # This file is part of GNU Guix. # @@ -33,7 +34,7 @@ then exec bash "$0" "$@" fi -set -e +set -eo pipefail [ "$UID" -eq 0 ] || { echo "This script must be run as root."; exit 1; } @@ -52,6 +53,7 @@ REQUIRE=( "chmod" "uname" "groupadd" + "useradd" "tail" "tr" "xz" @@ -92,17 +94,20 @@ _debug() fi } -# Return true if user answered yes, false otherwise. +die() +{ + _err "${ERR}$*" + exit 1 +} + +# Return true if user answered yes, false otherwise. The prompt is +# yes-biased, that is, when the user simply enter newline, it is equivalent to +# answering "yes". # $1: The prompt question. prompt_yes_no() { - while true; do - read -rp "$1 " yn - case $yn in - [Yy]*) return 0;; - [Nn]*) return 1;; - *) _msg "Please answer yes or no." - esac - done + local -l yn + read -rp "$1 [Y/n]" yn + [[ ! $yn || $yn = y || $yn = yes ]] || return 1 } chk_require() @@ -116,10 +121,8 @@ chk_require() command -v "$c" &>/dev/null || warn+=("$c") done - [ "${#warn}" -ne 0 ] && - { _err "${ERR}Missing commands: ${warn[*]}."; - return 1; } - + [ "${#warn}" -ne 0 ] && die "Missing commands: ${warn[*]}." + _msg "${PAS}verification of required commands completed" } @@ -134,21 +137,27 @@ chk_gpg_keyring() gpg_key_id=${GPG_SIGNING_KEYS[$user_id]} # Without --dry-run this command will create a ~/.gnupg owned by root on # systems where gpg has never been used, causing errors and confusion. - if ! gpg --dry-run --list-keys "$gpg_key_id" >/dev/null 2>&1; then - if prompt_yes_no "${INF}The following OpenPGP public key is \ + if gpg --dry-run --list-keys "$gpg_key_id" >/dev/null 2>&1; then + continue + fi + if prompt_yes_no "${INF}The following OpenPGP public key is \ required to verify the Guix binary signature: $gpg_key_id. -Would you like me to fetch it for you? (yes/no)"; then - wget "https://sv.gnu.org/people/viewgpg.php?user_id=$user_id" \ - --no-verbose -O- | gpg --import - - else - _err "${ERR}Missing OpenPGP public key ($gpg_key_id). +Would you like me to fetch it for you?"; then + # Use a reasonable time-out here so users don't report silent + # ‘freezes’ when Savannah goes out to lunch, as has happened. + if wget "https://sv.gnu.org/people/viewgpg.php?user_id=$user_id" \ + --timeout=30 --no-verbose -O- | gpg --import -; then + continue + fi + fi + # If we reach this point, the key is (still) missing. Report further + # missing keys, if any, but then abort the installation. + _err "${ERR}Missing OpenPGP public key ($gpg_key_id). Fetch it with this command: wget \"https://sv.gnu.org/people/viewgpg.php?user_id=$user_id\" -O - | \ sudo -i gpg --import -" - exit_flag=yes - fi - fi + exit_flag=yes done if [ "$exit_flag" = yes ]; then exit 1 @@ -220,8 +229,7 @@ chk_sys_arch() local arch=powerpc64le ;; *) - _err "${ERR}Unsupported CPU type: ${arch}" - exit 1 + die "Unsupported CPU type: ${arch}" esac case "$os" in @@ -229,8 +237,7 @@ chk_sys_arch() local os=linux ;; *) - _err "${ERR}Your operation system (${os}) is not supported." - exit 1 + die "Your operation system (${os}) is not supported." esac ARCH_OS="${arch}-${os}" @@ -254,7 +261,7 @@ chk_sys_nscd() configure_substitute_discovery() { if grep -q -- '--discover=no' "$1" && \ prompt_yes_no "Would you like the Guix daemon to automatically \ -discover substitute servers on the local network? (yes/no)"; then +discover substitute servers on the local network?"; then sed -i 's/--discover=no/--discover=yes/' "$1" fi } @@ -285,8 +292,7 @@ guix_get_bin_list() if [[ "${#bin_ver_ls}" -ne "0" ]]; then _msg "${PAS}Release for your system: ${default_ver}" else - _err "${ERR}Could not obtain list of Guix releases." - exit 1 + die "Could not obtain list of Guix releases." fi # Use default to download according to the list and local ARCH_OS. @@ -311,8 +317,7 @@ guix_get_bin() "${url}/${bin_ver}.tar.xz" "${url}/${bin_ver}.tar.xz.sig"; then _msg "${PAS}download completed." else - _err "${ERR}could not download ${url}/${bin_ver}.tar.xz." - exit 1 + die "could not download ${url}/${bin_ver}.tar.xz." fi pushd "${dl_path}" >/dev/null @@ -320,8 +325,7 @@ guix_get_bin() _msg "${PAS}Signature is valid." popd >/dev/null else - _err "${ERR}could not verify the signature." - exit 1 + die "could not verify the signature." fi } @@ -333,8 +337,7 @@ sys_create_store() _debug "--- [ ${FUNCNAME[0]} ] ---" if [[ -e "/var/guix" || -e "/gnu" ]]; then - _err "${ERR}A previous Guix installation was found. Refusing to overwrite." - exit 1 + die "A previous Guix installation was found. Refusing to overwrite." fi cd "$tmp_path" @@ -488,14 +491,22 @@ sys_enable_guix_daemon() } sys_authorize_build_farms() -{ # authorize the public key of the build farm +{ # authorize the public key(s) of the build farm(s) + local hosts=( + ci.guix.gnu.org + bordeaux.guix.gnu.org + ) + if prompt_yes_no "Permit downloading pre-built package binaries from the \ -project's build farm? (yes/no)"; then - guix archive --authorize \ - < ~root/.config/guix/current/share/guix/ci.guix.gnu.org.pub \ - && _msg "${PAS}Authorized public key for ci.guix.gnu.org" - else - _msg "${INF}Skipped authorizing build farm public keys" +project's build farms?"; then + for host in "${hosts[@]}"; do + local key=~root/.config/guix/current/share/guix/$host.pub + [ -f "$key" ] \ + && guix archive --authorize < "$key" \ + && _msg "${PAS}Authorized public key for $host" + done + else + _msg "${INF}Skipped authorizing build farm public keys" fi } @@ -503,7 +514,7 @@ sys_create_init_profile() { # Define for better desktop integration # This will not take effect until the next shell or desktop session! [ -d "/etc/profile.d" ] || mkdir /etc/profile.d # Just in case - cat <<"EOF" > /etc/profile.d/guix.sh + cat <<"EOF" > /etc/profile.d/zzz-guix.sh # Explicitly initialize XDG base directory variables to ease compatibility # with Guix System: see <https://issues.guix.gnu.org/56050#3>. export XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}" @@ -532,9 +543,6 @@ GUIX_LOCPATH="$GUIX_PROFILE/lib/locale" export GUIX_LOCPATH [ -f "$GUIX_PROFILE/etc/profile" ] && . "$GUIX_PROFILE/etc/profile" - -# set XDG_DATA_DIRS to include Guix installations -export XDG_DATA_DIRS="$GUIX_PROFILE/share:$XDG_DATA_DIRS" EOF } @@ -557,9 +565,28 @@ sys_create_shell_completion() _msg "${PAS}installed shell completion" } +sys_customize_bashrc() +{ + prompt_yes_no "Customize users Bash shell prompt for Guix?" || return + for bashrc in /home/*/.bashrc /root/.bashrc; do + test -f "$bashrc" || continue + grep -Fq '$GUIX_ENVIRONMENT' "$bashrc" && continue + cp "${bashrc}" "${bashrc}.bak" + echo ' +# Automatically added by the Guix install script. +if [ -n "$GUIX_ENVIRONMENT" ]; then + if [[ $PS1 =~ (.*)"\\$" ]]; then + PS1="${BASH_REMATCH[1]} [env]\\\$ " + fi +fi +' >> "$bashrc" + done + _msg "${PAS}Bash shell prompt successfully customized for Guix" +} welcome() { + local char cat<<"EOF" ░░░ ░░░ ░░▒▒░░░░░░░░░ ░░░░░░░░░▒▒░░ @@ -585,8 +612,18 @@ This script installs GNU Guix on your system https://www.gnu.org/software/guix/ EOF - echo -n "Press return to continue..." - read -r + # Don't use ‘read -p’ here! It won't display when run non-interactively. + echo -n "Press return to continue..."$'\r' + if ! read -r char; then + echo + die "Can't read standard input. Hint: don't pipe scripts into a shell." + fi + if [ "$char" ]; then + echo + echo "...that ($char) was not a return!" + _msg "${WAR}Use newlines to automate installation, e.g.: yes '' | ${0##*/}" + _msg "${WAR}Any other method is unsupported and likely to break in future." + fi } main() @@ -606,7 +643,7 @@ main() _msg "${INF}system is ${ARCH_OS}" umask 0022 - tmp_path="$(mktemp -t -d guix.XXX)" + tmp_path="$(mktemp -t -d guix.XXXXXX)" if [ -z "${GUIX_BINARY_FILE_NAME}" ]; then guix_get_bin_list "${GNU_URL}" @@ -626,6 +663,7 @@ main() sys_authorize_build_farms sys_create_init_profile sys_create_shell_completion + sys_customize_bashrc _msg "${INF}cleaning up ${tmp_path}" rm -r "${tmp_path}" diff --git a/etc/guix-publish.service.in b/etc/guix-publish.service.in index 78f04714eb..b8fd3b4c03 100644 --- a/etc/guix-publish.service.in +++ b/etc/guix-publish.service.in @@ -11,10 +11,12 @@ After=guix-daemon.service [Service] ExecStart=@localstatedir@/guix/profiles/per-user/root/current-guix/bin/guix publish --user=nobody --port=8181 Environment='GUIX_LOCPATH=@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale' LC_ALL=en_US.utf8 -RemainAfterExit=yes StandardOutput=syslog StandardError=syslog +# Despite the name, this is rate-limited: a broken daemon will eventually fail. +Restart=always + # See <https://lists.gnu.org/archive/html/guix-devel/2016-04/msg00608.html>. TasksMax=1024 diff --git a/etc/kernels-manifest.scm b/etc/kernels-manifest.scm new file mode 100644 index 0000000000..bacb222d64 --- /dev/null +++ b/etc/kernels-manifest.scm @@ -0,0 +1,35 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2022 Leo Famulari <leo@famulari.name> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +;;; This file returns a manifest of packages related to linux-libre. +;;; Simplistically, it selects packages whose names begin with "linux-libre". +;;; It is used to assist continuous integration of the kernel packages. + +(use-modules (guix packages) + (guix profiles) + (gnu packages)) + +(manifest + (map package->manifest-entry + (fold-packages + (lambda (package lst) + (if (string-prefix? "linux-libre" + (package-name package)) + (cons package lst) + lst)) + '()))) diff --git a/etc/news.scm b/etc/news.scm index 9bb6ba876b..211a176170 100644 --- a/etc/news.scm +++ b/etc/news.scm @@ -1,12 +1,12 @@ ;; GNU Guix news, for use by 'guix pull'. ;; -;; Copyright © 2019-2022 Ludovic Courtès <ludo@gnu.org> +;; Copyright © 2019-2023 Ludovic Courtès <ludo@gnu.org> ;; Copyright © 2019–2021 Tobias Geerinckx-Rice <me@tobias.gr> ;; Copyright © 2019, 2020 Miguel Ángel Arruga Vivas <rosen644835@gmail.com> ;; Copyright © 2019, 2020 Konrad Hinsen <konrad.hinsen@fastmail.net> ;; Copyright © 2019, 2020, 2021 Julien Lepiller <julien@lepiller.eu> -;; Copyright © 2019–2022 Florian Pelz <pelzflorian@pelzflorian.de> -;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com> +;; Copyright © 2019–2023 Florian Pelz <pelzflorian@pelzflorian.de> +;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org> ;; Copyright © 2020, 2021 Mathieu Othacehe <m.othacehe@gmail.com> ;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> ;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com> @@ -25,11 +25,344 @@ (channel-news (version 0) + + (entry (commit "137b91f03bbb7f1df71cf10c4f79ae57fbcea400") + (title + (en "New @option{--with-version} package transformation option") + (de "Neue Paketumwandlungsoption @option{--with-version}") + (fr "Nouvelle option de transformation @option{--with-version}")) + (body + (en "The new @option{--with-version} package transformation option +generalizes @option{--with-latest}: it gets the specified upstream release of +a package and uses it instead of the currently-packaged version. + +For example, the command below would spawn GNOME Clocks built against GTK +4.7.0, skipping its test suite: + +@example +guix shell gnome-clocks --with-version=gtk=4.7.0 \\ + --without-tests=gtk -- gnome-clocks +@end example + +Run @command{info \"(guix) Package Transformation Options\"} for more info.") + (de "Die neue Paketumwandlungsoption @option{--with-version} +verallgemeinert @option{--with-latest}: Mit ihr kann man angeben, welche +vom Anbieter veröffentlichte Version man anstelle der derzeit im Paket +vorgegebenen haben möchte. + +Zum Beispiel kann mit folgendem Befehl ein für die GTK-Version 4.7.0 +erstelltes GNOME Clocks aufgerufen werden, wobei der Testkatalog dafür +übersprungen wird. + +@example +guix shell gnome-clocks --with-version=gtk=4.7.0 \\ + --without-tests=gtk -- gnome-clocks +@end example + +Führen Sie für mehr Informationen @command{info \"(guix.de) +Paketumwandlungsoptionen\"} aus.") + (fr "La nouvelle option de transformation de paquets +@option{--with-version} généralise @option{--with-latest} : elle permet de +spécifier quelle version amont d'un logiciel utiliser à la place de celle +actuellement fournie. + +Par exemple, la commande ci-dessous démarre GNOME Clocks construit avec GTK +4.7.0, sans lancer sa suite de tests : + +@example +guix shell gnome-clocks --with-version=gtk=4.7.0 \\ + --without-tests=gtk -- gnome-clocks +@end example + +Voir @command{info \"(guix.fr) Options de transformation de paquets\"} pour +plus de détails."))) + + (entry (commit "9ea37eb9f5329c213757bbfe5d9241cde8433858") + (title + (en "Linux-libre 6.0 removed due to end of upstream support") + (de "Linux-libre 6.0 wurde entfernt")) + (body + (en "The linux-libre 6.0 kernel series has reached the end of + its life, and no longer supported upstream. For this + reason, it has been removed from GNU Guix.") + (de "Vom Kernel @code{linux-libre} wird die 6.0-Versionsreihe keine +Unterstützung von dessen Anbieter mehr erfahren („end of life“). Daher ist es +aus GNU Guix entfernt worden."))) + + (entry (commit "ce8a34bc9ab89f31f107383ba791954864aed372") + (title + (en "Linux-libre kernel updated to 6.1") + (de "Linux-libre-Kernel wird auf 6.1 aktualisiert") + (fr "Le noyau linux-libre est mis à jour vers la 6.1") + (pt "Kernel linux-libre atualizado para 6.1")) + (body + (en "The default version of the linux-libre kernel has been updated to + the 6.1 release series.") + (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert + jetzt auf der 6.1-Versionsreihe.") + (fr "La version par défaut du noyau linux-libre est mise à jour + vers la série des 6.1.") + (pt "A versão padrão do kernel linux-libre foi atualizada para a + série do kernel 6.1."))) + + (entry (commit "064c5b7e450f9f6d55cfcd0ec2bc9e96ee0b2958") + (title + (en "Linux-libre 4.9 removed due to end of upstream support") + (de "Linux-libre 4.9 wurde entfernt")) + (body + (en "The linux-libre 4.9 kernel series has reach the end of its life, +and is no longer supported upstream. For this reason, it has been removed from +GNU Guix.") + (de "Vom Kernel @code{linux-libre} wird die 4.9-Versionsreihe keine +Unterstützung von dessen Anbieter mehr erfahren („end of life“). Daher ist es +aus GNU Guix entfernt worden."))) + + (entry (commit "dfc6957a5af7d179d4618eb19d4f555c519bc6f2") + (title + (en "New @code{customize-linux} procedure") + (de "Neue Prozedur @code{customize-linux}") + (fr "Nouvelle procédure @code{customize-linux}")) + (body + (en "The @code{(gnu packages linux)} module includes a new +@code{customize-linux} procedure, which should now be used instead of +replacing the @samp{\"kconfig\"} native input of a @code{linux-libre}-derived +package, as the kernel config file is no longer provided as a native +input.") + (de "Das Modul @code{(gnu packages linux)} enthält eine neue Prozedur +@code{customize-linux}, die von nun an für angepasste Linux-Pakete benutzt +werden sollte. Die native Eingabe @samp{\"kconfig\"} eines von +@code{linux-libre} abgeleiteten Pakets zu ersetzen, funktioniert nicht mehr, +weil die Kernel-Konfigurationsdatei nicht mehr als native Eingabe vorliegt.") + (fr "Le module @code{(gnu packages linux)} inclut une nouvelle +procédure @code{customize-linux}, qui devrait maintenant être utilisée au lieu +de remplacer l'entrée native @samp{\"kconfig\"} d'un paquet dérivé de +@code{linux-libre}, car le fichier de configuration du noyau n'est plus fourni +en tant qu'entrée native."))) + + (entry (commit "788602b37ff42f730d4b7b569b0fb51465f147da") + (title + (en "New @option{--symlink} option for @command{guix shell}") + (de "Neue Option @option{--symlink} für @command{guix shell}") + (fr "Nouvelle option @option{--symlink} pour @command{guix shell}")) + (body + (en "The @command{guix shell} command has a new +@option{--symlink} (or @option{-S}) option, to be used in conjunction with the +@option{--container} (or @option{-C}) option to create a symbolic link inside +the container. Run @command{info \"(guix) Invoking guix shell\"} for more +information.") + (de "Der Befehl @command{guix shell} verfügt jetzt über eine neue +Befehlszeilenoption @option{--symlink} (oder @option{-S}), die zusammen mit der +Option @option{--container} (oder @option{-C}) benutzt werden kann, um eine +symbolische Verknüpfung im Container anzulegen. Führen Sie +@command{info \"(guix.de) Aufruf von guix shell\"} aus, um mehr zu erfahren.") + (fr "La commande @command{guix shell} dispose d'une nouvelle option, +@option{--symlink} (ou @option{-S}), qui doit être utilisée en conjonction +avec l'option @option{--container} (ou @option{-C}) pour créer un lien +symbolique dans le conteneur. Lancer @command{info \"(guix.fr) Invoquer guix +shell\"} pour plus d'informations."))) + + (entry (commit "82a0a395d7051eab7b9f15ec4740d58c86413604") + (title + (en "Linux-libre kernel updated to 6.0") + (de "Linux-libre-Kernel wird auf 6.0 aktualisiert") + (fr "Le noyau linux-libre est mis à jour vers la 6.0") + (pt "Kernel linux-libre atualizado para 6.0")) + (body + (en "The default version of the linux-libre kernel has been + updated to the 6.0 release series.") + (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert + jetzt auf der 6.0-Versionsreihe.") + (fr "La version par défaut du noyau linux-libre est mise à jour + vers la série des 6.0.") + (pt "A versão padrão do kernel linux-libre foi atualizada para a + série do kernel 6.0."))) + + (entry (commit "400a7a4c80efbde1905ae98a298bbb5882d46a0d") + (title + (en "New build system for Python packages") + (de "Neues Erstellungssystem für Python-Pakete") + (fr "Nouveau système de construction pour les paquets Python") + (pt "Novo sistema de compilação para pacotes Python")) + (body + (en "A new @var{pyproject-build-system} has been added. This +is a redesign of @var{python-build-system} with support for @dfn{PEP 517} +and @file{pyproject.toml} files. It also has built-in support for various +test frameworks such as @command{pytest} and @code{nosetests}. + +There is a complementary @code{python-toolchain} package that comes with +updated versions of @command{pip}, @command{setuptools} and others. + +The build system will eventually be merged into @var{python-build-system} +but you are encouraged to use it for packages in the @code{guix} channel. +Third party channels may want to wait until the API is stable (see the +Guix manual for caveats). + +Despite the name, @var{pyproject-build-system} also works with the +``legacy'' @file{setup.py} format.") + (de "Ein neues Erstellungssystem @var{pyproject-build-system} ist +verfügbar. Es ist eine Neuauflage des @var{python-build-system}, die +@dfn{PEP 517} und @file{pyproject.toml}-Dateien unterstützt. Auch wurde +Unterstützung für Testrahmen wie @command{pytest} und @code{nosetests} +eingebaut. + +Ergänzend gibt es ein Paket @code{python-toolchain} mit aktualisierten Versionen +von @command{pip}, @command{setuptools} und mehr. + +Das Erstellungssystem wird in Zukunft Teil von @var{python-build-system} werden, +aber wir würden es begrüßen, wenn Sie es für Pakete auf dem @code{guix}-Kanal +verwenden würden. Drittanbieterkanäle warten vielleicht lieber auf eine +stabile Programmierschnittstelle (siehe die im Guix-Handbuch genannten +Einschränkungen). + +Trotz dem Namen funktioniert @var{pyproject-build-system} auch mit dem „alten“ +@file{setup.py}-Format.") + (fr "Un nouveau système de construction, @var{pyproject-build-system}, +a été ajouté. Il s'agit d'une refonte du @var{python-build-system} qui rajoute +la prise en charge de @dfn{PEP 517} et des fichiers @file{pyproject.toml}. +Il intègre aussi la prise en charge de divers cadriciels de test comme +@command{pytest} ou @code{nosetests}. + +Un paquet supplémentaire @code{python-toolchain} fournit des versions à jour +de @command{pip}, @command{setuptools} et autres. + +Le système de construction finira par être intégré au @var{python-build-system} +mais nous vous encourageons à l'utiliser pour les paquets du canal @code{guix}. +Les canaux tiers devraient attendre que l'API se stabilise (voir le manuel de +Guix pour les mises en garde). + +Contrairement à ce qu'indique son nom, @var{pyproject-build-system} fonctionne +aussi avec « l'ancien » format @file{setup.py}.") + (pt "Um novo sistema de compilação chamado @var{pyproject-build-system} +foi adicionado. É um redesign do @var{python-build-system} com suporte à +@dfn{PEP 517} e a arquivos @file{pyproject.toml}. Ele também inclui suporte a +vários frameworks de teste tais como @command{pytest} e @code{nosetests}. + +Há um pacote complementar @code{python-toolchain} que contém versões +atualizadas do @command{pip}, @command{setuptools} e outros. + +O sistema de compilação será eventualmente incorporado ao +@var{python-build-system}, mas encorajamos você a usá-lo para pacotes no canal +@code{guix}. Canais de terceiros podem querer esperar até a API se +estabilizar (veja o manual do Guix para ressalvas). + +Apesar do nome, o @var{pyproject-build-system} também funciona com o formato +“legado” do @file{setup.py}."))) + + (entry (commit "c7ba5f38b80433b040d3946b8fc0b1e8621ba30a") + (title + (en "New @option{--emulate-fhs} option for @command{guix shell}") + (de "Neue Option @option{--emulate-fhs} für @command{guix shell}") + (fr "Nouvelle option @option{--emulate-fhs} pour @command{guix shell}") + (pt "Nova opção @option{--emulate-fhs} para o @command{guix shell}")) + (body + (en "The @command{guix shell} command has a new +@option{--emulate-fhs} (or @option{-F}) option. Combined with +@option{--container} (or @option{-C}), it emulates the file and directory +layout specified by the Filesystem Hierarchy Standard (FHS), providing +@file{/bin}, @file{/lib}, etc. within the container. + +For example, the following command runs @file{/bin/ls} within such a +container: + +@example +guix shell -CF coreutils -- /bin/ls +@end example + +Run @command{info \"(guix) Invoking guix shell\"} for more information.") + (de "Der Befehl @command{guix shell} verfügt jetzt über eine neue +Befehlszeilenoption @option{--emulate-fhs} (oder @option{-F}). Zusammen mit +@option{--container} (oder @option{-C}) kann so die Datei- und +Verzeichnisstruktur, die im @i{Filesystem Hierarchy Standard} (FHS) vorgegeben +wird, nachgebildet werden. Das heißt, in der Container-Umgebung gibt es +@file{/bin}, @file{/lib} und so weiter. + +Zum Beispiel wird folgender Befehl @file{/bin/ls} in einem solchen Container +ausführen: + +@example +guix shell -CF coreutils -- /bin/ls +@end example + +Führen Sie @command{info \"(guix.de) Aufruf von guix shell\"} aus, um mehr +zu erfahren.") + (fr "La commande @command{guix shell} dispose d'une nouvelle option, +@option{--emulate-fhs} (ou @option{-F}). Avec @option{--container} (ou +@option{-C}), elle permet d'imiter la disposition des fichiers et répertoires +spécifiée par le @i{Filesystem Hierarchy Standard} (FHS) en fournissant +@file{/bin}, @file{/lib}, etc. dans le conteneur. + +Par exemple, la commande ci-dessous lance @file{/bin/ls} dans un tel +conteneur : + +@example +guix shell -CF coreutils -- /bin/ls +@end example + +Lancer @command{info \"(guix.fr) Invoquer guix shell\"} pour plus +d'informations.") + (pt "O comando @command{guix shell} tem uma nova opção +@option{--emulate-fhs} (ou @option{-F}). Combinada com +@option{--container} (ou @option{-C}), ela emula o layout de arquivos e +diretórios especificado pelo Padrão de Hierarquia do Sistema de +Arquivos (Filesystem Hierarchy Standard — FHS), provendo @file{/bin}, +@file{/lib}, etc. dentro do contêiner. + +Por exemplo, o comando seguinte executa @file{/bin/ls} dentro de um contêiner +desse tipo: + +@example +guix shell -CF coreutils -- /bin/ls +@end example + +Execute @command{info \"(guix) Invoking guix shell\"} para mais informações."))) + + (entry (commit "28ade1bab207974cce6a014e7187968511fc5526") + (title + (en "@option{--with-source} is now recursive") + (de "@option{--with-source} ist jetzt rekursiv") + (fr "@option{--with-source} est dorénavant récursive") + (pt "@option{--with-source} agora é recursiva")) + (body + (en "The @option{--with-source} package transformation option now +uses the specified source for all matching packages, including dependencies. +This option is useful for all package maintainers, developers, and, in +general, all users who want Guix to facilitate their rights to modify their +software and share their changes. + +Run @command{info \"(guix) Package Transformation Options\"} for more +info.") + (de "Die Paketumwandlungsoption @option{--with-source} wird jetzt den +angegebenen Quellcode für sämtliche passende Pakete benutzen, Abhängigkeiten +eingeschlossen. Die Option hilft Paketbetreuern, Entwicklern und allgemein allen +Nutzern, die Guix benutzen, das Recht, ihre Software anzupassen und +Änderungen zu teilen, leichter auszuüben. + +Führen Sie für mehr Informationen @command{info \"(guix.de) +Paketumwandlungsoptionen\"} aus.") + (fr "L'option de transformation de paquet @option{--with-source} +s'applique désormais à tous les paquets correspondant, y compris les +dépendances. Cette option est utile pour les personnes qui maintiennent un +logiciel, en développent un ou, plus généralement, pour toute personne qui +souhaite que Guix facilite l'exercice de ses droits à modifier le logiciel et +à partager ses changements. + +Lancer @command{info \"(guix.fr) Options de transformation de paquets\"} pour +plus d'informations.") + (pt "A opção de transformação de pacote @option{--with-source} agora +usa a fonte especificada para todos os pacotes correspondentes, incluindo +dependências. Essa opção é útil para todos os mantenedores de pacotes, +desenvolvedores e usuários em geral que querem que o Guix facilite seu direito +de modificar seu software e compartilhar suas mudanças. + +Execute @command{info \"(guix) Package Transformation Options\"} para mais +informações."))) + (entry (commit "a13f5ead0265cf0fe11e60150547c09dfc8c45b0") (title (en "Guix System image creation is now documented") (de "Es gibt eine Dokumentation, wie Sie Guix-System-Abbilder („Images“) erzeugen") - (fr "La création d'images pour Guix System est à présent documentée")) + (fr "La création d'images pour Guix System est à présent documentée") + (pt "A criação de imagens do Guix System agora está documentada")) (body (en "The Guix System image API that allows you to create customized system images and turn them into actual bootable images is now documented in @@ -45,12 +378,18 @@ zu bringen.") permettant de créer des images personnalisées et de les transformer en images amorçables est désormais documentée dans le chapitre @code{Création d'images système}. Cette interface devrait être particulièrement utile aux personnes -qui essaient de faire fonctionner Guix sur de nouvelles machines."))) +qui essaient de faire fonctionner Guix sur de nouvelles machines.") + (pt "A API de imagens do Guix System que permite criar imagens de +sistema customizadas e torná-las inicializáveis agora está documentada no +capítulo @code{Creating System Images} da documentação do Guix. Isso é +particularmente útil para pessoas tentando portar o Guix System para um novo +hardware."))) (entry (commit "c8112f3bd95269ce4aca12dedbfe61bb6b37acae") (title (en "WSL system images support") (de "WSL-Systemabbilder werden unterstützt") - (fr "Support pour les images système WSL")) + (fr "Support pour les images système WSL") + (pt "Suporte a imagens de sistema WSL")) (body (en "The @command{guix system image} command can now generate system images for the Windows Subsystem for Linux. To get started, you can for @@ -82,6 +421,16 @@ exemple lancer la commande suivante depuis un répertoire de sources Guix : et importer l'image obtenue de cette manière : @command{wsl --import Guix ./guix ./wsl2-image.tar.gz} +@command{wsl -d Guix}.") + (pt "Agora o comando @command{guix system image} pode gerar imagens +de sistema para o Subsistema do Windows para Linux. Para começar, você pode +por exemplo rodar a partir de um checkout do repositório do Guix: + +@command{guix system image gnu/system/images/wsl2.scm}, + +e importar a imagem resultante da seguinte maneira: + +@command{wsl --import Guix ./guix ./wsl2-image.tar.gz} @command{wsl -d Guix}."))) (entry (commit "11a06d1e49f4d50d6789e05bbf35e2e145ff7838") (title @@ -124,18 +473,18 @@ uma transformação, como por exemplo (entry (commit "c188cf57f161c0c26e2d7c8516bd1ddd1492d686") (title - (en "Linux-libre kernel updated to 5.19") - (de "Linux-libre-Kernel wird auf 5.19 aktualisiert") - (fr "Le noyau linux-libre est mis à jour vers la 5.19") - (pt "Kernel linux-libre atualizado para 5.19")) + (en "Linux-libre kernel updated to 5.19") + (de "Linux-libre-Kernel wird auf 5.19 aktualisiert") + (fr "Le noyau linux-libre est mis à jour vers la 5.19") + (pt "Kernel linux-libre atualizado para 5.19")) (body - (en "The default version of the linux-libre kernel has been + (en "The default version of the linux-libre kernel has been updated to the 5.19 release series.") - (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert + (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert jetzt auf der 5.19-Versionsreihe.") - (fr "La version par défaut du noyau linux-libre est mise à jour + (fr "La version par défaut du noyau linux-libre est mise à jour vers la série des 5.19.") - (pt "A versão padrão do kernel linux-libre foi atualizada para a + (pt "A versão padrão do kernel linux-libre foi atualizada para a série do kernel 5.19."))) (entry (commit "a15542d26df42dabdb5e2f76d150ae200230c3b0") @@ -177,15 +526,15 @@ Execute @command{info \"(guix) Invoking guix style\"} para mais informações.") (entry (commit "2ec7ab2610eb67e26dab52b671eb29e46f64ea0f") (title - (en "Linux-libre kernel updated to 5.18") - (de "Linux-libre-Kernel wird auf 5.18 aktualisiert") - (fr "Le noyau linux-libre est mis à jour vers la 5.18")) + (en "Linux-libre kernel updated to 5.18") + (de "Linux-libre-Kernel wird auf 5.18 aktualisiert") + (fr "Le noyau linux-libre est mis à jour vers la 5.18")) (body - (en "The default version of the linux-libre kernel has been + (en "The default version of the linux-libre kernel has been updated to the 5.18 release series.") - (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert + (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert jetzt auf der 5.18-Versionsreihe.") - (fr "La version par défaut du noyau linux-libre est mise à jour + (fr "La version par défaut du noyau linux-libre est mise à jour vers la série des 5.18."))) (entry (commit "bdf422176739b473add66eb8cac9fdd8c654f794") @@ -317,11 +666,11 @@ Cela vient avec un nouveau système de construction pour paquets Elm---lancer (de "Linux-libre-Kernel wird auf 5.17 aktualisiert") (fr "Le noyau linux-libre est mis à jour vers la 5.17")) (body - (en "The default version of the linux-libre kernel has been + (en "The default version of the linux-libre kernel has been updated to the 5.17 release series.") - (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert + (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert jetzt auf der 5.17-Versionsreihe.") - (fr "La version par défaut du noyau linux-libre est mise à jour + (fr "La version par défaut du noyau linux-libre est mise à jour vers la série des 5.17."))) (entry (commit "c42b7baf13c7633b4512e94da7445299c57b247d") diff --git a/etc/release-manifest.scm b/etc/release-manifest.scm index e2be7f0eee..3ef3483300 100644 --- a/etc/release-manifest.scm +++ b/etc/release-manifest.scm @@ -51,18 +51,17 @@ TARGET." "openssh" "emacs" "vim" "python" "guile" "guix"))) (define %base-packages/armhf - ;; XXX: Relax requirements for armhf-linux for lack of enough build power. - (map (lambda (package) - (if (string=? (package-name package) "emacs") - (specification->package "emacs-no-x") - package)) - %base-packages)) + ;; The guix package doesn't build natively on armhf due to Guile memory + ;; issues compiling the package modules + (remove (lambda (package) + (string=? (package-name package) "guix")) + %base-packages)) (define %base-packages/hurd ;; XXX: For now we are less demanding of "i586-gnu". (map specification->package '("coreutils" "grep" "findutils" "gawk" "make" - "gcc-toolchain" "tar" "xz"))) + #;"gcc-toolchain" "tar" "xz"))) (define %system-packages ;; Key packages proposed by the Guix System installer. @@ -112,8 +111,6 @@ TARGET." (cond ((string=? system "i586-gnu") %base-packages/hurd) ((string=? system "armhf-linux") - ;; FIXME: Drop special case when ci.guix.gnu.org - ;; has more ARMv7 build power. %base-packages/armhf) ((string=? system "powerpc64le-linux") ;; FIXME: Drop 'bootstrap-tarballs' until diff --git a/etc/snippets/tempel/text-mode b/etc/snippets/tempel/text-mode index 8096d92e47..1cda91cba0 100644 --- a/etc/snippets/tempel/text-mode +++ b/etc/snippets/tempel/text-mode @@ -1,118 +1,158 @@ -*- mode: lisp-data -*- -text-mode :when (and (fboundp 'git-commit-mode) (git-commit-mode)) +text-mode :when (and (fboundp 'git-commit-mode) git-commit-mode) -(add\ - "gnu: Add " - (p - (with-temp-buffer - (magit-git-wash #'magit-diff-wash-diffs - "diff" "--staged") - (goto-char (point-min)) - (when (re-search-forward "\\+(define-public \\(\\S-+\\)" nil 'noerror) - (match-string-no-properties 1))) - var ) "." n n - "* " (car (magit-staged-files)) " (" (s var ) "): New variable.") +(add\ "gnu: Add " + (p (with-temp-buffer + (magit-git-wash #'magit-diff-wash-diffs + "diff" "--staged") + (goto-char (point-min)) + (when (re-search-forward "\\+(define-public \\(\\S-+\\)" + nil 'noerror) + (match-string-no-properties 1))) + var) + "." n n + "* " (p (or (car (magit-staged-files)) "")) + " (" (s var ) "): New variable.") -(remove\ - "gnu: Remove " - (p (with-temp-buffer - (magit-git-wash #'magit-diff-wash-diffs - "diff" "--staged") - (goto-char (point-min)) - (when (re-search-forward "\\-(define-public \\(\\S-+\\)" nil 'noerror) - (match-string-no-properties 1))) - var) "." n n - "* " (car (magit-staged-files)) " (" (s var) "): Delete variable.") +(remove\ "gnu: Remove " + (p (with-temp-buffer + (magit-git-wash #'magit-diff-wash-diffs + "diff" "--staged") + (goto-char (point-min)) + (when (re-search-forward "\\-(define-public \\(\\S-+\\)" + nil 'noerror) + (match-string-no-properties 1))) + var) + "." n n + "* " (p (or (car (magit-staged-files)) "")) + " (" (s var) "): Delete variable.") -(rename\ - "gnu: " - (p (with-temp-buffer - (magit-git-wash #'magit-diff-wash-diffs - "diff" "--staged") - (beginning-of-buffer) - (when (search-forward "-(define-public " nil 'noerror) - (thing-at-point 'sexp 'no-properties))) - prev-var) - ": Rename package to " - (p (with-temp-buffer - (magit-git-wash #'magit-diff-wash-diffs - "diff" "--staged") - (beginning-of-buffer) - (when (search-forward "+(define-public " nil 'noerror) - (thing-at-point 'sexp 'no-properties))) - new-var) "." n n - "* " (car (magit-staged-files)) " (" (s prev-var) "): Define in terms of" n - "'deprecated-package'." n - "(" (s new-var) "): New variable, formerly known as \"" (s prev-var) "\".") +(rename\ "gnu: " + (p (with-temp-buffer + (magit-git-wash #'magit-diff-wash-diffs + "diff" "--staged") + (beginning-of-buffer) + (when (search-forward "-(define-public " nil 'noerror) + (thing-at-point 'sexp 'no-properties))) + prev-var) + ": Rename package to " + (p (with-temp-buffer + (magit-git-wash #'magit-diff-wash-diffs + "diff" "--staged") + (beginning-of-buffer) + (when (search-forward "+(define-public " nil 'noerror) + (thing-at-point 'sexp 'no-properties))) + new-var) + "." n n + "* " (p (or (car (magit-staged-files)) "")) " (" (s prev-var) "): " + "Define in terms of" n + "'deprecated-package'." n + "(" (s new-var) "): New variable, formerly known as \"" + (s prev-var) "\".") -(update\ - "gnu: " - (p (with-temp-buffer - (magit-git-wash #'magit-diff-wash-diffs - "diff" "--staged") - (goto-char (point-min)) - (when (re-search-forward "^[ ]*(define-public \\(\\S-+\\)" nil 'noerror) - (match-string-no-properties 1))) - var) - ": Update to " - (p (with-temp-buffer - (magit-git-wash #'magit-diff-wash-diffs - "diff" "--staged") - (goto-char (point-min)) - (search-forward "name" nil 'noerror) - (search-forward "+" nil 'noerror) ; first change - (when (and (search-forward "version " nil 'noerror) - (looking-at-p "\"")) - (let ((end (save-excursion (search-forward "\")" nil 'noerror)))) - (when end - (forward-char) - (buffer-substring-no-properties (point) (- end 2)))))) - version) "." n n - "* " (car (magit-staged-files)) " (" (s var) "): Update to " (s version) "." - (mapconcat (lambda (file) (concat "* " file)) (cdr (magit-staged-files))) n) +(update\ "gnu: " + (p (with-temp-buffer + (magit-git-wash #'magit-diff-wash-diffs + "diff" "--staged") + (goto-char (point-min)) + (when (re-search-forward "^[ ]*(define-public \\(\\S-+\\)" + nil 'noerror) + (match-string-no-properties 1))) + var) + ": Update to " + (p (with-temp-buffer + (magit-git-wash #'magit-diff-wash-diffs + "diff" "--staged") + (goto-char (point-min)) + (search-forward "name" nil 'noerror) + (search-forward "+" nil 'noerror) ; first change + (when (and (search-forward "version " nil 'noerror) + (looking-at-p "\"")) + (let ((end (save-excursion (search-forward "\")" + nil 'noerror)))) + (when end + (forward-char) + (buffer-substring-no-properties (point) (- end 2)))))) + version) + "." n n + "* " (p (or (car (magit-staged-files)) "")) " (" (s var) "): " + "Update to " (s version) "." n + (mapconcat (lambda (file) (concat "* " file)) + (cdr (magit-staged-files)) + "\n")) -(addcl\ - "gnu: Add cl-" - (p (replace-regexp-in-string - "^cl-" "" (with-temp-buffer - (magit-git-wash #'magit-diff-wash-diffs - "diff" "--staged") - (beginning-of-buffer) - (when (search-forward "+(define-public " nil 'noerror) - (replace-regexp-in-string - "^sbcl-" "" - (thing-at-point 'sexp 'no-properties))))) - var) "." n n - "* " (car (magit-staged-files)) - " (cl-" (s var) ", ecl-" (s var) ", sbcl-" (s var) "): New variables.") +(addcl\ "gnu: Add cl-" + (p (replace-regexp-in-string + "^cl-" "" (with-temp-buffer + (magit-git-wash #'magit-diff-wash-diffs + "diff" "--staged") + (beginning-of-buffer) + (when (search-forward "+(define-public " nil 'noerror) + (replace-regexp-in-string + "^sbcl-" "" + (thing-at-point 'sexp 'no-properties))))) + var) + "." n n + "* " (p (or (car (magit-staged-files)) "")) + " (cl-" (s var) + ", ecl-" (s var) + ", sbcl-" (s var) "): New variables.") -(https\ - "gnu: " - (p (with-temp-buffer - (magit-git-wash #'magit-diff-wash-diffs - "diff" "--staged") - (goto-char (point-min)) - (when (re-search-forward "^[ ]*(define-public \\(\\S-+\\)" nil 'noerror) - (match-string-no-properties 1))) - var) - ": Use HTTPS home page." n n - "* " (car (magit-staged-files)) " (" (s var) ")[home-page]: Use HTTPS." n - (mapconcat (lambda (file) (concat "* " file)) (cdr (magit-staged-files))) n) +(https\ "gnu: " + (p (with-temp-buffer + (magit-git-wash #'magit-diff-wash-diffs + "diff" "--staged") + (goto-char (point-min)) + (when (re-search-forward "^[ ]*(define-public \\(\\S-+\\)" + nil 'noerror) + (match-string-no-properties 1))) + var) + ": Use HTTPS home page." n n + "* " (p (or (car (magit-staged-files)) "")) + " (" (s var) ")[home-page]: Use HTTPS." + n + (mapconcat (lambda (file) (concat "* " file)) + (cdr (magit-staged-files)) + "\n")) -(move\ - "gnu: " - (p (with-temp-buffer - (magit-git-wash #'magit-diff-wash-diffs - "diff" "--staged") - (goto-char (point-min)) - (when (re-search-forward "\\-(define-public \\(\\S-+\\)" nil 'noerror) - (match-string-no-properties 1))) - var) - ": Move to " - (concat "(" - (string-replace "\.scm" "" - (string-replace "/" " " (car (magit-staged-files)))) - ").") n - n "* " (car (magit-staged-files)) " (" (s var) "): Move from here…" - n "* " (cadr (magit-staged-files)) " (" (s var) "): …to here.") +(move\ "gnu: " + (p (with-temp-buffer + (magit-git-wash #'magit-diff-wash-diffs + "diff" "--staged") + (goto-char (point-min)) + (when (re-search-forward "\\-(define-public \\(\\S-+\\)" + nil 'noerror) + (match-string-no-properties 1))) + var) + ": Move to (" + (p (with-temp-buffer + (magit-git-wash #'magit-diff-wash-diffs + "diff" "--staged") + (goto-char (point-min)) + (when (and + (re-search-forward "\\+(define-public \\(\\S-+\\)" + nil 'noerror) + (re-search-backward "modified[ ]*\\(\\S-+\\)" + nil 'noerror)) + (string-replace + "\.scm" "" + (string-replace "/" " " + (match-string-no-properties 1))))) + new-module) + ")." n + n + "* " (p (with-temp-buffer + (magit-git-wash #'magit-diff-wash-diffs + "diff" "--staged") + (goto-char (point-min)) + (when (and + (re-search-forward "\\-(define-public \\(\\S-+\\)" + nil 'noerror) + (re-search-backward "modified[ ]*\\(\\S-+\\)" + nil 'noerror)) + (match-string-no-properties 1))) + source) + " (" (s var) "): Move from here…" n + "* " (concat (string-replace " " "/" new-module) ".scm") + " (" (s var) "): …to here.") diff --git a/etc/snippets/yas/log-edit-mode/guix-vc-commit-message-add-package b/etc/snippets/yas/log-edit-mode/guix-vc-commit-message-add-package new file mode 100644 index 0000000000..cc2dddb1e0 --- /dev/null +++ b/etc/snippets/yas/log-edit-mode/guix-vc-commit-message-add-package @@ -0,0 +1,9 @@ +# -*- mode: snippet -*- +# name: guix-vc-commit-message-add-package +# key: add +# -- +gnu: Add ${1:`(when (string-match "\\+(define-public \\(\\S-+\\)" vc-patch-string) + (match-string-no-properties 1 vc-patch-string))`}. + +* `(car (log-edit-files))` ($1): New variable. +`(mapconcat (lambda (file) (concat "* " file)) (cdr (log-edit-files)) "\n")` diff --git a/etc/snippets/yas/log-edit-mode/guix-vc-commit-message-remove-package b/etc/snippets/yas/log-edit-mode/guix-vc-commit-message-remove-package new file mode 100644 index 0000000000..9ab4ce6156 --- /dev/null +++ b/etc/snippets/yas/log-edit-mode/guix-vc-commit-message-remove-package @@ -0,0 +1,9 @@ +# -*- mode: snippet -*- +# name: guix-vc-commit-message-remove-package +# key: remove +# -- +gnu: Remove ${1:`(when (string-match "\\-(define-public \\(\\S-+\\)" vc-patch-string) + (match-string-no-properties 1 vc-patch-string))`}. + +* `(car (log-edit-files))` ($1): Delete variable. +`(mapconcat (lambda (file) (concat "* " file)) (cdr (log-edit-files)) "\n")` diff --git a/etc/snippets/yas/log-edit-mode/guix-vc-commit-message-rename-package b/etc/snippets/yas/log-edit-mode/guix-vc-commit-message-rename-package new file mode 100644 index 0000000000..89c85f8016 --- /dev/null +++ b/etc/snippets/yas/log-edit-mode/guix-vc-commit-message-rename-package @@ -0,0 +1,14 @@ +# -*- mode: snippet -*- +# name: guix-vc-commit-message-rename-package +# key: rename +# -- +gnu: ${1:`(when (string-match "\\-(define-public \\(\\S-+\\)" vc-patch-string) + (match-string-no-properties 1 vc-patch-string)) + `}: Rename package to ${2:` + (when (string-match "\\+(define-public \\(\\S-+\\)" vc-patch-string) + (match-string-no-properties 1 vc-patch-string))`}. + +* `(car (log-edit-files))` ($1): Define in terms of +'deprecated-package'. +($2): New variable, formerly known as "$1". +`(mapconcat (lambda (file) (concat "* " file)) (cdr (log-edit-files)) "\n")` diff --git a/etc/snippets/yas/log-edit-mode/guix-vc-commit-message-update-package b/etc/snippets/yas/log-edit-mode/guix-vc-commit-message-update-package new file mode 100644 index 0000000000..b5e41709f5 --- /dev/null +++ b/etc/snippets/yas/log-edit-mode/guix-vc-commit-message-update-package @@ -0,0 +1,12 @@ +# -*- mode: snippet -*- +# name: guix-vc-commit-message-update-package +# key: update +# -- + +gnu: ${1:`(when (string-match "^[ ]*(define-public \\(\\S-+\\)" vc-patch-string) + (match-string-no-properties 1 vc-patch-string))`}: Update to ${2:` + (when (string-match "^\\+[ ]*(version \"\\(.*\\)\"" vc-patch-string) + (match-string-no-properties 1 vc-patch-string))`}. + +* `(car (log-edit-files))` ($1): Update to $2.$0 +`(mapconcat (lambda (file) (concat "* " file)) (cdr (log-edit-files)) "\n")` diff --git a/etc/snippets/yas/log-edit-mode/guix-vc-commit-message-use-https-home-page b/etc/snippets/yas/log-edit-mode/guix-vc-commit-message-use-https-home-page new file mode 100644 index 0000000000..e0f170b015 --- /dev/null +++ b/etc/snippets/yas/log-edit-mode/guix-vc-commit-message-use-https-home-page @@ -0,0 +1,9 @@ +# -*- mode: snippet -*- +# name: guix-vc-commit-message-use-https-home-page +# key: https +# -- +gnu: ${1:`(when (string-match "^[ ]*(define-public \\(\\S-+\\)" vc-patch-string) + (match-string-no-properties 1 vc-patch-string))`}: Use HTTPS home page URI. + +* `(car (log-edit-files))` ($1)[home-page]: Use HTTPS URI. +`(mapconcat (lambda (file) (concat "* " file)) (cdr (log-edit-files)) "\n")` diff --git a/etc/teams.scm.in b/etc/teams.scm.in index ba22b80771..77c0127bb2 100644 --- a/etc/teams.scm.in +++ b/etc/teams.scm.in @@ -5,6 +5,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2022 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2022 Mathieu Othacehe <othacehe@gnu.org> +;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -34,6 +35,7 @@ (ice-9 format) (ice-9 regex) (ice-9 match) + (ice-9 rdelim) (guix ui) (git)) @@ -100,6 +102,8 @@ (make-regexp "^gnu/packages/python(-.+|)\\.scm$") "gnu/packages/sphinx.scm" "gnu/packages/tryton.scm" + "guix/build/pyproject-build-system.scm" + "guix/build-system/pyproject.scm" "guix/build/python-build-system.scm" "guix/build-system/python.scm" "guix/import/pypi.scm" @@ -129,13 +133,23 @@ the haskell-build-system." #:name "R team" #:description "The R language, CRAN and Bioconductor repositories, the \"cran\" importer, -and the r-build-system.")) +and the r-build-system." + #:scope (list "gnu/packages/bioconductor.scm" + "gnu/packages/cran.scm" + "guix/build/r-build-system.scm" + "guix/build-system/r.scm" + "guix/import/cran.scm" + "guix/scripts/import/cran.scm" + "tests/cran.scm"))) (define-team julia (team 'julia #:name "Julia team" #:description - "The Julia language, Julia packages, and the julia-build-system.")) + "The Julia language, Julia packages, and the julia-build-system." + #:scope (list (make-regexp "^gnu/packages/julia(-.+|)\\.scm$") + "guix/build/julia-build-system.scm" + "guix/build-system/julia.scm"))) (define-team ocaml (team 'ocaml @@ -175,7 +189,14 @@ and the maven-build-system." (define-team science (team 'science - #:name "Science team")) + #:name "Science team" + #:description "The main science disciplines and fields related +packages (e.g. Astronomy, Chemistry, Math, Physics etc.)" + #:scope (list "gnu/packages/algebra.scm" + "gnu/packages/astronomy.scm" + "gnu/packages/geo.scm" + "gnu/packages/chemestry.scm" + "gnu/packages/maths.scm"))) (define-team emacs (team 'emacs @@ -185,7 +206,10 @@ ecosystem." #:scope (list (make-regexp "^gnu/packages/emacs(-.+|)\\.scm$") "guix/build/emacs-build-system.scm" "guix/build/emacs-utils.scm" - "guix/build-system/emacs.scm"))) + "guix/build-system/emacs.scm" + "guix/import/elpa.scm" + "guix/scripts/import/elpa.scm" + "tests/elpa.scm"))) (define-team lisp (team 'lisp @@ -200,11 +224,23 @@ asdf-build-system." (define-team ruby (team 'ruby - #:name "Ruby team")) + #:name "Ruby team" + #:scope (list "gnu/packages/ruby.scm" + "guix/build/ruby-build-system.scm" + "guix/build-system/ruby.scm" + "guix/import/gem.scm" + "guix/scripts/import/gem.scm" + "tests/gem.scm"))) (define-team go (team 'go - #:name "Go team")) + #:name "Go team" + #:scope (list "gnu/packages/golang.scm" + "guix/build/go-build-system.scm" + "guix/build-system/go.scm" + "guix/import/go.scm" + "guix/scripts/import/go.scm" + "tests/go.scm"))) (define-team embedded-bootstrap (team 'embedded-bootstrap @@ -212,11 +248,23 @@ asdf-build-system." (define-team rust (team 'rust - #:name "Rust")) + #:name "Rust" + #:scope (list (make-regexp "^gnu/packages/(crates|rust)(-.+|)\\.scm$") + "guix/build/cargo-build-system.scm" + "guix/build/cargo-utils.scm" + "guix/build-system/cargo.scm" + "guix/import/crate.scm" + "guix/scripts/import/crate.scm" + "tests/crate.scm"))) (define-team kernel (team 'kernel - #:name "Linux-libre kernel team")) + #:name "Linux-libre kernel team" + #:scope (list "gnu/build/linux-modules.scm" + "gnu/packages/linux.scm" + "gnu/tests/linux-modules.scm" + "guix/build/linux-module-build-system.scm" + "guix/build-system/linux-module.scm"))) (define-team core (team 'core @@ -314,19 +362,35 @@ asdf-build-system." "gnu/packages/motti.scm" "guix/build/minetest-build-system.scm"))) +(define-team localization + (team 'localization + #:name "Localization (l10n) team" + #:description + "Localization of your system to specific languages." + #:scope (list "gnu/packages/anthy.scm" + "gnu/packages/fcitx5.scm" + "gnu/packages/fcitx.scm" + "gnu/packages/fonts.scm" + "gnu/packages/ibus.scm"))) + (define-team translations (team 'translations - #:name "Translations")) + #:name "Translations" + #:scope (list "etc/news.scm" + (make-regexp "^po/")))) (define-team installer (team 'installer #:name "Installer script and system installer" - #:scope - (list (make-regexp "^guix/installer(\\.scm$|/)")))) + #:scope (list (make-regexp "^gnu/installer(\\.scm$|/)")))) (define-team home (team 'home - #:name "Team for \"Guix Home\"")) + #:name "Team for \"Guix Home\"" + #:scope (list (make-regexp "^(gnu|guix/scripts)/home(\\.scm$|/)") + "tests/guix-home.sh" + "tests/home-import.scm" + "tests/home-services.scm"))) (define-team mentors (team 'mentors @@ -339,7 +403,8 @@ asdf-build-system." #:name "Mozilla" #:description "Taking care about Icecat and Icedove, built from Mozilla Firefox -and Thunderbird.")) +and Thunderbird." + #:scope (list "gnu/packages/gnuzilla.scm"))) (define-team racket (team 'racket @@ -347,13 +412,18 @@ and Thunderbird.")) #:description "The Racket language and Racket-based languages, Racket packages, Racket's variant of Chez Scheme, and development of a Racket build system and -importer.")) +importer." + #:scope (list "gnu/packages/chez.scm" + "gnu/packages/racket.scm"))) - -(define-member (person "Thiago Jung Bauermann" - "bauermann@kolabnow.com") - embedded-bootstrap translations) +(define-team reproduciblebuilds + (team 'reproduciblebuilds + #:name "Reproducible Builds team" + #:description + "Reproducible Builds tooling and issues that affect any guix packages." + #:scope (list "gnu/packages/diffoscope.scm"))) + (define-member (person "Eric Bavier" "bavier@posteo.net") science) @@ -374,6 +444,10 @@ importer.")) "andreas@enge.fr") science) +(define-member (person "Tobias Geerinckx-Rice" + "me@tobias.gr") + core kernel mentors) + (define-member (person "Björn Höfling" "bjoern.hoefling@bjoernhoefling.de") java) @@ -434,6 +508,26 @@ importer.")) "dev@jpoiret.xyz") core installer) +(define-member (person "(" + "paren@disroot.org") + home mentors) + +(define-member (person "Simon Tournier" + "zimon.toutoune@gmail.com") + julia core mentors) + +(define-member (person "Raghav Gururajan" + "rg@raghavgururajan.name") + mentors) + +(define-member (person "宋文武" + "iyzsong@envs.net") + games localization) + +(define-member (person "Vagrant Cascadian" + "vagrant@reproducible-builds.org") + reproduciblebuilds) + (define (find-team name) (or (hash-ref %teams (string->symbol name)) @@ -476,14 +570,16 @@ TEAMS when a patch is received by Debbugs." prefix (person-name member) (person-email member))) - (team-members team))) + (sort + (team-members team) + (lambda (m1 m2) (string<? (person-name m1) (person-name m2)))))) (define (list-teams) "Print all teams, their scope and their members." (define port* (current-output-port)) (define width* (%text-width)) - (hash-for-each - (lambda (key team) + (for-each + (lambda (team) (format port* "\ id: ~a @@ -504,7 +600,11 @@ description: ~a (scope (format #f "scope: ~{~s ~}~%" scope)))) (list-members team port* "+ ") (newline)) - %teams)) + (sort + (hash-map->list (lambda (key value) value) %teams) + (lambda (team1 team2) + (string<? (symbol->string (team-id team1)) + (symbol->string (team-id team2))))))) (define (diff-revisions rev-start rev-end) @@ -532,14 +632,38 @@ and REV-END, two git revision strings." (const 0)) files)) +(define (git-patch->commit-id file) + "Parse the commit ID from the first line of FILE, a patch produced with git." + (call-with-input-file file + (lambda (port) + (let ((m (string-match "^From ([0-9a-f]{40})" (read-line port)))) + (unless m + (error "invalid patch file:" file)) + (match:substring m 1))))) + +(define (git-patch->revisions file) + "Return the start and end revisions of FILE, a patch file produced with git." + (let* ((rev-end (git-patch->commit-id file)) + (rev-start (string-append rev-end "^"))) + (list rev-start rev-end))) + (define (main . args) (match args (("cc" . team-names) (apply cc (map find-team team-names))) + (("cc-members" patch-file) + (unless (file-exists? patch-file) + (error "patch file does not exist:" patch-file)) + (apply main "cc-members" (git-patch->revisions patch-file))) (("cc-members" rev-start rev-end) (apply cc (find-team-by-scope (diff-revisions rev-start rev-end)))) + (("get-maintainer" patch-file) + (apply main "list-members" + (map (compose symbol->string team-id) + (find-team-by-scope (apply diff-revisions + (git-patch->revisions patch-file)))))) (("list-teams" . args) (list-teams)) (("list-members" . team-names) @@ -549,6 +673,18 @@ and REV-END, two git revision strings." team-names)) (anything (format (current-error-port) - "Usage: etc/teams.scm <command> [<args>]~%")))) + "Usage: etc/teams.scm <command> [<args>] + +Commands: + cc <team-name> + get git send-email flags for cc-ing <team-name> + cc-members <start> <end> | patch + cc teams related to files changed between revisions or in a patch file + list-teams + list teams and their members + list-members <team-name> + list members belonging to <team-name> + get-maintainer <patch> + compatibility mode with Linux get_maintainer.pl~%")))) (apply main (cdr (command-line))) |