forked from qt-creator/qt-creator
CMake: Fix <Build Directory> in server-mode
Files below <Build Directory> could not be opened from the project tree since their file path was broken. Fix that. Task-number: QTCREATORBUG-17297 Change-Id: Id785ffa1c4d22c4dfdc0b5ecf8217d3f8bc319c4 Reviewed-by: Florian Apolloner <florian@apolloner.eu> Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -681,19 +681,6 @@ QSet<Node *> ServerModeReader::updateTargets(CMakeListsNode *root,
|
|||||||
return usedNodes;
|
return usedNodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Utils::FileName mapFileName(const Utils::FileName &fn, const Utils::FileName &sourceDirectory,
|
|
||||||
const Utils::FileName &buildDirectory)
|
|
||||||
{
|
|
||||||
if (fn.isChildOf(buildDirectory)) {
|
|
||||||
Utils::FileName mapped = sourceDirectory;
|
|
||||||
mapped.appendPath(QCoreApplication::translate("CMakeProjectManager::Internal", "<Build Directory>"));
|
|
||||||
QDir bd = QDir(buildDirectory.toString());
|
|
||||||
mapped.appendPath(bd.relativeFilePath(fn.toString()));
|
|
||||||
return mapped;
|
|
||||||
}
|
|
||||||
return fn;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ServerModeReader::updateFileGroups(ProjectNode *targetRoot,
|
void ServerModeReader::updateFileGroups(ProjectNode *targetRoot,
|
||||||
const Utils::FileName &sourceDirectory,
|
const Utils::FileName &sourceDirectory,
|
||||||
const Utils::FileName &buildDirectory,
|
const Utils::FileName &buildDirectory,
|
||||||
@@ -708,8 +695,8 @@ void ServerModeReader::updateFileGroups(ProjectNode *targetRoot,
|
|||||||
alreadyListed.insert(fn);
|
alreadyListed.insert(fn);
|
||||||
return count != alreadyListed.count();
|
return count != alreadyListed.count();
|
||||||
});
|
});
|
||||||
const QList<FileNode *> newFileNodes = Utils::transform(newSources, [f, &sourceDirectory, &buildDirectory](const Utils::FileName &fn) {
|
const QList<FileNode *> newFileNodes = Utils::transform(newSources, [f](const Utils::FileName &fn) {
|
||||||
return new FileNode(mapFileName(fn, sourceDirectory, buildDirectory), FileType::Source, f->isGenerated);
|
return new FileNode(fn, FileType::Source, f->isGenerated);
|
||||||
});
|
});
|
||||||
toList.append(newFileNodes);
|
toList.append(newFileNodes);
|
||||||
|
|
||||||
@@ -721,16 +708,35 @@ void ServerModeReader::updateFileGroups(ProjectNode *targetRoot,
|
|||||||
alreadyListed.insert(fn->filePath());
|
alreadyListed.insert(fn->filePath());
|
||||||
return count != alreadyListed.count();
|
return count != alreadyListed.count();
|
||||||
});
|
});
|
||||||
toList.append(Utils::transform(unseenHeaders, [&sourceDirectory, &buildDirectory](FileNode *fn) -> FileNode * {
|
toList.append(Utils::transform(unseenHeaders, [](FileNode *fn) -> FileNode * {
|
||||||
const Utils::FileName mappedPath = mapFileName(fn->filePath(), sourceDirectory, buildDirectory);
|
auto copy = new FileNode(fn->filePath(), fn->fileType(), fn->isGenerated());
|
||||||
auto copy = new FileNode(mappedPath, fn->fileType(), fn->isGenerated());
|
|
||||||
copy->setEnabled(false);
|
copy->setEnabled(false);
|
||||||
return copy;
|
return copy;
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
targetRoot->buildTree(toList, sourceDirectory);
|
// Split up files in groups (based on location):
|
||||||
|
QList<FileNode *> sourceFileNodes;
|
||||||
|
QList<FileNode *> buildFileNodes;
|
||||||
|
QList<FileNode *> otherFileNodes;
|
||||||
|
foreach (FileNode *fn, toList) {
|
||||||
|
if (fn->filePath().isChildOf(m_parameters.sourceDirectory))
|
||||||
|
sourceFileNodes.append(fn);
|
||||||
|
else if (fn->filePath().isChildOf(m_parameters.buildDirectory))
|
||||||
|
buildFileNodes.append(fn);
|
||||||
|
else
|
||||||
|
otherFileNodes.append(fn);
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<FolderNode *> toDelete;
|
||||||
|
toDelete.append(setupCMakeVFolder(targetRoot, sourceDirectory, 1000, tr("<Source Directory>"), sourceFileNodes));
|
||||||
|
toDelete.append(setupCMakeVFolder(targetRoot, buildDirectory, 100, tr("<Build Directory>"), buildFileNodes));
|
||||||
|
toDelete.append(setupCMakeVFolder(targetRoot, Utils::FileName(), 10, tr("<Other Locations>"), otherFileNodes));
|
||||||
|
|
||||||
|
toDelete = filtered(toDelete, [](FolderNode *fn) { return fn; });
|
||||||
|
if (!toDelete.isEmpty())
|
||||||
|
targetRoot->removeFolderNodes(toDelete);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
Reference in New Issue
Block a user