From 7f7cbbf336b6a6f8ec5d3ffdb0ba3eb6986178c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20H=C3=BCsers?= Date: Sun, 26 Oct 2025 19:36:33 +0100 Subject: [PATCH] upgpkg: firefox-syncstorage 0.21.1-1 upstream release Thanks to Matthieu Valleton for contributing a patch to restore MariaDB compatibility --- firefox-syncstorage/.SRCINFO | 10 ++-- firefox-syncstorage/PKGBUILD | 21 +++++--- firefox-syncstorage/mariadb-compat.patch | 69 ++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 11 deletions(-) create mode 100644 firefox-syncstorage/mariadb-compat.patch diff --git a/firefox-syncstorage/.SRCINFO b/firefox-syncstorage/.SRCINFO index db02de8..5b70068 100644 --- a/firefox-syncstorage/.SRCINFO +++ b/firefox-syncstorage/.SRCINFO @@ -1,6 +1,6 @@ pkgbase = firefox-syncstorage pkgdesc = Sync storage server with built-in token server for running a self-hosted firefox sync server - pkgver = 0.18.2 + pkgver = 0.21.1 pkgrel = 1 url = https://github.com/mozilla-services/syncstorage-rs install = firefox-syncstorage.install @@ -16,14 +16,14 @@ pkgbase = firefox-syncstorage makedepends = pkgconf makedepends = mariadb-libs depends = openssl - depends = python-fxa - depends = python-tokenlib optdepends = mysql: for use with a local database server options = !lto backup = etc/firefox-syncstorage.toml - source = https://github.com/mozilla-services/syncstorage-rs/archive/0.18.2/syncstorage-rs-0.18.2.tar.gz + source = https://github.com/mozilla-services/syncstorage-rs/archive/0.21.1/syncstorage-rs-0.21.1.tar.gz source = firefox-syncstorage.service - sha512sums = 4689b5eca15a983f020dad13c8290f1eb3d62ea8dc52aa3c5c289e256911090d90255b0f9adf88bf9c3bfaec4f11790ecdb18ba94c67aedcdb9ff1fd85fea480 + source = mariadb-compat.patch + sha512sums = dcf10d5d6e286dea69faaabdf6ad2f60e7d4e0563ec30dc113318c809d4224e05289423ed688080c7d74d97e5236176047ec889f96829ceb8dfc4aa9991e2d7e sha512sums = 4c5fbb99160613ba3fb0fedce97f04f63b92699fe79c6edd899d4ec5f297c5a98c0c211df3eb9a6579c12c57f4c63513747ed8944a60fc76e32f1e0c0f5e3a95 + sha512sums = fc24c504defb2961388833a5d6f96d883c533f58476de595f697ff5d42daabd21f8ce3c52e3f1897e089fcd8f2791d93ecc42eeee49f0100a17fd1689fa112c7 pkgname = firefox-syncstorage diff --git a/firefox-syncstorage/PKGBUILD b/firefox-syncstorage/PKGBUILD index 6f7ac8f..d519dbf 100644 --- a/firefox-syncstorage/PKGBUILD +++ b/firefox-syncstorage/PKGBUILD @@ -1,30 +1,39 @@ # Maintainer: Manuel Hüsers +# Contributor: Matthieu Valleton # Contributor: jewelux # Based off the firefox-syncstorage-git PKGBUILD from jewelux pkgname=firefox-syncstorage _pkgname=syncstorage-rs -pkgver=0.18.2 +pkgver=0.21.1 pkgrel=1 pkgdesc='Sync storage server with built-in token server for running a self-hosted firefox sync server' arch=('i686' 'x86_64' 'arm' 'armv6h' 'armv7h' 'aarch64') url="https://github.com/mozilla-services/${_pkgname}" license=('MPL-2.0') -depends=('openssl' 'python-fxa' 'python-tokenlib') +depends=('openssl') makedepends=('rust' 'cmake' 'pkgconf' 'mariadb-libs') optdepends=('mysql: for use with a local database server') options=('!lto') install="${pkgname}.install" source=("https://github.com/mozilla-services/${_pkgname}/archive/${pkgver}/${_pkgname}-${pkgver}.tar.gz" - "${pkgname}.service") -sha512sums=('4689b5eca15a983f020dad13c8290f1eb3d62ea8dc52aa3c5c289e256911090d90255b0f9adf88bf9c3bfaec4f11790ecdb18ba94c67aedcdb9ff1fd85fea480' - '4c5fbb99160613ba3fb0fedce97f04f63b92699fe79c6edd899d4ec5f297c5a98c0c211df3eb9a6579c12c57f4c63513747ed8944a60fc76e32f1e0c0f5e3a95') + "${pkgname}.service" + "mariadb-compat.patch") +sha512sums=('dcf10d5d6e286dea69faaabdf6ad2f60e7d4e0563ec30dc113318c809d4224e05289423ed688080c7d74d97e5236176047ec889f96829ceb8dfc4aa9991e2d7e' + '4c5fbb99160613ba3fb0fedce97f04f63b92699fe79c6edd899d4ec5f297c5a98c0c211df3eb9a6579c12c57f4c63513747ed8944a60fc76e32f1e0c0f5e3a95' + 'fc24c504defb2961388833a5d6f96d883c533f58476de595f697ff5d42daabd21f8ce3c52e3f1897e089fcd8f2791d93ecc42eeee49f0100a17fd1689fa112c7') backup=("etc/${pkgname}.toml") +# Patch for MariaDB compatibility, cf. https://github.com/mozilla-services/syncstorage-rs/issues/1753 +prepare() { + cd ${_pkgname}-${pkgver} + patch -p1 -i "${srcdir}/mariadb-compat.patch" +} + build() { cd "${_pkgname}-${pkgver}" - cargo build --release + cargo build --release --no-default-features --features=syncstorage-db/mysql } package() { diff --git a/firefox-syncstorage/mariadb-compat.patch b/firefox-syncstorage/mariadb-compat.patch new file mode 100644 index 0000000..860bc3e --- /dev/null +++ b/firefox-syncstorage/mariadb-compat.patch @@ -0,0 +1,69 @@ +idiff --git a/syncstorage-mysql/src/diesel_ext.rs b/syncstorage-mysql/src/diesel_ext.rs +index 18abb4a..fe52470 100644 +--- a/syncstorage-mysql/src/diesel_ext.rs ++++ b/syncstorage-mysql/src/diesel_ext.rs +@@ -3,11 +3,43 @@ use std::{fmt::Debug, marker::PhantomData}; + use diesel::{ + backend::Backend, + insertable::CanInsertInSingleQuery, ++ mysql::Mysql, + query_builder::{AstPass, InsertStatement, QueryFragment, QueryId}, ++ query_dsl::methods::LockingDsl, + result::QueryResult, + Expression, QuerySource, RunQueryDsl, + }; + ++/// Emit MySQL <= 5.7's `LOCK IN SHARE MODE` ++/// ++/// MySQL 8 supports `FOR SHARE` as an alias (which diesel natively supports) ++pub trait LockInShareModeDsl { ++ type Output; ++ ++ fn lock_in_share_mode(self) -> Self::Output; ++} ++ ++impl LockInShareModeDsl for T ++where ++ T: LockingDsl, ++{ ++ type Output = >::Output; ++ ++ fn lock_in_share_mode(self) -> Self::Output { ++ self.with_lock(LockInShareMode) ++ } ++} ++ ++#[derive(Debug, Clone, Copy, QueryId)] ++pub struct LockInShareMode; ++ ++impl QueryFragment for LockInShareMode { ++ fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, Mysql>) -> QueryResult<()> { ++ out.push_sql(" LOCK IN SHARE MODE"); ++ Ok(()) ++ } ++} ++ + #[allow(dead_code)] // Not really dead, Rust can't see it. + #[derive(Debug, Clone)] + pub struct OnDuplicateKeyUpdate( +diff --git a/syncstorage-mysql/src/models.rs b/syncstorage-mysql/src/models.rs +index 1114f21..fb54649 100644 +--- a/syncstorage-mysql/src/models.rs ++++ b/syncstorage-mysql/src/models.rs +@@ -25,6 +25,7 @@ use syncstorage_settings::{Quota, DEFAULT_MAX_TOTAL_RECORDS}; + + use super::{ + batch, ++ diesel_ext::LockInShareModeDsl, + error::DbError, + pool::{CollectionCache, Conn}, + schema::{bso, collections, user_collections}, +@@ -179,7 +180,7 @@ impl MysqlDb { + .select(user_collections::modified) + .filter(user_collections::user_id.eq(user_id)) + .filter(user_collections::collection_id.eq(collection_id)) +- .for_share() ++ .lock_in_share_mode() + .first(&mut *self.conn.write()?) + .optional()?; + if let Some(modified) = modified {