diff options
author | Christian Kandeler <christian.kandeler@nokia.com> | 2012-05-30 18:22:17 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@nokia.com> | 2012-05-31 14:07:22 +0200 |
commit | ff584622f48474e054ee4e44b2d0646513df4b19 (patch) | |
tree | bbf18e34e3f2aecbf2e597ddf3cedc8d76cb4358 /src/plugins/remotelinux/remotelinuxcheckforfreediskspacestep.cpp | |
parent | f10d751466c68cd8f999aa73884c5f2452632fd3 (diff) | |
download | qt-creator-ff584622f48474e054ee4e44b2d0646513df4b19.tar.gz |
RemoteLinux: Add new deploy step that checks for free space.
Tool output in the "disk full" case can be rather unhelpful,
so we check in advance.
Change-Id: Ia3f5f0b456b91acf9a8f8e72de870e1df6ea8e80
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@nokia.com>
Diffstat (limited to 'src/plugins/remotelinux/remotelinuxcheckforfreediskspacestep.cpp')
-rw-r--r-- | src/plugins/remotelinux/remotelinuxcheckforfreediskspacestep.cpp | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/src/plugins/remotelinux/remotelinuxcheckforfreediskspacestep.cpp b/src/plugins/remotelinux/remotelinuxcheckforfreediskspacestep.cpp new file mode 100644 index 0000000000..81afdbedd4 --- /dev/null +++ b/src/plugins/remotelinux/remotelinuxcheckforfreediskspacestep.cpp @@ -0,0 +1,190 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +**************************************************************************/ +#include "remotelinuxcheckforfreediskspacestep.h" +#include "ui_remotelinuxcheckforfreediskspacestepwidget.h" + +#include "remotelinuxcheckforfreediskspaceservice.h" + +#include <QString> + +#include <limits> + +using namespace ProjectExplorer; + +namespace RemoteLinux { +namespace Internal { +namespace { +class RemoteLinuxCheckForFreeDiskSpaceStepWidget : public BuildStepConfigWidget +{ + Q_OBJECT + +public: + explicit RemoteLinuxCheckForFreeDiskSpaceStepWidget(RemoteLinuxCheckForFreeDiskSpaceStep &step) + : m_step(step) + { + m_ui.setupUi(this); + m_ui.requiredSpaceSpinBox->setSuffix(tr("MB")); + m_ui.requiredSpaceSpinBox->setMinimum(1); + m_ui.requiredSpaceSpinBox->setMaximum(std::numeric_limits<int>::max()); + + m_ui.pathLineEdit->setText(m_step.pathToCheck()); + m_ui.requiredSpaceSpinBox->setValue(m_step.requiredSpaceInBytes()/multiplier); + + connect(m_ui.pathLineEdit, SIGNAL(textChanged(QString)), SLOT(handlePathChanged())); + connect(m_ui.requiredSpaceSpinBox, SIGNAL(valueChanged(int)), + SLOT(handleRequiredSpaceChanged())); + } + +private: + Q_SLOT void handlePathChanged() { m_step.setPathToCheck(m_ui.pathLineEdit->text().trimmed()); } + Q_SLOT void handleRequiredSpaceChanged() { + m_step.setRequiredSpaceInBytes(quint64(m_ui.requiredSpaceSpinBox->value())*multiplier); + } + + QString displayName() const { return QLatin1String("<b>") + m_step.displayName() + + QLatin1String("</b>"); } + QString summaryText() const { return displayName(); } + + static const int multiplier = 1024*1024; + + Ui::RemoteLinuxCheckForFreeDiskSpaceStepWidget m_ui; + RemoteLinuxCheckForFreeDiskSpaceStep &m_step; +}; + +} // anonymous namespace + +const char PathToCheckKey[] = "RemoteLinux.CheckForFreeDiskSpaceStep.PathToCheck"; +const char RequiredSpaceKey[] = "RemoteLinux.CheckForFreeDiskSpaceStep.RequiredSpace"; + +class RemoteLinuxCheckForFreeDiskSpaceStepPrivate +{ +public: + RemoteLinuxCheckForFreeDiskSpaceService deployService; + QString pathToCheck; + quint64 requiredSpaceInBytes; +}; +} // namespace Internal + + +RemoteLinuxCheckForFreeDiskSpaceStep::RemoteLinuxCheckForFreeDiskSpaceStep(BuildStepList *bsl) + : AbstractRemoteLinuxDeployStep(bsl, stepId()) +{ + ctor(); +} + +RemoteLinuxCheckForFreeDiskSpaceStep::RemoteLinuxCheckForFreeDiskSpaceStep(BuildStepList *bsl, + RemoteLinuxCheckForFreeDiskSpaceStep *other) : AbstractRemoteLinuxDeployStep(bsl, other) +{ + ctor(); +} + +RemoteLinuxCheckForFreeDiskSpaceStep::~RemoteLinuxCheckForFreeDiskSpaceStep() +{ + delete d; +} + +void RemoteLinuxCheckForFreeDiskSpaceStep::ctor() +{ + d = new Internal::RemoteLinuxCheckForFreeDiskSpaceStepPrivate; + setDefaultDisplayName(stepDisplayName()); + d->pathToCheck = QLatin1String("/"); + d->requiredSpaceInBytes = 5*1024*1024; +} + +void RemoteLinuxCheckForFreeDiskSpaceStep::setPathToCheck(const QString &path) +{ + d->pathToCheck = path; +} + +QString RemoteLinuxCheckForFreeDiskSpaceStep::pathToCheck() const +{ + return d->pathToCheck; +} + +void RemoteLinuxCheckForFreeDiskSpaceStep::setRequiredSpaceInBytes(quint64 space) +{ + d->requiredSpaceInBytes = space; +} + +quint64 RemoteLinuxCheckForFreeDiskSpaceStep::requiredSpaceInBytes() const +{ + return d->requiredSpaceInBytes; +} + +bool RemoteLinuxCheckForFreeDiskSpaceStep::fromMap(const QVariantMap &map) +{ + if (!AbstractRemoteLinuxDeployStep::fromMap(map)) + return false; + d->pathToCheck = map.value(QLatin1String(Internal::PathToCheckKey)).toString(); + d->requiredSpaceInBytes = map.value(QLatin1String(Internal::RequiredSpaceKey)).toULongLong(); + return true; +} + +QVariantMap RemoteLinuxCheckForFreeDiskSpaceStep::toMap() const +{ + QVariantMap map = AbstractRemoteLinuxDeployStep::toMap(); + map.insert(QLatin1String(Internal::PathToCheckKey), d->pathToCheck); + map.insert(QLatin1String(Internal::RequiredSpaceKey), d->requiredSpaceInBytes); + return map; +} + +BuildStepConfigWidget *RemoteLinuxCheckForFreeDiskSpaceStep::createConfigWidget() +{ + return new Internal::RemoteLinuxCheckForFreeDiskSpaceStepWidget(*this); +} + +bool RemoteLinuxCheckForFreeDiskSpaceStep::initInternal(QString *error) +{ + Q_UNUSED(error); + d->deployService.setPathToCheck(d->pathToCheck); + d->deployService.setRequiredSpaceInBytes(d->requiredSpaceInBytes); + return true; +} + +AbstractRemoteLinuxDeployService *RemoteLinuxCheckForFreeDiskSpaceStep::deployService() const +{ + return &d->deployService; +} + +Core::Id RemoteLinuxCheckForFreeDiskSpaceStep::stepId() +{ + return Core::Id("RemoteLinux.CheckForFreeDiskSpaceStep"); +} + +QString RemoteLinuxCheckForFreeDiskSpaceStep::stepDisplayName() +{ + return tr("Check for free disk space"); +} + +} // namespace RemoteLinux + +#include "remotelinuxcheckforfreediskspacestep.moc" |