Vcs: Use FilePath for working directory in DiffEditorController

Change-Id: I7b5e1349bc679bd90b7781fbe0b40485ec653473
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
hjk
2021-08-17 12:26:10 +02:00
parent 6d3659bef4
commit 4bf6008158
13 changed files with 54 additions and 54 deletions

View File

@@ -35,6 +35,8 @@
#include <QStringList> #include <QStringList>
using namespace Utils;
namespace DiffEditor { namespace DiffEditor {
DiffEditorController::DiffEditorController(Core::IDocument *document) : DiffEditorController::DiffEditorController(Core::IDocument *document) :
@@ -50,12 +52,12 @@ bool DiffEditorController::isReloading() const
return m_isReloading; return m_isReloading;
} }
QString DiffEditorController::baseDirectory() const FilePath DiffEditorController::baseDirectory() const
{ {
return m_document->baseDirectory(); return m_document->baseDirectory();
} }
void DiffEditorController::setBaseDirectory(const QString &directory) void DiffEditorController::setBaseDirectory(const FilePath &directory)
{ {
m_document->setBaseDirectory(directory); m_document->setBaseDirectory(directory);
} }
@@ -94,7 +96,7 @@ DiffEditorController *DiffEditorController::controller(Core::IDocument *document
} }
void DiffEditorController::setDiffFiles(const QList<FileData> &diffFileList, void DiffEditorController::setDiffFiles(const QList<FileData> &diffFileList,
const QString &workingDirectory, const FilePath &workingDirectory,
const QString &startupFile) const QString &startupFile)
{ {
m_document->setDiffFiles(diffFileList, workingDirectory, startupFile); m_document->setDiffFiles(diffFileList, workingDirectory, startupFile);

View File

@@ -49,8 +49,8 @@ public:
void requestReload(); void requestReload();
bool isReloading() const; bool isReloading() const;
QString baseDirectory() const; Utils::FilePath baseDirectory() const;
void setBaseDirectory(const QString &directory); void setBaseDirectory(const Utils::FilePath &directory);
int contextLineCount() const; int contextLineCount() const;
bool ignoreWhitespace() const; bool ignoreWhitespace() const;
@@ -84,7 +84,7 @@ protected:
void reloadFinished(bool success); void reloadFinished(bool success);
void setDiffFiles(const QList<FileData> &diffFileList, void setDiffFiles(const QList<FileData> &diffFileList,
const QString &baseDirectory = QString(), const Utils::FilePath &baseDirectory = {},
const QString &startupFile = QString()); const QString &startupFile = QString());
void setDescription(const QString &description); void setDescription(const QString &description);
QString description() const; QString description() const;

View File

@@ -171,7 +171,7 @@ QString DiffEditorDocument::makePatch(int fileIndex, int chunkIndex,
lastChunk && fileData.lastChunkAtTheEndOfFile); lastChunk && fileData.lastChunkAtTheEndOfFile);
} }
void DiffEditorDocument::setDiffFiles(const QList<FileData> &data, const QString &directory, void DiffEditorDocument::setDiffFiles(const QList<FileData> &data, const FilePath &directory,
const QString &startupFile) const QString &startupFile)
{ {
m_diffFiles = data; m_diffFiles = data;
@@ -186,12 +186,12 @@ QList<FileData> DiffEditorDocument::diffFiles() const
return m_diffFiles; return m_diffFiles;
} }
QString DiffEditorDocument::baseDirectory() const FilePath DiffEditorDocument::baseDirectory() const
{ {
return m_baseDirectory; return m_baseDirectory;
} }
void DiffEditorDocument::setBaseDirectory(const QString &directory) void DiffEditorDocument::setBaseDirectory(const FilePath &directory)
{ {
m_baseDirectory = directory; m_baseDirectory = directory;
} }
@@ -256,7 +256,7 @@ bool DiffEditorDocument::setContents(const QByteArray &contents)
QString DiffEditorDocument::fallbackSaveAsPath() const QString DiffEditorDocument::fallbackSaveAsPath() const
{ {
if (!m_baseDirectory.isEmpty()) if (!m_baseDirectory.isEmpty())
return m_baseDirectory; return m_baseDirectory.toString();
return QDir::homePath(); return QDir::homePath();
} }
@@ -265,7 +265,7 @@ bool DiffEditorDocument::isSaveAsAllowed() const
return state() == LoadOK; 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(errorString)
Q_UNUSED(autoSave) Q_UNUSED(autoSave)
@@ -330,7 +330,7 @@ Core::IDocument::OpenResult DiffEditorDocument::open(QString *errorString, const
setTemporary(false); setTemporary(false);
emit temporaryStateChanged(); emit temporaryStateChanged();
setFilePath(filePath.absoluteFilePath()); setFilePath(filePath.absoluteFilePath());
setDiffFiles(fileDataList, filePath.absoluteFilePath().toString()); setDiffFiles(fileDataList, filePath.absoluteFilePath());
} }
endReload(ok); endReload(ok);
if (!ok && readResult == TextFileFormat::ReadEncodingError) if (!ok && readResult == TextFileFormat::ReadEncodingError)
@@ -415,7 +415,7 @@ void DiffEditorDocument::beginReload()
m_state = Reloading; m_state = Reloading;
emit changed(); emit changed();
QSignalBlocker blocker(this); QSignalBlocker blocker(this);
setDiffFiles(QList<FileData>(), QString()); setDiffFiles(QList<FileData>(), {});
setDescription(QString()); setDescription(QString());
} }

View File

@@ -59,11 +59,11 @@ public:
bool revert, bool addPrefix = false, bool revert, bool addPrefix = false,
const QString &overriddenFileName = QString()) const; const QString &overriddenFileName = QString()) const;
void setDiffFiles(const QList<FileData> &data, const QString &directory, void setDiffFiles(const QList<FileData> &data, const Utils::FilePath &directory,
const QString &startupFile = QString()); const QString &startupFile = QString());
QList<FileData> diffFiles() const; QList<FileData> diffFiles() const;
QString baseDirectory() const; Utils::FilePath baseDirectory() const;
void setBaseDirectory(const QString &directory); void setBaseDirectory(const Utils::FilePath &directory);
QString startupFile() const; QString startupFile() const;
void setDescription(const QString &description); void setDescription(const QString &description);
@@ -103,7 +103,7 @@ private:
DiffEditorController *m_controller = nullptr; DiffEditorController *m_controller = nullptr;
QList<FileData> m_diffFiles; QList<FileData> m_diffFiles;
QString m_baseDirectory; Utils::FilePath m_baseDirectory;
QString m_startupFile; QString m_startupFile;
QString m_description; QString m_description;
int m_contextLineCount = 3; int m_contextLineCount = 3;

View File

@@ -159,12 +159,10 @@ void DiffEditorWidgetController::patch(bool revert, int fileIndex, int chunkInde
? fileData.rightFileInfo.patchBehaviour ? fileData.rightFileInfo.patchBehaviour
: fileData.leftFileInfo.patchBehaviour; : fileData.leftFileInfo.patchBehaviour;
const QString workingDirectory = m_document->baseDirectory().isEmpty() const FilePath workingDirectory = m_document->baseDirectory().isEmpty()
? QFileInfo(fileName).absolutePath() ? FilePath::fromString(fileName).absolutePath()
: m_document->baseDirectory(); : m_document->baseDirectory();
const Utils::FilePath absFilePath = Utils::FilePath::fromString(workingDirectory) const FilePath absFilePath = workingDirectory.resolvePath(fileName).absoluteFilePath();
.pathAppended(QFileInfo(fileName).fileName())
.absoluteFilePath();
if (patchBehaviour == DiffFileInfo::PatchFile) { if (patchBehaviour == DiffFileInfo::PatchFile) {
const int strip = m_document->baseDirectory().isEmpty() ? -1 : 0; 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); FileChangeBlocker fileChangeBlocker(absFilePath);
if (PatchTool::runPatch(EditorManager::defaultTextCodec()->fromUnicode(patch), if (PatchTool::runPatch(EditorManager::defaultTextCodec()->fromUnicode(patch),
FilePath::fromString(workingDirectory), strip, revert)) workingDirectory, strip, revert))
m_document->reload(); m_document->reload();
} else { // PatchEditor } else { // PatchEditor
auto textDocument = qobject_cast<TextEditor::TextDocument *>( auto textDocument = qobject_cast<TextEditor::TextDocument *>(
@@ -217,11 +215,9 @@ void DiffEditorWidgetController::jumpToOriginalFile(const QString &fileName,
if (!m_document) if (!m_document)
return; return;
const QDir dir(m_document->baseDirectory()); const FilePath filePath = m_document->baseDirectory().resolvePath(fileName);
const QString absoluteFileName = dir.absoluteFilePath(fileName); if (filePath.exists() && !filePath.isDir())
const QFileInfo fi(absoluteFileName); EditorManager::openEditorAt(filePath.toString(), lineNumber, columnNumber);
if (fi.exists() && !fi.isDir())
EditorManager::openEditorAt(absoluteFileName, lineNumber, columnNumber);
} }
void DiffEditorWidgetController::setFontSettings(const FontSettings &fontSettings) void DiffEditorWidgetController::setFontSettings(const FontSettings &fontSettings)

View File

@@ -27,8 +27,10 @@
#include "diffeditor_global.h" #include "diffeditor_global.h"
#include <QString> #include <utils/filepath.h>
#include <QMap> #include <QMap>
#include <QString>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QFutureInterfaceBase; class QFutureInterfaceBase;

View File

@@ -329,7 +329,7 @@ void GitBaseDiffEditorController::initialize()
// we compare the current state of working tree to the HEAD of current branch // we compare the current state of working tree to the HEAD of current branch
// instead of showing unsupported combined diff format. // instead of showing unsupported combined diff format.
GitClient::CommandInProgress commandInProgress = GitClient::CommandInProgress commandInProgress =
m_instance->checkCommandInProgress(FilePath::fromString(workingDirectory())); m_instance->checkCommandInProgress(workingDirectory());
if (commandInProgress != GitClient::NoCommand) if (commandInProgress != GitClient::NoCommand)
m_rightCommit = HEAD; m_rightCommit = HEAD;
} }
@@ -341,11 +341,11 @@ void GitBaseDiffEditorController::updateBranchList()
if (revision.isEmpty()) if (revision.isEmpty())
return; return;
const QString workingDirectory = baseDirectory(); const FilePath workingDirectory = baseDirectory();
VcsCommand *command = m_instance->vcsExec( VcsCommand *command = m_instance->vcsExec(
FilePath::fromString(workingDirectory), workingDirectory,
{"branch", noColorOption, "-a", "--contains", revision}, nullptr, {"branch", noColorOption, "-a", "--contains", revision}, nullptr,
false, 0, workingDirectory); false, 0, workingDirectory.toString());
connect(command, &VcsCommand::stdOutText, this, [this](const QString &text) { connect(command, &VcsCommand::stdOutText, this, [this](const QString &text) {
const QString remotePrefix = "remotes/"; const QString remotePrefix = "remotes/";
const QString localPrefix = "<Local>"; const QString localPrefix = "<Local>";
@@ -459,7 +459,7 @@ public:
setReloader([this] { setReloader([this] {
m_state = GettingDescription; m_state = GettingDescription;
const QStringList args = {"show", "-s", noColorOption, showFormatC, m_id}; 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())); setStartupFile(VcsBase::source(this->document()));
}); });
} }
@@ -476,7 +476,7 @@ void ShowController::processCommandOutput(const QString &output)
{ {
QTC_ASSERT(m_state != Idle, return); QTC_ASSERT(m_state != Idle, return);
if (m_state == GettingDescription) { if (m_state == GettingDescription) {
setDescription(m_instance->extendedShowDescription(FilePath::fromString(workingDirectory()), output)); setDescription(m_instance->extendedShowDescription(workingDirectory(), output));
// stage 2 // stage 2
m_state = GettingDiff; m_state = GettingDiff;
const QStringList args = {"show", "--format=format:", // omit header, already generated 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, void GitClient::stage(DiffEditor::DiffEditorController *diffController,
const QString &patch, bool revert) const QString &patch, bool revert)
{ {
Utils::TemporaryFile patchFile("git-patchfile"); TemporaryFile patchFile("git-patchfile");
if (!patchFile.open()) if (!patchFile.open())
return; return;
const FilePath baseDir = FilePath::fromString(diffController->baseDirectory()); const FilePath baseDir = diffController->baseDirectory();
QTextCodec *codec = EditorManager::defaultTextCodec(); QTextCodec *codec = EditorManager::defaultTextCodec();
const QByteArray patchData = codec const QByteArray patchData = codec
? codec->fromUnicode(patch) : patch.toLocal8Bit(); ? codec->fromUnicode(patch) : patch.toLocal8Bit();
@@ -986,7 +986,7 @@ void GitClient::requestReload(const QString &documentId, const QString &source,
controller->setVcsBinary(settings().binaryPath.filePath()); controller->setVcsBinary(settings().binaryPath.filePath());
controller->setVcsTimeoutS(settings().timeout.value()); controller->setVcsTimeoutS(settings().timeout.value());
controller->setProcessEnvironment(processEnvironment()); controller->setProcessEnvironment(processEnvironment());
controller->setWorkingDirectory(workingDirectory.toString()); controller->setWorkingDirectory(workingDirectory);
controller->initialize(); controller->initialize();
connect(controller, &DiffEditorController::chunkActionsRequested, connect(controller, &DiffEditorController::chunkActionsRequested,

View File

@@ -355,20 +355,20 @@ void MercurialClient::diff(const FilePath &workingDir, const QStringList &files,
const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName); const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName);
const QString documentId = QString(Constants::MERCURIAL_PLUGIN) const QString documentId = QString(Constants::MERCURIAL_PLUGIN)
+ ".DiffRepo." + sourceFile; + ".DiffRepo." + sourceFile;
requestReload(documentId, sourceFile, title, workingDir.toString(), {"diff"}); requestReload(documentId, sourceFile, title, workingDir, {"diff"});
} else if (files.size() == 1) { } else if (files.size() == 1) {
fileName = files.at(0); fileName = files.at(0);
const QString title = tr("Mercurial Diff \"%1\"").arg(fileName); const QString title = tr("Mercurial Diff \"%1\"").arg(fileName);
const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName); const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName);
const QString documentId = QString(Constants::MERCURIAL_PLUGIN) const QString documentId = QString(Constants::MERCURIAL_PLUGIN)
+ ".DiffFile." + sourceFile; + ".DiffFile." + sourceFile;
requestReload(documentId, sourceFile, title, workingDir.toString(), {"diff", fileName}); requestReload(documentId, sourceFile, title, workingDir, {"diff", fileName});
} else { } else {
const QString title = tr("Mercurial Diff \"%1\"").arg(workingDir.toString()); const QString title = tr("Mercurial Diff \"%1\"").arg(workingDir.toString());
const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName); const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName);
const QString documentId = QString(Constants::MERCURIAL_PLUGIN) const QString documentId = QString(Constants::MERCURIAL_PLUGIN)
+ ".DiffFile." + workingDir.toString(); + ".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, 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. // Creating document might change the referenced source. Store a copy and use it.
const QString sourceCopy = source; const QString sourceCopy = source;

View File

@@ -91,7 +91,7 @@ signals:
private: private:
void requestReload(const QString &documentId, const QString &source, const QString &title, void requestReload(const QString &documentId, const QString &source, const QString &title,
const QString &workingDirectory, const Utils::FilePath &workingDirectory,
const QStringList &args); const QStringList &args);
void parsePullOutput(const QString &output); void parsePullOutput(const QString &output);
}; };

View File

@@ -260,7 +260,7 @@ void SubversionDiffEditorController::processCommandOutput(const QString &output)
SubversionDiffEditorController *SubversionClient::findOrCreateDiffEditor(const QString &documentId, SubversionDiffEditorController *SubversionClient::findOrCreateDiffEditor(const QString &documentId,
const QString &source, const QString &source,
const QString &title, const QString &title,
const QString &workingDirectory) const FilePath &workingDirectory)
{ {
auto &settings = static_cast<SubversionSettings &>(this->settings()); auto &settings = static_cast<SubversionSettings &>(this->settings());
IDocument *document = DiffEditorController::findOrCreateDocument(documentId, title); IDocument *document = DiffEditorController::findOrCreateDocument(documentId, title);
@@ -288,7 +288,7 @@ void SubversionClient::diff(const FilePath &workingDirectory, const QStringList
const QString title = vcsEditorTitle(vcsCmdString, documentId); const QString title = vcsEditorTitle(vcsCmdString, documentId);
SubversionDiffEditorController *controller = SubversionDiffEditorController *controller =
findOrCreateDiffEditor(documentId, workingDirectory.toString(), title, workingDirectory.toString()); findOrCreateDiffEditor(documentId, workingDirectory.toString(), title, workingDirectory);
controller->setFilesList(files); controller->setFilesList(files);
controller->requestReload(); controller->requestReload();
} }
@@ -319,7 +319,7 @@ void SubversionClient::describe(const FilePath &workingDirectory, int changeNumb
QString::number(changeNumber)); QString::number(changeNumber));
SubversionDiffEditorController *controller = SubversionDiffEditorController *controller =
findOrCreateDiffEditor(documentId, workingDirectory.toString(), title, workingDirectory.toString()); findOrCreateDiffEditor(documentId, workingDirectory.toString(), title, workingDirectory);
controller->setChangeNumber(changeNumber); controller->setChangeNumber(changeNumber);
controller->requestReload(); controller->requestReload();
} }

View File

@@ -77,7 +77,7 @@ protected:
private: private:
SubversionDiffEditorController *findOrCreateDiffEditor(const QString &documentId, const QString &source, 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 Utils::FilePath m_svnVersionBinary;
mutable QString m_svnVersion; mutable QString m_svnVersion;

View File

@@ -95,9 +95,9 @@ public:
void commandFinished(bool success); void commandFinished(bool success);
VcsBaseDiffEditorController *q; VcsBaseDiffEditorController *q;
QString m_directory; FilePath m_directory;
Environment m_processEnvironment; Environment m_processEnvironment;
Utils::FilePath m_vcsBinary; FilePath m_vcsBinary;
int m_vscTimeoutS; int m_vscTimeoutS;
QString m_startupFile; QString m_startupFile;
QString m_output; QString m_output;
@@ -241,7 +241,7 @@ void VcsBaseDiffEditorController::runCommand(const QList<QStringList> &args, uns
// and "Waiting for data..." will be shown. // and "Waiting for data..." will be shown.
d->cancelReload(); 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->setDisplayName(d->m_displayName);
d->m_command->setCodec(codec ? codec : EditorManager::defaultTextCodec()); d->m_command->setCodec(codec ? codec : EditorManager::defaultTextCodec());
d->m_commandResultProxy = new VcsCommandResultProxy(d->m_command.data(), d); d->m_commandResultProxy = new VcsCommandResultProxy(d->m_command.data(), d);
@@ -261,7 +261,7 @@ void VcsBaseDiffEditorController::processCommandOutput(const QString &output)
d->processDiff(output); d->processDiff(output);
} }
QString VcsBaseDiffEditorController::workingDirectory() const FilePath VcsBaseDiffEditorController::workingDirectory() const
{ {
return d->m_directory; return d->m_directory;
} }
@@ -281,7 +281,7 @@ void VcsBaseDiffEditorController::setDisplayName(const QString &displayName)
d->m_displayName = displayName; d->m_displayName = displayName;
} }
void VcsBase::VcsBaseDiffEditorController::setWorkingDirectory(const QString &workingDir) void VcsBase::VcsBaseDiffEditorController::setWorkingDirectory(const FilePath &workingDir)
{ {
d->m_directory = workingDir; d->m_directory = workingDir;
setBaseDirectory(workingDir); setBaseDirectory(workingDir);

View File

@@ -55,13 +55,13 @@ public:
void setProcessEnvironment(const Utils::Environment &value); void setProcessEnvironment(const Utils::Environment &value);
void setVcsBinary(const Utils::FilePath &path); void setVcsBinary(const Utils::FilePath &path);
void setVcsTimeoutS(int value); void setVcsTimeoutS(int value);
void setWorkingDirectory(const QString &workingDir); void setWorkingDirectory(const Utils::FilePath &workingDir);
protected: protected:
void runCommand(const QList<QStringList> &args, unsigned flags, QTextCodec *codec = nullptr); void runCommand(const QList<QStringList> &args, unsigned flags, QTextCodec *codec = nullptr);
virtual void processCommandOutput(const QString &output); virtual void processCommandOutput(const QString &output);
QString workingDirectory() const; Utils::FilePath workingDirectory() const;
void setStartupFile(const QString &startupFile); void setStartupFile(const QString &startupFile);
QString startupFile() const; QString startupFile() const;
void setDisplayName(const QString &displayName); void setDisplayName(const QString &displayName);