forked from qt-creator/qt-creator
Vcs: Use FilePath for working directory in DiffEditorController
Change-Id: I7b5e1349bc679bd90b7781fbe0b40485ec653473 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
@@ -35,6 +35,8 @@
|
||||
|
||||
#include <QStringList>
|
||||
|
||||
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<FileData> &diffFileList,
|
||||
const QString &workingDirectory,
|
||||
const FilePath &workingDirectory,
|
||||
const QString &startupFile)
|
||||
{
|
||||
m_document->setDiffFiles(diffFileList, workingDirectory, startupFile);
|
||||
|
@@ -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<FileData> &diffFileList,
|
||||
const QString &baseDirectory = QString(),
|
||||
const Utils::FilePath &baseDirectory = {},
|
||||
const QString &startupFile = QString());
|
||||
void setDescription(const QString &description);
|
||||
QString description() const;
|
||||
|
@@ -171,7 +171,7 @@ QString DiffEditorDocument::makePatch(int fileIndex, int chunkIndex,
|
||||
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)
|
||||
{
|
||||
m_diffFiles = data;
|
||||
@@ -186,12 +186,12 @@ QList<FileData> 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<FileData>(), QString());
|
||||
setDiffFiles(QList<FileData>(), {});
|
||||
setDescription(QString());
|
||||
}
|
||||
|
||||
|
@@ -59,11 +59,11 @@ public:
|
||||
bool revert, bool addPrefix = false,
|
||||
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());
|
||||
QList<FileData> 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<FileData> m_diffFiles;
|
||||
QString m_baseDirectory;
|
||||
Utils::FilePath m_baseDirectory;
|
||||
QString m_startupFile;
|
||||
QString m_description;
|
||||
int m_contextLineCount = 3;
|
||||
|
@@ -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<TextEditor::TextDocument *>(
|
||||
@@ -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)
|
||||
|
@@ -27,8 +27,10 @@
|
||||
|
||||
#include "diffeditor_global.h"
|
||||
|
||||
#include <QString>
|
||||
#include <utils/filepath.h>
|
||||
|
||||
#include <QMap>
|
||||
#include <QString>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QFutureInterfaceBase;
|
||||
|
@@ -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 = "<Local>";
|
||||
@@ -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,
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
};
|
||||
|
@@ -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<SubversionSettings &>(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();
|
||||
}
|
||||
|
@@ -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;
|
||||
|
@@ -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<QStringList> &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);
|
||||
|
@@ -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<QStringList> &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);
|
||||
|
Reference in New Issue
Block a user