summaryrefslogtreecommitdiff
path: root/src/plugins/remotelinux
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/remotelinux')
-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;
};