[arch-commits] Commit in digikam/trunk (49ee18fb.patch PKGBUILD)
Antonio Rojas
arojas at gemini.archlinux.org
Sun Jul 25 14:04:15 UTC 2021
Date: Sunday, July 25, 2021 @ 14:04:14
Author: arojas
Revision: 420385
Upgrade database on mysql version updates
Added:
digikam/trunk/49ee18fb.patch
Modified:
digikam/trunk/PKGBUILD
----------------+
49ee18fb.patch | 193 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
PKGBUILD | 12 ++-
2 files changed, 202 insertions(+), 3 deletions(-)
Added: 49ee18fb.patch
===================================================================
--- 49ee18fb.patch (rev 0)
+++ 49ee18fb.patch 2021-07-25 14:04:14 UTC (rev 420385)
@@ -0,0 +1,193 @@
+From 49ee18fbf2220baedbc015f51b74f67930115287 Mon Sep 17 00:00:00 2001
+From: Maik Qualmann <metzpinguin at gmail.com>
+Date: Sun, 25 Jul 2021 15:44:56 +0200
+Subject: [PATCH] perform a database upgrade if the server / database version
+ is different BUGS: 440212 BUGS: 440030 FIXED-IN: 7.4.0
+
+diff --git a/core/libs/database/server/databaseserver.cpp b/core/libs/database/server/databaseserver.cpp
+index 7133148379..cebe9d0f6a 100644
+--- a/core/libs/database/server/databaseserver.cpp
++++ b/core/libs/database/server/databaseserver.cpp
+@@ -73,6 +73,7 @@ public:
+ QString fileDataDir;
+ QString actualConfig;
+ QString globalConfig;
++ QString dbVersion;
+ };
+
+ DatabaseServer::DatabaseServer(const DbEngineParameters& params, DatabaseServerStarter* const parent)
+@@ -224,8 +225,6 @@ bool DatabaseServer::isRunning() const
+
+ DatabaseServerError DatabaseServer::startMysqlDatabaseProcess()
+ {
+- DatabaseServerError result;
+-
+ DatabaseServerError error = checkDatabaseDirs();
+
+ if (error.getErrorType() != DatabaseServerError::NoErrors)
+@@ -265,7 +264,14 @@ DatabaseServerError DatabaseServer::startMysqlDatabaseProcess()
+
+ databaseServerStateEnum = running;
+
+- return result;
++ error = checkUpgradeMysqlDatabase();
++
++ if (error.getErrorType() != DatabaseServerError::NoErrors)
++ {
++ return error;
++ }
++
++ return error;
+ }
+
+ DatabaseServerError DatabaseServer::checkDatabaseDirs() const
+@@ -677,6 +683,25 @@ DatabaseServerError DatabaseServer::initMysqlDatabase() const
+
+ db.close();
+ }
++ else
++ {
++ if (query.exec(QLatin1String("SELECT VERSION();")))
++ {
++ if (query.next() && (query.lastError().type() == QSqlError::NoError))
++ {
++
++ QRegExp reg(QLatin1String("\\d+\\.\\d+\\.\\d+"));
++
++ if (reg.indexIn(query.value(0).toString()) != -1)
++ {
++ d->dbVersion = reg.capturedTexts().first();
++
++ qCDebug(DIGIKAM_DATABASESERVER_LOG) << "Database version:"
++ << d->dbVersion;
++ }
++ }
++ }
++ }
+ }
+
+ QSqlDatabase::removeDatabase(initCon);
+@@ -684,6 +709,104 @@ DatabaseServerError DatabaseServer::initMysqlDatabase() const
+ return result;
+ }
+
++DatabaseServerError DatabaseServer::checkUpgradeMysqlDatabase()
++{
++ DatabaseServerError result;
++
++ // Synthesize the server command line arguments
++
++ QStringList versionCmdArgs;
++ versionCmdArgs << QLatin1String("--version");
++
++ // Start the database server
++
++ QProcess* const versionProcess = new QProcess();
++ versionProcess->setProcessEnvironment(adjustedEnvironmentForAppImage());
++ versionProcess->start(d->mysqldCmd, versionCmdArgs);
++
++ if (!versionProcess->waitForFinished() || (versionProcess->exitCode() != 0))
++ {
++ QString errorMsg = processErrorLog(versionProcess,
++ i18n("Could not get mysql server version."));
++
++ delete versionProcess;
++
++ return DatabaseServerError(DatabaseServerError::StartError, errorMsg);
++ }
++
++ QString serverVersion;
++ QRegExp reg(QLatin1String("\\d+\\.\\d+\\.\\d+"));
++
++ if (reg.indexIn(QString::fromUtf8(versionProcess->readAllStandardOutput())) != -1)
++ {
++ serverVersion = reg.capturedTexts().first();
++
++ qCDebug(DIGIKAM_DATABASESERVER_LOG) << "MySQL server version:"
++ << serverVersion;
++ }
++
++ delete versionProcess;
++
++ if (serverVersion == d->dbVersion)
++ {
++ return result;
++ }
++
++ // Synthesize the mysql upgrade command line arguments
++
++ QStringList upgradeCmdArgs;
++
++#ifdef Q_OS_WIN
++
++ upgradeCmdArgs << QLatin1String("--port=3307");
++
++#else
++
++ upgradeCmdArgs << QString::fromLatin1("--socket=%1/mysql.socket").arg(d->miscDir);
++
++#endif
++
++ // Start the upgrade ptogram
++
++ QUrl upgradeUrl = QUrl::fromLocalFile(d->mysqlAdminPath).adjusted(QUrl::RemoveFilename);
++ upgradeUrl.setPath(upgradeUrl.path() + QLatin1String("mysql_upgrade"));
++
++ QProcess* const upgradeProcess = new QProcess();
++ upgradeProcess->setProcessEnvironment(adjustedEnvironmentForAppImage());
++ upgradeProcess->start(upgradeUrl.toLocalFile(), upgradeCmdArgs);
++
++ qCDebug(DIGIKAM_DATABASESERVER_LOG) << "Upgrade database:"
++ << upgradeProcess->program()
++ << upgradeProcess->arguments();
++
++ if (!upgradeProcess->waitForFinished() || (upgradeProcess->exitCode() != 0))
++ {
++ QString errorMsg = processErrorLog(upgradeProcess,
++ i18n("Could not upgrade database."));
++
++ delete upgradeProcess;
++
++ return DatabaseServerError(DatabaseServerError::StartError, errorMsg);
++ }
++
++ delete upgradeProcess;
++
++ // Restart the database server.
++
++ stopDatabaseProcess();
++
++ result = startMysqlServer();
++
++ if (result.getErrorType() != DatabaseServerError::NoErrors)
++ {
++ return result;
++ }
++
++ result = initMysqlDatabase();
++
++ return result;
++}
++
+ QString DatabaseServer::getcurrentAccountUserName() const
+ {
+ QString name = QString::fromUtf8(qgetenv("USER")); // Linux and OSX
+diff --git a/core/libs/database/server/databaseserver.h b/core/libs/database/server/databaseserver.h
+index 0b96d5ceb1..d1140e23ed 100644
+--- a/core/libs/database/server/databaseserver.h
++++ b/core/libs/database/server/databaseserver.h
+@@ -127,6 +127,11 @@ private:
+ */
+ DatabaseServerError initMysqlDatabase() const;
+
++ /**
++ * Check for a mysql database upgrade.
++ */
++ DatabaseServerError checkUpgradeMysqlDatabase();
++
+ /**
+ * Return the current user account name.
+ */
+--
+GitLab
+
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2021-07-25 07:59:28 UTC (rev 420384)
+++ PKGBUILD 2021-07-25 14:04:14 UTC (rev 420385)
@@ -7,7 +7,7 @@
pkgname=digikam
_pkgver=7.3.0
pkgver=${_pkgver//-/_} # for beta versions
-pkgrel=2
+pkgrel=3
pkgdesc='An advanced digital photo management application'
arch=(x86_64)
license=(GPL)
@@ -18,11 +18,17 @@
optdepends=('hugin: panorama tool' 'qt5-imageformats: support for additional image formats (WEBP, TIFF)'
'rawtherapee: RAW import' 'darktable: RAW import'
'perl: for digitaglinktree')
-source=(https://download.kde.org/stable/$pkgname/$pkgver/$pkgname-$_pkgver.tar.xz{,.sig})
+source=(https://download.kde.org/stable/$pkgname/$pkgver/$pkgname-$_pkgver.tar.xz{,.sig}
+ 49ee18fb.patch)
sha256sums=('95aea93be1cfd39bb52333b82b3e57bf68080c7d1319d754d167a20f6dbe4551'
- 'SKIP')
+ 'SKIP'
+ 'e1980cd4ee76160e1262ec1044d5072a1c8ea1e36a020882e53f5cb7edd0ce23')
validpgpkeys=(D1CF2444A7858C5F2FB095B74A77747BC2386E50) # digiKam.org (digiKam project) <digikamdeveloper at gmail.com>
+prepare() {
+ patch -d $pkgname-$pkgver -p1 < 49ee18fb.patch # Upgrade database on mysql version updates
+}
+
build() {
cmake -B build -S $pkgname-$_pkgver \
-DBUILD_TESTING=OFF \
More information about the arch-commits
mailing list