[PATCH 0/5] Update libtorrent-rasterbar and dependent programs

  • Done
  • quality assurance status badge
Details
2 participants
  • Ludovic Courtès
  • Tomas Volf
Owner
unassigned
Submitted by
Tomas Volf
Severity
normal
T
T
Tomas Volf wrote on 1 Dec 2023 00:19
(address . guix-patches@gnu.org)(name . Tomas Volf)(address . ~@wolfsden.cz)
cover.1701386073.git.~@wolfsden.cz
This series updates libtorrent-rasterbar and programs that do depend on it.

Some of these patches (for example version update of qbittorrent) could have
been sent separately, however due to split to libtorrent-rasterbar and
libtorrent-rasterbar-1.2 it seems better to send it as one series, so that the
big picture is visible. And I was editing the package definitions anyway.

Tomas Volf (5):
gnu: libtorrent-rasterbar: Update to 1.2.19.
gnu: deluge: Update to 2.1.1.
gnu: qbittorrent-enhanced: Update to 4.6.1.10.
gnu: qbittorrent: Update to 4.6.2.
gnu: libtorrent-rasterbar: Update to 2.0.9.

gnu/local.mk | 1 +
gnu/packages/bittorrent.scm | 96 ++++--
gnu/packages/enlightenment.scm | 2 +-
.../libtorrent-rasterbar-fix-tests.patch | 304 ++++++++++++++++++
4 files changed, 379 insertions(+), 24 deletions(-)
create mode 100644 gnu/packages/patches/libtorrent-rasterbar-fix-tests.patch


base-commit: bdbb9dc27a590b08651d058f06a42caa26e04abb
--
2.41.0
T
T
Tomas Volf wrote on 1 Dec 2023 13:14
[PATCH 4/5] gnu: qbittorrent: Update to 4.6.2.
(address . 67557@debbugs.gnu.org)(name . Tomas Volf)(address . ~@wolfsden.cz)
c627b05e09b63455e867a73f538e823ccdb46ce6.1701386073.git.~@wolfsden.cz
* gnu/packages/bittorrent.scm (qbittorrent): Update to 4.6.2.

Change-Id: I75d05f14396e1b017cc939264e30ade625cb7017
---
gnu/packages/bittorrent.scm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

Toggle diff (24 lines)
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index fb20b3c92c..f9098b1a56 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -488,7 +488,7 @@ (define-public libtorrent-rasterbar
(define-public qbittorrent
(package
(name "qbittorrent")
- (version "4.5.5")
+ (version "4.6.2")
(source
(origin
(method git-fetch)
@@ -497,7 +497,7 @@ (define-public qbittorrent
(commit (string-append "release-" version))))
(file-name (git-file-name name version))
(sha256
- (base32 "1ngvvwhafi9mi05r2l9dk9x05za8x35y12p230wpzprydhlgwsxd"))))
+ (base32 "1wps17iv4gj7y751fibvcxk51v09wyniv6xm2yx429dj7z8rfmzs"))))
(build-system qt-build-system)
(arguments
(list #:configure-flags #~(list "-DTESTING=ON")
--
2.41.0
T
T
Tomas Volf wrote on 1 Dec 2023 13:14
[PATCH 2/5] gnu: deluge: Update to 2.1.1.
(address . 67557@debbugs.gnu.org)(name . Tomas Volf)(address . ~@wolfsden.cz)
00b037edcd941fdf3a288c9212ceded8f182821c.1701386073.git.~@wolfsden.cz
Dependency on nss-certs was added. Most torrents do require SSL in some shape
or form, so it seems appropriate to add it by default.

* gnu/packages/bittorrent.scm (deluge)[version]: Update to 2.1.1.
[propagated-inputs]: Add nss-certs.
[native-search-paths]: Set to allow locating the certificates.

Change-Id: Ic6c79f24851d6917dc4e5b22b3bcb2f6b99e187a
---
gnu/packages/bittorrent.scm | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)

Toggle diff (54 lines)
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index e115c13017..3d79a3a159 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -46,11 +46,13 @@ (define-module (gnu packages bittorrent)
#:use-module ((guix licenses) #:prefix l:)
#:use-module (guix gexp)
#:use-module (guix utils)
+ #:use-module ((guix search-paths) #:select ($SSL_CERT_DIR $SSL_CERT_FILE))
#:use-module (gnu packages)
#:use-module (gnu packages adns)
#:use-module (gnu packages autotools)
#:use-module (gnu packages bash)
#:use-module (gnu packages boost)
+ #:use-module (gnu packages certs)
#:use-module (gnu packages check)
#:use-module (gnu packages cmake)
#:use-module (gnu packages compression)
@@ -574,7 +576,7 @@ (define-public qbittorrent-enhanced-nox
(define-public deluge
(package
(name "deluge")
- (version "2.0.5")
+ (version "2.1.1")
(source
(origin
(method url-fetch)
@@ -583,12 +585,13 @@ (define-public deluge
(version-major+minor version) "/deluge-" version ".tar.xz"))
(sha256
(base32
- "1n15dzfnz1gvb4cf046yhi404i3gs933qgz0ichna6r1znmh9gf4"))))
+ "1xyz8bscwqmd7d8b43svxl42w54pnisvwkkrndx46hifh0cx73bn"))))
(build-system python-build-system)
(inputs (list bash-minimal))
(propagated-inputs
(list gtk+
libtorrent-rasterbar
+ nss-certs
python-pycairo
python-chardet
python-dbus
@@ -606,6 +609,9 @@ (define-public deluge
(native-inputs
(list intltool python-wheel
(librsvg-for-system)))
+ (native-search-paths
+ (list $SSL_CERT_DIR
+ $SSL_CERT_FILE))
;; TODO: Enable tests.
;; After "pytest-twisted" is packaged, HOME is set, and an X server is
;; started, some of the tests still fail. There are likely some tests
--
2.41.0
T
T
Tomas Volf wrote on 1 Dec 2023 13:14
[PATCH 1/5] gnu: libtorrent-rasterbar: Update to 1.2.19.
(address . 67557@debbugs.gnu.org)(name . Tomas Volf)(address . ~@wolfsden.cz)
d8b960bb05ea05ac21c44f8511f3bf5ed92cabc8.1701386073.git.~@wolfsden.cz
With the update, the execution of the test suite was overhauled a lot.
Parallel tests were disabled, since the do not work well. Since faketime does
cause some tests to hang, test_ssl was moved into a separate run.

* gnu/packages/bittorrent.scm (libtorrent-rasterbar)[version]: Update to
1.2.19.
[arguments]<#:parallel-tests?>: Disable.
[arguments]<#:phases>: Move test_ssl into separate run under faketime. Do not
run under tests under faketime. Anchor the regex for test exclusion. Set
timeout of 600 seconds for each test.

Change-Id: I7392cb3ce1a8815b26b3257498082761255535ee
---
gnu/packages/bittorrent.scm | 46 ++++++++++++++++++++++++-------------
1 file changed, 30 insertions(+), 16 deletions(-)

Toggle diff (80 lines)
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index 6f75a92cff..e115c13017 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -417,7 +417,7 @@ (define-public mktorrent
(define-public libtorrent-rasterbar
(package
(name "libtorrent-rasterbar")
- (version "1.2.18")
+ (version "1.2.19")
(source
(origin
(method url-fetch)
@@ -426,35 +426,49 @@ (define-public libtorrent-rasterbar
"releases/download/v" version "/"
"libtorrent-rasterbar-" version ".tar.gz"))
(sha256
- (base32 "0wpsaqadcicxl4lf1nc1i93c4yzjv8hpzhhrw1hdkrp4gn0vdwpy"))))
+ (base32 "03p4nvsll568zlyqifid0cn135sg5whbk7g48gkbapnw92ayks7f"))))
(build-system cmake-build-system)
(arguments
`(#:configure-flags '("-Dpython-bindings=ON"
"-Dbuild_tests=ON")
+ ;; Tests do not reliably work when executed in parallel.
+ #:parallel-tests? #f
#:phases
(modify-phases %standard-phases
- (add-after 'unpack 'extend-test-timeout
- (lambda _
- (substitute* "test/test_remove_torrent.cpp"
- ;; Extend the test timeout from 3 seconds to 10.
- (("i > 30") "i > 100"))))
(replace 'check
(lambda* (#:key tests? parallel-tests? #:allow-other-keys)
- (let ((disabled-tests
- ;; test_upnp requires a non-localhost IPv4 interface.
- '("test_upnp")))
+ (let* ((disabled-tests
+ '(
+ ;; Requires a non-localhost IPv4 interface.
+ "test_upnp"
+ ;; test_ssl needs to be run separately.
+ "test_ssl"))
+ (exclude-regex (string-append "^("
+ (string-join disabled-tests "|")
+ ")$"))
+ (timeout "600")
+ (jobs (if parallel-tests?
+ (number->string (parallel-job-count))
+ "1")))
(when tests?
+ (invoke "ctest"
+ "-E" exclude-regex
+ "-j" jobs
+ "--timeout" timeout
+ "--output-on-failure")
;; test_ssl relies on bundled TLS certificates with a fixed
;; expiry date. To ensure succesful builds in the future,
;; fake the time to be roughly that of the release.
- (setenv "FAKETIME_ONLY_CMDS" "test_ssl")
+ ;;
+ ;; At the same time, faketime happens to cause
+ ;; test_fast_extension, test_privacy and test_resolve_links
+ ;; to hang, even with FAKETIME_ONLY_CMDS. Not sure why. So
+ ;; execute only test_ssl under faketime.
(invoke "faketime" "2022-10-24"
"ctest"
- "--exclude-regex" (string-join disabled-tests "|")
- "-j" (if parallel-tests?
- (number->string (parallel-job-count))
- "1")
- "--rerun-failed"
+ "-R" "^test_ssl$"
+ "-j" jobs
+ "--timeout" timeout
"--output-on-failure"))))))))
(inputs (list boost openssl))
(native-inputs
--
2.41.0
T
T
Tomas Volf wrote on 1 Dec 2023 13:14
[PATCH 3/5] gnu: qbittorrent-enhanced: Update to 4.6.1.10.
(address . 67557@debbugs.gnu.org)(name . Tomas Volf)(address . ~@wolfsden.cz)
c6ba9b82d4296cf4dbdd6307d7635c3e6f6f03c1.1701386073.git.~@wolfsden.cz
* gnu/packages/bittorrent.scm (qbittorrent-enhanced): Update to 4.6.1.10.

Change-Id: Ic164ee27ea54018acfcba0e9db8db11f119800a4
---
gnu/packages/bittorrent.scm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

Toggle diff (24 lines)
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index 3d79a3a159..fb20b3c92c 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -542,7 +542,7 @@ (define-public qbittorrent-enhanced
(package
(inherit qbittorrent)
(name "qbittorrent-enhanced")
- (version "4.5.5.10")
+ (version "4.6.1.10")
(source
(origin
(method git-fetch)
@@ -552,7 +552,7 @@ (define-public qbittorrent-enhanced
(file-name (git-file-name name version))
(sha256
(base32
- "029crx8yd8apssg2k4alnc0py5i2sp3bhjkwki5fvvnpgkrhfqf0"))))
+ "101a9n2vk9d6b4vc3schkmpc56l0i0i60fcjh8hwadc6amc2ymvy"))))
(home-page "https://github.com/c0re100/qBittorrent-Enhanced-Edition")
(description
"qBittorrent Enhanced is a bittorrent client based on qBittorrent with
--
2.41.0
T
T
Tomas Volf wrote on 1 Dec 2023 13:14
[PATCH 5/5] gnu: libtorrent-rasterbar: Update to 2.0.9.
(address . 67557@debbugs.gnu.org)(name . Tomas Volf)(address . ~@wolfsden.cz)
ae003d8391cd47c95cbb0b08f3fb132d1b671cff.1701386073.git.~@wolfsden.cz
Update the package. Since other packages do depend on the previous
version (and according to their documentation do recommend it), the previous
version is exposed as libtorrent-rasterbar-1.2.

The v2.0.9 requires patching to get tests working. Sadly one of the changes
is to introduce new binary file, which is not supported by the (patches)
block. So snippet is used instead to do the patching using git.

* gnu/local.mk (dist_patch_DATA): Register new patch.
* gnu/packages/bittorrent.scm (libtorrent-rasterbar)[version]: Update to
2.0.9.
(libtorrent-rasterbar)[source]: Apply the patch.
* gnu/packages/bittorrent.scm (libtorrent-rasterbar-1.2): New variable.
(qbittorrent)[inputs]: Use libtorrent-rasterbar-1.2.
* gnu/packages/enlightenment.scm (epour)[inputs]: Use
libtorrent-rasterbar-1.2.
* gnu/packages/patches/libtorrent-rasterbar-fix-tests.patch: New file.

Change-Id: Ifbbbf02a671f6a3db653499a7a5f2504fd23c255
---
gnu/local.mk | 1 +
gnu/packages/bittorrent.scm | 36 ++-
gnu/packages/enlightenment.scm | 2 +-
.../libtorrent-rasterbar-fix-tests.patch | 304 ++++++++++++++++++
4 files changed, 339 insertions(+), 4 deletions(-)
create mode 100644 gnu/packages/patches/libtorrent-rasterbar-fix-tests.patch

Toggle diff (337 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index a8142bb0f2..78b51a1c65 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1573,6 +1573,7 @@ dist_patch_DATA = \
%D%/packages/patches/libtirpc-hurd.patch \
%D%/packages/patches/libtommath-fix-linkage.patch \
%D%/packages/patches/libtommath-integer-overflow.patch \
+ %D%/packages/patches/libtorrent-rasterbar-fix-tests.patch \
%D%/packages/patches/libtool-grep-compat.patch \
%D%/packages/patches/libtool-skip-tests2.patch \
%D%/packages/patches/libtree-fix-check-non-x86.patch \
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index f9098b1a56..813636d526 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -80,6 +80,7 @@ (define-module (gnu packages bittorrent)
#:use-module (gnu packages sqlite)
#:use-module (gnu packages ssh)
#:use-module (gnu packages tls)
+ #:use-module (gnu packages version-control)
#:use-module (gnu packages web)
#:use-module (gnu packages xml))
@@ -416,10 +417,19 @@ (define-public mktorrent
(license (list l:public-domain ; sha1.*, used to build without OpenSSL
l:gpl2+)))) ; with permission to link with OpenSSL
+;;; The patch fixing tests contains a binary section, and regular (patches)
+;;; section cannot handle it. So collect the patches here and patch using
+;;; `git apply' in the (snippet) block.
+(define %libtorrent-rasterbar-patches
+ (list
+ (local-file
+ (assume-valid-file-name
+ (search-patch "libtorrent-rasterbar-fix-tests.patch")))))
+
(define-public libtorrent-rasterbar
(package
(name "libtorrent-rasterbar")
- (version "1.2.19")
+ (version "2.0.9")
(source
(origin
(method url-fetch)
@@ -428,7 +438,13 @@ (define-public libtorrent-rasterbar
"releases/download/v" version "/"
"libtorrent-rasterbar-" version ".tar.gz"))
(sha256
- (base32 "03p4nvsll568zlyqifid0cn135sg5whbk7g48gkbapnw92ayks7f"))))
+ (base32 "13kry578ifzz4m2f291bbd7v5v9zsi8y3mf38146cnqw0sv95kch"))
+ (modules '((guix build utils)))
+ (snippet
+ #~(begin
+ (use-modules (guix build utils))
+ (invoke (string-append #$git "/bin/git") "apply"
+ #$@%libtorrent-rasterbar-patches)))))
(build-system cmake-build-system)
(arguments
`(#:configure-flags '("-Dpython-bindings=ON"
@@ -485,6 +501,20 @@ (define-public libtorrent-rasterbar
desktops.")
(license l:bsd-2)))
+(define-public libtorrent-rasterbar-1.2
+ (package
+ (inherit libtorrent-rasterbar)
+ (version "1.2.19")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (string-append "https://github.com/arvidn/libtorrent/"
+ "releases/download/v" version "/"
+ "libtorrent-rasterbar-" version ".tar.gz"))
+ (sha256
+ (base32 "03p4nvsll568zlyqifid0cn135sg5whbk7g48gkbapnw92ayks7f"))))))
+
(define-public qbittorrent
(package
(name "qbittorrent")
@@ -506,7 +536,7 @@ (define-public qbittorrent
(list qttools-5))
(inputs
(list boost
- libtorrent-rasterbar
+ libtorrent-rasterbar-1.2
openssl
python-wrapper
qtsvg-5
diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm
index 64d8945f8e..7860c43fef 100644
--- a/gnu/packages/enlightenment.scm
+++ b/gnu/packages/enlightenment.scm
@@ -585,7 +585,7 @@ (define-public epour
(native-inputs
(list intltool python-distutils-extra))
(inputs
- (list libtorrent-rasterbar python-dbus python-efl python-pyxdg))
+ (list libtorrent-rasterbar-1.2 python-dbus python-efl python-pyxdg))
(home-page "https://www.enlightenment.org")
(synopsis "EFL Bittorrent client")
(description "Epour is a BitTorrent client based on the @dfn{Enlightenment
diff --git a/gnu/packages/patches/libtorrent-rasterbar-fix-tests.patch b/gnu/packages/patches/libtorrent-rasterbar-fix-tests.patch
new file mode 100644
index 0000000000..40e016a5fc
--- /dev/null
+++ b/gnu/packages/patches/libtorrent-rasterbar-fix-tests.patch
@@ -0,0 +1,304 @@
+From 757a13aa68254eae5b2f4fd3bd51122d5eab0a3b Mon Sep 17 00:00:00 2001
+From: Tomas Volf <~@wolfsden.cz>
+Date: Thu, 30 Nov 2023 21:49:29 +0100
+Subject: [PATCH] libtorrent-rasterbar: Fix tests.
+
+In Guix build environment, TMPFS might be used for the build directory. If that
+happens, the test_copy_file fails, since it thinks TMPFS does not support sparse
+files (it does though).
+
+For some reason, the v2_empty_file.torrent is missing from the release
+archive (it is present in the v2.0.9 git tag). So copy it over to allow
+test_create_torrent to pass.
+
+* test/test_copy_file.cpp (fs_supports_sparse_files): Consider TMPFS a sparse
+file-system.
+* test/test_torrents/v2_empty_file.torrent: New file.
+---
+ test/test_copy_file.cpp | 1 +
+ test/test_torrents/v2_empty_file.torrent | Bin 0 -> 13529 bytes
+ 2 files changed, 1 insertion(+)
+ create mode 100644 test/test_torrents/v2_empty_file.torrent
+
+diff --git a/test/test_copy_file.cpp b/test/test_copy_file.cpp
+index b4a9761..316ec57 100644
+--- a/test/test_copy_file.cpp
++++ b/test/test_copy_file.cpp
+@@ -119,6 +119,7 @@ bool fs_supports_sparse_files()
+ using fsword_t = decltype(statfs::f_type);
+ static fsword_t const ufs = 0x00011954;
+ static const std::set<fsword_t> sparse_filesystems{
++ TMPFS_MAGIC,
+ EXT4_SUPER_MAGIC, EXT3_SUPER_MAGIC, XFS_SUPER_MAGIC, fsword_t(BTRFS_SUPER_MAGIC)
+ , ufs, REISERFS_SUPER_MAGIC
+ };
+diff --git a/test/test_torrents/v2_empty_file.torrent b/test/test_torrents/v2_empty_file.torrent
+new file mode 100644
+index 0000000000000000000000000000000000000000..6c77b9a69812435d8a272f8627782363c01fbca1
+GIT binary patch
+literal 13529
+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
+z8G(M|UB+5sC_3<v
This message was truncated. Download the full message here.
T
T
Tomas Volf wrote on 2 Dec 2023 00:15
[PATCH v2 5/5] gnu: libtorrent-rasterbar: Update to 2.0.9.
(address . 67557@debbugs.gnu.org)(name . Tomas Volf)(address . ~@wolfsden.cz)
921fd74462b70786e61ebffea4c4f23d771dc3ef.1701472517.git.~@wolfsden.cz
Update the package. Since other packages do depend on the previous
version (and according to their documentation do recommend it), the previous
version is exposed as libtorrent-rasterbar-1.2.

The v2.0.9 requires patching to get tests working. Sadly one of the changes
is to introduce new binary file, so it is fetched as an input and applied in a
phase. Snippet is used instead to do the rest of the patching.

* gnu/packages/bittorrent.scm (libtorrent-rasterbar)[version]: Update to
2.0.9.
[source]<snippet>: Patch test/test_copy_file.cpp.
[native-inputs]: Add the missing file (v2_empty_file.torrent).
[arguments]<#:phases>: And add a phase copying it into the correct place.
* gnu/packages/bittorrent.scm (libtorrent-rasterbar-1.2): New variable.
(qbittorrent)[inputs]: Use libtorrent-rasterbar-1.2.
* gnu/packages/enlightenment.scm (epour)[inputs]: Use
libtorrent-rasterbar-1.2.

Change-Id: Ifbbbf02a671f6a3db653499a7a5f2504fd23c255
---
v2:
Drop the patch file and instead do the necessary changes using a substitute* and
a phase copying the test file into the correct place from native-inputs.

gnu/packages/bittorrent.scm | 49 +++++++++++++++++++++++++++++-----
gnu/packages/enlightenment.scm | 2 +-
2 files changed, 43 insertions(+), 8 deletions(-)

Toggle diff (118 lines)
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index f9098b1a56..7a96ac08eb 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -80,6 +80,7 @@ (define-module (gnu packages bittorrent)
#:use-module (gnu packages sqlite)
#:use-module (gnu packages ssh)
#:use-module (gnu packages tls)
+ #:use-module (gnu packages version-control)
#:use-module (gnu packages web)
#:use-module (gnu packages xml))

@@ -416,10 +417,16 @@ (define-public mktorrent
(license (list l:public-domain ; sha1.*, used to build without OpenSSL
l:gpl2+)))) ; with permission to link with OpenSSL

+(define %v2_empty_file.torrent
+ (origin (method url-fetch)
+ (uri "https://github.com/arvidn/libtorrent/raw/v2.0.9/test/test_torrents/v2_empty_file.torrent")
+ (sha256
+ (base32 "1hydgf0m9193hy9010wl0wrbz4k4cgrqg70jakx68pgi79jcqnrn"))))
+
(define-public libtorrent-rasterbar
(package
(name "libtorrent-rasterbar")
- (version "1.2.19")
+ (version "2.0.9")
(source
(origin
(method url-fetch)
@@ -428,7 +435,14 @@ (define-public libtorrent-rasterbar
"releases/download/v" version "/"
"libtorrent-rasterbar-" version ".tar.gz"))
(sha256
- (base32 "03p4nvsll568zlyqifid0cn135sg5whbk7g48gkbapnw92ayks7f"))))
+ (base32 "13kry578ifzz4m2f291bbd7v5v9zsi8y3mf38146cnqw0sv95kch"))
+ ;; https://github.com/arvidn/libtorrent/issues/7566
+ ;; Remove when resolved. I would hope this to be fixed in 2.0.10.
+ (modules '((guix build utils)))
+ (snippet
+ #~(substitute* "test/test_copy_file.cpp"
+ (("EXT4_SUPER_MAGIC, EXT3_SUPER_MAGIC, XFS_SUPER_MAGIC" all)
+ (string-append all ", TMPFS_MAGIC\n"))))))
(build-system cmake-build-system)
(arguments
`(#:configure-flags '("-Dpython-bindings=ON"
@@ -437,6 +451,13 @@ (define-public libtorrent-rasterbar
#:parallel-tests? #f
#:phases
(modify-phases %standard-phases
+ ;; https://github.com/arvidn/libtorrent/issues/7567
+ ;; Remove when resolved. I would hope this to be fixed in 2.0.10.
+ ;; Do not forget to remove the %v2_empty_file.torrent variable.
+ (add-before 'configure 'copy-v2_empty_file.torrent
+ (lambda* (#:key inputs #:allow-other-keys)
+ (copy-file (assoc-ref inputs "%v2_empty_file.torrent")
+ "test/test_torrents/v2_empty_file.torrent")))
(replace 'check
(lambda* (#:key tests? parallel-tests? #:allow-other-keys)
(let* ((disabled-tests
@@ -473,10 +494,10 @@ (define-public libtorrent-rasterbar
"--timeout" timeout
"--output-on-failure"))))))))
(inputs (list boost openssl))
- (native-inputs
- (list libfaketime
- python-wrapper
- pkg-config))
+ (native-inputs `(("libfaketime" ,libfaketime)
+ ("python-wrapper" ,python-wrapper)
+ ("pkg-config" ,pkg-config)
+ ("%v2_empty_file.torrent" ,%v2_empty_file.torrent)))
(home-page "https://www.libtorrent.org/")
(synopsis "Feature-complete BitTorrent implementation")
(description
@@ -485,6 +506,20 @@ (define-public libtorrent-rasterbar
desktops.")
(license l:bsd-2)))

+(define-public libtorrent-rasterbar-1.2
+ (package
+ (inherit libtorrent-rasterbar)
+ (version "1.2.19")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (string-append "https://github.com/arvidn/libtorrent/"
+ "releases/download/v" version "/"
+ "libtorrent-rasterbar-" version ".tar.gz"))
+ (sha256
+ (base32 "03p4nvsll568zlyqifid0cn135sg5whbk7g48gkbapnw92ayks7f"))))))
+
(define-public qbittorrent
(package
(name "qbittorrent")
@@ -506,7 +541,7 @@ (define-public qbittorrent
(list qttools-5))
(inputs
(list boost
- libtorrent-rasterbar
+ libtorrent-rasterbar-1.2
openssl
python-wrapper
qtsvg-5
diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm
index 64d8945f8e..7860c43fef 100644
--- a/gnu/packages/enlightenment.scm
+++ b/gnu/packages/enlightenment.scm
@@ -585,7 +585,7 @@ (define-public epour
(native-inputs
(list intltool python-distutils-extra))
(inputs
- (list libtorrent-rasterbar python-dbus python-efl python-pyxdg))
+ (list libtorrent-rasterbar-1.2 python-dbus python-efl python-pyxdg))
(home-page "https://www.enlightenment.org")
(synopsis "EFL Bittorrent client")
(description "Epour is a BitTorrent client based on the @dfn{Enlightenment
--
2.41.0
T
T
Tomas Volf wrote on 2 Dec 2023 00:15
[PATCH v2 2/5] gnu: deluge: Update to 2.1.1.
(address . 67557@debbugs.gnu.org)(name . Tomas Volf)(address . ~@wolfsden.cz)
00b037edcd941fdf3a288c9212ceded8f182821c.1701472517.git.~@wolfsden.cz
Dependency on nss-certs was added. Most torrents do require SSL in some shape
or form, so it seems appropriate to add it by default.

* gnu/packages/bittorrent.scm (deluge)[version]: Update to 2.1.1.
[propagated-inputs]: Add nss-certs.
[native-search-paths]: Set to allow locating the certificates.

Change-Id: Ic6c79f24851d6917dc4e5b22b3bcb2f6b99e187a
---
gnu/packages/bittorrent.scm | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)

Toggle diff (54 lines)
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index e115c13017..3d79a3a159 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -46,11 +46,13 @@ (define-module (gnu packages bittorrent)
#:use-module ((guix licenses) #:prefix l:)
#:use-module (guix gexp)
#:use-module (guix utils)
+ #:use-module ((guix search-paths) #:select ($SSL_CERT_DIR $SSL_CERT_FILE))
#:use-module (gnu packages)
#:use-module (gnu packages adns)
#:use-module (gnu packages autotools)
#:use-module (gnu packages bash)
#:use-module (gnu packages boost)
+ #:use-module (gnu packages certs)
#:use-module (gnu packages check)
#:use-module (gnu packages cmake)
#:use-module (gnu packages compression)
@@ -574,7 +576,7 @@ (define-public qbittorrent-enhanced-nox
(define-public deluge
(package
(name "deluge")
- (version "2.0.5")
+ (version "2.1.1")
(source
(origin
(method url-fetch)
@@ -583,12 +585,13 @@ (define-public deluge
(version-major+minor version) "/deluge-" version ".tar.xz"))
(sha256
(base32
- "1n15dzfnz1gvb4cf046yhi404i3gs933qgz0ichna6r1znmh9gf4"))))
+ "1xyz8bscwqmd7d8b43svxl42w54pnisvwkkrndx46hifh0cx73bn"))))
(build-system python-build-system)
(inputs (list bash-minimal))
(propagated-inputs
(list gtk+
libtorrent-rasterbar
+ nss-certs
python-pycairo
python-chardet
python-dbus
@@ -606,6 +609,9 @@ (define-public deluge
(native-inputs
(list intltool python-wheel
(librsvg-for-system)))
+ (native-search-paths
+ (list $SSL_CERT_DIR
+ $SSL_CERT_FILE))
;; TODO: Enable tests.
;; After "pytest-twisted" is packaged, HOME is set, and an X server is
;; started, some of the tests still fail. There are likely some tests
--
2.41.0
T
T
Tomas Volf wrote on 2 Dec 2023 00:15
[PATCH v2 3/5] gnu: qbittorrent-enhanced: Update to 4.6.1.10.
(address . 67557@debbugs.gnu.org)(name . Tomas Volf)(address . ~@wolfsden.cz)
c6ba9b82d4296cf4dbdd6307d7635c3e6f6f03c1.1701472517.git.~@wolfsden.cz
* gnu/packages/bittorrent.scm (qbittorrent-enhanced): Update to 4.6.1.10.

Change-Id: Ic164ee27ea54018acfcba0e9db8db11f119800a4
---
gnu/packages/bittorrent.scm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

Toggle diff (24 lines)
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index 3d79a3a159..fb20b3c92c 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -542,7 +542,7 @@ (define-public qbittorrent-enhanced
(package
(inherit qbittorrent)
(name "qbittorrent-enhanced")
- (version "4.5.5.10")
+ (version "4.6.1.10")
(source
(origin
(method git-fetch)
@@ -552,7 +552,7 @@ (define-public qbittorrent-enhanced
(file-name (git-file-name name version))
(sha256
(base32
- "029crx8yd8apssg2k4alnc0py5i2sp3bhjkwki5fvvnpgkrhfqf0"))))
+ "101a9n2vk9d6b4vc3schkmpc56l0i0i60fcjh8hwadc6amc2ymvy"))))
(home-page "https://github.com/c0re100/qBittorrent-Enhanced-Edition")
(description
"qBittorrent Enhanced is a bittorrent client based on qBittorrent with
--
2.41.0
T
T
Tomas Volf wrote on 2 Dec 2023 00:15
[PATCH v2 4/5] gnu: qbittorrent: Update to 4.6.2.
(address . 67557@debbugs.gnu.org)(name . Tomas Volf)(address . ~@wolfsden.cz)
c627b05e09b63455e867a73f538e823ccdb46ce6.1701472517.git.~@wolfsden.cz
* gnu/packages/bittorrent.scm (qbittorrent): Update to 4.6.2.

Change-Id: I75d05f14396e1b017cc939264e30ade625cb7017
---
gnu/packages/bittorrent.scm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

Toggle diff (24 lines)
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index fb20b3c92c..f9098b1a56 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -488,7 +488,7 @@ (define-public libtorrent-rasterbar
(define-public qbittorrent
(package
(name "qbittorrent")
- (version "4.5.5")
+ (version "4.6.2")
(source
(origin
(method git-fetch)
@@ -497,7 +497,7 @@ (define-public qbittorrent
(commit (string-append "release-" version))))
(file-name (git-file-name name version))
(sha256
- (base32 "1ngvvwhafi9mi05r2l9dk9x05za8x35y12p230wpzprydhlgwsxd"))))
+ (base32 "1wps17iv4gj7y751fibvcxk51v09wyniv6xm2yx429dj7z8rfmzs"))))
(build-system qt-build-system)
(arguments
(list #:configure-flags #~(list "-DTESTING=ON")
--
2.41.0
T
T
Tomas Volf wrote on 2 Dec 2023 00:15
[PATCH v2 1/5] gnu: libtorrent-rasterbar: Update to 1.2.19.
(address . 67557@debbugs.gnu.org)(name . Tomas Volf)(address . ~@wolfsden.cz)
d8b960bb05ea05ac21c44f8511f3bf5ed92cabc8.1701472517.git.~@wolfsden.cz
With the update, the execution of the test suite was overhauled a lot.
Parallel tests were disabled, since the do not work well. Since faketime does
cause some tests to hang, test_ssl was moved into a separate run.

* gnu/packages/bittorrent.scm (libtorrent-rasterbar)[version]: Update to
1.2.19.
[arguments]<#:parallel-tests?>: Disable.
[arguments]<#:phases>: Move test_ssl into separate run under faketime. Do not
run under tests under faketime. Anchor the regex for test exclusion. Set
timeout of 600 seconds for each test.

Change-Id: I7392cb3ce1a8815b26b3257498082761255535ee
---
gnu/packages/bittorrent.scm | 46 ++++++++++++++++++++++++-------------
1 file changed, 30 insertions(+), 16 deletions(-)

Toggle diff (80 lines)
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index 6f75a92cff..e115c13017 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -417,7 +417,7 @@ (define-public mktorrent
(define-public libtorrent-rasterbar
(package
(name "libtorrent-rasterbar")
- (version "1.2.18")
+ (version "1.2.19")
(source
(origin
(method url-fetch)
@@ -426,35 +426,49 @@ (define-public libtorrent-rasterbar
"releases/download/v" version "/"
"libtorrent-rasterbar-" version ".tar.gz"))
(sha256
- (base32 "0wpsaqadcicxl4lf1nc1i93c4yzjv8hpzhhrw1hdkrp4gn0vdwpy"))))
+ (base32 "03p4nvsll568zlyqifid0cn135sg5whbk7g48gkbapnw92ayks7f"))))
(build-system cmake-build-system)
(arguments
`(#:configure-flags '("-Dpython-bindings=ON"
"-Dbuild_tests=ON")
+ ;; Tests do not reliably work when executed in parallel.
+ #:parallel-tests? #f
#:phases
(modify-phases %standard-phases
- (add-after 'unpack 'extend-test-timeout
- (lambda _
- (substitute* "test/test_remove_torrent.cpp"
- ;; Extend the test timeout from 3 seconds to 10.
- (("i > 30") "i > 100"))))
(replace 'check
(lambda* (#:key tests? parallel-tests? #:allow-other-keys)
- (let ((disabled-tests
- ;; test_upnp requires a non-localhost IPv4 interface.
- '("test_upnp")))
+ (let* ((disabled-tests
+ '(
+ ;; Requires a non-localhost IPv4 interface.
+ "test_upnp"
+ ;; test_ssl needs to be run separately.
+ "test_ssl"))
+ (exclude-regex (string-append "^("
+ (string-join disabled-tests "|")
+ ")$"))
+ (timeout "600")
+ (jobs (if parallel-tests?
+ (number->string (parallel-job-count))
+ "1")))
(when tests?
+ (invoke "ctest"
+ "-E" exclude-regex
+ "-j" jobs
+ "--timeout" timeout
+ "--output-on-failure")
;; test_ssl relies on bundled TLS certificates with a fixed
;; expiry date. To ensure succesful builds in the future,
;; fake the time to be roughly that of the release.
- (setenv "FAKETIME_ONLY_CMDS" "test_ssl")
+ ;;
+ ;; At the same time, faketime happens to cause
+ ;; test_fast_extension, test_privacy and test_resolve_links
+ ;; to hang, even with FAKETIME_ONLY_CMDS. Not sure why. So
+ ;; execute only test_ssl under faketime.
(invoke "faketime" "2022-10-24"
"ctest"
- "--exclude-regex" (string-join disabled-tests "|")
- "-j" (if parallel-tests?
- (number->string (parallel-job-count))
- "1")
- "--rerun-failed"
+ "-R" "^test_ssl$"
+ "-j" jobs
+ "--timeout" timeout
"--output-on-failure"))))))))
(inputs (list boost openssl))
(native-inputs

base-commit: bdbb9dc27a590b08651d058f06a42caa26e04abb
--
2.41.0
T
T
Tomas Volf wrote on 2 Dec 2023 01:28
[PATCH v3 5/5] gnu: libtorrent-rasterbar: Update to 2.0.9.
(address . 67557@debbugs.gnu.org)(name . Tomas Volf)(address . ~@wolfsden.cz)
671a383b562328b48e7674c5291a6150183b3faa.1701476938.git.~@wolfsden.cz
Update the package. Since other packages do depend on the previous
version (and according to their documentation do recommend it), the previous
version is exposed as libtorrent-rasterbar-1.2.

The v2.0.9 requires patching to get tests working. Sadly one of the changes
is to introduce new binary file, so it is fetched as an input and applied in a
phase. Snippet is used instead to do the rest of the patching.

* gnu/packages/bittorrent.scm (libtorrent-rasterbar)[version]: Update to
2.0.9.
[source]<snippet>: Patch test/test_copy_file.cpp.
[native-inputs]: Add the missing file (v2_empty_file.torrent).
[arguments]<#:phases>: And add a phase copying it into the correct place.
* gnu/packages/bittorrent.scm (libtorrent-rasterbar-1.2): New variable.
(qbittorrent)[inputs]: Use libtorrent-rasterbar-1.2.
* gnu/packages/enlightenment.scm (epour)[inputs]: Use
libtorrent-rasterbar-1.2.

Change-Id: Ifbbbf02a671f6a3db653499a7a5f2504fd23c255
---
v2:
Drop the patch file and instead do the necessary changes using a substitute* and
a phase copying the test file into the correct place from native-inputs.

v3:
Use (or native-inputs inputs).

gnu/packages/bittorrent.scm | 50 +++++++++++++++++++++++++++++-----
gnu/packages/enlightenment.scm | 2 +-
2 files changed, 44 insertions(+), 8 deletions(-)

Toggle diff (119 lines)
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index f9098b1a56..731c8e1c20 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -80,6 +80,7 @@ (define-module (gnu packages bittorrent)
#:use-module (gnu packages sqlite)
#:use-module (gnu packages ssh)
#:use-module (gnu packages tls)
+ #:use-module (gnu packages version-control)
#:use-module (gnu packages web)
#:use-module (gnu packages xml))

@@ -416,10 +417,16 @@ (define-public mktorrent
(license (list l:public-domain ; sha1.*, used to build without OpenSSL
l:gpl2+)))) ; with permission to link with OpenSSL

+(define %v2_empty_file.torrent
+ (origin (method url-fetch)
+ (uri "https://github.com/arvidn/libtorrent/raw/v2.0.9/test/test_torrents/v2_empty_file.torrent")
+ (sha256
+ (base32 "1hydgf0m9193hy9010wl0wrbz4k4cgrqg70jakx68pgi79jcqnrn"))))
+
(define-public libtorrent-rasterbar
(package
(name "libtorrent-rasterbar")
- (version "1.2.19")
+ (version "2.0.9")
(source
(origin
(method url-fetch)
@@ -428,7 +435,14 @@ (define-public libtorrent-rasterbar
"releases/download/v" version "/"
"libtorrent-rasterbar-" version ".tar.gz"))
(sha256
- (base32 "03p4nvsll568zlyqifid0cn135sg5whbk7g48gkbapnw92ayks7f"))))
+ (base32 "13kry578ifzz4m2f291bbd7v5v9zsi8y3mf38146cnqw0sv95kch"))
+ ;; https://github.com/arvidn/libtorrent/issues/7566
+ ;; Remove when resolved. I would hope this to be fixed in 2.0.10.
+ (modules '((guix build utils)))
+ (snippet
+ #~(substitute* "test/test_copy_file.cpp"
+ (("EXT4_SUPER_MAGIC, EXT3_SUPER_MAGIC, XFS_SUPER_MAGIC" all)
+ (string-append all ", TMPFS_MAGIC\n"))))))
(build-system cmake-build-system)
(arguments
`(#:configure-flags '("-Dpython-bindings=ON"
@@ -437,6 +451,14 @@ (define-public libtorrent-rasterbar
#:parallel-tests? #f
#:phases
(modify-phases %standard-phases
+ ;; https://github.com/arvidn/libtorrent/issues/7567
+ ;; Remove when resolved. I would hope this to be fixed in 2.0.10.
+ ;; Do not forget to remove the %v2_empty_file.torrent variable.
+ (add-before 'configure 'copy-v2_empty_file.torrent
+ (lambda* (#:key native-inputs inputs #:allow-other-keys)
+ (copy-file (assoc-ref (or native-inputs inputs)
+ "%v2_empty_file.torrent")
+ "test/test_torrents/v2_empty_file.torrent")))
(replace 'check
(lambda* (#:key tests? parallel-tests? #:allow-other-keys)
(let* ((disabled-tests
@@ -473,10 +495,10 @@ (define-public libtorrent-rasterbar
"--timeout" timeout
"--output-on-failure"))))))))
(inputs (list boost openssl))
- (native-inputs
- (list libfaketime
- python-wrapper
- pkg-config))
+ (native-inputs `(("libfaketime" ,libfaketime)
+ ("python-wrapper" ,python-wrapper)
+ ("pkg-config" ,pkg-config)
+ ("%v2_empty_file.torrent" ,%v2_empty_file.torrent)))
(home-page "https://www.libtorrent.org/")
(synopsis "Feature-complete BitTorrent implementation")
(description
@@ -485,6 +507,20 @@ (define-public libtorrent-rasterbar
desktops.")
(license l:bsd-2)))

+(define-public libtorrent-rasterbar-1.2
+ (package
+ (inherit libtorrent-rasterbar)
+ (version "1.2.19")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (string-append "https://github.com/arvidn/libtorrent/"
+ "releases/download/v" version "/"
+ "libtorrent-rasterbar-" version ".tar.gz"))
+ (sha256
+ (base32 "03p4nvsll568zlyqifid0cn135sg5whbk7g48gkbapnw92ayks7f"))))))
+
(define-public qbittorrent
(package
(name "qbittorrent")
@@ -506,7 +542,7 @@ (define-public qbittorrent
(list qttools-5))
(inputs
(list boost
- libtorrent-rasterbar
+ libtorrent-rasterbar-1.2
openssl
python-wrapper
qtsvg-5
diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm
index 64d8945f8e..7860c43fef 100644
--- a/gnu/packages/enlightenment.scm
+++ b/gnu/packages/enlightenment.scm
@@ -585,7 +585,7 @@ (define-public epour
(native-inputs
(list intltool python-distutils-extra))
(inputs
- (list libtorrent-rasterbar python-dbus python-efl python-pyxdg))
+ (list libtorrent-rasterbar-1.2 python-dbus python-efl python-pyxdg))
(home-page "https://www.enlightenment.org")
(synopsis "EFL Bittorrent client")
(description "Epour is a BitTorrent client based on the @dfn{Enlightenment
--
2.41.0
T
T
Tomas Volf wrote on 2 Dec 2023 01:28
[PATCH v3 2/5] gnu: deluge: Update to 2.1.1.
(address . 67557@debbugs.gnu.org)(name . Tomas Volf)(address . ~@wolfsden.cz)
367e95748003ea62a27dc1b3a27ce13d1e0c7e6f.1701476938.git.~@wolfsden.cz
Dependency on nss-certs was added. Most torrents do require SSL in some shape
or form, so it seems appropriate to add it by default.

* gnu/packages/bittorrent.scm (deluge)[version]: Update to 2.1.1.
[propagated-inputs]: Add nss-certs.
[native-search-paths]: Set to allow locating the certificates.

Change-Id: Ic6c79f24851d6917dc4e5b22b3bcb2f6b99e187a
---
gnu/packages/bittorrent.scm | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)

Toggle diff (54 lines)
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index e115c13017..3d79a3a159 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -46,11 +46,13 @@ (define-module (gnu packages bittorrent)
#:use-module ((guix licenses) #:prefix l:)
#:use-module (guix gexp)
#:use-module (guix utils)
+ #:use-module ((guix search-paths) #:select ($SSL_CERT_DIR $SSL_CERT_FILE))
#:use-module (gnu packages)
#:use-module (gnu packages adns)
#:use-module (gnu packages autotools)
#:use-module (gnu packages bash)
#:use-module (gnu packages boost)
+ #:use-module (gnu packages certs)
#:use-module (gnu packages check)
#:use-module (gnu packages cmake)
#:use-module (gnu packages compression)
@@ -574,7 +576,7 @@ (define-public qbittorrent-enhanced-nox
(define-public deluge
(package
(name "deluge")
- (version "2.0.5")
+ (version "2.1.1")
(source
(origin
(method url-fetch)
@@ -583,12 +585,13 @@ (define-public deluge
(version-major+minor version) "/deluge-" version ".tar.xz"))
(sha256
(base32
- "1n15dzfnz1gvb4cf046yhi404i3gs933qgz0ichna6r1znmh9gf4"))))
+ "1xyz8bscwqmd7d8b43svxl42w54pnisvwkkrndx46hifh0cx73bn"))))
(build-system python-build-system)
(inputs (list bash-minimal))
(propagated-inputs
(list gtk+
libtorrent-rasterbar
+ nss-certs
python-pycairo
python-chardet
python-dbus
@@ -606,6 +609,9 @@ (define-public deluge
(native-inputs
(list intltool python-wheel
(librsvg-for-system)))
+ (native-search-paths
+ (list $SSL_CERT_DIR
+ $SSL_CERT_FILE))
;; TODO: Enable tests.
;; After "pytest-twisted" is packaged, HOME is set, and an X server is
;; started, some of the tests still fail. There are likely some tests
--
2.41.0
T
T
Tomas Volf wrote on 2 Dec 2023 01:28
[PATCH v3 3/5] gnu: qbittorrent-enhanced: Update to 4.6.1.10.
(address . 67557@debbugs.gnu.org)(name . Tomas Volf)(address . ~@wolfsden.cz)
dc4597ab967841d5e2a2b5b86213afb8ead28627.1701476938.git.~@wolfsden.cz
* gnu/packages/bittorrent.scm (qbittorrent-enhanced): Update to 4.6.1.10.

Change-Id: Ic164ee27ea54018acfcba0e9db8db11f119800a4
---
gnu/packages/bittorrent.scm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

Toggle diff (24 lines)
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index 3d79a3a159..fb20b3c92c 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -542,7 +542,7 @@ (define-public qbittorrent-enhanced
(package
(inherit qbittorrent)
(name "qbittorrent-enhanced")
- (version "4.5.5.10")
+ (version "4.6.1.10")
(source
(origin
(method git-fetch)
@@ -552,7 +552,7 @@ (define-public qbittorrent-enhanced
(file-name (git-file-name name version))
(sha256
(base32
- "029crx8yd8apssg2k4alnc0py5i2sp3bhjkwki5fvvnpgkrhfqf0"))))
+ "101a9n2vk9d6b4vc3schkmpc56l0i0i60fcjh8hwadc6amc2ymvy"))))
(home-page "https://github.com/c0re100/qBittorrent-Enhanced-Edition")
(description
"qBittorrent Enhanced is a bittorrent client based on qBittorrent with
--
2.41.0
T
T
Tomas Volf wrote on 2 Dec 2023 01:28
[PATCH v3 4/5] gnu: qbittorrent: Update to 4.6.2.
(address . 67557@debbugs.gnu.org)(name . Tomas Volf)(address . ~@wolfsden.cz)
9a33bc543d1ef38d2fa8333b14c74a86815efe52.1701476938.git.~@wolfsden.cz
* gnu/packages/bittorrent.scm (qbittorrent): Update to 4.6.2.

Change-Id: I75d05f14396e1b017cc939264e30ade625cb7017
---
gnu/packages/bittorrent.scm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

Toggle diff (24 lines)
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index fb20b3c92c..f9098b1a56 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -488,7 +488,7 @@ (define-public libtorrent-rasterbar
(define-public qbittorrent
(package
(name "qbittorrent")
- (version "4.5.5")
+ (version "4.6.2")
(source
(origin
(method git-fetch)
@@ -497,7 +497,7 @@ (define-public qbittorrent
(commit (string-append "release-" version))))
(file-name (git-file-name name version))
(sha256
- (base32 "1ngvvwhafi9mi05r2l9dk9x05za8x35y12p230wpzprydhlgwsxd"))))
+ (base32 "1wps17iv4gj7y751fibvcxk51v09wyniv6xm2yx429dj7z8rfmzs"))))
(build-system qt-build-system)
(arguments
(list #:configure-flags #~(list "-DTESTING=ON")
--
2.41.0
T
T
Tomas Volf wrote on 2 Dec 2023 01:28
[PATCH v3 1/5] gnu: libtorrent-rasterbar: Update to 1.2.19.
(address . 67557@debbugs.gnu.org)(name . Tomas Volf)(address . ~@wolfsden.cz)
a121694b9f75eaa75dd31a2704d36e2f40ad8a74.1701476938.git.~@wolfsden.cz
With the update, the execution of the test suite was overhauled a lot.
Parallel tests were disabled, since the do not work well. Since faketime does
cause some tests to hang, test_ssl was moved into a separate run.

* gnu/packages/bittorrent.scm (libtorrent-rasterbar)[version]: Update to
1.2.19.
[arguments]<#:parallel-tests?>: Disable.
[arguments]<#:phases>: Move test_ssl into separate run under faketime. Do not
run under tests under faketime. Anchor the regex for test exclusion. Set
timeout of 600 seconds for each test.

Change-Id: I7392cb3ce1a8815b26b3257498082761255535ee
---
gnu/packages/bittorrent.scm | 46 ++++++++++++++++++++++++-------------
1 file changed, 30 insertions(+), 16 deletions(-)

Toggle diff (80 lines)
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index 6f75a92cff..e115c13017 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -417,7 +417,7 @@ (define-public mktorrent
(define-public libtorrent-rasterbar
(package
(name "libtorrent-rasterbar")
- (version "1.2.18")
+ (version "1.2.19")
(source
(origin
(method url-fetch)
@@ -426,35 +426,49 @@ (define-public libtorrent-rasterbar
"releases/download/v" version "/"
"libtorrent-rasterbar-" version ".tar.gz"))
(sha256
- (base32 "0wpsaqadcicxl4lf1nc1i93c4yzjv8hpzhhrw1hdkrp4gn0vdwpy"))))
+ (base32 "03p4nvsll568zlyqifid0cn135sg5whbk7g48gkbapnw92ayks7f"))))
(build-system cmake-build-system)
(arguments
`(#:configure-flags '("-Dpython-bindings=ON"
"-Dbuild_tests=ON")
+ ;; Tests do not reliably work when executed in parallel.
+ #:parallel-tests? #f
#:phases
(modify-phases %standard-phases
- (add-after 'unpack 'extend-test-timeout
- (lambda _
- (substitute* "test/test_remove_torrent.cpp"
- ;; Extend the test timeout from 3 seconds to 10.
- (("i > 30") "i > 100"))))
(replace 'check
(lambda* (#:key tests? parallel-tests? #:allow-other-keys)
- (let ((disabled-tests
- ;; test_upnp requires a non-localhost IPv4 interface.
- '("test_upnp")))
+ (let* ((disabled-tests
+ '(
+ ;; Requires a non-localhost IPv4 interface.
+ "test_upnp"
+ ;; test_ssl needs to be run separately.
+ "test_ssl"))
+ (exclude-regex (string-append "^("
+ (string-join disabled-tests "|")
+ ")$"))
+ (timeout "600")
+ (jobs (if parallel-tests?
+ (number->string (parallel-job-count))
+ "1")))
(when tests?
+ (invoke "ctest"
+ "-E" exclude-regex
+ "-j" jobs
+ "--timeout" timeout
+ "--output-on-failure")
;; test_ssl relies on bundled TLS certificates with a fixed
;; expiry date. To ensure succesful builds in the future,
;; fake the time to be roughly that of the release.
- (setenv "FAKETIME_ONLY_CMDS" "test_ssl")
+ ;;
+ ;; At the same time, faketime happens to cause
+ ;; test_fast_extension, test_privacy and test_resolve_links
+ ;; to hang, even with FAKETIME_ONLY_CMDS. Not sure why. So
+ ;; execute only test_ssl under faketime.
(invoke "faketime" "2022-10-24"
"ctest"
- "--exclude-regex" (string-join disabled-tests "|")
- "-j" (if parallel-tests?
- (number->string (parallel-job-count))
- "1")
- "--rerun-failed"
+ "-R" "^test_ssl$"
+ "-j" jobs
+ "--timeout" timeout
"--output-on-failure"))))))))
(inputs (list boost openssl))
(native-inputs

base-commit: 842a11f1caa1bb929c427722ad9d7b7c1ff65727
--
2.41.0
L
L
Ludovic Courtès wrote on 6 Dec 2023 23:49
Re: [bug#67557] [PATCH 0/5] Update libtorrent-rasterbar and dependent programs
(name . Tomas Volf)(address . ~@wolfsden.cz)(address . 67557-done@debbugs.gnu.org)
87o7f3eyk7.fsf@gnu.org
Hello Tomas,

Tomas Volf <~@wolfsden.cz> skribis:

Toggle quote (6 lines)
> gnu: libtorrent-rasterbar: Update to 1.2.19.
> gnu: deluge: Update to 2.1.1.
> gnu: qbittorrent-enhanced: Update to 4.6.1.10.
> gnu: qbittorrent: Update to 4.6.2.
> gnu: libtorrent-rasterbar: Update to 2.0.9.

Applied v3 of the patch series after building all dependents of
‘libtorrent-rasterbar’ locally on x86_64-linux.

Thanks!

Ludo’.
Closed
T
T
Tomas Volf wrote on 7 Dec 2023 16:31
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 67557-done@debbugs.gnu.org)
ZXHlVvLkhuX_MW9y@ws
Hi,

On 2023-12-06 23:49:44 +0100, Ludovic Courtès wrote:
Toggle quote (15 lines)
> Hello Tomas,
>
> Tomas Volf <~@wolfsden.cz> skribis:
>
> > gnu: libtorrent-rasterbar: Update to 1.2.19.
> > gnu: deluge: Update to 2.1.1.
> > gnu: qbittorrent-enhanced: Update to 4.6.1.10.
> > gnu: qbittorrent: Update to 4.6.2.
> > gnu: libtorrent-rasterbar: Update to 2.0.9.
>
> Applied v3 of the patch series after building all dependents of
> ‘libtorrent-rasterbar’ locally on x86_64-linux.
>
> Thanks!

No, thank you :)

Tomas

--
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEt4NJs4wUfTYpiGikL7/ufbZ/wakFAmVx5VYACgkQL7/ufbZ/
wanLnQ/+NpkRJhnTQ+Z/dys/2wxGF1yipilQHi+QdPuIhMDtszUI410QYI8Oqca6
82dpR9ZfuD9glaPwsUl08gx0UG/7VL70xzhLxAzNy9rlqppRwbDjz3meUCZk5MZA
CQTsUhcRKZiriZaGC6yAYiWcjsy63cYveHi5xUa+9cYNtit2qTBnAz+/XhPVWlcH
karyvEpwqWbbdCI160fFQ5vp06jNaqEFJJwMSXaqjS8ZjeQJB2FkMPJ/hdOga9cg
uxZi7t0TOAKyi0A6WvbzrQR/3wCfzRFaGJAsm95VNIH1Jm8fjrOzhzg1Y7il3Nkq
iFmV8SqkRsU1kMbTK3GJCU12fr19CMBkjDFWJuZfCY5Wa96tvMDw52I8ahkj+pl+
yKWK0ZOlcI2uqUs03PrN5BE9tmp6xsFhNlcA6GAOoTXOBXXGjYAPdV5lX6Rc5lhj
lK51zX8bqROewsoGz2UJJ5bQDDhLhf3GqurrZ9jqzMuWTkL3spblt8pNHUz9IEQ0
/9HS8/q9FNOkXsatlxXHH9sJXAg7TZK/WKyLQGIQXzDtP4eq/6ouYOWR1qLjJex5
Hw5OY0wiH96q9JgNnSXH2MQCqK9oqFXhLUISMLGXw8ldXX6nfl0F9L3pMHsvOvfL
KMeTN6UHEYhZJVDawZll43wzAl0j8p+YO3pM7j7lu6G7IsW0tzM=
=rn1v
-----END PGP SIGNATURE-----


Closed
?