From 35c05264e897b85971f9749fcc6ea82415f7e755 Mon Sep 17 00:00:00 2001 From: Roberto Ricci Date: Sun, 10 Jul 2022 12:02:31 +0200 Subject: [PATCH] rclone: update to 1.59.0. --- srcpkgs/rclone/patches/alignment.patch | 45 ++++++++++++++++++++++++++ srcpkgs/rclone/template | 16 +++++++-- 2 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 srcpkgs/rclone/patches/alignment.patch diff --git a/srcpkgs/rclone/patches/alignment.patch b/srcpkgs/rclone/patches/alignment.patch new file mode 100644 index 000000000000..7ddc42a8b288 --- /dev/null +++ b/srcpkgs/rclone/patches/alignment.patch @@ -0,0 +1,45 @@ +https://github.com/rclone/rclone/pull/6311 +From 67fd60275a6187c41c4944545c2145cd28bc330d Mon Sep 17 00:00:00 2001 +From: r-ricci +Date: Mon, 11 Jul 2022 18:34:06 +0100 +Subject: [PATCH] union: fix panic due to misalignment of struct field in 32 + bit architectures + +`FS.cacheExpiry` is accessed through sync/atomic. +According to the documentation, "On ARM, 386, and 32-bit MIPS, it is +the caller's responsibility to arrange for 64-bit alignment of 64-bit +words accessed atomically. The first word in a variable or in an +allocated struct, array, or slice can be relied upon to be 64-bit +aligned." +Before commit 1d2fe0d8564bc679ece166c24b24e6fe7dc1455c this field was +aligned, but then a new field was added to the structure, causing the +test suite to panic on linux/386. +No other field is used with sync/atomic, so `cacheExpiry` can just be +placed at the beginning of the stuct to ensure it is always aligned. +--- + backend/union/upstream/upstream.go | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/backend/union/upstream/upstream.go b/backend/union/upstream/upstream.go +index 35b477f7930a..7b9f44fd2a39 100644 +--- a/backend/union/upstream/upstream.go ++++ b/backend/union/upstream/upstream.go +@@ -24,6 +24,10 @@ var ( + + // Fs is a wrap of any fs and its configs + type Fs struct { ++ // In order to ensure memory alignment on 32-bit architectures ++ // when this field is accessed through sync/atomic functions, ++ // it must be the first entry in the struct ++ cacheExpiry int64 // usage cache expiry time + fs.Fs + RootFs fs.Fs + RootPath string +@@ -32,7 +36,6 @@ type Fs struct { + creatable bool + usage *fs.Usage // Cache the usage + cacheTime time.Duration // cache duration +- cacheExpiry int64 // usage cache expiry time + cacheMutex sync.RWMutex + cacheOnce sync.Once + cacheUpdate bool // if the cache is updating diff --git a/srcpkgs/rclone/template b/srcpkgs/rclone/template index a16eb3bd5e5b..163095c64e2d 100644 --- a/srcpkgs/rclone/template +++ b/srcpkgs/rclone/template @@ -1,9 +1,10 @@ # Template file for 'rclone' pkgname=rclone -version=1.57.0 +version=1.59.0 revision=1 wrksrc="rclone-v${version}" build_style=go +build_helper=qemu go_import_path=github.com/rclone/rclone go_build_tags="noselfupdate" go_ldflags="-extldflags=-fuse-ld=bfd -X github.com/rclone/rclone/fs.Version=v${version}" @@ -13,7 +14,7 @@ license="MIT" homepage="https://rclone.org/" changelog="https://rclone.org/changelog/" distfiles="https://downloads.rclone.org/v${version}/rclone-v${version}.tar.gz" -checksum=3a762c02c202a9142c2d5c1a3927563a556d1683abadd25d2f695e237e4ea693 +checksum=9061caad3082f4d275d90f2975ef120fb71f6537ed88d08db1a3b5404db5ae49 pre_build() { if [ "$CROSS_BUILD" ] && [ "$XBPS_TARGET_LIBC" = musl ]; then @@ -26,6 +27,12 @@ pre_build() { do_check() { rm cmd/serve/docker/docker_test.go + rm cmd/mount/mount_test.go + rm cmd/mount2/mount_test.go + + # could time out on i686 and it's deprecated + # https://github.com/rclone/rclone/issues/5784#issuecomment-961520934 + rm backend/cache/cache_test.go # equivalent to quicktest target of Makefile RCLONE_CONFIG="/notfound" go test -tags "$go_build_tags" ./... @@ -35,4 +42,9 @@ post_install() { ln -sf rclone ${DESTDIR}/usr/bin/mount.rclone vlicense COPYING vman rclone.1 + + for shell in bash zsh fish; do + vtargetrun ${DESTDIR}/usr/bin/rclone genautocomplete $shell completion.$shell + vcompletion completion.$shell $shell + done }