3
5
Fork 0
mirror of git://git.savannah.gnu.org/guix.git synced 2023-12-14 03:33:07 +01:00

Merge branch 'master' into staging

This commit is contained in:
Marius Bakke 2019-06-05 19:46:16 +02:00
commit d4721ff101
No known key found for this signature in database
GPG key ID: A2A06DF2A33A54FA
54 changed files with 690 additions and 1038 deletions

View file

@ -144,6 +144,7 @@ MODULES = \
guix/svn-download.scm \
guix/colors.scm \
guix/i18n.scm \
guix/diagnostics.scm \
guix/ui.scm \
guix/status.scm \
guix/build/android-ndk-build-system.scm \

View file

@ -4219,7 +4219,7 @@ to another like this:
@example
guix archive --export -r $(readlink -f ~/.guix-profile) | \
ssh the-machine guix-archive --import
ssh the-machine guix archive --import
@end example
@noindent
@ -12232,10 +12232,19 @@ The TCP port to listen for connections.
The host (and thus, network interface) to listen to. Use
@code{"0.0.0.0"} to listen on all the network interfaces.
@item @code{compression-level} (default: @code{3})
The gzip compression level at which substitutes are compressed. Use
@code{0} to disable compression altogether, and @code{9} to get the best
compression ratio at the expense of increased CPU usage.
@item @code{compression} (default: @code{'(("gzip" 3))})
This is a list of compression method/level tuple used when compressing
substitutes. For example, to compress all substitutes with @emph{both} lzip
at level 7 and gzip at level 9, write:
@example
'(("lzip" 7) ("gzip" 9))
@end example
Level 9 achieves the best compression ratio at the expense of increased CPU
usage, whereas level 1 achieves fast compression.
An empty list disables compression altogether.
@item @code{nar-path} (default: @code{"nar"})
The URL path at which ``nars'' can be fetched. @xref{Invoking guix

View file

@ -7,7 +7,7 @@ Description=Build daemon for GNU Guix
[Service]
ExecStart=@localstatedir@/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild
Environment=GUIX_LOCPATH='@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale' LC_ALL=en_US.utf8
Environment='GUIX_LOCPATH=@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale' LC_ALL=en_US.utf8
RemainAfterExit=yes
StandardOutput=syslog
StandardError=syslog

View file

@ -7,7 +7,7 @@ Description=Publish the GNU Guix store
[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
Environment='GUIX_LOCPATH=@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale' LC_ALL=en_US.utf8
RemainAfterExit=yes
StandardOutput=syslog
StandardError=syslog

View file

@ -517,6 +517,8 @@ upon error."
(unless (pre-mount)
(error "pre-mount actions failed")))
(setenv "EXT2FS_NO_MTAB_OK" "1")
(if root
;; The "--root=SPEC" kernel command-line option always provides a
;; string, but the string can represent a device, a UUID, or a
@ -533,6 +535,8 @@ upon error."
(for-each mount-file-system
(remove root-mount-point? mounts))
(setenv "EXT2FS_NO_MTAB_OK" #f)
(if to-load
(begin
(switch-root "/root")

View file

@ -1318,7 +1318,8 @@ USER-PARTITIONS, or return nothing."
(()
'())
((modules ...)
`((initrd-modules ',modules)))))
`((initrd-modules (append ',modules
%base-initrd-modules))))))
(define (user-partitions->configuration user-partitions)
"Return the configuration field for USER-PARTITIONS."

View file

@ -689,7 +689,6 @@ dist_patch_DATA = \
%D%/packages/patches/blender-2.79-newer-ffmpeg.patch \
%D%/packages/patches/blender-2.79-python-3.7-fix.patch \
%D%/packages/patches/boost-fix-icu-build.patch \
%D%/packages/patches/borg-fix-hard-link-preloading.patch \
%D%/packages/patches/byobu-writable-status.patch \
%D%/packages/patches/calibre-no-updates-dialog.patch \
%D%/packages/patches/calibre-remove-test-bs4.patch \
@ -983,11 +982,6 @@ dist_patch_DATA = \
%D%/packages/patches/libcroco-CVE-2017-7960.patch \
%D%/packages/patches/libcroco-CVE-2017-7961.patch \
%D%/packages/patches/libdrm-symbol-check.patch \
%D%/packages/patches/libevent-dns-tests.patch \
%D%/packages/patches/libevent-2.0-CVE-2016-10195.patch \
%D%/packages/patches/libevent-2.0-CVE-2016-10196.patch \
%D%/packages/patches/libevent-2.0-CVE-2016-10197.patch \
%D%/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch \
%D%/packages/patches/libexif-CVE-2016-6328.patch \
%D%/packages/patches/libexif-CVE-2017-7544.patch \
%D%/packages/patches/libgcrypt-make-yat2m-reproducible.patch \
@ -1167,7 +1161,6 @@ dist_patch_DATA = \
%D%/packages/patches/plink-endian-detection.patch \
%D%/packages/patches/plotutils-libpng-jmpbuf.patch \
%D%/packages/patches/podofo-cmake-3.12.patch \
%D%/packages/patches/polkit-CVE-2018-19788.patch \
%D%/packages/patches/portaudio-audacity-compat.patch \
%D%/packages/patches/portmidi-modular-build.patch \
%D%/packages/patches/postgresql-disable-resolve_symlinks.patch \

View file

@ -6,6 +6,7 @@
;;; Copyright © 2016 Christopher Andersson <christopher@8bits.nu>
;;; Copyright © 2016 Theodoros Foradis <theodoros@foradis.org>
;;; Copyright © 2016, 2017, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2019 Jens Mølgaard <jens@zete.tk>
;;;
;;; This file is part of GNU Guix.
;;;
@ -131,6 +132,22 @@ dictionaries, including personal ones.")
(home-page "http://aspell.net/")))
(define-public aspell-dict-ar
(aspell-dictionary "ar" "Arabic"
#:version "1.2-0"
#:prefix "aspell6-"
#:sha256
(base32
"1avw40bp8yi5bnkq64ihm2rldgw34lk89yz281q9bmndh95a47h4")))
(define-public aspell-dict-be
(aspell-dictionary "be" "Belarusian"
#:version "0.01"
#:prefix "aspell5-"
#:sha256
(base32
"1svls9p7rsfi3hs0afh0cssj006qb4v1ik2yzqgj8hm10c6as2sm")))
(define-public aspell-dict-ca
(aspell-dictionary "ca" "Catalan"
#:version "2.1.5-1"
@ -145,6 +162,14 @@ dictionaries, including personal ones.")
(base32
"01p92qj66cqb346gk7hjfynaap5sbcn85xz07kjfdq623ghr8v5s")))
(define-public aspell-dict-da
(aspell-dictionary "da" "Danish"
#:version "1.4.42-1"
#:prefix "aspell5-"
#:sha256
(base32
"1hfkmiyhgrx5lgrb2mffjbdn1hivrm73wcg7x0iid74p2yb0fjpp")))
(define-public aspell-dict-el
(aspell-dictionary "el" "Greek"
#:version "0.08-0"
@ -174,6 +199,14 @@ dictionaries, including personal ones.")
(base32
"1k5g328ac1hdpp6fsg57d8md6i0aqcwlszp3gbmp5706wyhpydmd")))
(define-public aspell-dict-fi
(aspell-dictionary "fi" "Finnish"
#:version "0.7-0"
#:prefix "aspell6-"
#:sha256
(base32
"07d5s08ba4dd89cmwy9icc01i6fjdykxlb9ravmhdrhi8mxz1mzq")))
(define-public aspell-dict-fr
(aspell-dictionary "fr" "French"
#:version "0.50-3"
@ -196,6 +229,14 @@ dictionaries, including personal ones.")
(base32
"13bhbghx5b8g0119g3wxd4n8mlf707y41vlf59irxjj0kynankfn")))
(define-public aspell-dict-hi
(aspell-dictionary "hi" "Hindi"
#:version "0.02-0"
#:prefix "aspell6-"
#:sha256
(base32
"0drs374qz4419zx1lf2k281ydxf2750jk5ailafj1x0ncz27h1ys")))
(define-public aspell-dict-it
(let ((version "2.4-20070901-0")
(sha256
@ -217,6 +258,13 @@ dictionaries, including personal ones.")
(home-page
"http://linguistico.sourceforge.net/pages/dizionario_italiano.html"))))
(define-public aspell-dict-mi
(aspell-dictionary "mi" "Maori"
#:version "0.50-0"
#:sha256
(base32
"12bxplpd348yx8d2q8qvahi9dlp7qf28qmanzhziwc7np8rixvmy")))
(define-public aspell-dict-nl
(aspell-dictionary "nl" "Dutch"
#:version "0.50-2"
@ -225,6 +273,13 @@ dictionaries, including personal ones.")
(base32
"0ffb87yjsh211hllpc4b9khqqrblial4pzi1h9r3v465z1yhn3j4")))
(define-public aspell-dict-nn
(aspell-dictionary "nn" "Norwegian Nynorsk"
#:version "0.50.1-1"
#:sha256
(base32
"0w2k5l5rbqpliripgqwiqixz5ghnjf7i9ggbrc4ly4vy1ia10rmc")))
(define-public aspell-dict-pt-br
(aspell-dictionary "pt-br" "Brazilian Portuguese"
#:version "20090702-0"
@ -233,6 +288,14 @@ dictionaries, including personal ones.")
(base32
"1y09lx9zf2rnp55r16b2vgj953l3538z1vaqgflg9mdvm555bz3p")))
(define-public aspell-dict-pt-pt
(aspell-dictionary "pt-pt" "Portuguese"
#:version "20070510-0"
#:prefix "aspell6-"
#:sha256
(base32
"1mnr994cwlag6shy8865ky99lymysiln07mbldcncahg90dagdxq")))
(define-public aspell-dict-ru
(aspell-dictionary "ru" "Russian"
#:version "0.99f7-1"
@ -248,6 +311,13 @@ dictionaries, including personal ones.")
(base32
"02jwkjhr32kvyibnyzgx3smbnm576jwdzg3avdf6zxwckhy5fw4v")))
(define-public aspell-dict-uk
(aspell-dictionary "uk" "Ukrainian"
#:version "1.4.0-0"
#:sha256
(base32
"137i4njvnslab6l4s291s11xijr5jsy75lbdph32f9y183lagy9m")))
;;;
;;; Hunspell packages made from the Aspell word lists.

View file

@ -174,14 +174,14 @@ Filter) modules follow the convention of 1V / Octave.")
"--enable-jack"
"--enable-sndfile"
"--enable-samplerate"
;; TODO: enable compilation with avcodec once available.
"--disable-avcodec")
"--enable-avcodec")
#:python ,python-2))
(inputs
`(("jack" ,jack-1)
("libsndfile" ,libsndfile)
("libsamplerate" ,libsamplerate)
("fftwf" ,fftwf)))
("fftwf" ,fftwf)
("ffmpeg" ,ffmpeg))) ; for libavcodec
(native-inputs
`(("pkg-config" ,pkg-config)))
(home-page "https://aubio.org/")

View file

@ -511,15 +511,13 @@ detection, and lossless compression.")
(define-public borg
(package
(name "borg")
(version "1.1.9")
(version "1.1.10")
(source
(origin
(method url-fetch)
(uri (pypi-uri "borgbackup" version))
(sha256
(base32
"0x95nhv4h34m8cxycbwc4xdz350saaxlgh727b23bgn4ci7gh3vx"))
(patches (search-patches "borg-fix-hard-link-preloading.patch"))
(base32 "1pp70p4n5kamvcbl4d8021ggrxhyykmg9isjg4yd3wags8b19d7g"))
(modules '((guix build utils)))
(snippet
'(begin
@ -541,7 +539,12 @@ detection, and lossless compression.")
;; Remove bundled shared libraries.
(with-directory-excursion "src/borg/algorithms"
(for-each delete-file-recursively
(list "blake2" "lz4" "zstd")))
(list "blake2" "lz4" "msgpack" "zstd")))
;; Purge some msgpack references from setup.py or the resulting
;; sources will be unbuildable.
(substitute* "setup.py"
((".*Extension\\('borg\\.algorithms\\.msgpack\\..*") "")
(("msgpack_packer_source, msgpack_unpacker_source") ""))
#t))))
(build-system python-build-system)
(arguments
@ -565,6 +568,12 @@ detection, and lossless compression.")
;; HOME=/homeless-shelter.
(setenv "HOME" "/tmp")
#t)))
(add-after 'unpack 'use-system-msgpack
(lambda _
(substitute* "src/borg/helpers.py"
(("prefer_system_msgpack = False")
"prefer_system_msgpack = True"))
#t))
;; The tests need to be run after Borg is installed.
(delete 'check)
(add-after 'install 'check

View file

@ -75,7 +75,7 @@
(define-public libsodium
(package
(name "libsodium")
(version "1.0.17")
(version "1.0.18")
(source (origin
(method url-fetch)
(uri (list (string-append
@ -86,7 +86,7 @@
"releases/old/libsodium-" version ".tar.gz")))
(sha256
(base32
"1cf2d9v1gylz1qcy2zappbf526qfmph6gd6fnn3w2b347vixmhqc"))))
"1h9ncvj23qbbni958knzsli8dvybcswcjbx0qjjgi922nf848l3g"))))
(build-system gnu-build-system)
(synopsis "Portable NaCl-based crypto library")
(description

View file

@ -154,6 +154,11 @@ contains the archive keys used for that.")
(("/usr") ubuntu))
(substitute* "debootstrap"
(("=/usr") (string-append "=" out)))
;; Ensure PATH works both in guix and within the debian chroot
;; workaround for: https://bugs.debian.org/929889
(substitute* "functions"
(("PATH=/sbin:/usr/sbin:/bin:/usr/bin")
"PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin"))
(substitute* (find-files "scripts" ".")
(("/usr/share/zoneinfo") (string-append tzdata "/share/zoneinfo")))
#t)))
@ -184,9 +189,5 @@ contains the archive keys used for that.")
(description "Debootstrap is used to create a Debian base system from
scratch, without requiring the availability of @code{dpkg} or @code{apt}.
It does this by downloading .deb files from a mirror site, and carefully
unpacking them into a directory which can eventually be chrooted into.
It is recommended to run @code{debootstrap --foreign --arch=...} and then
@code{chroot} into the directory, set the PATH and run @code{debootstrap
--second-stage} after.")
unpacking them into a directory which can eventually be chrooted into.")
(license license:gpl2)))

View file

@ -41,13 +41,13 @@
(define-public python-django
(package
(name "python-django")
(version "1.11.20")
(version "1.11.21")
(source (origin
(method url-fetch)
(uri (pypi-uri "Django" version))
(sha256
(base32
"0h90kdq8r4y8wa73hdxmyy5psnwlg61dcq3qsa098cpfiyh9vaa3"))))
"0adhcw8sx2mgwk9y2j760y96pqbip1ni3sf2v2ls5zxc9x93wwms"))))
(build-system python-build-system)
(arguments
'(#:modules ((srfi srfi-1)

View file

@ -667,6 +667,37 @@ programs.")
(define-public haskell-mode
(deprecated-package "haskell-mode" emacs-haskell-mode))
(define-public emacs-dante
(let ((commit "149dded24ca9cdff09a3d859e4b62638db4aadda")
(revision "1"))
(package
(name "emacs-dante")
(version (git-version "1.5" revision commit))
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/jyp/dante")
(commit commit)))
(sha256
(base32
"0i7kj3d6pfys6si9va5f36qzifyac9mahdl0qh40rya9m0syrkla"))
(file-name (git-file-name name version))))
(build-system emacs-build-system)
(propagated-inputs
`(("emacs-dash" ,emacs-dash)
("emacs-f" ,emacs-f)
("emacs-flycheck" ,emacs-flycheck)
("emacs-haskell-mode" ,emacs-haskell-mode)
("emacs-s" ,emacs-s)
("emacs-company" ,emacs-company)
("emacs-lcr" ,emacs-lcr)))
(home-page "https://github.com/jyp/dante")
(synopsis "Minor mode for interactive Haskell")
(description
"This package provides a minor mode for Haskell development that
supports type hints, definition-jumping, completion, and more.")
(license license:gpl3+))))
(define-public emacs-flycheck
(package
(name "emacs-flycheck")
@ -2523,6 +2554,28 @@ evaluated in the browser, just like Emacs does with an inferior Lisp process
in Lisp modes.")
(license license:unlicense)))
(define-public emacs-litable
(let ((commit "b0278f3f8dcff424bfbdfdefb545b1fbff33206f"))
(package
(name "emacs-litable")
(version (git-version "0.1" "0" commit))
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/Fuco1/litable.git")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"0bny40hv9a024n01clxns351cs4j4ifhgcc7m4743xncqf612p7g"))))
(build-system emacs-build-system)
(propagated-inputs
`(("emacs-dash" ,emacs-dash)))
(home-page "https://github.com/Fuco1/litable/")
(synopsis "Dynamic evaluation replacement with Emacs")
(description "This packages provides dynamic evaluation in Emacs.")
(license license:gpl3+))))
(define-public emacs-string-inflection
(package
(name "emacs-string-inflection")
@ -6969,7 +7022,7 @@ highlights quasi-quoted expressions.")
(define-public emacspeak
(package
(name "emacspeak")
(version "49.0")
(version "50.0")
(source
(origin
(method url-fetch)
@ -6978,7 +7031,7 @@ highlights quasi-quoted expressions.")
version "/emacspeak-" version ".tar.bz2"))
(sha256
(base32
"1smf26m7201z0bk49lzbw9zhbjfi6wylidfjixb8ylp6g0wnh8dx"))))
"0rsj7rzfyqmyidfsjrhjnxi2d43axx6r3gac1fhv5xkkbiiqzqkb"))))
(build-system gnu-build-system)
(arguments
'(#:make-flags (list (string-append "prefix="
@ -6986,13 +7039,10 @@ highlights quasi-quoted expressions.")
#:phases
(modify-phases %standard-phases
(replace 'configure
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(lisp (string-append out
"/share/emacs/site-lisp/emacspeak")))
(setenv "SHELL" (which "sh"))
;; Configure Emacspeak according to etc/install.org.
(invoke "make" "config"))))
(lambda _
(setenv "SHELL" (which "sh"))
;; Configure Emacspeak according to etc/install.org.
(invoke "make" "config")))
(add-after 'build 'build-espeak
(lambda _
(invoke "make" "espeak")))
@ -7009,7 +7059,7 @@ highlights quasi-quoted expressions.")
(for-each
(lambda (file)
(copy-recursively file (string-append lisp "/" file)))
'("etc" "info" "js" "lisp" "media" "scapes" "servers" "sounds"
'("etc" "info" "js" "lisp" "media" "servers" "sounds"
"stumpwm" "xsl"))
;; Make sure emacspeak is loaded from the correct directory.
(substitute* "etc/emacspeak.sh"
@ -8049,6 +8099,30 @@ from within Emacs. Restclient runs queries from a plan-text query sheet,
displays results pretty-printed in XML or JSON with @code{restclient-mode}")
(license license:public-domain))))
(define-public emacs-whitespace-cleanup-mode
(let ((commit "72427144b054b0238a86e1348c45d986b8830d9d")
(revision "1"))
(package
(name "emacs-whitespace-cleanup-mode")
(version (git-version "0.10" revision commit))
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/purcell/whitespace-cleanup-mode")
(commit commit)))
(sha256
(base32
"1zlk534jbwrsabcg3kqlzk4h4hwya60lh6q2n1v4yn4rpf5ghsag"))
(file-name (git-file-name name version))))
(build-system emacs-build-system)
(home-page "https://github.com/purcell/whitespace-cleanup-mode")
(synopsis "Intelligently call @code{whitespace-cleanup} on save")
(description
"This package provides a minor mode that calls
@code{whitespace-cleanup} before saving the current buffer only if the
whitespace in the buffer was initially clean.")
(license license:gpl3+))))
(define-public emacs-eimp
(let ((version "1.4.0")
(commit "2e7536fe6d8f7faf1bad7a8ae37faba0162c3b4f")
@ -8280,6 +8354,56 @@ multiplexer.")
editing RPM spec files.")
(license license:gpl2+)))
(define-public emacs-lcr
(package
(name "emacs-lcr")
(version "1.1")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/jyp/lcr")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32 "0mc55icihxqpf8b05990q1lc2nj2792wcgyr73xsiqx0963sjaj8"))))
(build-system emacs-build-system)
(propagated-inputs
`(("emacs-dash" ,emacs-dash)))
(home-page "https://github.com/jyp/lcr")
(synopsis "Lightweight coroutines in Emacs Lisp")
(description "This package provides macros that can translate code into
equivalent continuation-passing code, as well as miscellaneous utility
functions written in continuation-passing style.")
(license license:gpl3+)))
(define-public emacs-attrap
(let ((commit "3b092bb8f6755a97e6ecb7623b9d2dde58beba4a")
(revision "1"))
(package
(name "emacs-attrap")
(version (git-version "1.0" revision commit))
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/jyp/attrap")
(commit commit)))
(sha256
(base32
"05d32980saji8ja1pcv65l0s3dq7w0n5hpikbf246hciy1x067pp"))
(file-name (git-file-name name version))))
(build-system emacs-build-system)
(propagated-inputs
`(("emacs-dash" ,emacs-dash)
("emacs-f" ,emacs-f)
("emacs-flycheck" ,emacs-flycheck)
("emacs-s" ,emacs-s)))
(home-page "https://github.com/jyp/attrap")
(synopsis "Fix coding error at point")
(description "This package provides a command to fix the Flycheck error
at point.")
(license license:gpl3+))))
(define-public emacs-git-messenger
(package
(name "emacs-git-messenger")

View file

@ -1321,24 +1321,15 @@ a 2D editor view.")
(define-public guile-chickadee
(package
(name "guile-chickadee")
(version "0.3.0")
(version "0.4.0")
(source (origin
(method url-fetch)
(uri (string-append "https://files.dthompson.us/chickadee/"
"chickadee-" version ".tar.gz"))
(sha256
(base32
"0jl223dybsj5gvs7z4q60gnafj1b7kgi5mx0kj58m5knrp8qwg5h"))))
"1fdicsgls5cp0yffcm5vjmav67gv9bxhz1s3jvdvinspxb485x7l"))))
(build-system gnu-build-system)
(arguments
'(#:make-flags '("GUILE_AUTO_COMPILE=0")
#:phases
(modify-phases %standard-phases
(add-before 'configure 'patch-godir
(lambda _
;; Install compiled '.go' files into the site directory.
(substitute* "Makefile.in"
(("/ccache") "/site-ccache")))))))
(propagated-inputs
`(("guile-opengl" ,guile-opengl)
("guile-sdl2" ,guile-sdl2)))

View file

@ -447,7 +447,7 @@ from software emulation to complete hardware acceleration for modern GPUs.")
'("src/xdemos/glxdemo" "src/xdemos/glxgears"
"src/xdemos/glxinfo" "src/xdemos/glxheads"))
#t))))))
(home-page "http://mesa3d.org/")
(home-page "https://mesa3d.org/")
(synopsis "Utility tools for Mesa")
(description
"The mesa-utils package contains several utility tools for Mesa: glxdemo,
@ -619,7 +619,7 @@ OpenGL graphics API.")
`(("unzip" ,unzip)))
(inputs
`(("mesa" ,mesa)))
(home-page "http://www.lonesock.net/soil.html")
(home-page "https://www.lonesock.net/soil.html")
(synopsis "OpenGL texture loading library")
(description
"SOIL is a tiny C library used primarily for uploading textures into

View file

@ -4320,15 +4320,15 @@ work and the interface is well tested.")
(define-public eolie
(package
(name "eolie")
(version "0.9.60")
(version "0.9.62")
(source (origin
(method url-fetch)
(uri (string-append "https://gitlab.gnome.org/World/eolie/"
"uploads/3b2ceb7eb15860587db6886bfdd8a91e/"
"uploads/bb4aad19272cc636bd17f2f6602127fe/"
"eolie-" version ".tar.xz"))
(sha256
(base32
"1s9gkzxa6457v6bh0q8n1ijq1chd2jwgvhk5kppsnya7kxvsx8qh"))))
"06v76hg87fnhw45dil5vvl20myvaa38n1jqsl0lmkkq6af4mk8wx"))))
(build-system meson-build-system)
(arguments
`(#:glib-or-gtk? #t
@ -5881,6 +5881,9 @@ devices using the GNOME desktop.")
(("\"nm-connection-editor")
(string-append "\"" nm-applet
"/bin/nm-connection-editor")))
(substitute* '("panels/user-accounts/run-passwd.c")
(("/usr/bin/passwd")
"/run/setuid-programs/passwd"))
#t))))))
(native-inputs
`(("glib:bin" ,glib "bin") ; for glib-mkenums, etc.

View file

@ -224,14 +224,14 @@ compatible to GNU Pth.")
(define-public gnupg
(package
(name "gnupg")
(version "2.2.15")
(version "2.2.16")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnupg/gnupg/gnupg-" version
".tar.bz2"))
(sha256
(base32
"0m6lyphbb20i84isdxzfhcbzyc682hdrdv4aqkzmhrdksycf536b"))))
"1jqlzp9b3kpfp1dkjqskm67jjrhvf9nh3lzf45321p7m9d2qvgkc"))))
(build-system gnu-build-system)
(native-inputs
`(("pkg-config" ,pkg-config)))

View file

@ -426,7 +426,7 @@ from forcing GEXP-PROMISE."
#:system system
#:guile-for-build guile)))
(define %icecat-version "60.7.0-guix1")
(define %icecat-version "60.7.0-guix2")
;; 'icecat-source' is a "computed" origin that generates an IceCat tarball
;; from the corresponding upstream Firefox ESR tarball, using the 'makeicecat'
@ -450,7 +450,7 @@ from forcing GEXP-PROMISE."
(base32
"08x0nijh0ja5jza95a8y030ibk756bn7zlw3a3c4750yilfhqpqa"))))
(upstream-icecat-base-version "60.3.0") ; maybe older than base-version
(upstream-icecat-base-version "60.7.0") ; maybe older than base-version
(upstream-icecat-gnu-version "1")
(upstream-icecat-version (string-append upstream-icecat-base-version
"-gnu"
@ -463,7 +463,7 @@ from forcing GEXP-PROMISE."
"/icecat-" upstream-icecat-version ".tar.bz2"))
(sha256
(base32
"0icnl64nxcyf7dprpdpygxhabsvyhps8c3ixysj9bcdlj9q34ib1"))))
"09xqdfd8rwbn2n6m7n059qf1psbrj5v5kfzm7gg5xng22ddxawv8"))))
(gnuzilla-commit (string-append "v" upstream-icecat-base-version))
(gnuzilla-source
@ -475,7 +475,7 @@ from forcing GEXP-PROMISE."
(file-name (git-file-name "gnuzilla" upstream-icecat-base-version))
(sha256
(base32
"19wal7hkbb4wvk40hs6d7a5paal2bfday08hwssm02srcbv48fj0"))))
"1vqhb0py28hnwcynbaad304ziciz1kn5bv1qg2q4f7g13js3b1hf"))))
(makeicecat-patch
(local-file (search-patch "icecat-makeicecat.patch"))))
@ -545,10 +545,6 @@ from forcing GEXP-PROMISE."
#$upstream-icecat-gnu-version "\n"))
(("^DATA=.*")
"DATA=/tmp/gnuzilla/data\n")
(("^sed .* debian/" all)
(string-append "echo warning: skipped: " all))
(("^debian/rules " all)
(string-append "echo warning: skipped: " all))
(("^find extensions/gnu/ ")
"find extensions/gnu/ | sort ")
(("/bin/sed")
@ -560,21 +556,19 @@ from forcing GEXP-PROMISE."
(rename-file firefox-dir icecat-dir)
(with-directory-excursion icecat-dir
(for-each mkdir-p '("l10n" "debian/config"))
(call-with-output-file "debian/control" (const #t))
(mkdir "l10n")
(format #t "Running makeicecat script...~%")
(force-output)
(invoke "bash" "/tmp/gnuzilla/makeicecat")
(for-each delete-file-recursively '("l10n" "debian")))
(delete-file-recursively "l10n"))
(format #t (string-append "Unpacking l10n/* and debian/* from"
(format #t (string-append "Unpacking l10n/* from"
" upstream IceCat tarball...~%"))
(force-output)
(unless (string=? icecat-dir old-icecat-dir)
(symlink icecat-dir old-icecat-dir))
(invoke "tar" "xf" #+upstream-icecat-source
(string-append old-icecat-dir "/l10n")
(string-append old-icecat-dir "/debian"))
(string-append old-icecat-dir "/l10n"))
(format #t "Packing new IceCat tarball...~%")
(force-output)
@ -899,43 +893,16 @@ from forcing GEXP-PROMISE."
(add-before 'configure 'install-desktop-entry
(lambda* (#:key outputs #:allow-other-keys)
;; Install the '.desktop' file.
(define (swallow-%%-directives input output)
;; Interpret '%%ifdef' directives found in the '.desktop' file.
(let loop ((state 'top))
(match (read-line input 'concat)
((? eof-object?)
#t)
((? string? line)
(cond ((string-prefix? "%%ifdef" line)
(loop 'ifdef))
((string-prefix? "%%else" line)
(loop 'else))
((string-prefix? "%%endif" line)
(loop 'top))
(else
(case state
((top else)
(display line output)
(loop state))
(else
(loop state)))))))))
(let* ((out (assoc-ref outputs "out"))
(let* ((desktop-file "taskcluster/docker/icecat-snap/icecat.desktop")
(out (assoc-ref outputs "out"))
(applications (string-append out "/share/applications")))
(call-with-input-file "debian/icecat.desktop.in"
(lambda (input)
(call-with-output-file "debian/icecat.desktop"
(lambda (output)
(swallow-%%-directives input output)))))
(substitute* "debian/icecat.desktop"
(("@MOZ_DISPLAY_NAME@")
"GNU IceCat")
(("^Exec=@MOZ_APP_NAME@")
(string-append "Exec=" out "/bin/icecat"))
(("@MOZ_APP_NAME@")
"icecat"))
(install-file "debian/icecat.desktop" applications)
(substitute* desktop-file
(("^Exec=icecat") (string-append "Exec=" out "/bin/icecat"))
(("IceCat") "GNU IceCat")
(("Icon=.*") "Icon=icecat\n")
(("NewWindow") "new-window")
(("NewPrivateWindow") "new-private-window"))
(install-file desktop-file applications)
#t)))
(add-after 'install-desktop-entry 'install-icons
(lambda* (#:key outputs #:allow-other-keys)

View file

@ -1914,7 +1914,7 @@ values.")
(define-public go-github-com-mattn-go-isatty
(package
(name "go-github-com-mattn-go-isatty")
(version "0.0.4")
(version "0.0.7")
(source
(origin
(method git-fetch)
@ -1924,8 +1924,10 @@ values.")
(file-name (git-file-name name version))
(sha256
(base32
"0zs92j2cqaw9j8qx1sdxpv3ap0rgbs0vrvi72m40mg8aa36gd39w"))))
"1i77aq4gf9as03m8fpfh8fq49n4z9j7548blrcsidm1xhslzk5xd"))))
(build-system go-build-system)
(propagated-inputs
`(("go-golang-org-x-sys-unix" ,go-golang-org-x-sys-unix)))
(arguments
'(#:import-path "github.com/mattn/go-isatty"))
(home-page "https://github.com/mattn/go-isatty")

View file

@ -2238,20 +2238,20 @@ list of components. This module takes care of that for you.")
(license license:lgpl3+)))
(define-public guile-gi
(let ((commit "91753258892c4a1fbf7ed43ff793a00ac0f77cf6")
(revision "0"))
(let ((commit "26e885219ae6b31a83766564a2ecfe8c4532346f")
(revision "1"))
(package
(name "guile-gi")
(version (string-append "0.0.1-" revision "." (string-take commit 7)))
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://gitlab.com/janneke/guile-gi.git")
(url "https://github.com/spk121/guile-gi.git")
(commit commit)))
(file-name (string-append name "-" version))
(sha256
(base32
"1i76jfs90p8pbx0bfrjd4sias9380pmjb9x387rx7hav4kvnsd1b"))))
"1prbzhr4sqqihb34l6yfrz6sd8nghwd3q9wvbm36jnl2n3z2nxj8"))))
(build-system gnu-build-system)
(native-inputs `(("autoconf" ,autoconf)
("automake" ,automake)

View file

@ -17,6 +17,7 @@
;;; Copyright © 2018, 2019 Timothy Sample <samplet@ngyro.com>
;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
;;; Copyright © 2018, 2019 Gabriel Hondet <gabrielhondet@gmail.com>
;;; Copyright © 2019 Robert Vollmert <rob@vllmrt.net>
;;;
;;; This file is part of GNU Guix.
;;;
@ -6951,7 +6952,7 @@ upon it.")
(define-public ghc-conduit-extra
(package
(name "ghc-conduit-extra")
(version "1.3.0")
(version "1.3.1.1")
(source
(origin
(method url-fetch)
@ -6960,7 +6961,7 @@ upon it.")
version ".tar.gz"))
(sha256
(base32
"1bi2b6kdzy5f9glq46jzsk02has95jkxqz0cchpbmnakzhjwjh9c"))))
"0jaj350vv6mbb26gdwcqz4gwzfzrjydv5pis2da49wz1npbakcfw"))))
(build-system haskell-build-system)
(inputs
`(("ghc-conduit" ,ghc-conduit)

View file

@ -58,7 +58,7 @@
`(("python" ,python-2))) ; for 'event_rpcgen.py'
(native-inputs
`(("which" ,which)))
(home-page "http://libevent.org/")
(home-page "https://libevent.org/")
(synopsis "Event notification library")
(description
"The libevent API provides a mechanism to execute a callback
@ -72,27 +72,6 @@ then add or remove events dynamically without having to change the event
loop.")
(license bsd-3)))
(define-public libevent-2.0
(package
(inherit libevent)
(version "2.0.22")
(source (origin
(method url-fetch)
(uri (string-append
"https://github.com/libevent/libevent/releases/download/release-"
version "-stable/libevent-" version "-stable.tar.gz"))
(sha256
(base32
"18qz9qfwrkakmazdlwxvjmw8p76g70n3faikwvdwznns1agw9hki"))
(patches
(search-patches
"libevent-dns-tests.patch"
"libevent-2.0-CVE-2016-10195.patch"
"libevent-2.0-CVE-2016-10196.patch"
"libevent-2.0-CVE-2016-10197.patch"
"libevent-2.0-evbuffer-add-use-last-with-datap.patch"))))
(arguments '())))
(define-public libev
(package
(name "libev")

View file

@ -430,8 +430,8 @@ for ARCH and optionally VARIANT, or #f if there is no such configuration."
It has been modified to remove all non-free binary blobs.")
(license license:gpl2)))
(define %linux-libre-version "5.1.6")
(define %linux-libre-hash "0m7yi23wlgrh16z5z9dxb7dd64i2irrkdwxi71i88mradn55iq42")
(define %linux-libre-version "5.1.7")
(define %linux-libre-hash "0hr4sbapdpgdkb6xg1f7bpc31242yiqdvy5sfpymsrzfslr8vwy1")
(define %linux-libre-5.1-patches
(list %boot-logo-patch
@ -448,8 +448,8 @@ It has been modified to remove all non-free binary blobs.")
(make-linux-libre-headers %linux-libre-version
%linux-libre-hash))
(define %linux-libre-4.19-version "4.19.47")
(define %linux-libre-4.19-hash "155rn6f555d2r1bqzi74zdif44ay7gk25xxjgw36s9n26dml8wf7")
(define %linux-libre-4.19-version "4.19.48")
(define %linux-libre-4.19-hash "04jwwzc9wbhx33i4bhm3vbs52vxlb8kjdmfjpfild94xbk8m2wy4")
(define %linux-libre-4.19-patches
(list %boot-logo-patch
@ -957,7 +957,7 @@ slabtop, and skill.")
(define-public e2fsprogs
(package
(name "e2fsprogs")
(version "1.44.5")
(version "1.45.2")
(source (origin
(method url-fetch)
(uri (string-append
@ -966,7 +966,7 @@ slabtop, and skill.")
name "-" version ".tar.xz"))
(sha256
(base32
"1ff56h6h1h17sj2zvlddv5c88nmbx46p1fcbh6b0s5k9kl3b6pms"))))
"02g0cm72sgz709s9pkg4mvj56m7bgs7rwnyc2cp7cvg3j6pcjlj9"))))
(build-system gnu-build-system)
(inputs `(("util-linux" ,util-linux)))
(native-inputs `(("pkg-config" ,pkg-config)

View file

@ -351,14 +351,14 @@ aliasing facilities to work just as they would on normal mail.")
(define-public mutt
(package
(name "mutt")
(version "1.11.4")
(version "1.12.0")
(source (origin
(method url-fetch)
(uri (string-append "https://bitbucket.org/mutt/mutt/downloads/"
"mutt-" version ".tar.gz"))
(sha256
(base32
"0098pr4anmq2a0id8wfi2vci3cgcfwf9k4q411w22xn8lrz3aldn"))
"13zr2fpql33sdbsjsiaa952js5bvphc1x4lqsj36qyzdhj3l84na"))
(patches (search-patches "mutt-store-references.patch"))))
(build-system gnu-build-system)
(inputs

View file

@ -2760,7 +2760,7 @@ to BMP, JPEG or PNG image formats.")
(define-public maxima
(package
(name "maxima")
(version "5.42.2")
(version "5.43.0")
(source
(origin
(method url-fetch)
@ -2768,7 +2768,7 @@ to BMP, JPEG or PNG image formats.")
version "-source/" name "-" version ".tar.gz"))
(sha256
(base32
"0kdncy6137sg3rradirxzj10mkcvafxd892zlclwhr9sa7b12zhn"))
"0xyahp4c6509haxh4n1swiqm3421gplkdisa0zypclh3252sbzfw"))
(patches (search-patches "maxima-defsystem-mkdir.patch"))))
(build-system gnu-build-system)
(inputs
@ -2802,11 +2802,18 @@ to BMP, JPEG or PNG image formats.")
(let* ((sed (string-append (assoc-ref inputs "sed") "/bin/sed"))
(coreutils (assoc-ref inputs "coreutils"))
(dirname (string-append coreutils "/bin/dirname"))
(head (string-append coreutils "/bin/head")))
(head (string-append coreutils "/bin/head"))
(perl (string-append (assoc-ref inputs "perl") "/bin/perl"))
(python (string-append (assoc-ref inputs "python")
"/bin/python3")))
(substitute* "src/maxima.in"
(("sed ") (string-append sed " "))
(("dirname") dirname)
(("head") head))
(substitute* "doc/info/Makefile.in"
(("/usr/bin/env perl") perl))
(substitute* "doc/info/build_html.sh.in"
(("python") python))
#t)))
(add-before 'check 'pre-check
(lambda _
@ -2837,9 +2844,6 @@ to BMP, JPEG or PNG image formats.")
(with-directory-excursion out
(mkdir-p "share/emacs")
(mkdir-p "share/doc")
(symlink
(string-append datadir "/emacs/")
(string-append out "/share/emacs/site-lisp"))
(symlink
(string-append datadir "/doc/")
(string-append out "/share/doc/maxima"))
@ -2871,7 +2875,7 @@ point numbers.")
(define-public wxmaxima
(package
(name "wxmaxima")
(version "19.03.1")
(version "19.05.7")
(source
(origin
(method git-fetch)
@ -2881,7 +2885,7 @@ point numbers.")
(file-name (git-file-name name version))
(sha256
(base32
"1qkf4jg86xnn3wk3782ffmfz12axb92dkjagcz3ffzw2wi1rclml"))))
"0zaz71fh156b9inrxf86scnix247al5pl9v18cxhjxcm0lanqxdp"))))
(build-system cmake-build-system)
(native-inputs
`(("gettext" ,gettext-minimal)))

View file

@ -91,7 +91,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
(define-public mpd
(package
(name "mpd")
(version "0.21.8")
(version "0.21.9")
(source (origin
(method url-fetch)
(uri
@ -100,7 +100,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
"/mpd-" version ".tar.xz"))
(sha256
(base32
"0mwpkbjsljj1khlnnjanvw3pgxbhsdl0bh2k9bxnpijn2gqq7q13"))))
"0ghda8g9q0bi6nrvl6n756d8f45spqpblkh77mnb4k9gmiv57qir"))))
(build-system meson-build-system)
(arguments
`(#:configure-flags '("-Ddocumentation=true") ; The default is 'false'...

View file

@ -1485,15 +1485,15 @@ procedure calls (RPCs).")
(define-public openvswitch
(package
(name "openvswitch")
(version "2.10.1")
(version "2.11.1")
(source (origin
(method url-fetch)
(uri (string-append
"http://openvswitch.org/releases/openvswitch-"
"https://www.openvswitch.org/releases/openvswitch-"
version ".tar.gz"))
(sha256
(base32
"103wi6k8xal0z1pyy680gms56skagh6jawa2ja588ljr55jcg4sg"))))
"1p5mv44jaslvrr1ym15smqna19y0gi4vqcsyj58625vv9bj6laf1"))))
(build-system gnu-build-system)
(arguments
'(;; FIXME: many tests fail with:
@ -1529,7 +1529,7 @@ procedure calls (RPCs).")
`(("libcap-ng" ,libcap-ng)
("openssl" ,openssl)))
(synopsis "Virtual network switch")
(home-page "http://www.openvswitch.org/")
(home-page "https://www.openvswitch.org/")
(description
"Open vSwitch is a multilayer virtual switch. It is designed to enable
massive network automation through programmatic extension, while still

View file

@ -310,6 +310,15 @@ and vice versa.")
(sha256
(base32 "1rimpjsdnmw8f5b7k558cic41p2qy2n2yrlqp5vh7mp4162hk0py"))))
(build-system gnu-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'install 'install-dict
(lambda* (#:key make-flags #:allow-other-keys)
(begin
(chmod (string-append "util/cracklib-format") #o755)
(apply invoke "make" "dict" make-flags)
#t))))))
(synopsis "Password checking library")
(home-page "https://github.com/cracklib/cracklib")
(description

View file

@ -1,157 +0,0 @@
Fix a bug that would cause the test suite to hang:
https://github.com/borgbackup/borg/issues/4350
Patch copied from upstream source repository:
https://github.com/borgbackup/borg/commit/18242ab9e2f26c450b8507aa1d5eceadab8ad027
From 18242ab9e2f26c450b8507aa1d5eceadab8ad027 Mon Sep 17 00:00:00 2001
From: Thomas Waldmann <tw@waldmann-edv.de>
Date: Thu, 2 May 2019 21:02:26 +0200
Subject: [PATCH] preload chunks for hardlink slaves w/o preloaded master,
fixes #4350
also split the hardlink extraction test into 2 tests.
(cherry picked from commit f33f318d816505161d1449a02ddfdeb97d6fe80a)
---
src/borg/archive.py | 42 +++++++++++++++++++++++++++++-----
src/borg/archiver.py | 5 ++--
src/borg/testsuite/archiver.py | 20 +++++++++-------
3 files changed, 51 insertions(+), 16 deletions(-)
diff --git a/src/borg/archive.py b/src/borg/archive.py
index adc1f42c..0793672a 100644
--- a/src/borg/archive.py
+++ b/src/borg/archive.py
@@ -192,7 +192,7 @@ def __init__(self, repository, key):
self.repository = repository
self.key = key
- def unpack_many(self, ids, filter=None, preload=False):
+ def unpack_many(self, ids, filter=None, partial_extract=False, preload=False, hardlink_masters=None):
"""
Return iterator of items.
@@ -209,12 +209,40 @@ def unpack_many(self, ids, filter=None, preload=False):
for item in items:
if 'chunks' in item:
item.chunks = [ChunkListEntry(*e) for e in item.chunks]
+
+ def preload(chunks):
+ self.repository.preload([c.id for c in chunks])
+
if filter:
items = [item for item in items if filter(item)]
+
if preload:
- for item in items:
- if 'chunks' in item:
- self.repository.preload([c.id for c in item.chunks])
+ if filter and partial_extract:
+ # if we do only a partial extraction, it gets a bit
+ # complicated with computing the preload items: if a hardlink master item is not
+ # selected (== not extracted), we will still need to preload its chunks if a
+ # corresponding hardlink slave is selected (== is extracted).
+ # due to a side effect of the filter() call, we now have hardlink_masters dict populated.
+ masters_preloaded = set()
+ for item in items:
+ if 'chunks' in item: # regular file, maybe a hardlink master
+ preload(item.chunks)
+ # if this is a hardlink master, remember that we already preloaded it:
+ if 'source' not in item and hardlinkable(item.mode) and item.get('hardlink_master', True):
+ masters_preloaded.add(item.path)
+ elif 'source' in item and hardlinkable(item.mode): # hardlink slave
+ source = item.source
+ if source not in masters_preloaded:
+ # we only need to preload *once* (for the 1st selected slave)
+ chunks, _ = hardlink_masters[source]
+ preload(chunks)
+ masters_preloaded.add(source)
+ else:
+ # easy: we do not have a filter, thus all items are selected, thus we need to preload all chunks.
+ for item in items:
+ if 'chunks' in item:
+ preload(item.chunks)
+
for item in items:
yield item
@@ -433,8 +461,10 @@ def item_filter(self, item, filter=None):
return False
return filter(item) if filter else True
- def iter_items(self, filter=None, preload=False):
- for item in self.pipeline.unpack_many(self.metadata.items, preload=preload,
+ def iter_items(self, filter=None, partial_extract=False, preload=False, hardlink_masters=None):
+ assert not (filter and partial_extract and preload) or hardlink_masters is not None
+ for item in self.pipeline.unpack_many(self.metadata.items, partial_extract=partial_extract,
+ preload=preload, hardlink_masters=hardlink_masters,
filter=lambda item: self.item_filter(item, filter)):
yield item
diff --git a/src/borg/archiver.py b/src/borg/archiver.py
index 957959d6..dcc20455 100644
--- a/src/borg/archiver.py
+++ b/src/borg/archiver.py
@@ -755,7 +755,8 @@ def peek_and_store_hardlink_masters(item, matched):
else:
pi = None
- for item in archive.iter_items(filter, preload=True):
+ for item in archive.iter_items(filter, partial_extract=partial_extract,
+ preload=True, hardlink_masters=hardlink_masters):
orig_path = item.path
if strip_components:
item.path = os.sep.join(orig_path.split(os.sep)[strip_components:])
@@ -997,7 +998,7 @@ def item_to_tarinfo(item, original_path):
return None, stream
return tarinfo, stream
- for item in archive.iter_items(filter, preload=True):
+ for item in archive.iter_items(filter, preload=True, hardlink_masters=hardlink_masters):
orig_path = item.path
if strip_components:
item.path = os.sep.join(orig_path.split(os.sep)[strip_components:])
diff --git a/src/borg/testsuite/archiver.py b/src/borg/testsuite/archiver.py
index c35ad800..935b3d79 100644
--- a/src/borg/testsuite/archiver.py
+++ b/src/borg/testsuite/archiver.py
@@ -823,7 +823,18 @@ def test_mount_hardlinks(self):
assert open('input/dir1/subdir/hardlink', 'rb').read() == b'123456'
@requires_hardlinks
- def test_extract_hardlinks(self):
+ def test_extract_hardlinks1(self):
+ self._extract_hardlinks_setup()
+ with changedir('output'):
+ self.cmd('extract', self.repository_location + '::test')
+ assert os.stat('input/source').st_nlink == 4
+ assert os.stat('input/abba').st_nlink == 4
+ assert os.stat('input/dir1/hardlink').st_nlink == 4
+ assert os.stat('input/dir1/subdir/hardlink').st_nlink == 4
+ assert open('input/dir1/subdir/hardlink', 'rb').read() == b'123456'
+
+ @requires_hardlinks
+ def test_extract_hardlinks2(self):
self._extract_hardlinks_setup()
with changedir('output'):
self.cmd('extract', self.repository_location + '::test', '--strip-components', '2')
@@ -839,13 +850,6 @@ def test_extract_hardlinks(self):
assert open('input/dir1/subdir/hardlink', 'rb').read() == b'123456'
assert os.stat('input/dir1/aaaa').st_nlink == 2
assert os.stat('input/dir1/source2').st_nlink == 2
- with changedir('output'):
- self.cmd('extract', self.repository_location + '::test')
- assert os.stat('input/source').st_nlink == 4
- assert os.stat('input/abba').st_nlink == 4
- assert os.stat('input/dir1/hardlink').st_nlink == 4
- assert os.stat('input/dir1/subdir/hardlink').st_nlink == 4
- assert open('input/dir1/subdir/hardlink', 'rb').read() == b'123456'
def test_extract_include_exclude(self):
self.cmd('init', '--encryption=repokey', self.repository_location)
--
2.21.0

View file

@ -3,10 +3,10 @@ in a snippet without network access. After this patch is applied, some
additional changes will be made using 'substitute*'.
diff --git a/makeicecat b/makeicecat
index aa46b94..db27a86 100644
index 5a4390b..fcfa143 100644
--- a/makeicecat
+++ b/makeicecat
@@ -36,75 +36,75 @@ export DEBFULLNAME="Ruben Rodriguez"
@@ -29,55 +29,55 @@ SOURCEDIR=icecat-$FFVERSION
DATA="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"/data
@ -25,6 +25,7 @@ index aa46b94..db27a86 100644
-wget -N https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.xz.asc
-gpg --recv-keys --keyserver keyserver.ubuntu.com 24C6F355
-gpg --verify firefox-${FFVERSION}esr.source.tar.xz.asc
-echo -n 0a5f0c1d8d1e9443d85083d37fec32e5cc15c1001ea992d49745490065b4a023 firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
-
-echo Extracting Firefox tarball
-tar -xf firefox-${FFVERSION}esr.source.tar.xz
@ -36,49 +37,13 @@ index aa46b94..db27a86 100644
+# wget -N https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.xz.asc
+# gpg --recv-keys --keyserver keyserver.ubuntu.com 24C6F355
+# gpg --verify firefox-${FFVERSION}esr.source.tar.xz.asc
+# echo -n 0a5f0c1d8d1e9443d85083d37fec32e5cc15c1001ea992d49745490065b4a023 firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
+#
+# echo Extracting Firefox tarball
+# tar -xf firefox-${FFVERSION}esr.source.tar.xz
+#
+# mv firefox-${FFVERSION} $SOURCEDIR
###############################################################################
# Retrieve /debian from Ubuntu
###############################################################################
-rm -rf firefox.$CODENAME
-bzr branch https://code.launchpad.net/~mozillateam/firefox/firefox.$CODENAME
-cd firefox.$CODENAME
-bzr revert -r$REVISION
-echo '3.0 (native)' > debian/source/format
-
-for PATCH in ubuntu-bookmarks.patch ubuntu-ua-string-changes.patch unity-menubar.patch ubuntu-search-defaults.patch fix-make-package-tests-without-webrtc.patch revert-upstream-search-engine-changes.patch
-do
- rm debian/patches/$PATCH
- sed "/$PATCH/d" -i debian/patches/series
-done
-sed "/test-/d" -i debian/patches/series
-cd ..
-
-mv firefox.$CODENAME/debian $SOURCEDIR
-rm -rf firefox.$CODENAME
+# rm -rf firefox.$CODENAME
+# bzr branch https://code.launchpad.net/~mozillateam/firefox/firefox.$CODENAME
+# cd firefox.$CODENAME
+# bzr revert -r$REVISION
+# echo '3.0 (native)' > debian/source/format
+#
+# for PATCH in ubuntu-bookmarks.patch ubuntu-ua-string-changes.patch unity-menubar.patch ubuntu-search-defaults.patch fix-make-package-tests-without-webrtc.patch revert-upstream-search-engine-changes.patch
+# do
+# rm debian/patches/$PATCH
+# sed "/$PATCH/d" -i debian/patches/series
+# done
+# sed "/test-/d" -i debian/patches/series
+# cd ..
+#
+# mv firefox.$CODENAME/debian $SOURCEDIR
+# rm -rf firefox.$CODENAME
###############################################################################
# Retrieve l10n
###############################################################################
@ -133,19 +98,10 @@ index aa46b94..db27a86 100644
#for patch in $DATA/patches/*; do
# echo Patching with file: $patch
@@ -720,7 +720,7 @@ debian/rules debian/control
touch -d "yesterday" debian/control
debian/rules debian/control
-echo | dch -b -D stable -v "$ICECATVERSION" "Converted into IceCat (http://www.gnu.org/software/gnuzilla/)"
+# echo | dch -b -D stable -v "$ICECATVERSION" "Converted into IceCat (http://www.gnu.org/software/gnuzilla/)"
sed "1s/firefox/icecat/" -i debian/changelog
touch configure js/src/configure
@@ -734,6 +734,6 @@ sed 's/777/755/;' -i toolkit/crashreporter/google-breakpad/Makefile.in
@@ -590,6 +590,6 @@ sed 's/777/755/;' -i toolkit/crashreporter/google-breakpad/Makefile.in
# Fix CVE-2012-3386
/bin/sed 's/chmod a+w/chmod u+w/' -i ./js/src/ctypes/libffi/Makefile.in ./toolkit/crashreporter/google-breakpad/Makefile.in ./toolkit/crashreporter/google-breakpad/src/third_party/glog/Makefile.in || true
-cd ..
-echo Packaging tarball
-tar cfj icecat-$ICECATVERSION.tar.bz2 $SOURCEDIR

View file

@ -1,41 +0,0 @@
Fix CVE-2016-10195 (buffer overread in libevent's DNS code):
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10195
https://github.com/libevent/libevent/issues/317
Patch copied from upstream source repository:
https://github.com/libevent/libevent/commit/96f64a022014a208105ead6c8a7066018449d86d
From 3c570970516f48da35f42fef98276531fcc0abaa Mon Sep 17 00:00:00 2001
From: Azat Khuzhin <a3at.mail@gmail.com>
Date: Mon, 1 Feb 2016 17:32:09 +0300
Subject: [PATCH] evdns: name_parse(): fix remote stack overread
---
evdns.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/evdns.c b/evdns.c
index 60b10485..137c24ea 100644
--- a/evdns.c
+++ b/evdns.c
@@ -960,7 +960,6 @@ name_parse(u8 *packet, int length, int *idx, char *name_out, int name_out_len) {
for (;;) {
u8 label_len;
- if (j >= length) return -1;
GET8(label_len);
if (!label_len) break;
if (label_len & 0xc0) {
@@ -981,6 +980,7 @@ name_parse(u8 *packet, int length, int *idx, char *name_out, int name_out_len) {
*cp++ = '.';
}
if (cp + label_len >= end) return -1;
+ if (j + label_len > length) return -1;
memcpy(cp, packet + j, label_len);
cp += label_len;
j += label_len;
--
2.11.0

View file

@ -1,41 +0,0 @@
Fix CVE-2016-10196 (buffer overflow in evutil):
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10196
https://github.com/libevent/libevent/issues/318
Patch copied from upstream source repository:
https://github.com/libevent/libevent/commit/329acc18a0768c21ba22522f01a5c7f46cacc4d5
From 28bdc2f3f62259d21ccaf7be2b60ef0a53e6f342 Mon Sep 17 00:00:00 2001
From: Azat Khuzhin <a3at.mail@gmail.com>
Date: Sun, 31 Jan 2016 00:57:16 +0300
Subject: [PATCH] evutil_parse_sockaddr_port(): fix buffer overflow
---
evutil.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/evutil.c b/evutil.c
index 33445170..e2dfe6e4 100644
--- a/evutil.c
+++ b/evutil.c
@@ -1808,12 +1808,12 @@ evutil_parse_sockaddr_port(const char *ip_as_string, struct sockaddr *out, int *
cp = strchr(ip_as_string, ':');
if (*ip_as_string == '[') {
- int len;
+ size_t len;
if (!(cp = strchr(ip_as_string, ']'))) {
return -1;
}
- len = (int) ( cp-(ip_as_string + 1) );
- if (len > (int)sizeof(buf)-1) {
+ len = ( cp-(ip_as_string + 1) );
+ if (len > sizeof(buf)-1) {
return -1;
}
memcpy(buf, ip_as_string+1, len);
--
2.11.0

View file

@ -1,39 +0,0 @@
Fix CVE-2016-10197 (out of bounds read on empty hostnames in evdns):
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10197
https://github.com/libevent/libevent/issues/332
Patch copied from upstream source repository:
https://github.com/libevent/libevent/commit/ec65c42052d95d2c23d1d837136d1cf1d9ecef9e
From a0305cec166a5bc89f1eb362510cc4cd25ecc0bc Mon Sep 17 00:00:00 2001
From: Azat Khuzhin <a3at.mail@gmail.com>
Date: Fri, 25 Mar 2016 00:33:47 +0300
Subject: [PATCH] evdns: fix searching empty hostnames
---
evdns.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/evdns.c b/evdns.c
index 137c24ea..6191c677 100644
--- a/evdns.c
+++ b/evdns.c
@@ -3122,9 +3122,12 @@ search_set_from_hostname(struct evdns_base *base) {
static char *
search_make_new(const struct search_state *const state, int n, const char *const base_name) {
const size_t base_len = strlen(base_name);
- const char need_to_append_dot = base_name[base_len - 1] == '.' ? 0 : 1;
+ char need_to_append_dot;
struct search_domain *dom;
+ if (!base_len) return NULL;
+ need_to_append_dot = base_name[base_len - 1] == '.' ? 0 : 1;
+
for (dom = state->head; dom; dom = dom->next) {
if (!n--) {
/* this is the postfix we want */
--
2.11.0

View file

@ -1,38 +0,0 @@
From a8769ef12d7e223e33fc47bed03fba2bfa2f3536 Mon Sep 17 00:00:00 2001
From: Marcus Sundberg <marcus@marcussundberg.com>
Date: Sat, 26 Mar 2016 20:11:43 +0100
Subject: [PATCH] evbuffer_add: Use last_with_datap if set, not last.
evbuffer_add() would always put data in the last chain, even if there
was available space in a previous chain, and in doing so it also
failed to update last_with_datap, causing subsequent calls to other
functions that do look at last_with_datap to add data in the middle
of the evbuffer instead of at the end.
Fixes the evbuffer_add() part of issue #335, and the evbuffer/add2 and
evbuffer/add3 tests, and also prevents wasting space available in the
chain pointed to by last_with_datap.
---
buffer.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/buffer.c b/buffer.c
index 7cca0e8a..f378b731 100644
--- a/buffer.c
+++ b/buffer.c
@@ -1732,7 +1732,11 @@ evbuffer_add(struct evbuffer *buf, const void *data_in, size_t datlen)
goto done;
}
- chain = buf->last;
+ if (*buf->last_with_datap == NULL) {
+ chain = buf->last;
+ } else {
+ chain = *buf->last_with_datap;
+ }
/* If there are no chains allocated for this buffer, allocate one
* big enough to hold all the data. */
--
2.12.0

View file

@ -1,16 +0,0 @@
Disable tests that rely on usable DNS lookups, which aren't available
in build chroots.
--- libevent-2.0.21-stable/test/regress_dns.c 2013-01-20 22:32:09.000000000 +0100
+++ libevent-2.0.21-stable/test/regress_dns.c 2013-01-20 22:32:30.000000000 +0100
@@ -1827,10 +1827,6 @@ end:
struct testcase_t dns_testcases[] = {
DNS_LEGACY(server, TT_FORK|TT_NEED_BASE),
- DNS_LEGACY(gethostbyname, TT_FORK|TT_NEED_BASE|TT_NEED_DNS),
- DNS_LEGACY(gethostbyname6, TT_FORK|TT_NEED_BASE|TT_NEED_DNS),
- DNS_LEGACY(gethostbyaddr, TT_FORK|TT_NEED_BASE|TT_NEED_DNS),
- { "resolve_reverse", dns_resolve_reverse, TT_FORK, NULL, NULL },
{ "search", dns_search_test, TT_FORK|TT_NEED_BASE, &basic_setup, NULL },
{ "search_cancel", dns_search_cancel_test,
TT_FORK|TT_NEED_BASE, &basic_setup, NULL },

View file

@ -1,197 +0,0 @@
Fix CVE-2018-19788:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-19788
https://gitlab.freedesktop.org/polkit/polkit/issues/74
Patch copied from upstream source repository:
https://gitlab.freedesktop.org/polkit/polkit/commit/2cb40c4d5feeaa09325522bd7d97910f1b59e379
From 2cb40c4d5feeaa09325522bd7d97910f1b59e379 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Mon, 3 Dec 2018 10:28:58 +0100
Subject: [PATCH] Allow negative uids/gids in PolkitUnixUser and Group objects
(uid_t) -1 is still used as placeholder to mean "unset". This is OK, since
there should be no users with such number, see
https://systemd.io/UIDS-GIDS#special-linux-uids.
(uid_t) -1 is used as the default value in class initialization.
When a user or group above INT32_MAX is created, the numeric uid or
gid wraps around to negative when the value is assigned to gint, and
polkit gets confused. Let's accept such gids, except for -1.
A nicer fix would be to change the underlying type to e.g. uint32 to
not have negative values. But this cannot be done without breaking the
API, so likely new functions will have to be added (a
polkit_unix_user_new variant that takes a unsigned, and the same for
_group_new, _set_uid, _get_uid, _set_gid, _get_gid, etc.). This will
require a bigger patch.
Fixes https://gitlab.freedesktop.org/polkit/polkit/issues/74.
---
src/polkit/polkitunixgroup.c | 15 +++++++++++----
src/polkit/polkitunixprocess.c | 12 ++++++++----
src/polkit/polkitunixuser.c | 13 ++++++++++---
3 files changed, 29 insertions(+), 11 deletions(-)
diff --git a/src/polkit/polkitunixgroup.c b/src/polkit/polkitunixgroup.c
index c57a1aa..309f689 100644
--- a/src/polkit/polkitunixgroup.c
+++ b/src/polkit/polkitunixgroup.c
@@ -71,6 +71,7 @@ G_DEFINE_TYPE_WITH_CODE (PolkitUnixGroup, polkit_unix_group, G_TYPE_OBJECT,
static void
polkit_unix_group_init (PolkitUnixGroup *unix_group)
{
+ unix_group->gid = -1; /* (git_t) -1 is not a valid GID under Linux */
}
static void
@@ -100,11 +101,14 @@ polkit_unix_group_set_property (GObject *object,
GParamSpec *pspec)
{
PolkitUnixGroup *unix_group = POLKIT_UNIX_GROUP (object);
+ gint val;
switch (prop_id)
{
case PROP_GID:
- unix_group->gid = g_value_get_int (value);
+ val = g_value_get_int (value);
+ g_return_if_fail (val != -1);
+ unix_group->gid = val;
break;
default:
@@ -131,9 +135,9 @@ polkit_unix_group_class_init (PolkitUnixGroupClass *klass)
g_param_spec_int ("gid",
"Group ID",
"The UNIX group ID",
- 0,
+ G_MININT,
G_MAXINT,
- 0,
+ -1,
G_PARAM_CONSTRUCT |
G_PARAM_READWRITE |
G_PARAM_STATIC_NAME |
@@ -166,9 +170,10 @@ polkit_unix_group_get_gid (PolkitUnixGroup *group)
*/
void
polkit_unix_group_set_gid (PolkitUnixGroup *group,
- gint gid)
+ gint gid)
{
g_return_if_fail (POLKIT_IS_UNIX_GROUP (group));
+ g_return_if_fail (gid != -1);
group->gid = gid;
}
@@ -183,6 +188,8 @@ polkit_unix_group_set_gid (PolkitUnixGroup *group,
PolkitIdentity *
polkit_unix_group_new (gint gid)
{
+ g_return_val_if_fail (gid != -1, NULL);
+
return POLKIT_IDENTITY (g_object_new (POLKIT_TYPE_UNIX_GROUP,
"gid", gid,
NULL));
diff --git a/src/polkit/polkitunixprocess.c b/src/polkit/polkitunixprocess.c
index 972b777..b02b258 100644
--- a/src/polkit/polkitunixprocess.c
+++ b/src/polkit/polkitunixprocess.c
@@ -159,9 +159,14 @@ polkit_unix_process_set_property (GObject *object,
polkit_unix_process_set_pid (unix_process, g_value_get_int (value));
break;
- case PROP_UID:
- polkit_unix_process_set_uid (unix_process, g_value_get_int (value));
+ case PROP_UID: {
+ gint val;
+
+ val = g_value_get_int (value);
+ g_return_if_fail (val != -1);
+ polkit_unix_process_set_uid (unix_process, val);
break;
+ }
case PROP_START_TIME:
polkit_unix_process_set_start_time (unix_process, g_value_get_uint64 (value));
@@ -239,7 +244,7 @@ polkit_unix_process_class_init (PolkitUnixProcessClass *klass)
g_param_spec_int ("uid",
"User ID",
"The UNIX user ID",
- -1,
+ G_MININT,
G_MAXINT,
-1,
G_PARAM_CONSTRUCT |
@@ -303,7 +308,6 @@ polkit_unix_process_set_uid (PolkitUnixProcess *process,
gint uid)
{
g_return_if_fail (POLKIT_IS_UNIX_PROCESS (process));
- g_return_if_fail (uid >= -1);
process->uid = uid;
}
diff --git a/src/polkit/polkitunixuser.c b/src/polkit/polkitunixuser.c
index 8bfd3a1..234a697 100644
--- a/src/polkit/polkitunixuser.c
+++ b/src/polkit/polkitunixuser.c
@@ -72,6 +72,7 @@ G_DEFINE_TYPE_WITH_CODE (PolkitUnixUser, polkit_unix_user, G_TYPE_OBJECT,
static void
polkit_unix_user_init (PolkitUnixUser *unix_user)
{
+ unix_user->uid = -1; /* (uid_t) -1 is not a valid UID under Linux */
unix_user->name = NULL;
}
@@ -112,11 +113,14 @@ polkit_unix_user_set_property (GObject *object,
GParamSpec *pspec)
{
PolkitUnixUser *unix_user = POLKIT_UNIX_USER (object);
+ gint val;
switch (prop_id)
{
case PROP_UID:
- unix_user->uid = g_value_get_int (value);
+ val = g_value_get_int (value);
+ g_return_if_fail (val != -1);
+ unix_user->uid = val;
break;
default:
@@ -144,9 +148,9 @@ polkit_unix_user_class_init (PolkitUnixUserClass *klass)
g_param_spec_int ("uid",
"User ID",
"The UNIX user ID",
- 0,
+ G_MININT,
G_MAXINT,
- 0,
+ -1,
G_PARAM_CONSTRUCT |
G_PARAM_READWRITE |
G_PARAM_STATIC_NAME |
@@ -182,6 +186,7 @@ polkit_unix_user_set_uid (PolkitUnixUser *user,
gint uid)
{
g_return_if_fail (POLKIT_IS_UNIX_USER (user));
+ g_return_if_fail (uid != -1);
user->uid = uid;
}
@@ -196,6 +201,8 @@ polkit_unix_user_set_uid (PolkitUnixUser *user,
PolkitIdentity *
polkit_unix_user_new (gint uid)
{
+ g_return_val_if_fail (uid != -1, NULL);
+
return POLKIT_IDENTITY (g_object_new (POLKIT_TYPE_UNIX_USER,
"uid", uid,
NULL));
--
2.18.1

View file

@ -132,14 +132,14 @@ data as produced by digital cameras.")
(define-public libgphoto2
(package
(name "libgphoto2")
(version "2.5.22")
(version "2.5.23")
(source (origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/gphoto/libgphoto/"
version "/libgphoto2-" version ".tar.bz2"))
(sha256
(base32
"0n6f6nagys775ib483nka1sbclhkm1dz3n5z3lgaz1m9m5x35mqm"))))
"0bc5x2bkqbfi4hbkz8ab5xc0bkks9vvks1vygxhdh3x498v27byq"))))
(build-system gnu-build-system)
(native-inputs `(("pkg-config" ,pkg-config)))
(inputs
@ -163,14 +163,14 @@ from digital cameras.")
(define-public gphoto2
(package
(name "gphoto2")
(version "2.5.20")
(version "2.5.23")
(source (origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/gphoto/gphoto/" version
"/gphoto2-" version ".tar.bz2"))
(sha256
(base32
"1xj80abkzvqrd6g1j1q946lhbp03gyapyxdwbhc0y14g1ash6vx3"))))
"1laqwhxr0xhbykmp0dhd3j4rr2lhj5y228s31afnqxp700hhk1yz"))))
(build-system gnu-build-system)
(native-inputs
`(("pkg-config" ,pkg-config)))

View file

@ -43,16 +43,15 @@
(define-public polkit
(package
(name "polkit")
(version "0.115")
(version "0.116")
(source (origin
(method url-fetch)
(uri (string-append
"https://www.freedesktop.org/software/polkit/releases/"
name "-" version ".tar.gz"))
(patches (search-patches "polkit-CVE-2018-19788.patch"))
(sha256
(base32
"0c91y61y4gy6p91cwbzg32dhavw4b7fflg370rimqhdxpzdfr1rg"))
"1c9lbpndh5zis22f154vjrhnqw65z8s85nrgl42v738yf6g0q5w8"))
(modules '((guix build utils)))
(snippet
'(begin
@ -90,7 +89,7 @@
`(("expat" ,expat)
("linux-pam" ,linux-pam)
("elogind" ,elogind)
("mozjs" ,mozjs-52)
("mozjs" ,mozjs-60)
("nspr" ,nspr)))
(propagated-inputs
`(("glib" ,glib))) ; required by polkit-gobject-1.pc
@ -101,6 +100,9 @@
("gobject-introspection" ,gobject-introspection)))
(arguments
`(#:configure-flags '("--sysconfdir=/etc"
;; XXX: MozJS 60 requires the C++11 ABI or higher.
;; Remove when the default compiler is >= GCC 6.
"CXXFLAGS=-std=gnu++11"
"--enable-man-pages")
#:phases
(modify-phases %standard-phases

View file

@ -357,14 +357,14 @@ is used by the Requests library to verify HTTPS requests.")
(define-public python-cryptography-vectors
(package
(name "python-cryptography-vectors")
(version "2.6.1")
(version "2.7")
(source
(origin
(method url-fetch)
(uri (pypi-uri "cryptography_vectors" version))
(sha256
(base32
"1bsqcv3h49dzqnyn29ijq8r7k1ra8ikl1y9qcpcns9nbvhaq3wq3"))))
"1g38zw90510azyfrj6mxbslx2gp9yrnv5dac0w2819k9ssdznbgi"))))
(build-system python-build-system)
(home-page "https://github.com/pyca/cryptography")
(synopsis "Test vectors for the cryptography package")
@ -379,14 +379,14 @@ is used by the Requests library to verify HTTPS requests.")
(define-public python-cryptography
(package
(name "python-cryptography")
(version "2.6.1")
(version "2.7")
(source
(origin
(method url-fetch)
(uri (pypi-uri "cryptography" version))
(sha256
(base32
"19iwz5avym5zl6jrrrkym1rdaa9h61j20ph4cswsqgv8xg5j3j16"))))
"1inlnr36kl36551c9rcad99jmhk81v33by3glkadwdcgmi17fd76"))))
(build-system python-build-system)
(inputs
`(("openssl" ,openssl)))

View file

@ -3163,7 +3163,7 @@ provides additional functionality on the produced Mallard documents.")
(replace 'check
(lambda _
(invoke "python" "runtests.py" "-vv"))))))
(home-page "http://cython.org/")
(home-page "https://cython.org/")
(synopsis "C extensions for Python")
(description "Cython is an optimising static compiler for both the Python
programming language and the extended Cython programming language. It makes
@ -5381,14 +5381,14 @@ libxml2 and libxslt.")
(define-public python-beautifulsoup4
(package
(name "python-beautifulsoup4")
(version "4.6.3")
(version "4.7.1")
(source
(origin
(method url-fetch)
(uri (pypi-uri "beautifulsoup4" version))
(sha256
(base32
"041dhalzjciw6qyzzq7a2k4h1yvyk76xigp35hv5ibnn448ydy4h"))))
"0j2kycz2dxgx68xzjm7rxg5xn6v61gq5ifvxyg99slmqkybnal4l"))))
(build-system python-build-system)
(arguments
`(#:phases
@ -5400,6 +5400,8 @@ libxml2 and libxslt.")
;; distribution.
(replace 'check
(lambda _ (invoke "./convert-py3k"))))))
(propagated-inputs
`(("python-soupsieve" ,python-soupsieve)))
(home-page
"https://www.crummy.com/software/BeautifulSoup/bs4/")
(synopsis
@ -5443,14 +5445,17 @@ Soup 4. It aims to provide selecting, matching, and filtering using modern
CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
specifications up through the latest CSS level 4 drafts and beyond (though
some are not yet implemented).")
(properties `((python2-variant . ,(delay python2-soupsieve))))
(license license:expat)))
(define-public python2-soupsieve
(let ((base (package-with-python2 python-soupsieve)))
(let ((base (package-with-python2 (strip-python2-variant python-soupsieve))))
(package
(inherit base)
(propagated-inputs
`(("python2-backports-functools-lru-cache" ,python2-backports-functools-lru-cache))))))
`(("python2-backports-functools-lru-cache"
,python2-backports-functools-lru-cache)
,@(package-propagated-inputs base))))))
(define-public python-netifaces
(package
@ -12180,7 +12185,7 @@ current test, while only declaring the test-specific fields")
;; 'parse_funcs'
;; during test setup.
`(#:tests? #f))
(home-page "http://toolkit.translatehouse.org")
(home-page "https://toolkit.translatehouse.org")
(synopsis "Tools and API for translation and localization engineering")
(description
"Tools and API for translation and localization engineering. It contains

View file

@ -30,7 +30,7 @@
(define-public re2
(package
(name "re2")
(version "2019-04-01")
(version "2019-06-01")
(home-page "https://github.com/google/re2")
(source (origin
(method git-fetch)
@ -38,7 +38,7 @@
(file-name (git-file-name name version))
(sha256
(base32
"018b8z3fgcr02rmhxdz80r363k40938cbgmk1c9b46k6xkc4q0hd"))))
"01613z66wgiffdngbq3031rwd92jf87j93h7y5mn8hlx19gg5k4j"))))
(build-system gnu-build-system)
(arguments
`(#:modules ((guix build gnu-build-system)

View file

@ -6,7 +6,7 @@
;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2019 Kei Kebreau <kkebreau@posteo.net>
;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;;
@ -523,15 +523,14 @@ sound and device input (keyboards, joysticks, mice, etc.).")
(define-public guile-sdl2
(package
(name "guile-sdl2")
(version "0.3.1")
(version "0.4.0")
(source (origin
(method url-fetch)
(uri (string-append
"https://files.dthompson.us/guile-sdl2/guile-sdl2-"
version ".tar.gz"))
(uri (string-append "https://files.dthompson.us/guile-sdl2/"
"guile-sdl2-" version ".tar.gz"))
(sha256
(base32
"0bw7x2lx90k4banc5k7yfkn3as93y25gr1xdr225ll7lmij21k64"))))
"0zcxwgyadwpbhq6h5mv2569c3kalgra26zc186y9fqiyyzmh1v9s"))))
(build-system gnu-build-system)
(arguments
'(#:make-flags '("GUILE_AUTO_COMPILE=0")

View file

@ -30,7 +30,7 @@
(define-public syncthing
(package
(name "syncthing")
(version "1.1.2")
(version "1.1.4")
(source (origin
(method url-fetch)
(uri (string-append "https://github.com/syncthing/syncthing"
@ -38,7 +38,7 @@
"/syncthing-source-v" version ".tar.gz"))
(sha256
(base32
"0x2203xa4fxadj7ra7l2ac285j3gi1qgghpkssl4hkcq0kjmxqrk"))
"0pkb9vdb10lnlk6sgg6hxgkdjnvxx90cfdf8vgrc5sljzm5qhr6l"))
(modules '((guix build utils)))
;; Delete bundled ("vendored") free software source code.
(snippet '(begin
@ -418,7 +418,7 @@ address of the default LAN gateway.")
(define-public go-github-com-lib-pq
(package
(name "go-github-com-lib-pq")
(version "1.0.0")
(version "1.1.1")
(source (origin
(method git-fetch)
(uri (git-reference
@ -427,7 +427,7 @@ address of the default LAN gateway.")
(file-name (git-file-name name version))
(sha256
(base32
"1zqnnyczaf00xi6xh53vq758v5bdlf0iz7kf22l02cal4i6px47i"))))
"0g64wlg1l1ybq4x44idksl4pgm055s58jxc6r6x4qhqm5q76h0km"))))
(build-system go-build-system)
(arguments
`(#:import-path "github.com/lib/pq"
@ -443,7 +443,7 @@ database/sql package.")
(define-public go-github-com-oschwald-geoip2-golang
(package
(name "go-github-com-oschwald-geoip2-golang")
(version "1.1.0")
(version "1.3.0")
(source (origin
(method git-fetch)
(uri (git-reference
@ -452,7 +452,7 @@ database/sql package.")
(file-name (git-file-name name version))
(sha256
(base32
"0v698bzs8lb59cqpsa9cf4sl8rdsvnnmaravhbfn6g6i511ppclr"))))
"0jivzl15jb8n16rm1b2w97kf7vna5dd3kcz865wfi233qay075j2"))))
(build-system go-build-system)
(propagated-inputs
`(("go-github-com-oschwald-maxminddb-golang"

View file

@ -410,7 +410,7 @@ required structures.")
(package
(inherit openssl)
(name "openssl")
(version "1.1.1b")
(version "1.1.1c")
(source (origin
(method url-fetch)
(uri (list (string-append "https://www.openssl.org/source/openssl-"
@ -423,7 +423,7 @@ required structures.")
(patches (search-patches "openssl-1.1-c-rehash-in.patch"))
(sha256
(base32
"0jza8cmznnyiia43056dij1jdmz62dx17wsn0zxksh9h6817nmaw"))))
"142c7zdlz06hjrrvinb9f276czc78bnkyhd9xma621qmmmwk1yzn"))))
(outputs '("out"
"doc" ; 6.8 MiB of man3 pages and full HTML documentation
"static")) ; 6.4 MiB of .a files

View file

@ -730,7 +730,7 @@ are detected, the user is notified.")))
(define-public neovim
(package
(name "neovim")
(version "0.3.5")
(version "0.3.7")
(source
(origin
(method git-fetch)
@ -740,7 +740,7 @@ are detected, the user is notified.")))
(file-name (git-file-name name version))
(sha256
(base32
"113lrr9gwimvvzlkwlishm4cjqcf30xq9jfxn7vh41ckgnbiwf3w"))))
"1j6w5jvq5v7kf7diad91qs1acr427nidnk9s24yyrz0hwdd1c2lh"))))
(build-system cmake-build-system)
(arguments
`(#:modules ((srfi srfi-26)

View file

@ -5067,7 +5067,7 @@ over Xlib, including:
(define-public xorg-server
(package
(name "xorg-server")
(version "1.20.4")
(version "1.20.5")
(source
(origin
(method url-fetch)
@ -5076,7 +5076,7 @@ over Xlib, including:
"xorg-server-" version ".tar.bz2"))
(sha256
(base32
"1vk6j7hmigfill9x8m7a6vvgb3s50ji2yf6yprbgqfz9xf9x83zy"))
"17dc3g8cc55nbkx3np64dsz04n621dnzjmcc9wys0xbyyd1q47d8"))
(patches
(list
;; See:
@ -5198,7 +5198,16 @@ draggable titlebars and borders.")
(define-public xorg-server-for-tests
(hidden-package
(package
(inherit xorg-server))))
(inherit xorg-server)
(version "1.20.4")
(source (origin
(inherit (package-source xorg-server))
(uri (string-append
"mirror://xorg/individual/xserver/"
"xorg-server-" version ".tar.bz2"))
(sha256
(base32
"1vk6j7hmigfill9x8m7a6vvgb3s50ji2yf6yprbgqfz9xf9x83zy")))))))
(define-public xorg-server-xwayland
(package

View file

@ -142,7 +142,8 @@
guix-publish-configuration-guix
guix-publish-configuration-port
guix-publish-configuration-host
guix-publish-configuration-compression-level
guix-publish-configuration-compression
guix-publish-configuration-compression-level ;deprecated
guix-publish-configuration-nar-path
guix-publish-configuration-cache
guix-publish-configuration-ttl
@ -1748,8 +1749,12 @@ archive' public keys, with GUIX."
(default 80))
(host guix-publish-configuration-host ;string
(default "localhost"))
(compression-level guix-publish-configuration-compression-level ;integer
(default 3))
(compression guix-publish-configuration-compression
(thunked)
(default (default-compression this-record
(current-source-location))))
(compression-level %guix-publish-configuration-compression-level ;deprecated
(default #f))
(nar-path guix-publish-configuration-nar-path ;string
(default "nar"))
(cache guix-publish-configuration-cache ;#f | string
@ -1759,42 +1764,68 @@ archive' public keys, with GUIX."
(ttl guix-publish-configuration-ttl ;#f | integer
(default #f)))
(define guix-publish-shepherd-service
(match-lambda
(($ <guix-publish-configuration> guix port host compression
nar-path cache workers ttl)
(list (shepherd-service
(provision '(guix-publish))
(requirement '(guix-daemon))
(start #~(make-forkexec-constructor
(list #$(file-append guix "/bin/guix")
"publish" "-u" "guix-publish"
"-p" #$(number->string port)
"-C" #$(number->string compression)
(string-append "--nar-path=" #$nar-path)
(string-append "--listen=" #$host)
#$@(if workers
#~((string-append "--workers="
#$(number->string
workers)))
#~())
#$@(if ttl
#~((string-append "--ttl="
#$(number->string ttl)
"s"))
#~())
#$@(if cache
#~((string-append "--cache=" #$cache))
#~()))
(define-deprecated (guix-publish-configuration-compression-level config)
"Return a compression level, the old way."
(match (guix-publish-configuration-compression config)
(((_ level) _ ...) level)))
;; Make sure we run in a UTF-8 locale so we can produce
;; nars for packages that contain UTF-8 file names such
;; as 'nss-certs'. See <https://bugs.gnu.org/26948>.
#:environment-variables
(list (string-append "GUIX_LOCPATH="
#$glibc-utf8-locales "/lib/locale")
"LC_ALL=en_US.utf8")))
(stop #~(make-kill-destructor)))))))
(define (default-compression config properties)
"Return the default 'guix publish' compression according to CONFIG, and
raise a deprecation warning if the 'compression-level' field was used."
(match (%guix-publish-configuration-compression-level config)
(#f
'(("gzip" 3)))
(level
(warn-about-deprecation 'compression-level properties
#:replacement 'compression)
`(("gzip" ,level)))))
(define (guix-publish-shepherd-service config)
(define (config->compression-options config)
(match (guix-publish-configuration-compression config)
(() ;empty list means "no compression"
'("-C0"))
(lst
(append-map (match-lambda
((type level)
`("-C" ,(string-append type ":"
(number->string level)))))
lst))))
(match-record config <guix-publish-configuration>
(guix port host nar-path cache workers ttl)
(list (shepherd-service
(provision '(guix-publish))
(requirement '(guix-daemon))
(start #~(make-forkexec-constructor
(list #$(file-append guix "/bin/guix")
"publish" "-u" "guix-publish"
"-p" #$(number->string port)
#$@(config->compression-options config)
(string-append "--nar-path=" #$nar-path)
(string-append "--listen=" #$host)
#$@(if workers
#~((string-append "--workers="
#$(number->string
workers)))
#~())
#$@(if ttl
#~((string-append "--ttl="
#$(number->string ttl)
"s"))
#~())
#$@(if cache
#~((string-append "--cache=" #$cache))
#~()))
;; Make sure we run in a UTF-8 locale so we can produce
;; nars for packages that contain UTF-8 file names such
;; as 'nss-certs'. See <https://bugs.gnu.org/26948>.
#:environment-variables
(list (string-append "GUIX_LOCPATH="
#$glibc-utf8-locales "/lib/locale")
"LC_ALL=en_US.utf8")))
(stop #~(make-kill-destructor))))))
(define %guix-publish-accounts
(list (user-group (name "guix-publish") (system? #t))

View file

@ -2,6 +2,7 @@
;;; Copyright © 2016 Andy Wingo <wingo@pobox.com>
;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -895,6 +896,7 @@ IPP specifications.")
(mkdir-p/perms "/var/spool/cups" user #o755)
(mkdir-p/perms "/var/spool/cups/tmp" user #o755)
(mkdir-p/perms "/var/log/cups" user #o755)
(mkdir-p/perms "/var/cache/cups" user #o770)
(mkdir-p/perms "/etc/cups" user #o755)
(mkdir-p/perms "/etc/cups/ssl" user #o700)
;; This certificate is used for HTTPS connections to the CUPS web

View file

@ -27,7 +27,7 @@
#:use-module (guix profiles)
#:use-module (guix derivations)
#:use-module (guix combinators)
#:use-module (guix deprecation)
#:use-module (guix diagnostics)
#:use-module (guix store)
#:use-module (guix i18n)
#:use-module ((guix utils)
@ -280,7 +280,7 @@ package modules under SOURCE using CORE, an instance of Guix."
;; Disable deprecation warnings; it's OK for SCRIPT to
;; use deprecated APIs and the user doesn't have to know
;; about it.
(parameterize ((deprecation-warning-port
(parameterize ((guix-warning-port
(%make-void-port "w")))
(primitive-load script))))))
;; BUILD must be a monadic procedure of at least one argument: the

View file

@ -18,39 +18,26 @@
(define-module (guix deprecation)
#:use-module (guix i18n)
#:use-module (ice-9 format)
#:use-module (guix diagnostics)
#:autoload (guix utils) (source-properties->location)
#:export (define-deprecated
define-deprecated/alias
deprecation-warning-port))
warn-about-deprecation))
;;; Commentary:
;;;
;;; Provide a mechanism to mark bindings as deprecated.
;;;
;;; We don't reuse (guix ui) mostly to avoid pulling in too many things.
;;;
;;; Code:
(define deprecation-warning-port
;; Port where deprecation warnings go.
(make-parameter (current-error-port)))
(define (source-properties->location-string properties)
"Return a human-friendly, GNU-standard representation of PROPERTIES, a
source property alist."
(let ((file (assq-ref properties 'filename))
(line (assq-ref properties 'line))
(column (assq-ref properties 'column)))
(if (and file line column)
(format #f "~a:~a:~a" file (+ 1 line) column)
(G_ "<unknown location>"))))
(define* (warn-about-deprecation variable properties
#:key replacement)
(format (deprecation-warning-port)
(G_ "~a: warning: '~a' is deprecated~@[, use '~a' instead~]~%")
(source-properties->location-string properties)
variable replacement))
(let ((location (and properties (source-properties->location properties))))
(if replacement
(warning location (G_ "'~a' is deprecated, use '~a' instead~%")
variable replacement)
(warning location (G_ "'~a' is deprecated~%")
variable))))
(define-syntax define-deprecated
(lambda (s)
@ -59,7 +46,7 @@ source property alist."
(define-deprecated foo bar 42)
(define-deprecated (baz x y) qux (qux y x))
This will write a deprecation warning to DEPRECATION-WARNING-PORT."
This will write a deprecation warning to GUIX-WARNING-PORT."
(syntax-case s ()
((_ (proc formals ...) replacement body ...)
#'(define-deprecated proc replacement
@ -96,7 +83,7 @@ these lines:
where 'nix-server?' is the deprecated name for 'store-connection?'.
This will write a deprecation warning to DEPRECATION-WARNING-PORT."
This will write a deprecation warning to GUIX-WARNING-PORT."
(define-syntax deprecated
(lambda (s)
(warn-about-deprecation 'deprecated (syntax-source s)

173
guix/diagnostics.scm Normal file
View file

@ -0,0 +1,173 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
;;;
;;; 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/>.
(define-module (guix diagnostics)
#:use-module (guix colors)
#:use-module (guix i18n)
#:autoload (guix utils) (<location>)
#:use-module (srfi srfi-26)
#:use-module (ice-9 format)
#:use-module (ice-9 match)
#:export (warning
info
report-error
leave
location->string
guix-warning-port
program-name))
;;; Commentary:
;;;
;;; This module provides the tools to report diagnostics to the user in a
;;; consistent way: errors, warnings, and notes.
;;;
;;; Code:
(define-syntax highlight-argument
(lambda (s)
"Given FMT and ARG, expand ARG to a call that highlights it, provided FMT
is a trivial format string."
(define (trivial-format-string? fmt)
(define len
(string-length fmt))
(let loop ((start 0))
(or (>= (+ 1 start) len)
(let ((tilde (string-index fmt #\~ start)))
(or (not tilde)
(case (string-ref fmt (+ tilde 1))
((#\a #\A #\%) (loop (+ tilde 2)))
(else #f)))))))
;; Be conservative: limit format argument highlighting to cases where the
;; format string contains nothing but ~a escapes. If it contained ~s
;; escapes, this strategy wouldn't work.
(syntax-case s ()
((_ "~a~%" arg) ;don't highlight whole messages
#'arg)
((_ fmt arg)
(trivial-format-string? (syntax->datum #'fmt))
#'(%highlight-argument arg))
((_ fmt arg)
#'arg))))
(define* (%highlight-argument arg #:optional (port (guix-warning-port)))
"Highlight ARG, a format string argument, if PORT supports colors."
(cond ((string? arg)
(highlight arg port))
((symbol? arg)
(highlight (symbol->string arg) port))
(else arg)))
(define-syntax define-diagnostic
(syntax-rules ()
"Create a diagnostic macro (i.e., NAME), which will prepend PREFIX to all
messages."
((_ name (G_ prefix) colors)
(define-syntax name
(lambda (x)
(syntax-case x ()
((name location (underscore fmt) args (... ...))
(and (string? (syntax->datum #'fmt))
(free-identifier=? #'underscore #'G_))
#'(begin
(print-diagnostic-prefix prefix location
#:colors colors)
(format (guix-warning-port) (gettext fmt %gettext-domain)
(highlight-argument fmt args) (... ...))))
((name location (N-underscore singular plural n)
args (... ...))
(and (string? (syntax->datum #'singular))
(string? (syntax->datum #'plural))
(free-identifier=? #'N-underscore #'N_))
#'(begin
(print-diagnostic-prefix prefix location
#:colors colors)
(format (guix-warning-port)
(ngettext singular plural n %gettext-domain)
(highlight-argument singular args) (... ...))))
((name (underscore fmt) args (... ...))
(free-identifier=? #'underscore #'G_)
#'(name #f (underscore fmt) args (... ...)))
((name (N-underscore singular plural n)
args (... ...))
(free-identifier=? #'N-underscore #'N_)
#'(name #f (N-underscore singular plural n)
args (... ...)))))))))
;; XXX: This doesn't work well for right-to-left languages.
;; TRANSLATORS: The goal is to emit "warning:" followed by a short phrase;
;; "~a" is a placeholder for that phrase.
(define-diagnostic warning (G_ "warning: ") %warning-color) ;emit a warning
(define-diagnostic info (G_ "") %info-color)
(define-diagnostic report-error (G_ "error: ") %error-color)
(define-syntax-rule (leave args ...)
"Emit an error message and exit."
(begin
(report-error args ...)
(exit 1)))
(define %warning-color (color BOLD MAGENTA))
(define %info-color (color BOLD))
(define %error-color (color BOLD RED))
(define* (print-diagnostic-prefix prefix #:optional location
#:key (colors (color)))
"Print PREFIX as a diagnostic line prefix."
(define color?
(color-output? (guix-warning-port)))
(define location-color
(if color?
(cut colorize-string <> (color BOLD))
identity))
(define prefix-color
(if color?
(lambda (prefix)
(colorize-string prefix colors))
identity))
(let ((prefix (if (string-null? prefix)
prefix
(gettext prefix %gettext-domain))))
(if location
(format (guix-warning-port) "~a: ~a"
(location-color (location->string location))
(prefix-color prefix))
(format (guix-warning-port) "~:[~*~;guix ~a: ~]~a"
(program-name) (program-name)
(prefix-color prefix)))))
(define (location->string loc)
"Return a human-friendly, GNU-standard representation of LOC."
(match loc
(#f (G_ "<unknown location>"))
(($ <location> file line column)
(format #f "~a:~a:~a" file line column))))
(define guix-warning-port
(make-parameter (current-warning-port)))
(define program-name
;; Name of the command-line program currently executing, or #f.
(make-parameter #f))

View file

@ -4,6 +4,7 @@
;;; Copyright © 2016 David Craven <david@craven.ch>
;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2019 Robert Vollmert <rob@vllmrt.net>
;;;
;;; This file is part of GNU Guix.
;;;
@ -378,57 +379,35 @@ separated by PRED."
#:allow-other-keys)
"Generate a stream of package expressions for PACKAGE-NAME and all its
dependencies."
(receive (package . dependencies)
(repo->guix-package package-name repo)
(if (not package)
stream-null
(define (exists? dependency)
(not (null? (find-packages-by-name (guix-name dependency)))))
(define initial-state (list #f (list package-name) (list)))
(define (step state)
(match state
((prev (next . rest) done)
(define (handle? dep)
(and
(not (equal? dep next))
(not (member dep done))
(not (exists? dep))))
(receive (package . dependencies) (repo->guix-package next repo)
(list
(if package package '()) ;; default #f on failure would interrupt
(if package
(lset-union equal? rest (filter handle? (car dependencies)))
rest)
(cons next done))))
((prev '() done)
(list #f '() done))))
;; Generate a lazy stream of package expressions for all unknown
;; dependencies in the graph.
(let* ((make-state (lambda (queue done)
(cons queue done)))
(next (match-lambda
(((next . rest) . done) next)))
(imported (match-lambda
((queue . done) done)))
(done? (match-lambda
((queue . done)
(zero? (length queue)))))
(unknown? (lambda* (dependency #:optional (done '()))
(and (not (member dependency
done))
(null? (find-packages-by-name
(guix-name dependency))))))
(update (lambda (state new-queue)
(match state
(((head . tail) . done)
(make-state (lset-difference
equal?
(lset-union equal? new-queue tail)
done)
(cons head done)))))))
(stream-cons
package
(stream-unfold
;; map: produce a stream element
(lambda (state)
(repo->guix-package (next state) repo))
;; predicate
(negate done?)
;; generator: update the queue
(lambda (state)
(receive (package . dependencies)
(repo->guix-package (next state) repo)
(if package
(update state (filter (cut unknown? <>
(cons (next state)
(imported state)))
(car dependencies)))
;; TODO: Try the other archives before giving up
(update state (imported state)))))
;; initial state
(make-state (filter unknown? (car dependencies))
(list package-name))))))))
;; Generate a lazy stream of package expressions for all unknown
;; dependencies in the graph.
(stream-unfold
;; map: produce a stream element
(match-lambda ((latest queue done) latest))
;; predicate
(match-lambda ((latest queue done) latest))
;; generator: update the queue
step
;; initial state
(step initial-state)))

View file

@ -32,6 +32,7 @@
(define-module (guix ui)
#:use-module (guix i18n)
#:use-module (guix colors)
#:use-module (guix diagnostics)
#:use-module (guix gexp)
#:use-module (guix sets)
#:use-module (guix utils)
@ -70,10 +71,14 @@
#:use-module (texinfo)
#:use-module (texinfo plain-text)
#:use-module (texinfo string-utils)
#:re-export (G_ N_ P_) ;backward compatibility
#:export (report-error
display-hint
leave
;; Re-exports for backward compatibility.
#:re-export (G_ N_ P_ ;now in (guix i18n)
warning info report-error leave ;now in (guix diagnostics)
location->string
guix-warning-port program-name)
#:export (display-hint
make-user-module
load*
warn-about-load-error
@ -93,7 +98,6 @@
read/eval
read/eval-package-expression
check-available-space
location->string
fill-paragraph
%text-width
texi->plain-text
@ -115,10 +119,6 @@
delete-generation*
run-guix-command
run-guix
program-name
guix-warning-port
warning
info
guix-main))
;;; Commentary:
@ -127,124 +127,6 @@
;;;
;;; Code:
(define-syntax highlight-argument
(lambda (s)
"Given FMT and ARG, expand ARG to a call that highlights it, provided FMT
is a trivial format string."
(define (trivial-format-string? fmt)
(define len
(string-length fmt))
(let loop ((start 0))
(or (>= (+ 1 start) len)
(let ((tilde (string-index fmt #\~ start)))
(or (not tilde)
(case (string-ref fmt (+ tilde 1))
((#\a #\A #\%) (loop (+ tilde 2)))
(else #f)))))))
;; Be conservative: limit format argument highlighting to cases where the
;; format string contains nothing but ~a escapes. If it contained ~s
;; escapes, this strategy wouldn't work.
(syntax-case s ()
((_ "~a~%" arg) ;don't highlight whole messages
#'arg)
((_ fmt arg)
(trivial-format-string? (syntax->datum #'fmt))
#'(%highlight-argument arg))
((_ fmt arg)
#'arg))))
(define* (%highlight-argument arg #:optional (port (guix-warning-port)))
"Highlight ARG, a format string argument, if PORT supports colors."
(cond ((string? arg)
(highlight arg port))
((symbol? arg)
(highlight (symbol->string arg) port))
(else arg)))
(define-syntax define-diagnostic
(syntax-rules ()
"Create a diagnostic macro (i.e., NAME), which will prepend PREFIX to all
messages."
((_ name (G_ prefix) colors)
(define-syntax name
(lambda (x)
(syntax-case x ()
((name location (underscore fmt) args (... ...))
(and (string? (syntax->datum #'fmt))
(free-identifier=? #'underscore #'G_))
#'(begin
(print-diagnostic-prefix prefix location
#:colors colors)
(format (guix-warning-port) (gettext fmt %gettext-domain)
(highlight-argument fmt args) (... ...))))
((name location (N-underscore singular plural n)
args (... ...))
(and (string? (syntax->datum #'singular))
(string? (syntax->datum #'plural))
(free-identifier=? #'N-underscore #'N_))
#'(begin
(print-diagnostic-prefix prefix location
#:colors colors)
(format (guix-warning-port)
(ngettext singular plural n %gettext-domain)
(highlight-argument singular args) (... ...))))
((name (underscore fmt) args (... ...))
(free-identifier=? #'underscore #'G_)
#'(name #f (underscore fmt) args (... ...)))
((name (N-underscore singular plural n)
args (... ...))
(free-identifier=? #'N-underscore #'N_)
#'(name #f (N-underscore singular plural n)
args (... ...)))))))))
;; XXX: This doesn't work well for right-to-left languages.
;; TRANSLATORS: The goal is to emit "warning:" followed by a short phrase;
;; "~a" is a placeholder for that phrase.
(define-diagnostic warning (G_ "warning: ") %warning-color) ;emit a warning
(define-diagnostic info (G_ "") %info-color)
(define-diagnostic report-error (G_ "error: ") %error-color)
(define-syntax-rule (leave args ...)
"Emit an error message and exit."
(begin
(report-error args ...)
(exit 1)))
(define %warning-color (color BOLD MAGENTA))
(define %info-color (color BOLD))
(define %error-color (color BOLD RED))
(define %hint-color (color BOLD CYAN))
(define* (print-diagnostic-prefix prefix #:optional location
#:key (colors (color)))
"Print PREFIX as a diagnostic line prefix."
(define color?
(color-output? (guix-warning-port)))
(define location-color
(if color?
(cut colorize-string <> (color BOLD))
identity))
(define prefix-color
(if color?
(lambda (prefix)
(colorize-string prefix colors))
identity))
(let ((prefix (if (string-null? prefix)
prefix
(gettext prefix %gettext-domain))))
(if location
(format (guix-warning-port) "~a: ~a"
(location-color (location->string location))
(prefix-color prefix))
(format (guix-warning-port) "~:[~*~;guix ~a: ~]~a"
(program-name) (program-name)
(prefix-color prefix)))))
(define (print-unbound-variable-error port key args default-printer)
;; Print unbound variable errors more nicely, and in the right language.
(match args
@ -393,6 +275,8 @@ VARIABLE and return it, or #f if none was found."
(('gnu _ ...) head) ;must be that one
(_ (loop next (cons head suggestions) visited)))))))))))
(define %hint-color (color BOLD CYAN))
(define* (display-hint message #:optional (port (current-error-port)))
"Display MESSAGE, a l10n message possibly containing Texinfo markup, to
PORT."
@ -1192,13 +1076,6 @@ replacement if PORT is not Unicode-capable."
(lambda ()
body ...)))))
(define (location->string loc)
"Return a human-friendly, GNU-standard representation of LOC."
(match loc
(#f (G_ "<unknown location>"))
(($ <location> file line column)
(format #f "~a:~a:~a" file line column))))
(define* (fill-paragraph str width #:optional (column 0))
"Fill STR such that each line contains at most WIDTH characters, assuming
that the first character is at COLUMN.
@ -1720,10 +1597,6 @@ Run COMMAND with ARGS.\n"))
string<?))
(show-bug-report-information))
(define program-name
;; Name of the command-line program currently executing, or #f.
(make-parameter #f))
(define (run-guix-command command . args)
"Run COMMAND with the given ARGS. Report an error when COMMAND is not
found."
@ -1783,9 +1656,6 @@ and signal handling has already been set up."
(string->symbol command)
args))))
(define guix-warning-port
(make-parameter (current-warning-port)))
(define (guix-main arg0 . args)
(initialize-guix)
(apply run-guix args))