[Pkg-owncloud-commits] [owncloud-client] 35/484: Sync: An initial diskspace check #2939
Sandro Knauß
hefee-guest at moszumanska.debian.org
Wed Dec 16 00:37:08 UTC 2015
This is an automated email from the git hooks/post-receive script.
hefee-guest pushed a commit to branch master
in repository owncloud-client.
commit 12dc372b2147f82a68237507e8abefeadd32016c
Author: Christian Kamm <mail at ckamm.de>
Date: Wed Sep 30 15:07:45 2015 +0200
Sync: An initial diskspace check #2939
* Before each sync, check that there are at least
250 MB of space available and abort otherwise.
* Can be overridden with OWNCLOUD_MIN_FREE_SPACE
---
src/libsync/syncengine.cpp | 29 +++++++++++++++++++++++++++++
src/libsync/utility.cpp | 23 ++++++++++-------------
src/libsync/utility.h | 2 +-
3 files changed, 40 insertions(+), 14 deletions(-)
diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp
index 62f6c10..e4bb8ce 100644
--- a/src/libsync/syncengine.cpp
+++ b/src/libsync/syncengine.cpp
@@ -54,6 +54,18 @@ extern "C" const char *csync_instruction_str(enum csync_instructions_e instr);
namespace OCC {
+/* The minimum amount of space required to start a sync run */
+static qint64 minFreeSpace()
+{
+ static bool ok = false;
+ static qint64 freeSpace = qgetenv("OWNCLOUD_MIN_FREE_SPACE").toLongLong(&ok);
+ if (ok) {
+ return freeSpace;
+ }
+
+ return 250 * 1000 * 1000LL;
+}
+
bool SyncEngine::_syncRunning = false;
SyncEngine::SyncEngine(AccountPtr account, CSYNC *ctx, const QString& localPath,
@@ -599,6 +611,23 @@ void SyncEngine::startSync()
return;
}
+ // Check free size on disk first.
+ const qint64 minFree = minFreeSpace();
+ const qint64 freeBytes = Utility::freeDiskSpace(_localPath);
+ if (freeBytes >= 0) {
+ qDebug() << "There are" << freeBytes << "bytes available at" << _localPath
+ << "and at least" << minFree << "are required";
+ if (freeBytes < minFree) {
+ emit csyncError(tr("Only %1 are available, need at least %2 to start").arg(
+ Utility::octetsToString(freeBytes),
+ Utility::octetsToString(minFree)));
+ finalize();
+ return;
+ }
+ } else {
+ qDebug() << "Could not determine free space available at" << _localPath;
+ }
+
_syncedItems.clear();
_syncItemMap.clear();
_needsUpdate = false;
diff --git a/src/libsync/utility.cpp b/src/libsync/utility.cpp
index 5babf16..4f63ebf 100644
--- a/src/libsync/utility.cpp
+++ b/src/libsync/utility.cpp
@@ -180,29 +180,26 @@ void Utility::setLaunchOnStartup(const QString &appName, const QString& guiName,
setLaunchOnStartup_private(appName, guiName, enable);
}
-qint64 Utility::freeDiskSpace(const QString &path, bool *ok)
+qint64 Utility::freeDiskSpace(const QString &path)
{
#if defined(Q_OS_MAC) || defined(Q_OS_FREEBSD) || defined(Q_OS_FREEBSD_KERNEL) || defined(Q_OS_NETBSD) || defined(Q_OS_OPENBSD)
- Q_UNUSED(ok)
struct statvfs stat;
- statvfs(path.toUtf8().data(), &stat);
- return (qint64) stat.f_bavail * stat.f_frsize;
+ if (statvfs(path.toLocal8Bit().data(), &stat) == 0) {
+ return (qint64) stat.f_bavail * stat.f_frsize;
+ }
#elif defined(Q_OS_UNIX)
- Q_UNUSED(ok)
struct statvfs64 stat;
- statvfs64(path.toUtf8().data(), &stat);
- return (qint64) stat.f_bavail * stat.f_frsize;
+ if (statvfs64(path.toLocal8Bit().data(), &stat) == 0) {
+ return (qint64) stat.f_bavail * stat.f_frsize;
+ }
#elif defined(Q_OS_WIN)
ULARGE_INTEGER freeBytes;
freeBytes.QuadPart = 0L;
- if( !GetDiskFreeSpaceEx( reinterpret_cast<const wchar_t *>(path.utf16()), &freeBytes, NULL, NULL ) ) {
- if (ok) *ok = false;
+ if (GetDiskFreeSpaceEx( reinterpret_cast<const wchar_t *>(path.utf16()), &freeBytes, NULL, NULL )) {
+ return freeBytes.QuadPart;
}
- return freeBytes.QuadPart;
-#else
- if (ok) *ok = false;
- return 0;
#endif
+ return -1;
}
QString Utility::compactFormatDouble(double value, int prec, const QString& unit)
diff --git a/src/libsync/utility.h b/src/libsync/utility.h
index 40e7961..d4bc2f8f 100644
--- a/src/libsync/utility.h
+++ b/src/libsync/utility.h
@@ -38,7 +38,7 @@ namespace Utility
OWNCLOUDSYNC_EXPORT QByteArray userAgentString();
OWNCLOUDSYNC_EXPORT bool hasLaunchOnStartup(const QString &appName);
OWNCLOUDSYNC_EXPORT void setLaunchOnStartup(const QString &appName, const QString& guiName, bool launch);
- OWNCLOUDSYNC_EXPORT qint64 freeDiskSpace(const QString &path, bool *ok = 0);
+ OWNCLOUDSYNC_EXPORT qint64 freeDiskSpace(const QString &path);
OWNCLOUDSYNC_EXPORT QString toCSyncScheme(const QString &urlStr);
/** Like QLocale::toString(double, 'f', prec), but drops trailing zeros after the decimal point */
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git
More information about the Pkg-owncloud-commits
mailing list