forked from qt-creator/qt-creator
VCS: Further reduce QTextCodec dependency
Use the new Utils::TextEncoding (a thin wrapper containing a codec's name) instead of a codec itself. Change-Id: I29d61c9884b7e35dc59d8123e697c63f6b748caa Reviewed-by: André Hartmann <aha_1980@gmx.de> Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
@@ -1803,6 +1803,11 @@ void Process::setCodec(const TextCodec &codec)
|
||||
d->m_stdErrCodec = codec;
|
||||
}
|
||||
|
||||
void Process::setEncoding(const TextEncoding &encoding)
|
||||
{
|
||||
setCodec(TextCodec::codecForName(encoding));
|
||||
}
|
||||
|
||||
void Process::setUtf8Codec()
|
||||
{
|
||||
d->m_stdOutCodec = TextCodec::utf8();
|
||||
|
@@ -27,6 +27,7 @@ class DeviceProcessHooks;
|
||||
class ProcessInterface;
|
||||
class ProcessResultData;
|
||||
class ProcessRunData;
|
||||
class TextEncoding;
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT Process final : public QObject
|
||||
{
|
||||
@@ -144,6 +145,7 @@ public:
|
||||
EventLoopMode eventLoopMode = EventLoopMode::Off);
|
||||
|
||||
void setCodec(const TextCodec &codec); // for stdOut and stdErr
|
||||
void setEncoding(const TextEncoding &encoding); // for stdOut and stdErr
|
||||
void setUtf8Codec(); // for stdOut and stdErr
|
||||
void setUtf8StdOutCodec(); // for stdOut, stdErr uses executable.processStdErrCodec()
|
||||
|
||||
|
@@ -11,6 +11,8 @@ namespace Utils {
|
||||
|
||||
// TextEncoding
|
||||
|
||||
TextEncoding::TextEncoding() = default;
|
||||
|
||||
TextEncoding::TextEncoding(const QByteArray &name)
|
||||
: m_name(name)
|
||||
{}
|
||||
@@ -19,6 +21,20 @@ TextEncoding::TextEncoding(QStringConverter::Encoding encoding)
|
||||
: m_name(QStringConverter::nameForEncoding(encoding))
|
||||
{}
|
||||
|
||||
bool TextEncoding::isValid() const
|
||||
{
|
||||
return !m_name.isEmpty();
|
||||
}
|
||||
|
||||
bool operator==(const TextEncoding &left, const TextEncoding &right)
|
||||
{
|
||||
return left.name() == right.name();
|
||||
}
|
||||
|
||||
bool operator!=(const TextEncoding &left, const TextEncoding &right)
|
||||
{
|
||||
return left.name() != right.name();
|
||||
}
|
||||
|
||||
// TextCodec
|
||||
|
||||
|
@@ -17,13 +17,19 @@ namespace Utils {
|
||||
class QTCREATOR_UTILS_EXPORT TextEncoding
|
||||
{
|
||||
public:
|
||||
TextEncoding();
|
||||
TextEncoding(const QByteArray &name);
|
||||
TextEncoding(QStringEncoder::Encoding encoding);
|
||||
|
||||
operator QByteArray() const { return m_name; }
|
||||
QByteArray name() const { return m_name; }
|
||||
|
||||
bool isValid() const;
|
||||
|
||||
private:
|
||||
QTCREATOR_UTILS_EXPORT friend bool operator==(const TextEncoding &left, const TextEncoding &right);
|
||||
QTCREATOR_UTILS_EXPORT friend bool operator!=(const TextEncoding &left, const TextEncoding &right);
|
||||
|
||||
QByteArray m_name;
|
||||
};
|
||||
|
||||
|
@@ -234,12 +234,12 @@ private:
|
||||
FilePath ccViewRoot(const FilePath &directory) const;
|
||||
FilePath findTopLevel(const FilePath &directory) const;
|
||||
IEditor *showOutputInEditor(const QString& title, const QString &output, Id id,
|
||||
const FilePath &source, const TextCodec &codec) const;
|
||||
const FilePath &source, const TextEncoding &encoding) const;
|
||||
CommandResult runCleartoolProc(const FilePath &workingDir,
|
||||
const QStringList &arguments) const;
|
||||
CommandResult runCleartool(const FilePath &workingDir, const QStringList &arguments,
|
||||
VcsBase::RunFlags flags = VcsBase::RunFlags::None,
|
||||
const TextCodec &codec = {}, int timeoutMultiplier = 1) const;
|
||||
const TextEncoding &encoding = {}, int timeoutMultiplier = 1) const;
|
||||
static void sync(QPromise<void> &promise, FilePaths files);
|
||||
|
||||
void history(const FilePath &workingDir,
|
||||
@@ -256,7 +256,7 @@ private:
|
||||
QString diffExternal(QString file1, QString file2 = QString(), bool keep = false);
|
||||
QString getFile(const QString &nativeFile, const QString &prefix);
|
||||
QString runExtDiff(const FilePath &workingDir, const QStringList &arguments, int timeOutS,
|
||||
const TextCodec &outputCodec = {});
|
||||
const TextEncoding &encoding = {});
|
||||
static FilePath getDriveLetterOfPath(FilePath directory);
|
||||
|
||||
FileStatus::Status getFileStatus(const FilePath &fileName) const;
|
||||
@@ -1181,7 +1181,7 @@ void ClearCasePluginPrivate::ccDiffWithPred(const FilePath &workingDir, const QS
|
||||
if (Constants::debug)
|
||||
qDebug() << Q_FUNC_INFO << files;
|
||||
const FilePath source = VcsBaseEditor::getSource(workingDir, files);
|
||||
const TextCodec codec = source.isEmpty() ? TextCodec() : VcsBaseEditor::getCodec(source);
|
||||
const TextEncoding encoding = source.isEmpty() ? TextEncoding() : VcsBaseEditor::getEncoding(source);
|
||||
|
||||
if ((m_settings.diffType == GraphicalDiff) && (files.count() == 1)) {
|
||||
const QString file = files.first();
|
||||
@@ -1221,7 +1221,7 @@ void ClearCasePluginPrivate::ccDiffWithPred(const FilePath &workingDir, const QS
|
||||
diffname = QDir::toNativeSeparators(files.first());
|
||||
}
|
||||
const QString title = QString::fromLatin1("cc diff %1").arg(diffname);
|
||||
IEditor *editor = showOutputInEditor(title, result, DIFF_EDITOR_ID, source, codec);
|
||||
IEditor *editor = showOutputInEditor(title, result, DIFF_EDITOR_ID, source, encoding);
|
||||
setWorkingDirectory(editor, workingDir);
|
||||
VcsBaseEditor::tagEditor(editor, tag);
|
||||
auto diffEditorWidget = qobject_cast<ClearCaseEditorWidget *>(editor->widget());
|
||||
@@ -1438,7 +1438,7 @@ void ClearCasePluginPrivate::history(const FilePath &workingDir,
|
||||
const QStringList &files,
|
||||
bool enableAnnotationContextMenu)
|
||||
{
|
||||
const TextCodec codec = VcsBaseEditor::getCodec(workingDir, files);
|
||||
const TextEncoding encoding = VcsBaseEditor::getEncoding(workingDir, files);
|
||||
// no need for temp file
|
||||
QStringList args(QLatin1String("lshistory"));
|
||||
if (m_settings.historyCount > 0)
|
||||
@@ -1448,7 +1448,7 @@ void ClearCasePluginPrivate::history(const FilePath &workingDir,
|
||||
for (const QString &file : files)
|
||||
args.append(QDir::toNativeSeparators(file));
|
||||
|
||||
const CommandResult result = runCleartool(workingDir, args, RunFlags::None, codec);
|
||||
const CommandResult result = runCleartool(workingDir, args, RunFlags::None, encoding);
|
||||
if (result.result() != ProcessResult::FinishedWithSuccess)
|
||||
return;
|
||||
|
||||
@@ -1465,7 +1465,7 @@ void ClearCasePluginPrivate::history(const FilePath &workingDir,
|
||||
const QString title = QString::fromLatin1("cc history %1").arg(id);
|
||||
const FilePath source = VcsBaseEditor::getSource(workingDir, files);
|
||||
IEditor *newEditor = showOutputInEditor(title, result.cleanedStdOut(),
|
||||
LOG_EDITOR_ID, source, codec);
|
||||
LOG_EDITOR_ID, source, encoding);
|
||||
VcsBaseEditor::tagEditor(newEditor, tag);
|
||||
if (enableAnnotationContextMenu)
|
||||
VcsBaseEditor::getVcsBaseEditor(newEditor)->setFileLogAnnotateEnabled(true);
|
||||
@@ -1528,7 +1528,7 @@ void ClearCasePluginPrivate::vcsAnnotateHelper(const FilePath &workingDir, const
|
||||
qDebug() << Q_FUNC_INFO << file;
|
||||
|
||||
// FIXME: Should this be something like workingDir.resolvePath(file) ?
|
||||
const TextCodec codec = VcsBaseEditor::getCodec(FilePath::fromString(file));
|
||||
const TextEncoding encoding = VcsBaseEditor::getEncoding(FilePath::fromString(file));
|
||||
|
||||
// Determine id
|
||||
QString id = file;
|
||||
@@ -1541,7 +1541,7 @@ void ClearCasePluginPrivate::vcsAnnotateHelper(const FilePath &workingDir, const
|
||||
args << QLatin1String("-out") << QLatin1String("-");
|
||||
args.append(QDir::toNativeSeparators(id));
|
||||
|
||||
const CommandResult result = runCleartool(workingDir, args, RunFlags::None, codec);
|
||||
const CommandResult result = runCleartool(workingDir, args, RunFlags::None, encoding);
|
||||
if (result.result() != ProcessResult::FinishedWithSuccess)
|
||||
return;
|
||||
|
||||
@@ -1568,7 +1568,7 @@ void ClearCasePluginPrivate::vcsAnnotateHelper(const FilePath &workingDir, const
|
||||
EditorManager::activateEditor(editor);
|
||||
} else {
|
||||
const QString title = QString::fromLatin1("cc annotate %1").arg(id);
|
||||
IEditor *newEditor = showOutputInEditor(title, res, ANNOTATION_EDITOR_ID, source, codec);
|
||||
IEditor *newEditor = showOutputInEditor(title, res, ANNOTATION_EDITOR_ID, source, encoding);
|
||||
VcsBaseEditor::tagEditor(newEditor, tag);
|
||||
VcsBaseEditor::gotoLineOfEditor(newEditor, lineNumber);
|
||||
}
|
||||
@@ -1587,8 +1587,8 @@ void ClearCasePluginPrivate::vcsDescribe(const FilePath &source, const QString &
|
||||
const FilePath relPath = source.relativePathFromDir(topLevel);
|
||||
const QString id = QString::fromLatin1("%1@@%2").arg(relPath.toUserOutput(), changeNr);
|
||||
|
||||
const TextCodec codec = VcsBaseEditor::getCodec(source);
|
||||
const CommandResult result = runCleartool(topLevel, {"describe", id}, RunFlags::None, codec);
|
||||
const TextEncoding encoding = VcsBaseEditor::getEncoding(source);
|
||||
const CommandResult result = runCleartool(topLevel, {"describe", id}, RunFlags::None, encoding);
|
||||
description = result.cleanedStdOut();
|
||||
if (m_settings.extDiffAvailable)
|
||||
description += diffExternal(id);
|
||||
@@ -1601,7 +1601,7 @@ void ClearCasePluginPrivate::vcsDescribe(const FilePath &source, const QString &
|
||||
EditorManager::activateEditor(editor);
|
||||
} else {
|
||||
const QString title = QString::fromLatin1("cc describe %1").arg(id);
|
||||
IEditor *newEditor = showOutputInEditor(title, description, DIFF_EDITOR_ID, source, codec);
|
||||
IEditor *newEditor = showOutputInEditor(title, description, DIFF_EDITOR_ID, source, encoding);
|
||||
VcsBaseEditor::tagEditor(newEditor, tag);
|
||||
}
|
||||
}
|
||||
@@ -1625,7 +1625,7 @@ CommandResult ClearCasePluginPrivate::runCleartoolProc(const FilePath &workingDi
|
||||
CommandResult ClearCasePluginPrivate::runCleartool(const FilePath &workingDir,
|
||||
const QStringList &arguments,
|
||||
RunFlags flags,
|
||||
const TextCodec &codec,
|
||||
const TextEncoding &encoding,
|
||||
int timeoutMultiplier) const
|
||||
{
|
||||
if (m_settings.ccBinaryPath.isEmpty())
|
||||
@@ -1633,16 +1633,16 @@ CommandResult ClearCasePluginPrivate::runCleartool(const FilePath &workingDir,
|
||||
|
||||
const int timeoutS = m_settings.timeOutS * timeoutMultiplier;
|
||||
return VcsCommand::runBlocking(workingDir, Environment::systemEnvironment(),
|
||||
{m_settings.ccBinaryPath, arguments}, flags, timeoutS, codec);
|
||||
{m_settings.ccBinaryPath, arguments}, flags, timeoutS, encoding);
|
||||
}
|
||||
|
||||
IEditor *ClearCasePluginPrivate::showOutputInEditor(const QString& title, const QString &output,
|
||||
Id id, const FilePath &source,
|
||||
const TextCodec &codec) const
|
||||
const TextEncoding &encoding) const
|
||||
{
|
||||
if (Constants::debug)
|
||||
qDebug() << "ClearCasePlugin::showOutputInEditor" << title << id.name()
|
||||
<< "Size= " << output.size() << codec.displayName();
|
||||
<< "Size= " << output.size() << encoding.name();
|
||||
QString s = title;
|
||||
IEditor *editor = EditorManager::openEditorWithContents(id, &s, output.toUtf8());
|
||||
auto e = qobject_cast<ClearCaseEditorWidget*>(editor->widget());
|
||||
@@ -1655,8 +1655,8 @@ IEditor *ClearCasePluginPrivate::showOutputInEditor(const QString& title, const
|
||||
e->textDocument()->setFallbackSaveAsFileName(s);
|
||||
if (!source.isEmpty())
|
||||
e->setSource(source);
|
||||
if (codec.isValid())
|
||||
e->setCodec(codec);
|
||||
if (encoding.isValid())
|
||||
e->setEncoding(encoding);
|
||||
return editor;
|
||||
}
|
||||
|
||||
@@ -2202,7 +2202,7 @@ QString ClearCasePluginPrivate::getFile(const QString &nativeFile, const QString
|
||||
// runs external (GNU) diff, and returns the stdout result
|
||||
QString ClearCasePluginPrivate::diffExternal(QString file1, QString file2, bool keep)
|
||||
{
|
||||
const TextCodec codec = VcsBaseEditor::getCodec(FilePath::fromString(file1));
|
||||
const TextEncoding encoding = VcsBaseEditor::getEncoding(FilePath::fromString(file1));
|
||||
|
||||
// if file2 is empty, we should compare to predecessor
|
||||
if (file2.isEmpty()) {
|
||||
@@ -2234,7 +2234,7 @@ QString ClearCasePluginPrivate::diffExternal(QString file1, QString file2, bool
|
||||
} else {
|
||||
args << file2;
|
||||
}
|
||||
const QString diffResponse = runExtDiff(m_topLevel, args, m_settings.timeOutS, codec);
|
||||
const QString diffResponse = runExtDiff(m_topLevel, args, m_settings.timeOutS, encoding);
|
||||
if (!keep && !tempFile1.isEmpty()) {
|
||||
QFile::remove(tempFile1);
|
||||
QFileInfo(tempFile1).dir().rmpath(QLatin1String("."));
|
||||
@@ -2266,11 +2266,11 @@ void ClearCasePluginPrivate::diffGraphical(const QString &file1, const QString &
|
||||
}
|
||||
|
||||
QString ClearCasePluginPrivate::runExtDiff(const FilePath &workingDir, const QStringList &arguments,
|
||||
int timeOutS, const TextCodec &outputCodec)
|
||||
int timeOutS, const TextEncoding &encoding)
|
||||
{
|
||||
Process process;
|
||||
process.setWorkingDirectory(workingDir);
|
||||
process.setCodec(outputCodec.isValid() ? outputCodec : TextCodec::utf8());
|
||||
process.setEncoding(encoding.isValid() ? encoding : TextEncoding(QStringConverter::Utf8));
|
||||
process.setCommand({"diff", {m_settings.diffArgs.split(' ', Qt::SkipEmptyParts), arguments}});
|
||||
process.runBlocking(seconds(timeOutS), EventLoopMode::On);
|
||||
if (process.result() != ProcessResult::FinishedWithSuccess)
|
||||
|
@@ -138,6 +138,16 @@ void BaseTextDocument::setCodec(const TextCodec &codec)
|
||||
d->m_format.setCodec(codec);
|
||||
}
|
||||
|
||||
void BaseTextDocument::setEncoding(const TextEncoding &encoding)
|
||||
{
|
||||
setCodec(TextCodec::codecForName(encoding));
|
||||
}
|
||||
|
||||
TextEncoding BaseTextDocument::encoding() const
|
||||
{
|
||||
return codec().name();
|
||||
}
|
||||
|
||||
bool BaseTextDocument::supportsCodec(const QByteArray &) const
|
||||
{
|
||||
return true;
|
||||
|
@@ -24,6 +24,8 @@ public:
|
||||
Utils::TextFileFormat format() const;
|
||||
Utils::TextCodec codec() const;
|
||||
void setCodec(const Utils::TextCodec &codec);
|
||||
Utils::TextEncoding encoding() const;
|
||||
void setEncoding(const Utils::TextEncoding &encoding);
|
||||
virtual bool supportsCodec(const QByteArray &) const;
|
||||
void switchUtf8Bom();
|
||||
bool supportsUtf8Bom() const;
|
||||
|
@@ -231,10 +231,10 @@ private:
|
||||
|
||||
bool isCommitEditorOpen() const;
|
||||
Core::IEditor *showOutputInEditor(const QString& title, const QString &output,
|
||||
Id id, const FilePath &source, const TextCodec &codec);
|
||||
Id id, const FilePath &source, const TextEncoding &codec);
|
||||
|
||||
CommandResult runCvs(const FilePath &workingDirectory, const QStringList &arguments,
|
||||
RunFlags flags = RunFlags::None, const TextCodec &outputCodec = {},
|
||||
RunFlags flags = RunFlags::None, const TextEncoding &outputCodec = {},
|
||||
int timeoutMultiplier = 1) const;
|
||||
|
||||
void annotate(const FilePath &workingDir, const QString &file,
|
||||
@@ -950,14 +950,14 @@ void CvsPluginPrivate::filelog(const FilePath &workingDir,
|
||||
const QString &file,
|
||||
bool enableAnnotationContextMenu)
|
||||
{
|
||||
const TextCodec codec = VcsBaseEditor::getCodec(workingDir, QStringList(file));
|
||||
const TextEncoding encoding = VcsBaseEditor::getEncoding(workingDir, QStringList(file));
|
||||
// no need for temp file
|
||||
const QString id = VcsBaseEditor::getTitleId(workingDir, QStringList(file));
|
||||
const FilePath source = VcsBaseEditor::getSource(workingDir, file);
|
||||
QStringList args = {"log"};
|
||||
if (!file.isEmpty())
|
||||
args.append(file);
|
||||
const auto response = runCvs(workingDir, args, RunFlags::None, codec);
|
||||
const auto response = runCvs(workingDir, args, RunFlags::None, encoding);
|
||||
if (response.result() != ProcessResult::FinishedWithSuccess)
|
||||
return;
|
||||
|
||||
@@ -970,7 +970,7 @@ void CvsPluginPrivate::filelog(const FilePath &workingDir,
|
||||
} else {
|
||||
const QString title = QString::fromLatin1("cvs log %1").arg(id);
|
||||
IEditor *newEditor = showOutputInEditor(title, response.cleanedStdOut(),
|
||||
CVS_FILELOG_EDITOR_ID, source, codec);
|
||||
CVS_FILELOG_EDITOR_ID, source, encoding);
|
||||
VcsBaseEditor::tagEditor(newEditor, tag);
|
||||
if (enableAnnotationContextMenu)
|
||||
VcsBaseEditor::getVcsBaseEditor(newEditor)->setFileLogAnnotateEnabled(true);
|
||||
@@ -1086,14 +1086,14 @@ void CvsPluginPrivate::annotate(const FilePath &workingDir, const QString &file,
|
||||
int lineNumber /* = -1 */)
|
||||
{
|
||||
const QStringList files(file);
|
||||
const TextCodec codec = VcsBaseEditor::getCodec(workingDir, files);
|
||||
const TextEncoding encoding = VcsBaseEditor::getEncoding(workingDir, files);
|
||||
const QString id = VcsBaseEditor::getTitleId(workingDir, files, revision);
|
||||
const FilePath source = VcsBaseEditor::getSource(workingDir, file);
|
||||
QStringList args{"annotate"};
|
||||
if (!revision.isEmpty())
|
||||
args << "-r" << revision;
|
||||
args << file;
|
||||
const auto response = runCvs(workingDir, args, RunFlags::None, codec);
|
||||
const auto response = runCvs(workingDir, args, RunFlags::None, encoding);
|
||||
if (response.result() != ProcessResult::FinishedWithSuccess)
|
||||
return;
|
||||
|
||||
@@ -1110,7 +1110,7 @@ void CvsPluginPrivate::annotate(const FilePath &workingDir, const QString &file,
|
||||
} else {
|
||||
const QString title = QString::fromLatin1("cvs annotate %1").arg(id);
|
||||
IEditor *newEditor = showOutputInEditor(title, response.cleanedStdOut(),
|
||||
CVS_ANNOTATION_EDITOR_ID, source, codec);
|
||||
CVS_ANNOTATION_EDITOR_ID, source, encoding);
|
||||
VcsBaseEditor::tagEditor(newEditor, tag);
|
||||
VcsBaseEditor::gotoLineOfEditor(newEditor, lineNumber);
|
||||
}
|
||||
@@ -1241,12 +1241,12 @@ bool CvsPluginPrivate::describe(const FilePath &repositoryPath,
|
||||
{
|
||||
// Collect logs
|
||||
QString output;
|
||||
TextCodec codec;
|
||||
TextEncoding codec;
|
||||
const QList<CvsLogEntry>::iterator lend = entries.end();
|
||||
for (QList<CvsLogEntry>::iterator it = entries.begin(); it != lend; ++it) {
|
||||
// Before fiddling file names, try to find codec
|
||||
if (!codec.isValid())
|
||||
codec = VcsBaseEditor::getCodec(repositoryPath, QStringList(it->file));
|
||||
codec = VcsBaseEditor::getEncoding(repositoryPath, QStringList(it->file));
|
||||
// Run log
|
||||
const QStringList args{"log", "-r", it->revisions.front().revision, it->file};
|
||||
const auto logResponse = runCvs(repositoryPath, args);
|
||||
@@ -1301,7 +1301,7 @@ bool CvsPluginPrivate::describe(const FilePath &repositoryPath,
|
||||
// the working directory (see above).
|
||||
CommandResult CvsPluginPrivate::runCvs(const FilePath &workingDirectory,
|
||||
const QStringList &arguments, RunFlags flags,
|
||||
const TextCodec &outputCodec, int timeoutMultiplier) const
|
||||
const TextEncoding &outputCodec, int timeoutMultiplier) const
|
||||
{
|
||||
const FilePath executable = settings().binaryPath();
|
||||
if (executable.isEmpty())
|
||||
@@ -1315,7 +1315,7 @@ CommandResult CvsPluginPrivate::runCvs(const FilePath &workingDirectory,
|
||||
|
||||
IEditor *CvsPluginPrivate::showOutputInEditor(const QString& title, const QString &output,
|
||||
Utils::Id id, const FilePath &source,
|
||||
const TextCodec &codec)
|
||||
const TextEncoding &encoding)
|
||||
{
|
||||
QString s = title;
|
||||
IEditor *editor = EditorManager::openEditorWithContents(id, &s, output.toUtf8());
|
||||
@@ -1328,8 +1328,8 @@ IEditor *CvsPluginPrivate::showOutputInEditor(const QString& title, const QStrin
|
||||
e->setForceReadOnly(true);
|
||||
if (!source.isEmpty())
|
||||
e->setSource(source);
|
||||
if (codec.isValid())
|
||||
e->setCodec(codec);
|
||||
if (encoding.isValid())
|
||||
e->setEncoding(encoding);
|
||||
return editor;
|
||||
}
|
||||
|
||||
|
@@ -674,7 +674,7 @@ void FossilClient::annotate(const FilePath &workingDir, const QString &file, int
|
||||
const FilePath source = VcsBaseEditor::getSource(workingDir, file);
|
||||
|
||||
VcsBaseEditorWidget *editor = createVcsEditor(kind, title, source,
|
||||
VcsBaseEditor::getCodec(source),
|
||||
VcsBaseEditor::getEncoding(source),
|
||||
vcsCmdString.toLatin1().constData(), id);
|
||||
|
||||
auto fossilEditor = qobject_cast<VcsBaseEditorWidget *>(editor);
|
||||
@@ -790,7 +790,7 @@ void FossilClient::view(const FilePath &source, const QString &id, const QString
|
||||
const QString title = vcsEditorTitle(vcsCommandString(DiffCommand), id);
|
||||
|
||||
VcsBaseEditorWidget *editor = createVcsEditor(kind, title, source,
|
||||
VcsBaseEditor::getCodec(source), "view", id);
|
||||
VcsBaseEditor::getEncoding(source), "view", id);
|
||||
editor->setWorkingDirectory(workingDirectory);
|
||||
|
||||
enqueueJob(createCommand(workingDirectory, editor), args + extraOptions, source);
|
||||
@@ -863,7 +863,7 @@ void FossilClient::log(const FilePath &workingDir, const QStringList &files,
|
||||
const QString title = vcsEditorTitle(vcsCmdString, id);
|
||||
const FilePath source = VcsBaseEditor::getSource(workingDir, files);
|
||||
VcsBaseEditorWidget *editor = createVcsEditor(kind, title, source,
|
||||
VcsBaseEditor::getCodec(source),
|
||||
VcsBaseEditor::getEncoding(source),
|
||||
vcsCmdString.toLatin1().constData(), id);
|
||||
|
||||
auto fossilEditor = qobject_cast<VcsBaseEditorWidget *>(editor);
|
||||
@@ -919,7 +919,7 @@ void FossilClient::logCurrentFile(const FilePath &workingDir, const QStringList
|
||||
const QString title = vcsEditorTitle(vcsCmdString, id);
|
||||
const FilePath source = VcsBaseEditor::getSource(workingDir, files);
|
||||
VcsBaseEditorWidget *editor = createVcsEditor(kind, title, source,
|
||||
VcsBaseEditor::getCodec(source),
|
||||
VcsBaseEditor::getEncoding(source),
|
||||
vcsCmdString.toLatin1().constData(), id);
|
||||
|
||||
auto fossilEditor = qobject_cast<VcsBaseEditorWidget *>(editor);
|
||||
|
@@ -93,7 +93,7 @@ public:
|
||||
|
||||
CommitType commitType;
|
||||
QString amendHash;
|
||||
Utils::TextCodec commitEncoding;
|
||||
Utils::TextEncoding commitEncoding;
|
||||
GitSubmitEditorPanelInfo panelInfo;
|
||||
GitSubmitEditorPanelData panelData;
|
||||
bool enablePush = false;
|
||||
|
@@ -239,7 +239,7 @@ GitDiffEditorController::GitDiffEditorController(IDocument *document,
|
||||
const Storage<QString> diffInputStorage;
|
||||
|
||||
const auto onDiffSetup = [this, leftCommit, rightCommit, extraArgs](Process &process) {
|
||||
process.setCodec(VcsBaseEditor::getCodec(workingDirectory(), {}));
|
||||
process.setEncoding(VcsBaseEditor::getEncoding(workingDirectory(), {}));
|
||||
setupCommand(process, {addConfigurationArguments(diffArgs(leftCommit, rightCommit, extraArgs))});
|
||||
VcsOutputWindow::appendCommand(process.workingDirectory(), process.commandLine());
|
||||
};
|
||||
@@ -305,7 +305,7 @@ FileListDiffController::FileListDiffController(IDocument *document, const QStrin
|
||||
const auto onStagedSetup = [this, stagedFiles](Process &process) {
|
||||
if (stagedFiles.isEmpty())
|
||||
return SetupResult::StopWithError;
|
||||
process.setCodec(VcsBaseEditor::getCodec(workingDirectory(), stagedFiles));
|
||||
process.setEncoding(VcsBaseEditor::getEncoding(workingDirectory(), stagedFiles));
|
||||
setupCommand(process, addConfigurationArguments(
|
||||
QStringList({"diff", "--cached", "--"}) + stagedFiles));
|
||||
VcsOutputWindow::appendCommand(process.workingDirectory(), process.commandLine());
|
||||
@@ -318,7 +318,7 @@ FileListDiffController::FileListDiffController(IDocument *document, const QStrin
|
||||
const auto onUnstagedSetup = [this, unstagedFiles](Process &process) {
|
||||
if (unstagedFiles.isEmpty())
|
||||
return SetupResult::StopWithError;
|
||||
process.setCodec(VcsBaseEditor::getCodec(workingDirectory(), unstagedFiles));
|
||||
process.setEncoding(VcsBaseEditor::getEncoding(workingDirectory(), unstagedFiles));
|
||||
setupCommand(process, addConfigurationArguments(
|
||||
QStringList({"diff", "--"}) + unstagedFiles));
|
||||
VcsOutputWindow::appendCommand(process.workingDirectory(), process.commandLine());
|
||||
@@ -394,7 +394,7 @@ ShowController::ShowController(IDocument *document, const QString &id)
|
||||
};
|
||||
|
||||
const auto onDescriptionSetup = [this, id](Process &process) {
|
||||
process.setCodec(gitClient().encoding(GitClient::EncodingCommit, workingDirectory()));
|
||||
process.setEncoding(gitClient().encoding(GitClient::EncodingCommit, workingDirectory()));
|
||||
const ColorNames colors = GitClient::colorNames();
|
||||
|
||||
const QString showFormat = QStringLiteral(
|
||||
@@ -975,29 +975,29 @@ void GitClient::updateNextModificationInfo()
|
||||
this, command, RunFlags::NoOutput);
|
||||
}
|
||||
|
||||
TextCodec GitClient::defaultCommitEncoding() const
|
||||
TextEncoding GitClient::defaultCommitEncoding() const
|
||||
{
|
||||
// Set default commit encoding to 'UTF-8', when it's not set,
|
||||
// to solve displaying error of commit log with non-latin characters.
|
||||
return TextCodec::utf8();
|
||||
return QStringConverter::Utf8;
|
||||
}
|
||||
|
||||
TextCodec GitClient::encoding(GitClient::EncodingType encodingType, const FilePath &source) const
|
||||
TextEncoding GitClient::encoding(GitClient::EncodingType encodingType, const FilePath &source) const
|
||||
{
|
||||
auto codec = [this](const FilePath &workingDirectory, const QString &configVar) {
|
||||
auto encoding = [this](const FilePath &workingDirectory, const QString &configVar) {
|
||||
const QString codecName = readConfigValue(workingDirectory, configVar).trimmed();
|
||||
if (codecName.isEmpty())
|
||||
return defaultCommitEncoding();
|
||||
return TextCodec::codecForName(codecName.toUtf8());
|
||||
return TextEncoding(codecName.toUtf8());
|
||||
};
|
||||
|
||||
switch (encodingType) {
|
||||
case EncodingSource:
|
||||
return source.isFile() ? VcsBaseEditor::getCodec(source) : codec(source, "gui.encoding");
|
||||
return source.isFile() ? VcsBaseEditor::getEncoding(source) : encoding(source, "gui.encoding");
|
||||
case EncodingLogOutput:
|
||||
return codec(source, "i18n.logOutputEncoding");
|
||||
return encoding(source, "i18n.logOutputEncoding");
|
||||
case EncodingCommit:
|
||||
return codec(source, "i18n.commitEncoding");
|
||||
return encoding(source, "i18n.commitEncoding");
|
||||
default:
|
||||
return {};
|
||||
}
|
||||
@@ -2711,14 +2711,15 @@ Result<CommitData> GitClient::enrichCommitData(const FilePath &repoDirectory,
|
||||
}
|
||||
|
||||
CommitData commitData = commitDataIn;
|
||||
const TextCodec authorCodec = HostOsInfo::isWindowsHost()
|
||||
? TextCodec::utf8()
|
||||
const TextEncoding authorEncoding = HostOsInfo::isWindowsHost()
|
||||
? QStringConverter::Utf8
|
||||
: commitData.commitEncoding;
|
||||
const TextCodec authorCodec = TextCodec::codecForName(authorEncoding);
|
||||
QByteArray stdOut = result.rawStdOut();
|
||||
commitData.amendHash = QLatin1String(shiftLogLine(stdOut));
|
||||
commitData.panelData.author = authorCodec.toUnicode(shiftLogLine(stdOut));
|
||||
commitData.panelData.email = authorCodec.toUnicode(shiftLogLine(stdOut));
|
||||
commitData.commitTemplate = commitData.commitEncoding.toUnicode(stdOut);
|
||||
commitData.commitTemplate = TextCodec::codecForName(commitData.commitEncoding).toUnicode(stdOut);
|
||||
return commitData;
|
||||
}
|
||||
|
||||
@@ -3565,20 +3566,20 @@ QString GitClient::readGitVar(const FilePath &workingDirectory, const QString &c
|
||||
return readOneLine(workingDirectory, {"var", configVar});
|
||||
}
|
||||
|
||||
static TextCodec configFileCodec()
|
||||
static TextEncoding configFileEncoding()
|
||||
{
|
||||
// Git for Windows always uses UTF-8 for configuration:
|
||||
// https://github.com/msysgit/msysgit/wiki/Git-for-Windows-Unicode-Support#convert-config-files
|
||||
static const TextCodec codec =
|
||||
HostOsInfo::isWindowsHost() ? TextCodec::utf8() : TextCodec::codecForLocale();
|
||||
return codec;
|
||||
static const TextEncoding encoding =
|
||||
HostOsInfo::isWindowsHost() ? QStringConverter::Utf8 : TextCodec::encodingForLocale();
|
||||
return encoding;
|
||||
}
|
||||
|
||||
QString GitClient::readOneLine(const FilePath &workingDirectory, const QStringList &arguments) const
|
||||
{
|
||||
const CommandResult result = vcsSynchronousExec(workingDirectory, arguments,
|
||||
RunFlags::NoOutput, vcsTimeoutS(),
|
||||
configFileCodec());
|
||||
configFileEncoding());
|
||||
if (result.result() == ProcessResult::FinishedWithSuccess)
|
||||
return result.cleanedStdOut().trimmed();
|
||||
return {};
|
||||
@@ -3588,7 +3589,7 @@ void GitClient::readConfigAsync(const FilePath &workingDirectory, const QStringL
|
||||
const CommandHandler &handler) const
|
||||
{
|
||||
vcsExecWithHandler(workingDirectory, arguments, this, handler, RunFlags::NoOutput,
|
||||
configFileCodec());
|
||||
configFileEncoding());
|
||||
}
|
||||
|
||||
QString GitClient::styleColorName(TextEditor::TextStyle style)
|
||||
|
@@ -362,9 +362,9 @@ public:
|
||||
Author parseAuthor(const QString &authorInfo);
|
||||
Author getAuthor(const Utils::FilePath &workingDirectory);
|
||||
|
||||
Utils::TextCodec defaultCommitEncoding() const;
|
||||
Utils::TextEncoding defaultCommitEncoding() const;
|
||||
enum EncodingType { EncodingSource, EncodingLogOutput, EncodingCommit, EncodingDefault };
|
||||
Utils::TextCodec encoding(EncodingType encodingType, const Utils::FilePath &source = {}) const;
|
||||
Utils::TextEncoding encoding(EncodingType encodingType, const Utils::FilePath &source = {}) const;
|
||||
|
||||
void readConfigAsync(const Utils::FilePath &workingDirectory, const QStringList &arguments,
|
||||
const VcsBase::CommandHandler &handler) const;
|
||||
|
@@ -265,7 +265,7 @@ void GitEditorWidget::aboutToOpen(const FilePath &filePath, const FilePath &real
|
||||
|| editorId == Git::Constants::GIT_REBASE_EDITOR_ID) {
|
||||
const FilePath gitPath = filePath.absolutePath();
|
||||
setSource(gitPath);
|
||||
textDocument()->setCodec(gitClient().encoding(GitClient::EncodingCommit, gitPath));
|
||||
textDocument()->setCodec(TextCodec::codecForName(gitClient().encoding(GitClient::EncodingCommit, gitPath)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -330,7 +330,7 @@ QByteArray GitSubmitEditor::fileContents() const
|
||||
// Do the encoding convert, When use user-defined encoding
|
||||
// e.g. git config --global i18n.commitencoding utf-8
|
||||
if (m_commitEncoding.isValid())
|
||||
return m_commitEncoding.fromUnicode(text);
|
||||
return TextCodec::codecForName(m_commitEncoding).fromUnicode(text);
|
||||
|
||||
// Using utf-8 as the default encoding
|
||||
return text.toUtf8();
|
||||
|
@@ -48,7 +48,7 @@ private:
|
||||
inline const GitSubmitEditorWidget *submitEditorWidget() const;
|
||||
|
||||
VcsBase::SubmitFileModel *m_model = nullptr;
|
||||
Utils::TextCodec m_commitEncoding;
|
||||
Utils::TextEncoding m_commitEncoding;
|
||||
CommitType m_commitType = SimpleCommit;
|
||||
QString m_amenHash;
|
||||
Utils::FilePath m_workingDirectory;
|
||||
|
@@ -211,7 +211,7 @@ void BlameMark::addNewLine(const QString &newLine)
|
||||
|
||||
InstantBlame::InstantBlame()
|
||||
{
|
||||
m_codec = gitClient().defaultCommitEncoding();
|
||||
m_encoding = gitClient().defaultCommitEncoding();
|
||||
m_cursorPositionChangedTimer = new QTimer(this);
|
||||
m_cursorPositionChangedTimer->setSingleShot(true);
|
||||
connect(m_cursorPositionChangedTimer, &QTimer::timeout, this, &InstantBlame::perform);
|
||||
@@ -460,7 +460,7 @@ void InstantBlame::perform()
|
||||
|
||||
qCDebug(log) << "Running git" << lineDiffOptions.join(' ');
|
||||
gitClient().vcsExecWithHandler(topLevel, lineDiffOptions, this,
|
||||
lineDiffHandler, RunFlags::NoOutput, m_codec);
|
||||
lineDiffHandler, RunFlags::NoOutput, m_encoding);
|
||||
};
|
||||
QStringList options = {"blame", "-p"};
|
||||
if (settings().instantBlameIgnoreSpaceChanges())
|
||||
@@ -470,7 +470,7 @@ void InstantBlame::perform()
|
||||
options.append({"-L", lineString, "--", filePath.toUrlishString()});
|
||||
qCDebug(log) << "Running git" << options.join(' ');
|
||||
gitClient().vcsExecWithHandler(workingDirectory, options, this,
|
||||
commandHandler, RunFlags::NoOutput, m_codec);
|
||||
commandHandler, RunFlags::NoOutput, m_encoding);
|
||||
}
|
||||
|
||||
void InstantBlame::stop()
|
||||
@@ -494,18 +494,18 @@ bool InstantBlame::refreshWorkingDirectory(const FilePath &workingDirectory)
|
||||
m_workingDirectory = workingDirectory;
|
||||
|
||||
const auto commitCodecHandler = [this, workingDirectory](const CommandResult &result) {
|
||||
TextCodec codec;
|
||||
TextEncoding encoding;
|
||||
|
||||
if (result.result() == ProcessResult::FinishedWithSuccess) {
|
||||
const QString codecName = result.cleanedStdOut().trimmed();
|
||||
codec = TextCodec::codecForName(codecName.toUtf8());
|
||||
encoding = codecName.toUtf8();
|
||||
} else {
|
||||
codec = gitClient().defaultCommitEncoding();
|
||||
encoding = gitClient().defaultCommitEncoding();
|
||||
}
|
||||
|
||||
if (m_codec != codec) {
|
||||
qCInfo(log) << "Setting new text codec:" << codec.displayName();
|
||||
m_codec = codec;
|
||||
if (m_encoding != encoding) {
|
||||
qCInfo(log) << "Setting new text codec:" << encoding.name();
|
||||
m_encoding = encoding;
|
||||
force();
|
||||
}
|
||||
};
|
||||
|
@@ -64,7 +64,7 @@ private:
|
||||
void slotDocumentChanged();
|
||||
|
||||
Utils::FilePath m_workingDirectory;
|
||||
Utils::TextCodec m_codec;
|
||||
Utils::TextEncoding m_encoding;
|
||||
Author m_author;
|
||||
int m_lastVisitedEditorLine = -1;
|
||||
Core::IDocument *m_document = nullptr;
|
||||
|
@@ -205,7 +205,7 @@ void MercurialClient::incoming(const FilePath &repositoryRoot, const QString &re
|
||||
const QString title = Tr::tr("Hg incoming %1").arg(id);
|
||||
|
||||
VcsBaseEditorWidget *editor = createVcsEditor(Constants::DIFFLOG_ID, title, repositoryRoot,
|
||||
VcsBaseEditor::getCodec(repositoryRoot),
|
||||
VcsBaseEditor::getEncoding(repositoryRoot),
|
||||
"incoming", id);
|
||||
enqueueJob(createCommand(FilePath::fromString(repository), editor), args, repositoryRoot);
|
||||
}
|
||||
@@ -218,7 +218,7 @@ void MercurialClient::outgoing(const FilePath &repositoryRoot)
|
||||
const QString title = Tr::tr("Hg outgoing %1").arg(repositoryRoot.toUserOutput());
|
||||
|
||||
VcsBaseEditorWidget *editor = createVcsEditor(Constants::DIFFLOG_ID, title, repositoryRoot,
|
||||
VcsBaseEditor::getCodec(repositoryRoot),
|
||||
VcsBaseEditor::getEncoding(repositoryRoot),
|
||||
"outgoing", repositoryRoot.toUrlishString());
|
||||
enqueueJob(createCommand(repositoryRoot, editor), args, repositoryRoot);
|
||||
}
|
||||
|
@@ -238,7 +238,7 @@ public:
|
||||
|
||||
IEditor *showOutputInEditor(const QString &title, const QString &output,
|
||||
Id id, const FilePath &source,
|
||||
const TextCodec &codec = {});
|
||||
const TextEncoding &encoding = {});
|
||||
|
||||
// args are passed as command line arguments
|
||||
// extra args via a tempfile and the option -x "temp-filename"
|
||||
@@ -247,13 +247,13 @@ public:
|
||||
unsigned flags = CommandToWindow|StdErrToWindow|ErrorToWindow,
|
||||
const QStringList &extraArgs = {},
|
||||
const QByteArray &stdInput = {},
|
||||
const Utils::TextCodec &outputCodec = {}) const;
|
||||
const Utils::TextEncoding &encoding = {}) const;
|
||||
|
||||
PerforceResponse synchronousProcess(const FilePath &workingDir,
|
||||
const QStringList &args,
|
||||
unsigned flags,
|
||||
const QByteArray &stdInput,
|
||||
const Utils::TextCodec &outputCodec) const;
|
||||
const Utils::TextEncoding &encoding) const;
|
||||
|
||||
void annotate(const FilePath &workingDir, const QString &fileName,
|
||||
const QString &changeList = QString(), int lineNumber = -1);
|
||||
@@ -547,12 +547,12 @@ void PerforcePluginPrivate::revertCurrentFile()
|
||||
const VcsBasePluginState state = currentState();
|
||||
QTC_ASSERT(state.hasFile(), return);
|
||||
|
||||
const TextCodec codec = VcsBaseEditor::getCodec(state.currentFile());
|
||||
const TextEncoding encoding = VcsBaseEditor::getEncoding(state.currentFile());
|
||||
QStringList args;
|
||||
args << QLatin1String("diff") << QLatin1String("-sa") << state.relativeCurrentFile();
|
||||
PerforceResponse result = runP4Cmd(state.currentFileTopLevel(), args,
|
||||
RunFullySynchronous|CommandToWindow|StdErrToWindow|ErrorToWindow,
|
||||
{}, {}, codec);
|
||||
{}, {}, encoding);
|
||||
if (result.error)
|
||||
return;
|
||||
// "foo.cpp - file(s) not opened on this client."
|
||||
@@ -796,7 +796,7 @@ void PerforcePluginPrivate::annotate(const FilePath &workingDir,
|
||||
int lineNumber /* = -1 */)
|
||||
{
|
||||
const QStringList files = QStringList(fileName);
|
||||
const TextCodec codec = VcsBaseEditor::getCodec(workingDir, files);
|
||||
const TextEncoding encoding = VcsBaseEditor::getEncoding(workingDir, files);
|
||||
const QString id = VcsBaseEditor::getTitleId(workingDir, files, changeList);
|
||||
const FilePath source = VcsBaseEditor::getSource(workingDir, files);
|
||||
QStringList args;
|
||||
@@ -807,13 +807,13 @@ void PerforcePluginPrivate::annotate(const FilePath &workingDir,
|
||||
args << (fileName + QLatin1Char('@') + changeList);
|
||||
const PerforceResponse result = runP4Cmd(workingDir, args,
|
||||
CommandToWindow|StdErrToWindow|ErrorToWindow,
|
||||
{}, {}, codec);
|
||||
{}, {}, encoding);
|
||||
if (!result.error) {
|
||||
if (lineNumber < 1)
|
||||
lineNumber = VcsBaseEditor::lineNumberOfCurrentEditor();
|
||||
IEditor *ed = showOutputInEditor(Tr::tr("p4 annotate %1").arg(id),
|
||||
result.stdOut, PERFORCE_ANNOTATION_EDITOR_ID,
|
||||
source, codec);
|
||||
source, encoding);
|
||||
VcsBaseEditor::gotoLineOfEditor(ed, lineNumber);
|
||||
}
|
||||
}
|
||||
@@ -850,7 +850,7 @@ void PerforcePluginPrivate::filelog(const FilePath &workingDir, const QString &f
|
||||
bool enableAnnotationContextMenu)
|
||||
{
|
||||
const QString id = VcsBaseEditor::getTitleId(workingDir, QStringList(fileName));
|
||||
const TextCodec codec = VcsBaseEditor::getCodec(workingDir, QStringList(fileName));
|
||||
const TextEncoding encoding = VcsBaseEditor::getEncoding(workingDir, QStringList(fileName));
|
||||
QStringList args;
|
||||
args << QLatin1String("filelog") << QLatin1String("-li");
|
||||
if (settings().logCount() > 0)
|
||||
@@ -859,11 +859,11 @@ void PerforcePluginPrivate::filelog(const FilePath &workingDir, const QString &f
|
||||
args.append(fileName);
|
||||
const PerforceResponse result = runP4Cmd(workingDir, args,
|
||||
CommandToWindow|StdErrToWindow|ErrorToWindow,
|
||||
{}, {}, codec);
|
||||
{}, {}, encoding);
|
||||
if (!result.error) {
|
||||
const FilePath source = VcsBaseEditor::getSource(workingDir, fileName);
|
||||
IEditor *editor = showOutputInEditor(Tr::tr("p4 filelog %1").arg(id), result.stdOut,
|
||||
PERFORCE_LOG_EDITOR_ID, source, codec);
|
||||
PERFORCE_LOG_EDITOR_ID, source, encoding);
|
||||
if (enableAnnotationContextMenu)
|
||||
VcsBaseEditor::getVcsBaseEditor(editor)->setFileLogAnnotateEnabled(true);
|
||||
}
|
||||
@@ -872,7 +872,7 @@ void PerforcePluginPrivate::filelog(const FilePath &workingDir, const QString &f
|
||||
void PerforcePluginPrivate::changelists(const FilePath &workingDir, const QString &fileName)
|
||||
{
|
||||
const QString id = VcsBaseEditor::getTitleId(workingDir, QStringList(fileName));
|
||||
const TextCodec codec = VcsBaseEditor::getCodec(workingDir, QStringList(fileName));
|
||||
const TextEncoding encoding = VcsBaseEditor::getEncoding(workingDir, QStringList(fileName));
|
||||
QStringList args;
|
||||
args << QLatin1String("changelists") << QLatin1String("-lit");
|
||||
if (settings().logCount() > 0)
|
||||
@@ -881,11 +881,11 @@ void PerforcePluginPrivate::changelists(const FilePath &workingDir, const QStrin
|
||||
args.append(fileName);
|
||||
const PerforceResponse result = runP4Cmd(workingDir, args,
|
||||
CommandToWindow|StdErrToWindow|ErrorToWindow,
|
||||
{}, {}, codec);
|
||||
{}, {}, encoding);
|
||||
if (!result.error) {
|
||||
const FilePath source = VcsBaseEditor::getSource(workingDir, fileName);
|
||||
IEditor *editor = showOutputInEditor(Tr::tr("p4 changelists %1").arg(id), result.stdOut,
|
||||
PERFORCE_LOG_EDITOR_ID, source, codec);
|
||||
PERFORCE_LOG_EDITOR_ID, source, encoding);
|
||||
VcsBaseEditor::gotoLineOfEditor(editor, 1);
|
||||
}
|
||||
}
|
||||
@@ -1161,14 +1161,14 @@ PerforceResponse PerforcePluginPrivate::synchronousProcess(const FilePath &worki
|
||||
const QStringList &args,
|
||||
unsigned flags,
|
||||
const QByteArray &stdInput,
|
||||
const TextCodec &outputCodec) const
|
||||
const TextEncoding &encoding) const
|
||||
{
|
||||
// Run, connect stderr to the output window
|
||||
Process process;
|
||||
process.setWriteData(stdInput);
|
||||
const int timeOutS = (flags & LongTimeOut) ? settings().longTimeOutS() : settings().timeOutS();
|
||||
if (outputCodec.isValid())
|
||||
process.setCodec(outputCodec);
|
||||
if (encoding.isValid())
|
||||
process.setEncoding(encoding);
|
||||
if (flags & OverrideDiffEnvironment)
|
||||
process.setEnvironment(overrideDiffEnvironmentVariable());
|
||||
if (!workingDir.isEmpty())
|
||||
@@ -1209,7 +1209,7 @@ PerforceResponse PerforcePluginPrivate::runP4Cmd(const FilePath &workingDir,
|
||||
unsigned flags,
|
||||
const QStringList &extraArgs,
|
||||
const QByteArray &stdInput,
|
||||
const TextCodec &outputCodec) const
|
||||
const TextEncoding &encoding) const
|
||||
{
|
||||
if (!settings().isValid()) {
|
||||
VcsOutputWindow::appendError(Tr::tr("Perforce is not correctly configured."));
|
||||
@@ -1232,7 +1232,7 @@ PerforceResponse PerforcePluginPrivate::runP4Cmd(const FilePath &workingDir,
|
||||
QGuiApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
|
||||
|
||||
const PerforceResponse response
|
||||
= synchronousProcess(workingDir, actualArgs, flags, stdInput, outputCodec);
|
||||
= synchronousProcess(workingDir, actualArgs, flags, stdInput, encoding);
|
||||
|
||||
if (flags & ShowBusyCursor)
|
||||
QGuiApplication::restoreOverrideCursor();
|
||||
@@ -1243,7 +1243,7 @@ IEditor *PerforcePluginPrivate::showOutputInEditor(const QString &title,
|
||||
const QString &output,
|
||||
Id id,
|
||||
const FilePath &source,
|
||||
const TextCodec &codec)
|
||||
const TextEncoding &encoding)
|
||||
{
|
||||
QString s = title;
|
||||
QString content = output;
|
||||
@@ -1263,8 +1263,8 @@ IEditor *PerforcePluginPrivate::showOutputInEditor(const QString &title,
|
||||
e->setSource(source);
|
||||
s.replace(QLatin1Char(' '), QLatin1Char('_'));
|
||||
e->textDocument()->setFallbackSaveAsFileName(s);
|
||||
if (codec.isValid())
|
||||
e->setCodec(codec);
|
||||
if (encoding.isValid())
|
||||
e->setEncoding(encoding);
|
||||
return editor;
|
||||
}
|
||||
|
||||
@@ -1337,7 +1337,7 @@ void PerforcePluginPrivate::p4Diff(const FilePath &workingDir, const QStringList
|
||||
|
||||
void PerforcePluginPrivate::p4Diff(const PerforceDiffParameters &p)
|
||||
{
|
||||
const TextCodec codec = VcsBaseEditor::getCodec(p.workingDir, p.files);
|
||||
const TextEncoding encoding = VcsBaseEditor::getEncoding(p.workingDir, p.files);
|
||||
const QString id = VcsBaseEditor::getTitleId(p.workingDir, p.files);
|
||||
// Reuse existing editors for that id
|
||||
const QString tag = VcsBaseEditor::editorTag(DiffOutput, p.workingDir, p.files);
|
||||
@@ -1353,7 +1353,7 @@ void PerforcePluginPrivate::p4Diff(const PerforceDiffParameters &p)
|
||||
else
|
||||
args.append(p.files);
|
||||
const unsigned flags = CommandToWindow|StdErrToWindow|ErrorToWindow|OverrideDiffEnvironment;
|
||||
const PerforceResponse result = runP4Cmd(p.workingDir, args, flags, extraArgs, {}, codec);
|
||||
const PerforceResponse result = runP4Cmd(p.workingDir, args, flags, extraArgs, {}, encoding);
|
||||
if (result.error)
|
||||
return;
|
||||
|
||||
@@ -1366,7 +1366,7 @@ void PerforcePluginPrivate::p4Diff(const PerforceDiffParameters &p)
|
||||
IEditor *editor = showOutputInEditor(Tr::tr("p4 diff %1").arg(id), result.stdOut,
|
||||
PERFORCE_DIFF_EDITOR_ID,
|
||||
VcsBaseEditor::getSource(p.workingDir, p.files),
|
||||
codec);
|
||||
encoding);
|
||||
VcsBaseEditor::tagEditor(editor, tag);
|
||||
auto diffEditorWidget = qobject_cast<VcsBaseEditorWidget *>(editor->widget());
|
||||
// Wire up the parameter widget to trigger a re-run on
|
||||
@@ -1381,13 +1381,13 @@ void PerforcePluginPrivate::p4Diff(const PerforceDiffParameters &p)
|
||||
|
||||
void PerforcePluginPrivate::vcsDescribe(const FilePath &source, const QString &n)
|
||||
{
|
||||
const TextCodec codec = source.isEmpty() ? TextCodec() : VcsBaseEditor::getCodec(source);
|
||||
const TextEncoding encoding = source.isEmpty() ? TextEncoding() : VcsBaseEditor::getEncoding(source);
|
||||
QStringList args;
|
||||
args << QLatin1String("describe") << QLatin1String("-du") << n;
|
||||
const PerforceResponse result = runP4Cmd(settings().topLevel(), args, CommandToWindow|StdErrToWindow|ErrorToWindow,
|
||||
{}, {}, codec);
|
||||
{}, {}, encoding);
|
||||
if (!result.error)
|
||||
showOutputInEditor(Tr::tr("p4 describe %1").arg(n), result.stdOut, PERFORCE_DIFF_EDITOR_ID, source, codec);
|
||||
showOutputInEditor(Tr::tr("p4 describe %1").arg(n), result.stdOut, PERFORCE_DIFF_EDITOR_ID, source, encoding);
|
||||
}
|
||||
|
||||
void PerforcePluginPrivate::cleanCommitMessageFile()
|
||||
|
@@ -165,7 +165,7 @@ public:
|
||||
QString monitorFile(const FilePath &repository) const;
|
||||
QString synchronousTopic(const FilePath &repository) const;
|
||||
CommandResult runSvn(const FilePath &workingDir, const CommandLine &command,
|
||||
RunFlags flags = RunFlags::None, const TextCodec &outputCodec = {},
|
||||
RunFlags flags = RunFlags::None, const TextEncoding &encoding = {},
|
||||
int timeoutMutiplier = 1) const;
|
||||
void vcsAnnotateHelper(const FilePath &workingDir, const QString &file,
|
||||
const QString &revision = {}, int lineNumber = -1);
|
||||
@@ -200,7 +200,7 @@ private:
|
||||
inline bool isCommitEditorOpen() const;
|
||||
Core::IEditor *showOutputInEditor(const QString &title, const QString &output,
|
||||
Id id, const FilePath &source,
|
||||
const TextCodec &codec);
|
||||
const TextEncoding &encoding);
|
||||
|
||||
void filelog(const FilePath &workingDir,
|
||||
const QString &file = {},
|
||||
@@ -813,7 +813,7 @@ void SubversionPluginPrivate::vcsAnnotateHelper(const FilePath &workingDir, cons
|
||||
int lineNumber /* = -1 */)
|
||||
{
|
||||
const FilePath source = VcsBaseEditor::getSource(workingDir, file);
|
||||
const TextCodec codec = VcsBaseEditor::getCodec(source);
|
||||
const TextEncoding encoding = VcsBaseEditor::getEncoding(source);
|
||||
|
||||
CommandLine args{settings().binaryPath(), {"annotate"}};
|
||||
args << SubversionClient::AddAuthOptions();
|
||||
@@ -823,7 +823,7 @@ void SubversionPluginPrivate::vcsAnnotateHelper(const FilePath &workingDir, cons
|
||||
args << "-r" << revision;
|
||||
args << "-v" << QDir::toNativeSeparators(SubversionClient::escapeFile(file));
|
||||
|
||||
const auto response = runSvn(workingDir, args, RunFlags::ForceCLocale, codec);
|
||||
const auto response = runSvn(workingDir, args, RunFlags::ForceCLocale, encoding);
|
||||
if (response.result() != ProcessResult::FinishedWithSuccess)
|
||||
return;
|
||||
|
||||
@@ -842,7 +842,7 @@ void SubversionPluginPrivate::vcsAnnotateHelper(const FilePath &workingDir, cons
|
||||
} else {
|
||||
const QString title = QString::fromLatin1("svn annotate %1").arg(id);
|
||||
IEditor *newEditor = showOutputInEditor(title, response.cleanedStdOut(),
|
||||
Constants::SUBVERSION_BLAME_EDITOR_ID, source, codec);
|
||||
Constants::SUBVERSION_BLAME_EDITOR_ID, source, encoding);
|
||||
VcsBaseEditor::tagEditor(newEditor, tag);
|
||||
VcsBaseEditor::gotoLineOfEditor(newEditor, lineNumber);
|
||||
}
|
||||
@@ -897,22 +897,22 @@ void SubversionPluginPrivate::slotDescribe()
|
||||
|
||||
CommandResult SubversionPluginPrivate::runSvn(const FilePath &workingDir,
|
||||
const CommandLine &command, RunFlags flags,
|
||||
const TextCodec &outputCodec, int timeoutMutiplier) const
|
||||
const TextEncoding &encoding, int timeoutMutiplier) const
|
||||
{
|
||||
if (settings().binaryPath().isEmpty())
|
||||
return CommandResult(ProcessResult::StartFailed, Tr::tr("No subversion executable specified."));
|
||||
|
||||
const int timeoutS = settings().timeout() * timeoutMutiplier;
|
||||
return subversionClient().vcsSynchronousExec(workingDir, command, flags, timeoutS, outputCodec);
|
||||
return subversionClient().vcsSynchronousExec(workingDir, command, flags, timeoutS, encoding);
|
||||
}
|
||||
|
||||
IEditor *SubversionPluginPrivate::showOutputInEditor(const QString &title, const QString &output,
|
||||
Id id, const FilePath &source,
|
||||
const TextCodec &codec)
|
||||
const TextEncoding &encoding)
|
||||
{
|
||||
if (Subversion::Constants::debug)
|
||||
qDebug() << "SubversionPlugin::showOutputInEditor" << title << id.toString()
|
||||
<< "Size= " << output.size() << " Type=" << id << codec.displayName();
|
||||
<< "Size= " << output.size() << " Type=" << id << encoding.name();
|
||||
QString s = title;
|
||||
IEditor *editor = EditorManager::openEditorWithContents(id, &s, output.toUtf8());
|
||||
auto e = qobject_cast<SubversionEditorWidget*>(editor->widget());
|
||||
@@ -925,8 +925,8 @@ IEditor *SubversionPluginPrivate::showOutputInEditor(const QString &title, const
|
||||
e->textDocument()->setFallbackSaveAsFileName(s);
|
||||
if (!source.isEmpty())
|
||||
e->setSource(source);
|
||||
if (codec.isValid())
|
||||
e->setCodec(codec);
|
||||
if (encoding.isValid())
|
||||
e->setEncoding(encoding);
|
||||
return editor;
|
||||
}
|
||||
|
||||
|
@@ -130,23 +130,23 @@ QString VcsBaseClientImpl::stripLastNewline(const QString &in)
|
||||
|
||||
CommandResult VcsBaseClientImpl::vcsSynchronousExec(const FilePath &workingDir,
|
||||
const QStringList &args, RunFlags flags,
|
||||
int timeoutS, const TextCodec &codec) const
|
||||
int timeoutS, const TextEncoding &encoding) const
|
||||
{
|
||||
return vcsSynchronousExec(workingDir, {vcsBinary(workingDir), args}, flags, timeoutS, codec);
|
||||
return vcsSynchronousExec(workingDir, {vcsBinary(workingDir), args}, flags, timeoutS, encoding);
|
||||
}
|
||||
|
||||
CommandResult VcsBaseClientImpl::vcsSynchronousExec(const FilePath &workingDir,
|
||||
const CommandLine &cmdLine,
|
||||
RunFlags flags,
|
||||
int timeoutS,
|
||||
const TextCodec &codec) const
|
||||
const TextEncoding &encoding) const
|
||||
{
|
||||
return VcsCommand::runBlocking(workingDir,
|
||||
processEnvironment(workingDir),
|
||||
cmdLine,
|
||||
flags,
|
||||
timeoutS > 0 ? timeoutS : vcsTimeoutS(),
|
||||
codec);
|
||||
encoding);
|
||||
}
|
||||
|
||||
void VcsBaseClientImpl::resetCachedVcsInfo(const FilePath &workingDir)
|
||||
@@ -171,11 +171,11 @@ void VcsBaseClientImpl::vcsExecWithHandler(const FilePath &workingDirectory,
|
||||
const QStringList &arguments,
|
||||
const QObject *context,
|
||||
const CommandHandler &handler,
|
||||
RunFlags additionalFlags, const TextCodec codec) const
|
||||
RunFlags additionalFlags, const TextEncoding &encoding) const
|
||||
{
|
||||
VcsCommand *command = createCommand(workingDirectory);
|
||||
command->addFlags(additionalFlags);
|
||||
command->setCodec(codec);
|
||||
command->setEncoding(encoding);
|
||||
command->addJob({vcsBinary(workingDirectory), arguments}, vcsTimeoutS());
|
||||
if (handler) {
|
||||
const QObject *actualContext = context ? context : this;
|
||||
@@ -201,7 +201,7 @@ void VcsBaseClientImpl::vcsExecWithEditor(const Utils::FilePath &workingDirector
|
||||
VcsBaseEditorWidget *editor) const
|
||||
{
|
||||
VcsCommand *command = createCommand(workingDirectory, editor);
|
||||
command->setCodec(editor->codec());
|
||||
command->setEncoding(editor->encoding().name());
|
||||
command->addJob({vcsBinary(workingDirectory), arguments}, vcsTimeoutS());
|
||||
command->start();
|
||||
}
|
||||
@@ -221,7 +221,7 @@ VcsCommand *VcsBaseClientImpl::createVcsCommand(const FilePath &defaultWorkingDi
|
||||
|
||||
VcsBaseEditorWidget *VcsBaseClientImpl::createVcsEditor(Id kind, QString title,
|
||||
const FilePath &source,
|
||||
const TextCodec &codec,
|
||||
const TextEncoding &encoding,
|
||||
const char *registerDynamicProperty,
|
||||
const QString &dynamicPropertyValue) const
|
||||
{
|
||||
@@ -243,8 +243,8 @@ VcsBaseEditorWidget *VcsBaseClientImpl::createVcsEditor(Id kind, QString title,
|
||||
this, &VcsBaseClientImpl::annotateRevisionRequested);
|
||||
baseEditor->setSource(source);
|
||||
baseEditor->setDefaultLineNumber(1);
|
||||
if (codec.isValid())
|
||||
baseEditor->setCodec(codec);
|
||||
if (encoding.isValid())
|
||||
baseEditor->setEncoding(encoding);
|
||||
}
|
||||
|
||||
baseEditor->setForceReadOnly(true);
|
||||
@@ -344,7 +344,7 @@ void VcsBaseClient::annotate(const Utils::FilePath &workingDir, const QString &f
|
||||
const FilePath source = VcsBaseEditor::getSource(workingDir, file);
|
||||
|
||||
VcsBaseEditorWidget *editor = createVcsEditor(kind, title, source,
|
||||
VcsBaseEditor::getCodec(source),
|
||||
VcsBaseEditor::getEncoding(source),
|
||||
vcsCmdString.toLatin1().constData(), id);
|
||||
|
||||
VcsCommand *cmd = createCommand(workingDir, editor);
|
||||
@@ -360,7 +360,7 @@ void VcsBaseClient::diff(const FilePath &workingDir, const QStringList &files)
|
||||
const QString title = vcsEditorTitle(vcsCmdString, id);
|
||||
const FilePath source = VcsBaseEditor::getSource(workingDir, files);
|
||||
VcsBaseEditorWidget *editor = createVcsEditor(kind, title, source,
|
||||
VcsBaseEditor::getCodec(source),
|
||||
VcsBaseEditor::getEncoding(source),
|
||||
vcsCmdString.toLatin1().constData(), id);
|
||||
editor->setWorkingDirectory(workingDir);
|
||||
|
||||
@@ -383,7 +383,7 @@ void VcsBaseClient::diff(const FilePath &workingDir, const QStringList &files)
|
||||
args << editorConfig->arguments();
|
||||
args << files;
|
||||
VcsCommand *command = createCommand(workingDir, editor);
|
||||
command->setCodec(source.isEmpty() ? TextCodec() : VcsBaseEditor::getCodec(source));
|
||||
command->setEncoding(source.isEmpty() ? TextEncoding() : VcsBaseEditor::getEncoding(source));
|
||||
enqueueJob(command, args, workingDir, exitCodeInterpreter(DiffCommand));
|
||||
}
|
||||
|
||||
@@ -399,7 +399,7 @@ void VcsBaseClient::log(const FilePath &workingDir,
|
||||
const QString title = vcsEditorTitle(vcsCmdString, id);
|
||||
const FilePath source = VcsBaseEditor::getSource(workingDir, files);
|
||||
VcsBaseEditorWidget *editor = createVcsEditor(kind, title, source,
|
||||
VcsBaseEditor::getCodec(source),
|
||||
VcsBaseEditor::getEncoding(source),
|
||||
vcsCmdString.toLatin1().constData(), id);
|
||||
editor->setFileLogAnnotateEnabled(enableAnnotationContextMenu);
|
||||
|
||||
@@ -535,7 +535,7 @@ void VcsBaseClient::view(const FilePath &source,
|
||||
const QString title = vcsEditorTitle(vcsCommandString(LogCommand), id);
|
||||
|
||||
VcsBaseEditorWidget *editor = createVcsEditor(kind, title, source,
|
||||
VcsBaseEditor::getCodec(source), "view", id);
|
||||
VcsBaseEditor::getEncoding(source), "view", id);
|
||||
|
||||
const FilePath workingDirPath = source.isFile() ? source.absolutePath() : source;
|
||||
enqueueJob(createCommand(workingDirPath, editor), args, source);
|
||||
|
@@ -47,7 +47,7 @@ public:
|
||||
|
||||
VcsBaseEditorWidget *createVcsEditor(Utils::Id kind, QString title,
|
||||
const Utils::FilePath &source,
|
||||
const Utils::TextCodec &codec,
|
||||
const Utils::TextEncoding &encoding,
|
||||
const char *registerDynamicProperty,
|
||||
const QString &dynamicPropertyValue) const;
|
||||
|
||||
@@ -77,18 +77,18 @@ public:
|
||||
// Fully synchronous VCS execution (QProcess-based)
|
||||
CommandResult vcsSynchronousExec(const Utils::FilePath &workingDir,
|
||||
const QStringList &args, RunFlags flags = RunFlags::None,
|
||||
int timeoutS = -1, const Utils::TextCodec &codec = {}) const;
|
||||
int timeoutS = -1, const Utils::TextEncoding &encoding = {}) const;
|
||||
CommandResult vcsSynchronousExec(const Utils::FilePath &workingDir,
|
||||
const Utils::CommandLine &cmdLine,
|
||||
RunFlags flags = RunFlags::None,
|
||||
int timeoutS = -1, const Utils::TextCodec &codec = {}) const;
|
||||
int timeoutS = -1, const Utils::TextEncoding &encoding = {}) const;
|
||||
|
||||
void vcsExecWithHandler(const Utils::FilePath &workingDirectory,
|
||||
const QStringList &arguments,
|
||||
const QObject *context,
|
||||
const CommandHandler &handler,
|
||||
RunFlags additionalFlags = RunFlags::None,
|
||||
const Utils::TextCodec codec = {}) const;
|
||||
const Utils::TextEncoding &encoding = {}) const;
|
||||
void vcsExec(const Utils::FilePath &workingDirectory,
|
||||
const QStringList &arguments,
|
||||
RunFlags additionalFlags = RunFlags::None) const;
|
||||
|
@@ -832,17 +832,17 @@ void VcsBaseEditorWidget::setWorkingDirectory(const FilePath &wd)
|
||||
d->m_workingDirectory = wd;
|
||||
}
|
||||
|
||||
TextCodec VcsBaseEditorWidget::codec() const
|
||||
TextEncoding VcsBaseEditorWidget::encoding() const
|
||||
{
|
||||
return textDocument()->codec();
|
||||
return textDocument()->encoding();
|
||||
}
|
||||
|
||||
void VcsBaseEditorWidget::setCodec(const TextCodec &codec)
|
||||
void VcsBaseEditorWidget::setEncoding(const TextEncoding &encoding)
|
||||
{
|
||||
if (codec.isValid())
|
||||
textDocument()->setCodec(codec);
|
||||
if (encoding.isValid())
|
||||
textDocument()->setEncoding(encoding);
|
||||
else
|
||||
qWarning("%s: Attempt to set no codec.", Q_FUNC_INFO);
|
||||
qWarning("%s: Attempt to set invalid encoding.", Q_FUNC_INFO);
|
||||
}
|
||||
|
||||
EditorContentType VcsBaseEditorWidget::contentType() const
|
||||
@@ -1229,43 +1229,43 @@ DiffChunk VcsBaseEditorWidget::diffChunk(QTextCursor cursor) const
|
||||
}
|
||||
|
||||
// Find the codec used for a file querying the editor.
|
||||
static TextCodec findFileCodec(const FilePath &source)
|
||||
static TextEncoding findFileCodec(const FilePath &source)
|
||||
{
|
||||
IDocument *document = DocumentModel::documentForFilePath(source);
|
||||
if (auto textDocument = qobject_cast<BaseTextDocument *>(document))
|
||||
return textDocument->codec();
|
||||
return textDocument->codec().name();
|
||||
return {};
|
||||
}
|
||||
|
||||
// Find the codec by checking the projects (root dir of project file)
|
||||
static TextCodec findProjectCodec(const FilePath &dirPath)
|
||||
static TextEncoding findProjectCodec(const FilePath &dirPath)
|
||||
{
|
||||
// Try to find a project under which file tree the file is.
|
||||
const auto projects = ProjectExplorer::ProjectManager::projects();
|
||||
const auto *p
|
||||
= findOrDefault(projects, equal(&ProjectExplorer::Project::projectDirectory, dirPath));
|
||||
return p ? p->editorConfiguration()->textCodec() : TextCodec();
|
||||
return p ? TextEncoding(p->editorConfiguration()->textCodec().name()) : TextEncoding();
|
||||
}
|
||||
|
||||
TextCodec VcsBaseEditor::getCodec(const FilePath &source)
|
||||
TextEncoding VcsBaseEditor::getEncoding(const FilePath &source)
|
||||
{
|
||||
if (!source.isEmpty()) {
|
||||
// Check file
|
||||
if (source.isFile())
|
||||
if (TextCodec fc = findFileCodec(source); fc.isValid())
|
||||
if (TextEncoding fc = findFileCodec(source); fc.isValid())
|
||||
return fc;
|
||||
// Find by project via directory
|
||||
if (TextCodec pc = findProjectCodec(source.isFile() ? source.absolutePath() : source); pc.isValid())
|
||||
if (TextEncoding pc = findProjectCodec(source.isFile() ? source.absolutePath() : source); pc.isValid())
|
||||
return pc;
|
||||
}
|
||||
return TextCodec::codecForLocale();
|
||||
return QStringConverter::System;
|
||||
}
|
||||
|
||||
TextCodec VcsBaseEditor::getCodec(const FilePath &workingDirectory, const QStringList &files)
|
||||
TextEncoding VcsBaseEditor::getEncoding(const FilePath &workingDirectory, const QStringList &files)
|
||||
{
|
||||
if (files.empty())
|
||||
return getCodec(workingDirectory);
|
||||
return getCodec(workingDirectory / files.front());
|
||||
return getEncoding(workingDirectory);
|
||||
return getEncoding(workingDirectory / files.front());
|
||||
}
|
||||
|
||||
VcsBaseEditorWidget *VcsBaseEditor::getVcsBaseEditor(const IEditor *editor)
|
||||
|
@@ -70,8 +70,8 @@ public:
|
||||
// the editor manager and the project managers (defaults to system codec).
|
||||
// The codec should be set on editors displaying diff or annotation
|
||||
// output.
|
||||
static Utils::TextCodec getCodec(const Utils::FilePath &source);
|
||||
static Utils::TextCodec getCodec(const Utils::FilePath &workingDirectory, const QStringList &files);
|
||||
static Utils::TextEncoding getEncoding(const Utils::FilePath &source);
|
||||
static Utils::TextEncoding getEncoding(const Utils::FilePath &workingDirectory, const QStringList &files);
|
||||
|
||||
// Utility to return the widget from the IEditor returned by the editor
|
||||
// manager which is a BaseTextEditor.
|
||||
@@ -173,8 +173,8 @@ public:
|
||||
|
||||
void setHighlightingEnabled(bool e);
|
||||
|
||||
Utils::TextCodec codec() const;
|
||||
void setCodec(const Utils::TextCodec &codec);
|
||||
Utils::TextEncoding encoding() const;
|
||||
void setEncoding(const Utils::TextEncoding &encoding);
|
||||
|
||||
// Base directory for diff views
|
||||
Utils::FilePath workingDirectory() const;
|
||||
|
@@ -67,7 +67,7 @@ public:
|
||||
QString m_displayName;
|
||||
const FilePath m_defaultWorkingDirectory;
|
||||
Environment m_environment;
|
||||
TextCodec m_codec;
|
||||
TextEncoding m_encoding;
|
||||
ProgressParser m_progressParser = {};
|
||||
QList<Job> m_jobs;
|
||||
|
||||
@@ -105,8 +105,8 @@ void VcsCommandPrivate::setupProcess(Process *process, const Job &job)
|
||||
process->setEnvironment(environment());
|
||||
if (m_flags & RunFlags::MergeOutputChannels)
|
||||
process->setProcessChannelMode(QProcess::MergedChannels);
|
||||
if (m_codec.isValid())
|
||||
process->setCodec(m_codec);
|
||||
if (m_encoding.isValid())
|
||||
process->setEncoding(m_encoding);
|
||||
process->setUseCtrlCStub(true);
|
||||
|
||||
installStdCallbacks(process);
|
||||
@@ -290,11 +290,11 @@ ProcessResult VcsCommand::result() const
|
||||
CommandResult VcsCommand::runBlocking(const FilePath &workingDirectory,
|
||||
const Environment &environment,
|
||||
const CommandLine &command, RunFlags flags,
|
||||
int timeoutS, const TextCodec &codec)
|
||||
int timeoutS, const TextEncoding &codec)
|
||||
{
|
||||
VcsCommand vcsCommand(workingDirectory, environment);
|
||||
vcsCommand.addFlags(flags);
|
||||
vcsCommand.setCodec(codec);
|
||||
vcsCommand.setEncoding(codec);
|
||||
return vcsCommand.runBlockingHelper(command, timeoutS);
|
||||
}
|
||||
|
||||
@@ -317,9 +317,9 @@ CommandResult VcsCommand::runBlockingHelper(const CommandLine &command, int time
|
||||
return CommandResult(process);
|
||||
}
|
||||
|
||||
void VcsCommand::setCodec(const TextCodec &codec)
|
||||
void VcsCommand::setEncoding(const TextEncoding &codec)
|
||||
{
|
||||
d->m_codec = codec;
|
||||
d->m_encoding = codec;
|
||||
}
|
||||
|
||||
void VcsCommand::setProgressParser(const ProgressParser &parser)
|
||||
|
@@ -17,6 +17,7 @@ namespace Utils {
|
||||
class CommandLine;
|
||||
class Environment;
|
||||
class Process;
|
||||
class TextEncoding;
|
||||
}
|
||||
|
||||
namespace VcsBase {
|
||||
@@ -74,7 +75,7 @@ public:
|
||||
|
||||
void addFlags(RunFlags f);
|
||||
|
||||
void setCodec(const Utils::TextCodec &codec);
|
||||
void setEncoding(const Utils::TextEncoding &codec);
|
||||
|
||||
void setProgressParser(const Core::ProgressParser &parser);
|
||||
|
||||
@@ -83,7 +84,7 @@ public:
|
||||
const Utils::CommandLine &command,
|
||||
RunFlags flags,
|
||||
int timeoutS,
|
||||
const Utils::TextCodec &codec);
|
||||
const Utils::TextEncoding &codec);
|
||||
void cancel();
|
||||
|
||||
QString cleanedStdOut() const;
|
||||
|
Reference in New Issue
Block a user