diff options
Diffstat (limited to 'src/plugins/remotelinux')
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; }; |