aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/vcsbase
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@theqtcompany.com>2015-09-18 12:04:03 +0200
committerTobias Hunger <tobias.hunger@theqtcompany.com>2015-09-22 09:20:59 +0000
commit05312bfeeccdc86fd51a4c5b8c9466337c40c36a (patch)
treebf5c903782efba034bf473eba3d2cc1704cc453c /src/plugins/vcsbase
parentb38a954521358b35bbb3ca371513e80c7469ee2d (diff)
Vcs: Simplify state detection code
Simplify handling of temporary files, clean up and simplify the code a bit, remove "project nodes" which can not be open in an editor (and do not use the '#'-syntax anymore). Side effect is that files in git repositories in $TEMPDIR now work as expected. Task-number: QTCREATORBUG-15053 Change-Id: Ib5918301ec2f0ab5d0985edba8f6c1cc1aae3f0b Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Diffstat (limited to 'src/plugins/vcsbase')
-rw-r--r--src/plugins/vcsbase/vcsbaseplugin.cpp69
1 files changed, 31 insertions, 38 deletions
diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp
index 8e9816c32d..fcd2ed42c8 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.cpp
+++ b/src/plugins/vcsbase/vcsbaseplugin.cpp
@@ -263,59 +263,52 @@ void StateListener::slotStateChanged()
// folder?
State state;
IDocument *currentDocument = EditorManager::currentDocument();
- if (!currentDocument) {
- state.currentFile.clear();
- } else {
+ if (currentDocument) {
state.currentFile = currentDocument->filePath().toString();
if (state.currentFile.isEmpty() || currentDocument->isTemporary())
state.currentFile = VcsBasePlugin::source(currentDocument);
}
- QScopedPointer<QFileInfo> currentFileInfo; // Instantiate QFileInfo only once if required.
- if (!state.currentFile.isEmpty()) {
- const bool isTempFile = state.currentFile.startsWith(QDir::tempPath());
- // Quick check: Does it look like a patch?
- const bool isPatch = state.currentFile.endsWith(QLatin1String(".patch"))
- || state.currentFile.endsWith(QLatin1String(".diff"));
- if (isPatch) {
- // Patch: Figure out a name to display. If it is a temp file, it could be
- // Codepaster. Use the display name of the editor.
- state.currentPatchFile = state.currentFile;
- if (isTempFile)
- state.currentPatchFileDisplayName = displayNameOfEditor(state.currentPatchFile);
- if (state.currentPatchFileDisplayName.isEmpty()) {
- currentFileInfo.reset(new QFileInfo(state.currentFile));
- state.currentPatchFileDisplayName = currentFileInfo->fileName();
- }
- }
- // For actual version control operations on it:
- // Do not show temporary files and project folders ('#')
- if (isTempFile || state.currentFile.contains(QLatin1Char('#')))
- state.currentFile.clear();
- }
// Get the file and its control. Do not use the file unless we find one
IVersionControl *fileControl = 0;
+
if (!state.currentFile.isEmpty()) {
- if (currentFileInfo.isNull())
- currentFileInfo.reset(new QFileInfo(state.currentFile));
- if (currentFileInfo->isDir()) {
- state.currentFile.clear();
- state.currentFileDirectory = currentFileInfo->absoluteFilePath();
- } else {
- state.currentFileDirectory = currentFileInfo->absolutePath();
- state.currentFileName = currentFileInfo->fileName();
+ QFileInfo currentFi(state.currentFile);
+
+ if (currentFi.exists()) {
+ // Quick check: Does it look like a patch?
+ const bool isPatch = state.currentFile.endsWith(QLatin1String(".patch"))
+ || state.currentFile.endsWith(QLatin1String(".diff"));
+ if (isPatch) {
+ // Patch: Figure out a name to display. If it is a temp file, it could be
+ // Codepaster. Use the display name of the editor.
+ state.currentPatchFile = state.currentFile;
+ state.currentPatchFileDisplayName = displayNameOfEditor(state.currentPatchFile);
+ if (state.currentPatchFileDisplayName.isEmpty())
+ state.currentPatchFileDisplayName = currentFi.fileName();
+ }
+
+ if (currentFi.isDir()) {
+ state.currentFile.clear();
+ state.currentFileDirectory = currentFi.absoluteFilePath();
+ } else {
+ state.currentFileDirectory = currentFi.absolutePath();
+ state.currentFileName = currentFi.fileName();
+ }
+ fileControl = VcsManager::findVersionControlForDirectory(state.currentFileDirectory,
+ &state.currentFileTopLevel);
}
- fileControl = VcsManager::findVersionControlForDirectory(
- state.currentFileDirectory,
- &state.currentFileTopLevel);
+
if (!fileControl)
state.clearFile();
}
+
// Check for project, find the control
IVersionControl *projectControl = 0;
Project *currentProject = ProjectTree::currentProject();
if (!currentProject)
currentProject = SessionManager::startupProject();
+
if (currentProject) {
state.currentProjectPath = currentProject->projectDirectory().toString();
state.currentProjectName = currentProject->displayName();
@@ -329,14 +322,14 @@ void StateListener::slotStateChanged()
state.clearProject(); // No control found
}
}
+
// Assemble state and emit signal.
IVersionControl *vc = fileControl;
if (!vc)
vc = projectControl;
if (!vc)
state.clearPatchFile(); // Need a repository to patch
- if (debug)
- qDebug() << state << (vc ? vc->displayName() : QLatin1String("No version control"));
+
EditorManager::updateWindowTitles();
emit stateChanged(state, vc);
}