summaryrefslogtreecommitdiff
path: root/src/plugins/qbsprojectmanager/qbsproject.cpp
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@digia.com>2014-09-03 16:07:46 +0200
committerEike Ziller <eike.ziller@digia.com>2014-09-03 16:08:02 +0200
commit49db3a450a6d15ae0327b8e3713920ac19320972 (patch)
tree309c83eb1dbb6321845d6a1db8fbc49428b20340 /src/plugins/qbsprojectmanager/qbsproject.cpp
parentafd56bd8ada761b87c40d80a07cd3b3766b2d2f8 (diff)
parentd030a960a0e6e1dda89e20b60e5252842fe83f49 (diff)
downloadqt-creator-49db3a450a6d15ae0327b8e3713920ac19320972.tar.gz
Merge remote-tracking branch 'origin/3.2'
Conflicts: qtcreator.pri qtcreator.qbs src/plugins/coreplugin/editormanager/editormanager.cpp src/plugins/cppeditor/cppeditor.cpp src/plugins/remotelinux/remotelinuxdebugsupport.cpp src/plugins/texteditor/basetexteditor.cpp Change-Id: I0da7c1cf2506b12d0563795aa8177fc45e97050f
Diffstat (limited to 'src/plugins/qbsprojectmanager/qbsproject.cpp')
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp
index 4a45ac5ca6..c3789249be 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.cpp
+++ b/src/plugins/qbsprojectmanager/qbsproject.cpp
@@ -39,6 +39,9 @@
#include <coreplugin/documentmanager.h>
#include <coreplugin/icontext.h>
#include <coreplugin/id.h>
+#include <coreplugin/icore.h>
+#include <coreplugin/iversioncontrol.h>
+#include <coreplugin/vcsmanager.h>
#include <coreplugin/messagemanager.h>
#include <coreplugin/progressmanager/progressmanager.h>
#include <coreplugin/mimedatabase.h>
@@ -68,6 +71,7 @@
#include <QCoreApplication>
#include <QDir>
#include <QFileInfo>
+#include <QMessageBox>
#include <QVariantMap>
using namespace Core;
@@ -130,6 +134,11 @@ QbsProject::~QbsProject()
{
m_codeModelFuture.cancel();
delete m_qbsProjectParser;
+ if (m_qbsUpdateFutureInterface) {
+ m_qbsUpdateFutureInterface->reportCanceled();
+ delete m_qbsUpdateFutureInterface;
+ m_qbsUpdateFutureInterface = 0;
+ }
// Deleting the root node triggers a few things, make sure rootProjectNode
// returns 0 already
@@ -223,6 +232,27 @@ private:
bool m_wasInDocumentManager;
};
+bool QbsProject::ensureWriteableQbsFile(const QString &file)
+{
+ // Ensure that the file is not read only
+ QFileInfo fi(file);
+ if (!fi.isWritable()) {
+ // Try via vcs manager
+ Core::IVersionControl *versionControl =
+ Core::VcsManager::findVersionControlForDirectory(fi.absolutePath());
+ if (!versionControl || !versionControl->vcsOpen(file)) {
+ bool makeWritable = QFile::setPermissions(file, fi.permissions() | QFile::WriteUser);
+ if (!makeWritable) {
+ QMessageBox::warning(Core::ICore::mainWindow(),
+ tr("Failed!"),
+ tr("Could not write project file %1.").arg(file));
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
bool QbsProject::addFilesToProduct(QbsBaseProjectNode *node, const QStringList &filePaths,
const qbs::ProductData &productData, const qbs::GroupData &groupData, QStringList *notAdded)
{
@@ -230,6 +260,7 @@ bool QbsProject::addFilesToProduct(QbsBaseProjectNode *node, const QStringList &
QStringList allPaths = groupData.allFilePaths();
const QString productFilePath = productData.location().fileName();
ChangeExpector expector(productFilePath, m_qbsDocuments);
+ ensureWriteableQbsFile(productFilePath);
foreach (const QString &path, filePaths) {
qbs::ErrorInfo err = m_qbsProject.addFiles(productData, groupData, QStringList() << path);
if (err.hasError()) {
@@ -255,6 +286,7 @@ bool QbsProject::removeFilesFromProduct(QbsBaseProjectNode *node, const QStringL
QStringList allPaths = groupData.allFilePaths();
const QString productFilePath = productData.location().fileName();
ChangeExpector expector(productFilePath, m_qbsDocuments);
+ ensureWriteableQbsFile(productFilePath);
foreach (const QString &path, filePaths) {
qbs::ErrorInfo err
= m_qbsProject.removeFiles(productData, groupData, QStringList() << path);