summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksii Serdiuk <contacts@oleksii.name>2013-09-16 15:52:25 +0200
committerOleksii Serdiuk <contacts@oleksii.name>2013-10-01 20:37:32 +0200
commite0ddfe1a5f3d79decf2c5a76dbe21226b4b47ae1 (patch)
tree72018cf10541eb9ed511e52893a92ec4c91773ec
parent649e12715612daa9df54fa5ffa6aa78ab08c4d56 (diff)
downloadqt-creator-e0ddfe1a5f3d79decf2c5a76dbe21226b4b47ae1.tar.gz
RemoteLinux: Add possibility to ignore missing files while deploying.
New "Ignore missing files" checkbox was added to "Upload files via SFTP" and "Create tarball" deployment steps. If checked, missing files will produce a warning instead of the error thus preventing deployment process from failing. Change-Id: I0c3032746fbaae60aef2345802fc02c9951ab386 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
-rw-r--r--src/plugins/remotelinux/abstractpackagingstep.cpp7
-rw-r--r--src/plugins/remotelinux/abstractpackagingstep.h1
-rw-r--r--src/plugins/remotelinux/genericdirectuploadservice.cpp23
-rw-r--r--src/plugins/remotelinux/genericdirectuploadservice.h1
-rw-r--r--src/plugins/remotelinux/genericdirectuploadstep.cpp28
-rw-r--r--src/plugins/remotelinux/genericdirectuploadstep.h3
-rw-r--r--src/plugins/remotelinux/tarpackagecreationstep.cpp59
-rw-r--r--src/plugins/remotelinux/tarpackagecreationstep.h7
8 files changed, 121 insertions, 8 deletions
diff --git a/src/plugins/remotelinux/abstractpackagingstep.cpp b/src/plugins/remotelinux/abstractpackagingstep.cpp
index ee3952747a..8a115c1abb 100644
--- a/src/plugins/remotelinux/abstractpackagingstep.cpp
+++ b/src/plugins/remotelinux/abstractpackagingstep.cpp
@@ -173,4 +173,11 @@ void AbstractPackagingStep::raiseError(const QString &errorMessage)
Constants::TASK_CATEGORY_DEPLOYMENT));
}
+void AbstractPackagingStep::raiseWarning(const QString &warningMessage)
+{
+ emit addOutput(warningMessage, ErrorMessageOutput);
+ emit addTask(Task(Task::Warning, warningMessage, Utils::FileName(), -1,
+ Constants::TASK_CATEGORY_DEPLOYMENT));
+}
+
} // namespace RemoteLinux
diff --git a/src/plugins/remotelinux/abstractpackagingstep.h b/src/plugins/remotelinux/abstractpackagingstep.h
index 6c62793587..8cdcfdbbd4 100644
--- a/src/plugins/remotelinux/abstractpackagingstep.h
+++ b/src/plugins/remotelinux/abstractpackagingstep.h
@@ -60,6 +60,7 @@ protected:
void setPackagingFinished(bool success);
void raiseError(const QString &errorMessage);
+ void raiseWarning(const QString &warningMessage);
QString cachedPackageDirectory() const;
QString packageDirectory() const;
diff --git a/src/plugins/remotelinux/genericdirectuploadservice.cpp b/src/plugins/remotelinux/genericdirectuploadservice.cpp
index a10a5deadb..6776259909 100644
--- a/src/plugins/remotelinux/genericdirectuploadservice.cpp
+++ b/src/plugins/remotelinux/genericdirectuploadservice.cpp
@@ -52,9 +52,10 @@ class GenericDirectUploadServicePrivate
{
public:
GenericDirectUploadServicePrivate()
- : incremental(false), stopRequested(false), state(Inactive) {}
+ : incremental(false), ignoreMissingFiles(false), stopRequested(false), state(Inactive) {}
bool incremental;
+ bool ignoreMissingFiles;
bool stopRequested;
State state;
QList<DeployableFile> filesToUpload;
@@ -89,6 +90,11 @@ void GenericDirectUploadService::setIncrementalDeployment(bool incremental)
d->incremental = incremental;
}
+void GenericDirectUploadService::setIgnoreMissingFiles(bool ignoreMissingFiles)
+{
+ d->ignoreMissingFiles = ignoreMissingFiles;
+}
+
bool GenericDirectUploadService::isDeploymentNecessary() const
{
d->filesToUpload.clear();
@@ -269,10 +275,17 @@ void GenericDirectUploadService::handleMkdirFinished(int exitStatus)
const SftpJobId job = d->uploader->uploadFile(df.localFilePath().toString(),
remoteFilePath, SftpOverwriteExisting);
if (job == SftpInvalidJob) {
- emit errorMessage(tr("Failed to upload file '%1': "
- "Could not open for reading.").arg(nativePath));
- setFinished();
- handleDeploymentDone();
+ const QString message = tr("Failed to upload file '%1': "
+ "Could not open for reading.").arg(nativePath);
+ if (d->ignoreMissingFiles) {
+ emit warningMessage(message);
+ d->filesToUpload.removeFirst();
+ uploadNextFile();
+ } else {
+ emit errorMessage(message);
+ setFinished();
+ handleDeploymentDone();
+ }
}
}
}
diff --git a/src/plugins/remotelinux/genericdirectuploadservice.h b/src/plugins/remotelinux/genericdirectuploadservice.h
index 5235f30ef6..8c37a507e1 100644
--- a/src/plugins/remotelinux/genericdirectuploadservice.h
+++ b/src/plugins/remotelinux/genericdirectuploadservice.h
@@ -52,6 +52,7 @@ public:
void setDeployableFiles(const QList<ProjectExplorer::DeployableFile> &deployableFiles);
void setIncrementalDeployment(bool incremental);
+ void setIgnoreMissingFiles(bool ignoreMissingFiles);
protected:
bool isDeploymentNecessary() const;
diff --git a/src/plugins/remotelinux/genericdirectuploadstep.cpp b/src/plugins/remotelinux/genericdirectuploadstep.cpp
index 9fe297cd53..eb40f4529d 100644
--- a/src/plugins/remotelinux/genericdirectuploadstep.cpp
+++ b/src/plugins/remotelinux/genericdirectuploadstep.cpp
@@ -42,6 +42,7 @@ namespace RemoteLinux {
namespace Internal {
namespace {
const char IncrementalKey[] = "RemoteLinux.GenericDirectUploadStep.Incremental";
+const char IgnoreMissingFilesKey[] = "RemoteLinux.GenericDirectUploadStep.IgnoreMissingFiles";
class ConfigWidget : public SimpleBuildStepConfigWidget
{
@@ -50,12 +51,17 @@ public:
ConfigWidget(GenericDirectUploadStep *step) : SimpleBuildStepConfigWidget(step)
{
m_incrementalCheckBox.setText(tr("Incremental deployment"));
+ m_ignoreMissingFilesCheckBox.setText(tr("Ignore missing files"));
QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->setMargin(0);
mainLayout->addWidget(&m_incrementalCheckBox);
+ mainLayout->addWidget(&m_ignoreMissingFilesCheckBox);
m_incrementalCheckBox.setChecked(step->incrementalDeployment());
+ m_ignoreMissingFilesCheckBox.setChecked(step->ignoreMissingFiles());
connect(&m_incrementalCheckBox, SIGNAL(toggled(bool)),
SLOT(handleIncrementalChanged(bool)));
+ connect(&m_ignoreMissingFilesCheckBox, SIGNAL(toggled(bool)),
+ SLOT(handleIgnoreMissingFilesChanged(bool)));
}
bool showWidget() const { return true; }
@@ -66,7 +72,13 @@ private:
step->setIncrementalDeployment(incremental);
}
+ Q_SLOT void handleIgnoreMissingFilesChanged(bool ignoreMissingFiles) {
+ GenericDirectUploadStep *step = qobject_cast<GenericDirectUploadStep *>(this->step());
+ step->setIgnoreMissingFiles(ignoreMissingFiles);
+ }
+
QCheckBox m_incrementalCheckBox;
+ QCheckBox m_ignoreMissingFilesCheckBox;
};
} // anonymous namespace
@@ -74,10 +86,11 @@ private:
class GenericDirectUploadStepPrivate
{
public:
- GenericDirectUploadStepPrivate() : incremental(true) {}
+ GenericDirectUploadStepPrivate() : incremental(true), ignoreMissingFiles(false) {}
GenericDirectUploadService deployService;
bool incremental;
+ bool ignoreMissingFiles;
};
} // namespace Internal
@@ -108,6 +121,7 @@ bool GenericDirectUploadStep::initInternal(QString *error)
{
deployService()->setDeployableFiles(target()->deploymentData().allFiles());
deployService()->setIncrementalDeployment(incrementalDeployment());
+ deployService()->setIgnoreMissingFiles(ignoreMissingFiles());
return deployService()->isDeploymentPossible(error);
}
@@ -121,6 +135,7 @@ bool GenericDirectUploadStep::fromMap(const QVariantMap &map)
if (!AbstractRemoteLinuxDeployStep::fromMap(map))
return false;
setIncrementalDeployment(map.value(QLatin1String(Internal::IncrementalKey), true).toBool());
+ setIgnoreMissingFiles(map.value(QLatin1String(Internal::IgnoreMissingFilesKey), false).toBool());
return true;
}
@@ -128,6 +143,7 @@ QVariantMap GenericDirectUploadStep::toMap() const
{
QVariantMap map = AbstractRemoteLinuxDeployStep::toMap();
map.insert(QLatin1String(Internal::IncrementalKey), incrementalDeployment());
+ map.insert(QLatin1String(Internal::IgnoreMissingFilesKey), ignoreMissingFiles());
return map;
}
@@ -147,6 +163,16 @@ bool GenericDirectUploadStep::incrementalDeployment() const
return d->incremental;
}
+void GenericDirectUploadStep::setIgnoreMissingFiles(bool ignoreMissingFiles)
+{
+ d->ignoreMissingFiles = ignoreMissingFiles;
+}
+
+bool GenericDirectUploadStep::ignoreMissingFiles() const
+{
+ return d->ignoreMissingFiles;
+}
+
Core::Id GenericDirectUploadStep::stepId()
{
return "RemoteLinux.DirectUploadStep";
diff --git a/src/plugins/remotelinux/genericdirectuploadstep.h b/src/plugins/remotelinux/genericdirectuploadstep.h
index 5f18f70da8..eb173568bc 100644
--- a/src/plugins/remotelinux/genericdirectuploadstep.h
+++ b/src/plugins/remotelinux/genericdirectuploadstep.h
@@ -53,6 +53,9 @@ public:
void setIncrementalDeployment(bool incremental);
bool incrementalDeployment() const;
+ void setIgnoreMissingFiles(bool ignoreMissingFiles);
+ bool ignoreMissingFiles() const;
+
static Core::Id stepId();
static QString displayName();
diff --git a/src/plugins/remotelinux/tarpackagecreationstep.cpp b/src/plugins/remotelinux/tarpackagecreationstep.cpp
index d055c95547..7f1dc0da5b 100644
--- a/src/plugins/remotelinux/tarpackagecreationstep.cpp
+++ b/src/plugins/remotelinux/tarpackagecreationstep.cpp
@@ -37,12 +37,16 @@
#include <QFile>
#include <QFileInfo>
+#include <QCheckBox>
+#include <QVBoxLayout>
+
#include <cstring>
using namespace ProjectExplorer;
namespace RemoteLinux {
namespace {
+const char IgnoreMissingFilesKey[] = "RemoteLinux.TarPackageCreationStep.IgnoreMissingFiles";
class CreateTarStepWidget : public SimpleBuildStepConfigWidget
{
@@ -50,6 +54,14 @@ class CreateTarStepWidget : public SimpleBuildStepConfigWidget
public:
CreateTarStepWidget(TarPackageCreationStep *step) : SimpleBuildStepConfigWidget(step)
{
+ m_ignoreMissingFilesCheckBox.setText(tr("Ignore missing files"));
+ QVBoxLayout *mainLayout = new QVBoxLayout(this);
+ mainLayout->setMargin(0);
+ mainLayout->addWidget(&m_ignoreMissingFilesCheckBox);
+ m_ignoreMissingFilesCheckBox.setChecked(step->ignoreMissingFiles());
+ connect(&m_ignoreMissingFilesCheckBox, SIGNAL(toggled(bool)),
+ SLOT(handleIgnoreMissingFilesChanged(bool)));
+
connect(step, SIGNAL(packageFilePathChanged()), SIGNAL(updateSummary()));
}
@@ -63,6 +75,16 @@ public:
return QLatin1String("<b>") + tr("Create tarball:") + QLatin1String("</b> ")
+ step->packageFilePath();
}
+
+ bool showWidget() const { return true; }
+
+private:
+ Q_SLOT void handleIgnoreMissingFilesChanged(bool ignoreMissingFiles) {
+ TarPackageCreationStep *step = qobject_cast<TarPackageCreationStep *>(this->step());
+ step->setIgnoreMissingFiles(ignoreMissingFiles);
+ }
+
+ QCheckBox m_ignoreMissingFilesCheckBox;
};
@@ -104,6 +126,7 @@ TarPackageCreationStep::TarPackageCreationStep(BuildStepList *bsl, TarPackageCre
void TarPackageCreationStep::ctor()
{
setDefaultDisplayName(displayName());
+ m_ignoreMissingFiles = false;
}
bool TarPackageCreationStep::init()
@@ -128,6 +151,16 @@ void TarPackageCreationStep::run(QFutureInterface<bool> &fi)
fi.reportResult(success);
}
+void TarPackageCreationStep::setIgnoreMissingFiles(bool ignoreMissingFiles)
+{
+ m_ignoreMissingFiles = ignoreMissingFiles;
+}
+
+bool TarPackageCreationStep::ignoreMissingFiles() const
+{
+ return m_ignoreMissingFiles;
+}
+
bool TarPackageCreationStep::doPackage(QFutureInterface<bool> &fi)
{
emit addOutput(tr("Creating tarball..."), MessageOutput);
@@ -188,8 +221,15 @@ bool TarPackageCreationStep::appendFile(QFile &tarFile, const QFileInfo &fileInf
const QString nativePath = QDir::toNativeSeparators(fileInfo.filePath());
QFile file(fileInfo.filePath());
if (!file.open(QIODevice::ReadOnly)) {
- raiseError(tr("Error reading file '%1': %2.").arg(nativePath, file.errorString()));
- return false;
+ const QString message = tr("Error reading file '%1': %2.")
+ .arg(nativePath, file.errorString());
+ if (m_ignoreMissingFiles) {
+ raiseWarning(message);
+ return true;
+ } else {
+ raiseError(message);
+ return false;
+ }
}
const int chunkSize = 1024*1024;
@@ -296,6 +336,21 @@ BuildStepConfigWidget *TarPackageCreationStep::createConfigWidget()
return new CreateTarStepWidget(this);
}
+bool TarPackageCreationStep::fromMap(const QVariantMap &map)
+{
+ if (!AbstractPackagingStep::fromMap(map))
+ return false;
+ setIgnoreMissingFiles(map.value(QLatin1String(IgnoreMissingFilesKey), false).toBool());
+ return true;
+}
+
+QVariantMap TarPackageCreationStep::toMap() const
+{
+ QVariantMap map = AbstractPackagingStep::toMap();
+ map.insert(QLatin1String(IgnoreMissingFilesKey), ignoreMissingFiles());
+ return map;
+}
+
Core::Id TarPackageCreationStep::stepId()
{
return "MaemoTarPackageCreationStep";
diff --git a/src/plugins/remotelinux/tarpackagecreationstep.h b/src/plugins/remotelinux/tarpackagecreationstep.h
index 45a98f5ce8..69bad1a892 100644
--- a/src/plugins/remotelinux/tarpackagecreationstep.h
+++ b/src/plugins/remotelinux/tarpackagecreationstep.h
@@ -53,8 +53,14 @@ public:
bool init();
void run(QFutureInterface<bool> &fi);
+
+ void setIgnoreMissingFiles(bool ignoreMissingFiles);
+ bool ignoreMissingFiles() const;
+
private:
ProjectExplorer::BuildStepConfigWidget *createConfigWidget();
+ bool fromMap(const QVariantMap &map);
+ QVariantMap toMap() const;
QString packageFileName() const;
@@ -65,6 +71,7 @@ private:
bool writeHeader(QFile &tarFile, const QFileInfo &fileInfo,
const QString &remoteFilePath);
+ bool m_ignoreMissingFiles;
bool m_packagingNeeded;
QList<ProjectExplorer::DeployableFile> m_files;
};