VCS: Decide file/project control by top level

Instead of actual file.

In case currentFile is a directory, it is cleared, and project top level
is used instead. This leads to unexpected results.

This patch corrects repository resolution in stash dialog when opened
inside a submodule.

Task-number: QTCREATORBUG-10397
Change-Id: I070cc7f9cbebe3be800dbbb9569cf73f540a6d14
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
Orgad Shaneh
2013-10-16 20:36:10 +03:00
committed by Orgad Shaneh
parent 16cf6177d8
commit 05b939db01

View File

@@ -95,8 +95,8 @@ struct State
bool equals(const State &rhs) const;
inline bool hasFile() const { return !currentFile.isEmpty(); }
inline bool hasProject() const { return !currentProjectPath.isEmpty(); }
inline bool hasFile() const { return !currentFileTopLevel.isEmpty(); }
inline bool hasProject() const { return !currentProjectTopLevel.isEmpty(); }
inline bool isEmpty() const { return !hasFile() && !hasProject(); }
QString currentFile;
@@ -280,12 +280,12 @@ void StateListener::slotStateChanged()
} else {
state.currentFileDirectory = currentFileInfo->absolutePath();
state.currentFileName = currentFileInfo->fileName();
fileControl = Core::VcsManager::findVersionControlForDirectory(
state.currentFileDirectory,
&state.currentFileTopLevel);
if (!fileControl)
state.clearFile();
}
fileControl = Core::VcsManager::findVersionControlForDirectory(
state.currentFileDirectory,
&state.currentFileTopLevel);
if (!fileControl)
state.clearFile();
}
// Check for project, find the control
Core::IVersionControl *projectControl = 0;
@@ -303,7 +303,9 @@ void StateListener::slotStateChanged()
}
}
// Assemble state and emit signal.
Core::IVersionControl *vc = state.currentFile.isEmpty() ? projectControl : fileControl;
Core::IVersionControl *vc = fileControl;
if (!vc)
vc = projectControl;
if (!vc) {
state.clearPatchFile(); // Need a repository to patch
Core::EditorManager::setWindowTitleVcsTopic(QString());