diff --git a/src/plugins/diffeditor/diffeditorcontroller.cpp b/src/plugins/diffeditor/diffeditorcontroller.cpp index 0c0c51dbd3e..17048c23d78 100644 --- a/src/plugins/diffeditor/diffeditorcontroller.cpp +++ b/src/plugins/diffeditor/diffeditorcontroller.cpp @@ -35,6 +35,8 @@ #include +using namespace Utils; + namespace DiffEditor { DiffEditorController::DiffEditorController(Core::IDocument *document) : @@ -50,12 +52,12 @@ bool DiffEditorController::isReloading() const return m_isReloading; } -QString DiffEditorController::baseDirectory() const +FilePath DiffEditorController::baseDirectory() const { return m_document->baseDirectory(); } -void DiffEditorController::setBaseDirectory(const QString &directory) +void DiffEditorController::setBaseDirectory(const FilePath &directory) { m_document->setBaseDirectory(directory); } @@ -94,7 +96,7 @@ DiffEditorController *DiffEditorController::controller(Core::IDocument *document } void DiffEditorController::setDiffFiles(const QList &diffFileList, - const QString &workingDirectory, + const FilePath &workingDirectory, const QString &startupFile) { m_document->setDiffFiles(diffFileList, workingDirectory, startupFile); diff --git a/src/plugins/diffeditor/diffeditorcontroller.h b/src/plugins/diffeditor/diffeditorcontroller.h index b97a0f56658..bb3100060ef 100644 --- a/src/plugins/diffeditor/diffeditorcontroller.h +++ b/src/plugins/diffeditor/diffeditorcontroller.h @@ -49,8 +49,8 @@ public: void requestReload(); bool isReloading() const; - QString baseDirectory() const; - void setBaseDirectory(const QString &directory); + Utils::FilePath baseDirectory() const; + void setBaseDirectory(const Utils::FilePath &directory); int contextLineCount() const; bool ignoreWhitespace() const; @@ -84,7 +84,7 @@ protected: void reloadFinished(bool success); void setDiffFiles(const QList &diffFileList, - const QString &baseDirectory = QString(), + const Utils::FilePath &baseDirectory = {}, const QString &startupFile = QString()); void setDescription(const QString &description); QString description() const; diff --git a/src/plugins/diffeditor/diffeditordocument.cpp b/src/plugins/diffeditor/diffeditordocument.cpp index d4a8f7851da..362b867199b 100644 --- a/src/plugins/diffeditor/diffeditordocument.cpp +++ b/src/plugins/diffeditor/diffeditordocument.cpp @@ -171,7 +171,7 @@ QString DiffEditorDocument::makePatch(int fileIndex, int chunkIndex, lastChunk && fileData.lastChunkAtTheEndOfFile); } -void DiffEditorDocument::setDiffFiles(const QList &data, const QString &directory, +void DiffEditorDocument::setDiffFiles(const QList &data, const FilePath &directory, const QString &startupFile) { m_diffFiles = data; @@ -186,12 +186,12 @@ QList DiffEditorDocument::diffFiles() const return m_diffFiles; } -QString DiffEditorDocument::baseDirectory() const +FilePath DiffEditorDocument::baseDirectory() const { return m_baseDirectory; } -void DiffEditorDocument::setBaseDirectory(const QString &directory) +void DiffEditorDocument::setBaseDirectory(const FilePath &directory) { m_baseDirectory = directory; } @@ -256,7 +256,7 @@ bool DiffEditorDocument::setContents(const QByteArray &contents) QString DiffEditorDocument::fallbackSaveAsPath() const { if (!m_baseDirectory.isEmpty()) - return m_baseDirectory; + return m_baseDirectory.toString(); return QDir::homePath(); } @@ -265,7 +265,7 @@ bool DiffEditorDocument::isSaveAsAllowed() const return state() == LoadOK; } -bool DiffEditorDocument::save(QString *errorString, const Utils::FilePath &filePath, bool autoSave) +bool DiffEditorDocument::save(QString *errorString, const FilePath &filePath, bool autoSave) { Q_UNUSED(errorString) Q_UNUSED(autoSave) @@ -330,7 +330,7 @@ Core::IDocument::OpenResult DiffEditorDocument::open(QString *errorString, const setTemporary(false); emit temporaryStateChanged(); setFilePath(filePath.absoluteFilePath()); - setDiffFiles(fileDataList, filePath.absoluteFilePath().toString()); + setDiffFiles(fileDataList, filePath.absoluteFilePath()); } endReload(ok); if (!ok && readResult == TextFileFormat::ReadEncodingError) @@ -415,7 +415,7 @@ void DiffEditorDocument::beginReload() m_state = Reloading; emit changed(); QSignalBlocker blocker(this); - setDiffFiles(QList(), QString()); + setDiffFiles(QList(), {}); setDescription(QString()); } diff --git a/src/plugins/diffeditor/diffeditordocument.h b/src/plugins/diffeditor/diffeditordocument.h index a4dc866553a..3354b56080f 100644 --- a/src/plugins/diffeditor/diffeditordocument.h +++ b/src/plugins/diffeditor/diffeditordocument.h @@ -59,11 +59,11 @@ public: bool revert, bool addPrefix = false, const QString &overriddenFileName = QString()) const; - void setDiffFiles(const QList &data, const QString &directory, + void setDiffFiles(const QList &data, const Utils::FilePath &directory, const QString &startupFile = QString()); QList diffFiles() const; - QString baseDirectory() const; - void setBaseDirectory(const QString &directory); + Utils::FilePath baseDirectory() const; + void setBaseDirectory(const Utils::FilePath &directory); QString startupFile() const; void setDescription(const QString &description); @@ -103,7 +103,7 @@ private: DiffEditorController *m_controller = nullptr; QList m_diffFiles; - QString m_baseDirectory; + Utils::FilePath m_baseDirectory; QString m_startupFile; QString m_description; int m_contextLineCount = 3; diff --git a/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp b/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp index ce995a32caf..09050b57d08 100644 --- a/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp +++ b/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp @@ -159,12 +159,10 @@ void DiffEditorWidgetController::patch(bool revert, int fileIndex, int chunkInde ? fileData.rightFileInfo.patchBehaviour : fileData.leftFileInfo.patchBehaviour; - const QString workingDirectory = m_document->baseDirectory().isEmpty() - ? QFileInfo(fileName).absolutePath() + const FilePath workingDirectory = m_document->baseDirectory().isEmpty() + ? FilePath::fromString(fileName).absolutePath() : m_document->baseDirectory(); - const Utils::FilePath absFilePath = Utils::FilePath::fromString(workingDirectory) - .pathAppended(QFileInfo(fileName).fileName()) - .absoluteFilePath(); + const FilePath absFilePath = workingDirectory.resolvePath(fileName).absoluteFilePath(); if (patchBehaviour == DiffFileInfo::PatchFile) { const int strip = m_document->baseDirectory().isEmpty() ? -1 : 0; @@ -176,7 +174,7 @@ void DiffEditorWidgetController::patch(bool revert, int fileIndex, int chunkInde FileChangeBlocker fileChangeBlocker(absFilePath); if (PatchTool::runPatch(EditorManager::defaultTextCodec()->fromUnicode(patch), - FilePath::fromString(workingDirectory), strip, revert)) + workingDirectory, strip, revert)) m_document->reload(); } else { // PatchEditor auto textDocument = qobject_cast( @@ -217,11 +215,9 @@ void DiffEditorWidgetController::jumpToOriginalFile(const QString &fileName, if (!m_document) return; - const QDir dir(m_document->baseDirectory()); - const QString absoluteFileName = dir.absoluteFilePath(fileName); - const QFileInfo fi(absoluteFileName); - if (fi.exists() && !fi.isDir()) - EditorManager::openEditorAt(absoluteFileName, lineNumber, columnNumber); + const FilePath filePath = m_document->baseDirectory().resolvePath(fileName); + if (filePath.exists() && !filePath.isDir()) + EditorManager::openEditorAt(filePath.toString(), lineNumber, columnNumber); } void DiffEditorWidgetController::setFontSettings(const FontSettings &fontSettings) diff --git a/src/plugins/diffeditor/diffutils.h b/src/plugins/diffeditor/diffutils.h index aa8d66ca43c..c2cfd7c9008 100644 --- a/src/plugins/diffeditor/diffutils.h +++ b/src/plugins/diffeditor/diffutils.h @@ -27,8 +27,10 @@ #include "diffeditor_global.h" -#include +#include + #include +#include QT_BEGIN_NAMESPACE class QFutureInterfaceBase; diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 9f18a28324c..290c3603374 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -329,7 +329,7 @@ void GitBaseDiffEditorController::initialize() // we compare the current state of working tree to the HEAD of current branch // instead of showing unsupported combined diff format. GitClient::CommandInProgress commandInProgress = - m_instance->checkCommandInProgress(FilePath::fromString(workingDirectory())); + m_instance->checkCommandInProgress(workingDirectory()); if (commandInProgress != GitClient::NoCommand) m_rightCommit = HEAD; } @@ -341,11 +341,11 @@ void GitBaseDiffEditorController::updateBranchList() if (revision.isEmpty()) return; - const QString workingDirectory = baseDirectory(); + const FilePath workingDirectory = baseDirectory(); VcsCommand *command = m_instance->vcsExec( - FilePath::fromString(workingDirectory), + workingDirectory, {"branch", noColorOption, "-a", "--contains", revision}, nullptr, - false, 0, workingDirectory); + false, 0, workingDirectory.toString()); connect(command, &VcsCommand::stdOutText, this, [this](const QString &text) { const QString remotePrefix = "remotes/"; const QString localPrefix = ""; @@ -459,7 +459,7 @@ public: setReloader([this] { m_state = GettingDescription; const QStringList args = {"show", "-s", noColorOption, showFormatC, m_id}; - runCommand({args}, m_instance->encoding(FilePath::fromString(workingDirectory()), "i18n.commitEncoding")); + runCommand({args}, m_instance->encoding(workingDirectory(), "i18n.commitEncoding")); setStartupFile(VcsBase::source(this->document())); }); } @@ -476,7 +476,7 @@ void ShowController::processCommandOutput(const QString &output) { QTC_ASSERT(m_state != Idle, return); if (m_state == GettingDescription) { - setDescription(m_instance->extendedShowDescription(FilePath::fromString(workingDirectory()), output)); + setDescription(m_instance->extendedShowDescription(workingDirectory(), output)); // stage 2 m_state = GettingDiff; const QStringList args = {"show", "--format=format:", // omit header, already generated @@ -941,11 +941,11 @@ void GitClient::chunkActionsRequested(QMenu *menu, int fileIndex, int chunkIndex void GitClient::stage(DiffEditor::DiffEditorController *diffController, const QString &patch, bool revert) { - Utils::TemporaryFile patchFile("git-patchfile"); + TemporaryFile patchFile("git-patchfile"); if (!patchFile.open()) return; - const FilePath baseDir = FilePath::fromString(diffController->baseDirectory()); + const FilePath baseDir = diffController->baseDirectory(); QTextCodec *codec = EditorManager::defaultTextCodec(); const QByteArray patchData = codec ? codec->fromUnicode(patch) : patch.toLocal8Bit(); @@ -986,7 +986,7 @@ void GitClient::requestReload(const QString &documentId, const QString &source, controller->setVcsBinary(settings().binaryPath.filePath()); controller->setVcsTimeoutS(settings().timeout.value()); controller->setProcessEnvironment(processEnvironment()); - controller->setWorkingDirectory(workingDirectory.toString()); + controller->setWorkingDirectory(workingDirectory); controller->initialize(); connect(controller, &DiffEditorController::chunkActionsRequested, diff --git a/src/plugins/mercurial/mercurialclient.cpp b/src/plugins/mercurial/mercurialclient.cpp index 2f06a8a8247..b7093f4196f 100644 --- a/src/plugins/mercurial/mercurialclient.cpp +++ b/src/plugins/mercurial/mercurialclient.cpp @@ -355,20 +355,20 @@ void MercurialClient::diff(const FilePath &workingDir, const QStringList &files, const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName); const QString documentId = QString(Constants::MERCURIAL_PLUGIN) + ".DiffRepo." + sourceFile; - requestReload(documentId, sourceFile, title, workingDir.toString(), {"diff"}); + requestReload(documentId, sourceFile, title, workingDir, {"diff"}); } else if (files.size() == 1) { fileName = files.at(0); const QString title = tr("Mercurial Diff \"%1\"").arg(fileName); const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName); const QString documentId = QString(Constants::MERCURIAL_PLUGIN) + ".DiffFile." + sourceFile; - requestReload(documentId, sourceFile, title, workingDir.toString(), {"diff", fileName}); + requestReload(documentId, sourceFile, title, workingDir, {"diff", fileName}); } else { const QString title = tr("Mercurial Diff \"%1\"").arg(workingDir.toString()); const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName); const QString documentId = QString(Constants::MERCURIAL_PLUGIN) + ".DiffFile." + workingDir.toString(); - requestReload(documentId, sourceFile, title, workingDir.toString(), QStringList{"diff"} + files); + requestReload(documentId, sourceFile, title, workingDir, QStringList{"diff"} + files); } } @@ -455,7 +455,7 @@ MercurialClient::StatusItem MercurialClient::parseStatusLine(const QString &line } void MercurialClient::requestReload(const QString &documentId, const QString &source, const QString &title, - const QString &workingDirectory, const QStringList &args) + const FilePath &workingDirectory, const QStringList &args) { // Creating document might change the referenced source. Store a copy and use it. const QString sourceCopy = source; diff --git a/src/plugins/mercurial/mercurialclient.h b/src/plugins/mercurial/mercurialclient.h index 7a9bd3dabd0..579ca45c501 100644 --- a/src/plugins/mercurial/mercurialclient.h +++ b/src/plugins/mercurial/mercurialclient.h @@ -91,7 +91,7 @@ signals: private: void requestReload(const QString &documentId, const QString &source, const QString &title, - const QString &workingDirectory, + const Utils::FilePath &workingDirectory, const QStringList &args); void parsePullOutput(const QString &output); }; diff --git a/src/plugins/subversion/subversionclient.cpp b/src/plugins/subversion/subversionclient.cpp index cd6e6663e99..01c4eae407f 100644 --- a/src/plugins/subversion/subversionclient.cpp +++ b/src/plugins/subversion/subversionclient.cpp @@ -260,7 +260,7 @@ void SubversionDiffEditorController::processCommandOutput(const QString &output) SubversionDiffEditorController *SubversionClient::findOrCreateDiffEditor(const QString &documentId, const QString &source, const QString &title, - const QString &workingDirectory) + const FilePath &workingDirectory) { auto &settings = static_cast(this->settings()); IDocument *document = DiffEditorController::findOrCreateDocument(documentId, title); @@ -288,7 +288,7 @@ void SubversionClient::diff(const FilePath &workingDirectory, const QStringList const QString title = vcsEditorTitle(vcsCmdString, documentId); SubversionDiffEditorController *controller = - findOrCreateDiffEditor(documentId, workingDirectory.toString(), title, workingDirectory.toString()); + findOrCreateDiffEditor(documentId, workingDirectory.toString(), title, workingDirectory); controller->setFilesList(files); controller->requestReload(); } @@ -319,7 +319,7 @@ void SubversionClient::describe(const FilePath &workingDirectory, int changeNumb QString::number(changeNumber)); SubversionDiffEditorController *controller = - findOrCreateDiffEditor(documentId, workingDirectory.toString(), title, workingDirectory.toString()); + findOrCreateDiffEditor(documentId, workingDirectory.toString(), title, workingDirectory); controller->setChangeNumber(changeNumber); controller->requestReload(); } diff --git a/src/plugins/subversion/subversionclient.h b/src/plugins/subversion/subversionclient.h index 036f314b152..f1c05b27c93 100644 --- a/src/plugins/subversion/subversionclient.h +++ b/src/plugins/subversion/subversionclient.h @@ -77,7 +77,7 @@ protected: private: SubversionDiffEditorController *findOrCreateDiffEditor(const QString &documentId, const QString &source, - const QString &title, const QString &workingDirectory); + const QString &title, const Utils::FilePath &workingDirectory); mutable Utils::FilePath m_svnVersionBinary; mutable QString m_svnVersion; diff --git a/src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp b/src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp index 81c9234b3ea..3448af8e16c 100644 --- a/src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp +++ b/src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp @@ -95,9 +95,9 @@ public: void commandFinished(bool success); VcsBaseDiffEditorController *q; - QString m_directory; + FilePath m_directory; Environment m_processEnvironment; - Utils::FilePath m_vcsBinary; + FilePath m_vcsBinary; int m_vscTimeoutS; QString m_startupFile; QString m_output; @@ -241,7 +241,7 @@ void VcsBaseDiffEditorController::runCommand(const QList &args, uns // and "Waiting for data..." will be shown. d->cancelReload(); - d->m_command = new VcsCommand(FilePath::fromString(workingDirectory()), d->m_processEnvironment); + d->m_command = new VcsCommand(workingDirectory(), d->m_processEnvironment); d->m_command->setDisplayName(d->m_displayName); d->m_command->setCodec(codec ? codec : EditorManager::defaultTextCodec()); d->m_commandResultProxy = new VcsCommandResultProxy(d->m_command.data(), d); @@ -261,7 +261,7 @@ void VcsBaseDiffEditorController::processCommandOutput(const QString &output) d->processDiff(output); } -QString VcsBaseDiffEditorController::workingDirectory() const +FilePath VcsBaseDiffEditorController::workingDirectory() const { return d->m_directory; } @@ -281,7 +281,7 @@ void VcsBaseDiffEditorController::setDisplayName(const QString &displayName) d->m_displayName = displayName; } -void VcsBase::VcsBaseDiffEditorController::setWorkingDirectory(const QString &workingDir) +void VcsBase::VcsBaseDiffEditorController::setWorkingDirectory(const FilePath &workingDir) { d->m_directory = workingDir; setBaseDirectory(workingDir); diff --git a/src/plugins/vcsbase/vcsbasediffeditorcontroller.h b/src/plugins/vcsbase/vcsbasediffeditorcontroller.h index 7ccf05fd41b..8c8f58dcdd9 100644 --- a/src/plugins/vcsbase/vcsbasediffeditorcontroller.h +++ b/src/plugins/vcsbase/vcsbasediffeditorcontroller.h @@ -55,13 +55,13 @@ public: void setProcessEnvironment(const Utils::Environment &value); void setVcsBinary(const Utils::FilePath &path); void setVcsTimeoutS(int value); - void setWorkingDirectory(const QString &workingDir); + void setWorkingDirectory(const Utils::FilePath &workingDir); protected: void runCommand(const QList &args, unsigned flags, QTextCodec *codec = nullptr); virtual void processCommandOutput(const QString &output); - QString workingDirectory() const; + Utils::FilePath workingDirectory() const; void setStartupFile(const QString &startupFile); QString startupFile() const; void setDisplayName(const QString &displayName);