forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/3.1'
Conflicts: qbs/imports/QtcTool.qbs src/plugins/git/giteditor.cpp src/plugins/qmldesigner/qmldesignerplugin.cpp Change-Id: Icafd32f713effb1479480a0d1f61a01e429fbec0
This commit is contained in:
@@ -173,7 +173,7 @@
|
||||
<item>
|
||||
<widget class="QPushButton" name="trackButton">
|
||||
<property name="toolTip">
|
||||
<string>Sets current branch to track the selected one.</string>
|
||||
<string>Set current branch to track the selected one.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Track</string>
|
||||
|
||||
@@ -80,6 +80,7 @@ QDebug operator<<(QDebug d, const GitSubmitEditorPanelData &data)
|
||||
|
||||
CommitData::CommitData(CommitType type)
|
||||
: commitType(type)
|
||||
, commitEncoding(0)
|
||||
, enablePush(false)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -111,7 +111,7 @@ public:
|
||||
|
||||
CommitType commitType;
|
||||
QString amendSHA1;
|
||||
QString commitEncoding;
|
||||
QTextCodec *commitEncoding;
|
||||
GitSubmitEditorPanelInfo panelInfo;
|
||||
GitSubmitEditorPanelData panelData;
|
||||
bool enablePush;
|
||||
|
||||
@@ -356,7 +356,7 @@ void GerritPlugin::openView()
|
||||
{
|
||||
if (m_dialog.isNull()) {
|
||||
while (!m_parameters->isValid()) {
|
||||
QMessageBox::warning(0, tr("Error"),
|
||||
QMessageBox::warning(ICore::dialogParent(), tr("Error"),
|
||||
tr("Invalid Gerrit configuration. Host, user and ssh binary are mandatory."));
|
||||
const Id group = VcsBase::Constants::VCS_SETTINGS_CATEGORY;
|
||||
if (!ICore::showOptionsDialog(group, "Gerrit"))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import qbs.base 1.0
|
||||
import qbs 1.0
|
||||
|
||||
import QtcPlugin
|
||||
|
||||
|
||||
@@ -424,7 +424,8 @@ void GitDiffHandler::collectShowDescription(const QString &id)
|
||||
|
||||
m_editorController->clear(m_waitMessage);
|
||||
VcsBase::Command *command = new VcsBase::Command(m_gitPath, m_workingDirectory, m_processEnvironment);
|
||||
command->setCodec(Core::EditorManager::defaultTextCodec());
|
||||
command->setCodec(GitPlugin::instance()->gitClient()->encoding(m_workingDirectory,
|
||||
"i18n.commitEncoding"));
|
||||
connect(command, SIGNAL(output(QString)), this, SLOT(slotShowDescriptionReceived(QString)));
|
||||
QStringList arguments;
|
||||
arguments << QLatin1String("show") << QLatin1String("-s")
|
||||
@@ -1132,14 +1133,10 @@ VcsBase::VcsBaseEditorWidget *GitClient::createVcsEditor(
|
||||
this, SLOT(slotBlameRevisionRequested(QString,QString,QString,int)));
|
||||
QTC_ASSERT(rc, return 0);
|
||||
rc->setSource(source);
|
||||
if (codecType == CodecSource) {
|
||||
if (codecType == CodecSource)
|
||||
rc->setCodec(getSourceCodec(source));
|
||||
} else if (codecType == CodecLogOutput) {
|
||||
QString encodingName = readConfigValue(source, QLatin1String("i18n.logOutputEncoding"));
|
||||
if (encodingName.isEmpty())
|
||||
encodingName = QLatin1String("utf-8");
|
||||
rc->setCodec(QTextCodec::codecForName(encodingName.toLocal8Bit()));
|
||||
}
|
||||
else if (codecType == CodecLogOutput)
|
||||
rc->setCodec(encoding(source, "i18n.logOutputEncoding"));
|
||||
|
||||
rc->setForceReadOnly(true);
|
||||
|
||||
@@ -1556,12 +1553,8 @@ void GitClient::slotBlameRevisionRequested(const QString &workingDirectory, cons
|
||||
|
||||
QTextCodec *GitClient::getSourceCodec(const QString &file) const
|
||||
{
|
||||
if (QFileInfo(file).isFile())
|
||||
return VcsBase::VcsBaseEditorWidget::getCodec(file);
|
||||
QString encodingName = readConfigValue(file, QLatin1String("gui.encoding"));
|
||||
if (encodingName.isEmpty())
|
||||
encodingName = QLatin1String("utf-8");
|
||||
return QTextCodec::codecForName(encodingName.toLocal8Bit());
|
||||
return QFileInfo(file).isFile() ? VcsBase::VcsBaseEditorWidget::getCodec(file)
|
||||
: encoding(file, "gui.encoding");
|
||||
}
|
||||
|
||||
void GitClient::blame(const QString &workingDirectory,
|
||||
@@ -1625,7 +1618,7 @@ QStringList GitClient::setupCheckoutArguments(const QString &workingDirectory,
|
||||
return arguments;
|
||||
|
||||
if (QMessageBox::question(Core::ICore::mainWindow(), tr("Create Local Branch"),
|
||||
tr("Would you like to create local branch?"),
|
||||
tr("Would you like to create a local branch?"),
|
||||
QMessageBox::Yes | QMessageBox::No) == QMessageBox::No) {
|
||||
return arguments;
|
||||
}
|
||||
@@ -1705,11 +1698,7 @@ bool GitClient::synchronousLog(const QString &workingDirectory, const QStringLis
|
||||
const bool rc = fullySynchronousGit(workingDirectory, allArguments, &outputText, &errorText,
|
||||
flags);
|
||||
if (rc) {
|
||||
QString encodingName = readConfigValue(workingDirectory, QLatin1String("i18n.logOutputEncoding"));
|
||||
if (encodingName.isEmpty())
|
||||
encodingName = QLatin1String("utf-8");
|
||||
QTextCodec *codec = QTextCodec::codecForName(encodingName.toLocal8Bit());
|
||||
if (codec)
|
||||
if (QTextCodec *codec = encoding(workingDirectory, "i18n.logOutputEncoding"))
|
||||
*output = codec->toUnicode(outputText);
|
||||
else
|
||||
*output = commandOutputFromLocal8Bit(outputText);
|
||||
@@ -2411,9 +2400,10 @@ SubmoduleDataMap GitClient::submoduleList(const QString &workingDirectory)
|
||||
|
||||
if (cachedSubmoduleData.contains(workingDirectory))
|
||||
return cachedSubmoduleData.value(workingDirectory);
|
||||
QStringList args(QLatin1String("-l"));
|
||||
|
||||
QStringList allConfigs = readConfig(workingDirectory, args).split(QLatin1Char('\n'));
|
||||
QStringList allConfigs =
|
||||
commandOutputFromLocal8Bit(readConfig(workingDirectory, QLatin1String("-l")))
|
||||
.split(QLatin1Char('\n'));
|
||||
const QString submoduleLineStart = QLatin1String("submodule.");
|
||||
foreach (const QString &configLine, allConfigs) {
|
||||
if (!configLine.startsWith(submoduleLineStart))
|
||||
@@ -3027,6 +3017,16 @@ QString GitClient::gitBinaryPath(bool *ok, QString *errorMessage) const
|
||||
return settings()->gitBinaryPath(ok, errorMessage);
|
||||
}
|
||||
|
||||
QTextCodec *GitClient::encoding(const QString &workingDirectory, const QByteArray &configVar) const
|
||||
{
|
||||
QByteArray codecName = readConfig(workingDirectory, QLatin1String(configVar)).trimmed();
|
||||
// Set default commit encoding to 'UTF-8', when it's not set,
|
||||
// to solve displaying error of commit log with non-latin characters.
|
||||
if (codecName.isEmpty())
|
||||
codecName = "UTF-8";
|
||||
return QTextCodec::codecForName(codecName);
|
||||
}
|
||||
|
||||
bool GitClient::getCommitData(const QString &workingDirectory,
|
||||
QString *commitTemplate,
|
||||
CommitData &commitData,
|
||||
@@ -3106,12 +3106,7 @@ bool GitClient::getCommitData(const QString &workingDirectory,
|
||||
}
|
||||
}
|
||||
|
||||
commitData.commitEncoding = readConfigValue(workingDirectory, QLatin1String("i18n.commitEncoding"));
|
||||
|
||||
// Set default commit encoding to 'UTF-8', when it's not set,
|
||||
// to solve displaying error of commit log with non-latin characters.
|
||||
if (commitData.commitEncoding.isEmpty())
|
||||
commitData.commitEncoding = QLatin1String("UTF-8");
|
||||
commitData.commitEncoding = encoding(workingDirectory, "i18n.commitEncoding");
|
||||
|
||||
// Get the commit template or the last commit message
|
||||
switch (commitData.commitType) {
|
||||
@@ -3119,8 +3114,8 @@ bool GitClient::getCommitData(const QString &workingDirectory,
|
||||
// Amend: get last commit data as "SHA1<tab>author<tab>email<tab>message".
|
||||
QStringList args(QLatin1String("log"));
|
||||
args << QLatin1String("--max-count=1") << QLatin1String("--pretty=format:%h\t%an\t%ae\t%B");
|
||||
QTextCodec *codec = QTextCodec::codecForName(commitData.commitEncoding.toLocal8Bit());
|
||||
const Utils::SynchronousProcessResponse sp = synchronousGit(repoDirectory, args, 0, codec);
|
||||
const Utils::SynchronousProcessResponse sp = synchronousGit(repoDirectory, args, 0,
|
||||
commitData.commitEncoding);
|
||||
if (sp.result != Utils::SynchronousProcessResponse::Finished) {
|
||||
*errorMessage = tr("Cannot retrieve last commit data of repository \"%1\".").arg(repoDirectory);
|
||||
return false;
|
||||
@@ -3748,7 +3743,7 @@ bool GitClient::synchronousStashList(const QString &workingDirectory,
|
||||
return true;
|
||||
}
|
||||
|
||||
QString GitClient::readConfig(const QString &workingDirectory, const QStringList &configVar) const
|
||||
QByteArray GitClient::readConfig(const QString &workingDirectory, const QString &configVar) const
|
||||
{
|
||||
QStringList arguments;
|
||||
arguments << QLatin1String("config") << configVar;
|
||||
@@ -3757,16 +3752,16 @@ QString GitClient::readConfig(const QString &workingDirectory, const QStringList
|
||||
QByteArray errorText;
|
||||
if (!fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText,
|
||||
VcsBasePlugin::SuppressCommandLogging))
|
||||
return QString();
|
||||
return QByteArray();
|
||||
if (Utils::HostOsInfo::isWindowsHost())
|
||||
return Utils::SynchronousProcess::normalizeNewlines(QString::fromUtf8(outputText));
|
||||
return commandOutputFromLocal8Bit(outputText);
|
||||
outputText.replace("\r\n", "\n");
|
||||
return outputText;
|
||||
}
|
||||
|
||||
// Read a single-line config value, return trimmed
|
||||
QString GitClient::readConfigValue(const QString &workingDirectory, const QString &configVar) const
|
||||
{
|
||||
return readConfig(workingDirectory, QStringList(configVar)).remove(QLatin1Char('\n'));
|
||||
return commandOutputFromLocal8Bit(readConfig(workingDirectory, configVar).trimmed());
|
||||
}
|
||||
|
||||
bool GitClient::cloneRepository(const QString &directory,const QByteArray &url)
|
||||
|
||||
@@ -281,10 +281,11 @@ public:
|
||||
const QString &messge, QString *name,
|
||||
QString *errorMessage = 0);
|
||||
|
||||
QString readConfig(const QString &workingDirectory, const QStringList &configVar) const;
|
||||
QByteArray readConfig(const QString &workingDirectory, const QString &configVar) const;
|
||||
|
||||
QString readConfigValue(const QString &workingDirectory, const QString &configVar) const;
|
||||
|
||||
QTextCodec *encoding(const QString &workingDirectory, const QByteArray &configVar) const;
|
||||
bool getCommitData(const QString &workingDirectory, QString *commitTemplate,
|
||||
CommitData &commitData, QString *errorMessage);
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
#include <QRegExp>
|
||||
#include <QSet>
|
||||
#include <QTemporaryFile>
|
||||
#include <QTextCodec>
|
||||
#include <QDir>
|
||||
|
||||
#include <QTextCursor>
|
||||
@@ -325,14 +326,16 @@ void GitEditor::addDiffActions(QMenu *menu, const VcsBase::DiffChunk &chunk)
|
||||
|
||||
bool GitEditor::open(QString *errorString, const QString &fileName, const QString &realFileName)
|
||||
{
|
||||
bool res = VcsBaseEditorWidget::open(errorString, fileName, realFileName);
|
||||
Core::Id editorId = editor()->document()->id();
|
||||
if (editorId == Git::Constants::GIT_COMMIT_TEXT_EDITOR_ID
|
||||
|| editorId == Git::Constants::GIT_REBASE_EDITOR_ID) {
|
||||
QFileInfo fi(fileName);
|
||||
setSource(fi.absolutePath());
|
||||
const QString gitPath = fi.absolutePath();
|
||||
setSource(gitPath);
|
||||
baseTextDocument()->setCodec(
|
||||
GitPlugin::instance()->gitClient()->encoding(gitPath, "i18n.commitEncoding"));
|
||||
}
|
||||
return res;
|
||||
return VcsBaseEditorWidget::open(errorString, fileName, realFileName);
|
||||
}
|
||||
|
||||
QString GitEditor::decorateVersion(const QString &revision) const
|
||||
|
||||
@@ -88,6 +88,7 @@ private:
|
||||
GitSubmitEditor::GitSubmitEditor(const VcsBase::VcsBaseSubmitEditorParameters *parameters, QWidget *parent) :
|
||||
VcsBaseSubmitEditor(parameters, new GitSubmitEditorWidget(parent)),
|
||||
m_model(0),
|
||||
m_commitEncoding(0),
|
||||
m_commitType(SimpleCommit),
|
||||
m_forceClose(false)
|
||||
{
|
||||
@@ -153,7 +154,9 @@ void GitSubmitEditor::slotDiffSelected(const QList<int> &rows)
|
||||
unmergedFiles.push_back(fileName);
|
||||
else if (state & StagedFile)
|
||||
stagedFiles.push_back(fileName);
|
||||
else if (state != UntrackedFile)
|
||||
else if (state == UntrackedFile)
|
||||
Core::EditorManager::openEditor(m_workingDirectory + QLatin1Char('/') + fileName);
|
||||
else
|
||||
unstagedFiles.push_back(fileName);
|
||||
}
|
||||
if (!unstagedFiles.empty() || !stagedFiles.empty())
|
||||
@@ -200,13 +203,10 @@ QByteArray GitSubmitEditor::fileContents() const
|
||||
{
|
||||
const QString &text = submitEditorWidget()->descriptionText();
|
||||
|
||||
if (!m_commitEncoding.isEmpty()) {
|
||||
// Do the encoding convert, When use user-defined encoding
|
||||
// e.g. git config --global i18n.commitencoding utf-8
|
||||
QTextCodec *codec = QTextCodec::codecForName(m_commitEncoding.toLocal8Bit());
|
||||
if (codec)
|
||||
return codec->fromUnicode(text);
|
||||
}
|
||||
// Do the encoding convert, When use user-defined encoding
|
||||
// e.g. git config --global i18n.commitencoding utf-8
|
||||
if (m_commitEncoding)
|
||||
return m_commitEncoding->fromUnicode(text);
|
||||
|
||||
// Using utf-8 as the default encoding
|
||||
return text.toUtf8();
|
||||
|
||||
@@ -75,7 +75,7 @@ private:
|
||||
inline const GitSubmitEditorWidget *submitEditorWidget() const;
|
||||
|
||||
VcsBase::SubmitFileModel *m_model;
|
||||
QString m_commitEncoding;
|
||||
QTextCodec *m_commitEncoding;
|
||||
CommitType m_commitType;
|
||||
QString m_amendSHA1;
|
||||
bool m_forceClose;
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#include "gitversioncontrol.h"
|
||||
|
||||
#include <coreplugin/documentmanager.h>
|
||||
#include <coreplugin/icore.h>
|
||||
#include <vcsbase/vcsbaseoutputwindow.h>
|
||||
|
||||
#include <QMessageBox>
|
||||
@@ -89,7 +90,8 @@ bool MergeTool::start(const QString &workingDirectory, const QStringList &files)
|
||||
arguments << QLatin1String("mergetool") << QLatin1String("-y");
|
||||
if (!files.isEmpty()) {
|
||||
if (m_gitClient->gitVersion() < 0x010708) {
|
||||
QMessageBox::warning(0, tr("Error"), tr("File input for the merge tool requires Git 1.7.8, or later."));
|
||||
QMessageBox::warning(Core::ICore::dialogParent(), tr("Error"),
|
||||
tr("File input for the merge tool requires Git 1.7.8, or later."));
|
||||
return false;
|
||||
}
|
||||
arguments << files;
|
||||
@@ -244,7 +246,7 @@ void MergeTool::readData()
|
||||
m_remoteState = waitAndReadStatus(m_remoteInfo);
|
||||
chooseAction();
|
||||
} else if (m_merging && line.startsWith("Continue merging")) {
|
||||
if (QMessageBox::question(0, tr("Continue Merging"),
|
||||
if (QMessageBox::question(Core::ICore::dialogParent(), tr("Continue Merging"),
|
||||
tr("Continue merging other unresolved paths?"),
|
||||
QMessageBox::Yes | QMessageBox::No,
|
||||
QMessageBox::No) == QMessageBox::Yes) {
|
||||
@@ -262,7 +264,7 @@ void MergeTool::done()
|
||||
const QString workingDirectory = m_process->workingDirectory();
|
||||
int exitCode = m_process->exitCode();
|
||||
if (!exitCode) {
|
||||
outputWindow->appendMessage(tr("Merge tool process finished successully."));
|
||||
outputWindow->appendMessage(tr("Merge tool process finished successfully."));
|
||||
m_gitClient->continueCommandIfNeeded(workingDirectory);
|
||||
} else {
|
||||
outputWindow->appendError(tr("Merge tool process terminated with exit code %1")
|
||||
|
||||
Reference in New Issue
Block a user