aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/perforce
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2009-09-22 12:23:44 +0200
committerFriedemann Kleint <Friedemann.Kleint@nokia.com>2009-09-22 12:23:44 +0200
commit5aa65b12f34768def100b8a4bec0a0e16f46c0fd (patch)
treea041eab52efe8b75c9fce4c23787c3a6a86e2eb1 /src/plugins/perforce
parent0134fb682da35d3e6111c8c5258ea6d7a003482f (diff)
Version control: Do not keep lock on message file while committing.
Store the file name and do not keep the QTemporaryFile around, which still seems to maintain some kind of lock on Windows although it is closed.
Diffstat (limited to 'src/plugins/perforce')
-rw-r--r--src/plugins/perforce/perforceplugin.cpp52
-rw-r--r--src/plugins/perforce/perforceplugin.h7
2 files changed, 32 insertions, 27 deletions
diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp
index 5254f93d5d..2c12882530 100644
--- a/src/plugins/perforce/perforceplugin.cpp
+++ b/src/plugins/perforce/perforceplugin.cpp
@@ -189,7 +189,6 @@ PerforcePlugin::PerforcePlugin() :
m_diffSelectedFiles(0),
m_undoAction(0),
m_redoAction(0),
- m_changeTmpFile(0),
m_versionControl(0)
{
}
@@ -547,28 +546,29 @@ void PerforcePlugin::submit()
return;
}
- if (m_changeTmpFile) {
+ if (isCommitEditorOpen()) {
VCSBase::VCSBaseOutputWindow::instance()->appendWarning(tr("Another submit is currently executed."));
return;
}
- m_changeTmpFile = new QTemporaryFile(this);
- m_changeTmpFile->setAutoRemove(true);
- if (!m_changeTmpFile->open()) {
+ QTemporaryFile changeTmpFile;
+ changeTmpFile.setAutoRemove(false);
+ if (!changeTmpFile.open()) {
VCSBase::VCSBaseOutputWindow::instance()->appendError(tr("Cannot create temporary file."));
- cleanChangeTmpFile();
+ cleanCommitMessageFile();
return;
}
PerforceResponse result = runP4Cmd(QStringList()<< QLatin1String("change") << QLatin1String("-o"), QStringList(),
CommandToWindow|StdErrToWindow|ErrorToWindow);
if (result.error) {
- cleanChangeTmpFile();
+ cleanCommitMessageFile();
return;
}
- m_changeTmpFile->write(result.stdOut.toAscii());
- m_changeTmpFile->close();
+ m_commitMessageFileName = changeTmpFile.fileName();
+ changeTmpFile.write(result.stdOut.toAscii());
+ changeTmpFile.close();
// Assemble file list of project
QString name;
@@ -576,7 +576,7 @@ void PerforcePlugin::submit()
PerforceResponse result2 = runP4Cmd(QStringList(QLatin1String("fstat")), nativeFiles,
CommandToWindow|StdErrToWindow|ErrorToWindow);
if (result2.error) {
- cleanChangeTmpFile();
+ cleanCommitMessageFile();
return;
}
@@ -588,11 +588,11 @@ void PerforcePlugin::submit()
}
if (depotFileNames.isEmpty()) {
VCSBase::VCSBaseOutputWindow::instance()->appendWarning(tr("Project has no files"));
- cleanChangeTmpFile();
+ cleanCommitMessageFile();
return;
}
- openPerforceSubmitEditor(m_changeTmpFile->fileName(), depotFileNames);
+ openPerforceSubmitEditor(m_commitMessageFileName, depotFileNames);
}
Core::IEditor *PerforcePlugin::openPerforceSubmitEditor(const QString &fileName, const QStringList &depotFileNames)
@@ -983,19 +983,22 @@ void PerforcePlugin::submitCurrentLog()
em->closeEditors(QList<Core::IEditor*>() << em->currentEditor());
}
-void PerforcePlugin::cleanChangeTmpFile()
+void PerforcePlugin::cleanCommitMessageFile()
{
- if (m_changeTmpFile) {
- if (m_changeTmpFile->isOpen())
- m_changeTmpFile->close();
- delete m_changeTmpFile;
- m_changeTmpFile = 0;
+ if (!m_commitMessageFileName.isEmpty()) {
+ QFile::remove(m_commitMessageFileName);
+ m_commitMessageFileName.clear();
}
}
+bool PerforcePlugin::isCommitEditorOpen() const
+{
+ return !m_commitMessageFileName.isEmpty();
+}
+
bool PerforcePlugin::editorAboutToClose(Core::IEditor *editor)
{
- if (!m_changeTmpFile || !editor)
+ if (!editor || !isCommitEditorOpen())
return true;
Core::ICore *core = Core::ICore::instance();
Core::IFile *fileIFace = editor->file();
@@ -1005,7 +1008,7 @@ bool PerforcePlugin::editorAboutToClose(Core::IEditor *editor)
if (!perforceEditor)
return true;
QFileInfo editorFile(fileIFace->fileName());
- QFileInfo changeFile(m_changeTmpFile->fileName());
+ QFileInfo changeFile(m_commitMessageFileName);
if (editorFile.absoluteFilePath() == changeFile.absoluteFilePath()) {
// Prompt the user. Force a prompt unless submit was actually invoked (that
// is, the editor was closed or shutdown).
@@ -1029,12 +1032,13 @@ bool PerforcePlugin::editorAboutToClose(Core::IEditor *editor)
fileIFace->save();
core->fileManager()->unblockFileChange(fileIFace);
if (answer == VCSBase::VCSBaseSubmitEditor::SubmitConfirmed) {
- if (!m_changeTmpFile->open()) {
+ QFile commitMessageFile(m_commitMessageFileName);
+ if (!commitMessageFile.open(QIODevice::ReadOnly|QIODevice::Text)) {
VCSBase::VCSBaseOutputWindow::instance()->appendError(tr("Cannot open temporary file."));
return false;
}
- QByteArray change = m_changeTmpFile->readAll();
- m_changeTmpFile->close();
+ QByteArray change = commitMessageFile.readAll();
+ commitMessageFile.close();
QString errorMessage;
if (!checkP4Configuration(&errorMessage)) {
VCSBase::VCSBaseOutputWindow::instance()->appendError(errorMessage);
@@ -1074,7 +1078,7 @@ bool PerforcePlugin::editorAboutToClose(Core::IEditor *editor)
}
QApplication::restoreOverrideCursor();
}
- cleanChangeTmpFile();
+ cleanCommitMessageFile();
}
return true;
}
diff --git a/src/plugins/perforce/perforceplugin.h b/src/plugins/perforce/perforceplugin.h
index 33098a8104..761fb96799 100644
--- a/src/plugins/perforce/perforceplugin.h
+++ b/src/plugins/perforce/perforceplugin.h
@@ -45,7 +45,6 @@
QT_BEGIN_NAMESPACE
class QFile;
class QAction;
-class QTemporaryFile;
class QTextCodec;
QT_END_NAMESPACE
@@ -162,7 +161,9 @@ private:
bool checkP4Configuration(QString *errorMessage = 0) const;
void annotate(const QString &fileName);
void filelog(const QString &fileName);
- void cleanChangeTmpFile();
+ void cleanCommitMessageFile();
+ bool isCommitEditorOpen() const;
+
void updateCheckout(const QStringList &dirs = QStringList());
ProjectExplorer::ProjectExplorerPlugin *m_projectExplorer;
@@ -188,11 +189,11 @@ private:
QAction *m_updateAllAction;
bool m_submitActionTriggered;
QAction *m_diffSelectedFiles;
+ QString m_commitMessageFileName;
QAction *m_undoAction;
QAction *m_redoAction;
- QTemporaryFile *m_changeTmpFile;
static PerforcePlugin *m_perforcePluginInstance;
QString pendingChangesData();