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:
Oswald Buddenhagen
2014-03-18 14:46:29 +01:00
439 changed files with 4360 additions and 2764 deletions

View File

@@ -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>&amp;Track</string>

View File

@@ -80,6 +80,7 @@ QDebug operator<<(QDebug d, const GitSubmitEditorPanelData &data)
CommitData::CommitData(CommitType type)
: commitType(type)
, commitEncoding(0)
, enablePush(false)
{
}

View File

@@ -111,7 +111,7 @@ public:
CommitType commitType;
QString amendSHA1;
QString commitEncoding;
QTextCodec *commitEncoding;
GitSubmitEditorPanelInfo panelInfo;
GitSubmitEditorPanelData panelData;
bool enablePush;

View File

@@ -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"))

View File

@@ -1,4 +1,4 @@
import qbs.base 1.0
import qbs 1.0
import QtcPlugin

View File

@@ -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)

View File

@@ -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);

View File

@@ -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

View File

@@ -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();

View File

@@ -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;

View File

@@ -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")