CMake: Do not list <Build Directory> twice

Do not list <Build Directory> twice when switching from a temporary
build folder to the real one.

Change-Id: Id7d5f4a4b48d6c63dd4c7da2932b6a857ff0c7f7
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Tobias Hunger
2016-12-15 13:19:44 +01:00
parent 35782c8e9e
commit b11726bf05

View File

@@ -226,21 +226,21 @@ CMakeConfig ServerModeReader::takeParsedConfiguration()
FolderNode *setupCMakeVFolder(FolderNode *base, const Utils::FileName &basePath, int priority, FolderNode *setupCMakeVFolder(FolderNode *base, const Utils::FileName &basePath, int priority,
const QString &displayName, QList<FileNode *> &files) const QString &displayName, QList<FileNode *> &files)
{ {
if (files.isEmpty())
return nullptr;
FolderNode *folder FolderNode *folder
= findOrDefault(base->folderNodes(), [basePath](const FolderNode *fn) { = findOrDefault(base->folderNodes(), [basePath](const FolderNode *fn) {
return fn->filePath() == basePath; return fn->filePath() == basePath;
}); });
if (files.isEmpty()) {
return folder; if (!folder) {
} else { folder = new VirtualFolderNode(basePath, priority);
if (!folder) { folder->setDisplayName(displayName);
folder = new VirtualFolderNode(basePath, priority); base->addFolderNodes({ folder });
folder->setDisplayName(displayName);
base->addFolderNodes({ folder });
}
folder->buildTree(files);
} }
return nullptr; folder->buildTree(files);
return folder;
} }
static ProjectNode *updateCMakeInputs(CMakeListsNode *root, static ProjectNode *updateCMakeInputs(CMakeListsNode *root,
@@ -265,19 +265,21 @@ static ProjectNode *updateCMakeInputs(CMakeListsNode *root,
if (!hasInputs) if (!hasInputs)
return nullptr; return nullptr;
QList<FolderNode *> foldersToDelete; QList<FolderNode *> toKeep;
foldersToDelete.append(setupCMakeVFolder(cmakeVFolder, sourceDir, 1000, toKeep.append(setupCMakeVFolder(cmakeVFolder, sourceDir, 1000,
QCoreApplication::translate("CMakeProjectManager::Internal", "<Source Directory>"), QCoreApplication::translate("CMakeProjectManager::Internal", "<Source Directory>"),
sourceInputs)); sourceInputs));
foldersToDelete.append(setupCMakeVFolder(cmakeVFolder, buildDir, 100, toKeep.append(setupCMakeVFolder(cmakeVFolder, buildDir, 100,
QCoreApplication::translate("CMakeProjectManager::Internal", "<Build Directory>"), QCoreApplication::translate("CMakeProjectManager::Internal", "<Build Directory>"),
buildInputs)); buildInputs));
foldersToDelete.append(setupCMakeVFolder(cmakeVFolder, Utils::FileName(), 10, toKeep.append(setupCMakeVFolder(cmakeVFolder, Utils::FileName(), 10,
QCoreApplication::translate("CMakeProjectManager::Internal", "<Other Locations>"), QCoreApplication::translate("CMakeProjectManager::Internal", "<Other Locations>"),
rootInputs)); rootInputs));
// Clean out unused nodes in "CMake Files": // Clean out unused nodes in "CMake Files":
const QList<FolderNode *> tmp = filtered(foldersToDelete, [](const FolderNode *fn) { return fn; }); const QList<FolderNode *> tmp = filtered(cmakeVFolder->folderNodes(), [&toKeep](FolderNode *fn) {
return !toKeep.contains(fn);
});
cmakeVFolder->removeFolderNodes(tmp); cmakeVFolder->removeFolderNodes(tmp);
return cmakeVFolder; return cmakeVFolder;
@@ -755,12 +757,13 @@ void ServerModeReader::updateFileGroups(ProjectNode *targetRoot,
otherFileNodes.append(fn); otherFileNodes.append(fn);
} }
QList<FolderNode *> toDelete; QList<FolderNode *> toKeep;
toDelete.append(setupCMakeVFolder(targetRoot, sourceDirectory, 1000, tr("<Source Directory>"), sourceFileNodes)); toKeep.append(setupCMakeVFolder(targetRoot, sourceDirectory, 1000, tr("<Source Directory>"), sourceFileNodes));
toDelete.append(setupCMakeVFolder(targetRoot, buildDirectory, 100, tr("<Build Directory>"), buildFileNodes)); toKeep.append(setupCMakeVFolder(targetRoot, buildDirectory, 100, tr("<Build Directory>"), buildFileNodes));
toDelete.append(setupCMakeVFolder(targetRoot, Utils::FileName(), 10, tr("<Other Locations>"), otherFileNodes)); toKeep.append(setupCMakeVFolder(targetRoot, Utils::FileName(), 10, tr("<Other Locations>"), otherFileNodes));
toDelete = filtered(toDelete, [](FolderNode *fn) { return fn; }); const QList<FolderNode *> toDelete
= filtered(targetRoot->folderNodes(), [&toKeep](FolderNode *fn) { return !toKeep.contains(fn); });
if (!toDelete.isEmpty()) if (!toDelete.isEmpty())
targetRoot->removeFolderNodes(toDelete); targetRoot->removeFolderNodes(toDelete);
} }