CMakePM: Do not hang on renaming files in parent directories

This fixes renaming of "my/class.cpp my/class.h" via "../class.h" and
resulting into "class.cpp class.h".

"oldRelPathName" was not needed since it was saved in the
"m_filesToBeRenamed" map and it was computed from the new filename. This
was prone to error.

Task-number: QTCREATORBUG-30830
Change-Id: I839fab3bd6a6172f5ebfbaf9a4b6501cd5693fa8
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Cristian Adam
2024-06-21 12:05:30 +02:00
parent c3de8c7f31
commit a41c4de3df

View File

@@ -936,10 +936,6 @@ bool CMakeBuildSystem::renameFile(Node *context,
const FilePath newRelPath = newFilePath.canonicalPath().relativePathFrom(projDir).cleanPath(); const FilePath newRelPath = newFilePath.canonicalPath().relativePathFrom(projDir).cleanPath();
const QString newRelPathName = newRelPath.toString(); const QString newRelPathName = newRelPath.toString();
// FilePath needs the file to exist on disk, the old file has already been renamed
const QString oldRelPathName
= newRelPath.parentDir().pathAppended(oldFilePath.fileName()).cleanPath().toString();
const QString targetName = n->buildKey(); const QString targetName = n->buildKey();
const QString key const QString key
= QStringList{projDir.path(), targetName, oldFilePath.path(), newFilePath.path()}.join( = QStringList{projDir.path(), targetName, oldFilePath.path(), newFilePath.path()}.join(
@@ -984,7 +980,7 @@ bool CMakeBuildSystem::renameFile(Node *context,
} }
// Try the next occurrence. This can happen if set_source_file_properties is used // Try the next occurrence. This can happen if set_source_file_properties is used
fileToRename = projectFileArgumentPosition(targetName, oldRelPathName); fileToRename = projectFileArgumentPosition(targetName, fileToRename->relativeFileName);
} while (fileToRename && !fileToRename->fromGlobbing); } while (fileToRename && !fileToRename->fromGlobbing);
return true; return true;