forked from qt-creator/qt-creator
Mercurial: Simplify DiffEditorController setup
Change-Id: I28157e5ac310d8921bf16676cd695060d29c0254 Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
@@ -64,7 +64,6 @@ public:
|
|||||||
setDisplayName("Hg Diff");
|
setDisplayName("Hg Diff");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
|
||||||
void runCommand(const QList<QStringList> &args, QTextCodec *codec = nullptr);
|
void runCommand(const QList<QStringList> &args, QTextCodec *codec = nullptr);
|
||||||
QStringList addConfigurationArguments(const QStringList &args) const;
|
QStringList addConfigurationArguments(const QStringList &args) const;
|
||||||
};
|
};
|
||||||
@@ -85,47 +84,6 @@ QStringList MercurialDiffEditorController::addConfigurationArguments(const QStri
|
|||||||
return args + configArgs;
|
return args + configArgs;
|
||||||
}
|
}
|
||||||
|
|
||||||
class FileDiffController : public MercurialDiffEditorController
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
FileDiffController(IDocument *document, const QString &fileName) :
|
|
||||||
MercurialDiffEditorController(document)
|
|
||||||
{
|
|
||||||
setReloader([this, fileName] {
|
|
||||||
QStringList args = { "diff", fileName };
|
|
||||||
runCommand({ addConfigurationArguments(args) });
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class FileListDiffController : public MercurialDiffEditorController
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
FileListDiffController(IDocument *document, const QStringList &fileNames) :
|
|
||||||
MercurialDiffEditorController(document)
|
|
||||||
{
|
|
||||||
setReloader([this, fileNames] {
|
|
||||||
QStringList args { "diff" };
|
|
||||||
args << fileNames;
|
|
||||||
runCommand({addConfigurationArguments(args)});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class RepositoryDiffController : public MercurialDiffEditorController
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
RepositoryDiffController(IDocument *document) :
|
|
||||||
MercurialDiffEditorController(document)
|
|
||||||
{
|
|
||||||
setReloader([this] {
|
|
||||||
QStringList args = { "diff" };
|
|
||||||
runCommand({addConfigurationArguments(args)});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
MercurialClient::MercurialClient(MercurialSettings *settings) : VcsBaseClient(settings)
|
MercurialClient::MercurialClient(MercurialSettings *settings) : VcsBaseClient(settings)
|
||||||
@@ -387,23 +345,20 @@ void MercurialClient::diff(const QString &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,
|
requestReload(documentId, sourceFile, title, workingDir, {"diff"});
|
||||||
[](IDocument *doc) { return new RepositoryDiffController(doc); });
|
|
||||||
} 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,
|
requestReload(documentId, sourceFile, title, workingDir, {"diff", fileName});
|
||||||
[fileName](IDocument *doc) { return new FileDiffController(doc, fileName); });
|
|
||||||
} else {
|
} else {
|
||||||
const QString title = tr("Mercurial Diff \"%1\"").arg(workingDir);
|
const QString title = tr("Mercurial Diff \"%1\"").arg(workingDir);
|
||||||
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;
|
+ ".DiffFile." + workingDir;
|
||||||
requestReload(documentId, sourceFile, title, workingDir,
|
requestReload(documentId, sourceFile, title, workingDir, QStringList{"diff"} + files);
|
||||||
[files](IDocument *doc) { return new FileListDiffController(doc, files); });
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -492,16 +447,17 @@ 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 QString &workingDirectory, const QStringList &args)
|
||||||
std::function<VcsBaseDiffEditorController *(Core::IDocument *)> factory)
|
|
||||||
{
|
{
|
||||||
// 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;
|
||||||
|
|
||||||
IDocument *document = DiffEditorController::findOrCreateDocument(documentId, title);
|
IDocument *document = DiffEditorController::findOrCreateDocument(documentId, title);
|
||||||
QTC_ASSERT(document, return);
|
QTC_ASSERT(document, return);
|
||||||
VcsBaseDiffEditorController *controller = factory(document);
|
auto controller = new MercurialDiffEditorController(document);
|
||||||
QTC_ASSERT(controller, return);
|
controller->setReloader([controller, args] {
|
||||||
|
controller->runCommand({controller->addConfigurationArguments(args)});
|
||||||
|
});
|
||||||
controller->setVcsBinary(settings().binaryPath());
|
controller->setVcsBinary(settings().binaryPath());
|
||||||
controller->setVcsTimeoutS(settings().vcsTimeoutS());
|
controller->setVcsTimeoutS(settings().vcsTimeoutS());
|
||||||
controller->setProcessEnvironment(processEnvironment());
|
controller->setProcessEnvironment(processEnvironment());
|
||||||
|
@@ -34,6 +34,8 @@ namespace VcsBase { class VcsBaseDiffEditorController; }
|
|||||||
namespace Mercurial {
|
namespace Mercurial {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
|
class MercurialDiffEditorController;
|
||||||
|
|
||||||
class MercurialClient : public VcsBase::VcsBaseClient
|
class MercurialClient : public VcsBase::VcsBaseClient
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@@ -88,8 +90,9 @@ signals:
|
|||||||
void needMerge();
|
void needMerge();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void requestReload(const QString &documentId, const QString &source, const QString &title, const QString &workingDirectory,
|
void requestReload(const QString &documentId, const QString &source, const QString &title,
|
||||||
std::function<VcsBase::VcsBaseDiffEditorController *(Core::IDocument *)> factory);
|
const QString &workingDirectory,
|
||||||
|
const QStringList &args);
|
||||||
void parsePullOutput(const QString &output);
|
void parsePullOutput(const QString &output);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user