forked from qt-creator/qt-creator
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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user