aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dist/changes-2.7.01
-rw-r--r--src/plugins/git/gitclient.cpp44
-rw-r--r--src/plugins/git/gitplugin.cpp26
-rw-r--r--src/plugins/git/gitplugin.h1
-rw-r--r--src/plugins/git/gitutils.cpp14
-rw-r--r--src/plugins/git/gitutils.h2
-rw-r--r--src/plugins/git/gitversioncontrol.cpp20
7 files changed, 65 insertions, 43 deletions
diff --git a/dist/changes-2.7.0 b/dist/changes-2.7.0
index b069bfeea6f..e7b598a08a0 100644
--- a/dist/changes-2.7.0
+++ b/dist/changes-2.7.0
@@ -156,6 +156,7 @@ Qt Quick Designer
Version control plugins
Git
+ * Dropped support for Git versions earlier than 1.7.2
* Introduced MergeTool support
* Added timeout to the gerrit query process
* Added support for merge status
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index f67075cf4f6..9bf1c7e374f 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -365,31 +365,25 @@ const char *GitClient::decorateOption = "--decorate";
QString GitClient::findRepositoryForDirectory(const QString &dir)
{
- if (gitVersion() >= 0x010700) {
- // Find a directory to run git in:
- const QString root = QDir::rootPath();
- const QString home = QDir::homePath();
-
- QDir directory(dir);
- do {
- const QString absDirPath = directory.absolutePath();
- if (absDirPath == root || absDirPath == home)
- break;
+ // Find a directory to run git in:
+ const QString root = QDir::rootPath();
+ const QString home = QDir::homePath();
+
+ QDir directory(dir);
+ do {
+ const QString absDirPath = directory.absolutePath();
+ if (absDirPath == root || absDirPath == home)
+ break;
- if (directory.exists())
- break;
- } while (directory.cdUp());
+ if (directory.exists())
+ break;
+ } while (directory.cdUp());
- QByteArray outputText;
- QStringList arguments;
- arguments << QLatin1String("rev-parse") << QLatin1String("--show-toplevel");
- fullySynchronousGit(directory.absolutePath(), arguments, &outputText, 0, false);
- return QString::fromLocal8Bit(outputText.trimmed());
- } else {
- // Check for ".git/config"
- const QString checkFile = QLatin1String(GIT_DIRECTORY) + QLatin1String("/config");
- return VcsBase::VcsBasePlugin::findRepositoryForDirectory(dir, checkFile);
- }
+ QByteArray outputText;
+ QStringList arguments;
+ arguments << QLatin1String("rev-parse") << QLatin1String("--show-toplevel");
+ fullySynchronousGit(directory.absolutePath(), arguments, &outputText, 0, false);
+ return QString::fromLocal8Bit(outputText.trimmed());
}
QString GitClient::findGitDirForRepository(const QString &repositoryDir)
@@ -1841,9 +1835,7 @@ bool GitClient::getCommitData(const QString &workingDirectory,
if (amend) {
// Amend: get last commit data as "SHA1<tab>author<tab>email<tab>message".
QStringList args(QLatin1String("log"));
- const QString msgFormat = QLatin1String((gitVersion() > 0x010701) ? "%B" : "%s%n%n%b");
- const QString format = QLatin1String("%h\t%an\t%ae\t") + msgFormat;
- args << QLatin1String("--max-count=1") << QLatin1String("--pretty=format:") + format;
+ 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);
if (sp.result != Utils::SynchronousProcessResponse::Finished) {
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index a609bf45d44..dc8afe6afe1 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -44,6 +44,7 @@
#include "settingspage.h"
#include "resetdialog.h"
#include "mergetool.h"
+#include "gitutils.h"
#include "gerrit/gerritplugin.h"
@@ -55,6 +56,7 @@
#include <coreplugin/actionmanager/actioncontainer.h>
#include <coreplugin/actionmanager/command.h>
#include <coreplugin/id.h>
+#include <coreplugin/infobar.h>
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/editormanager/ieditor.h>
#include <coreplugin/documentmanager.h>
@@ -81,6 +83,8 @@
#include <QMenu>
#include <QMessageBox>
+static const unsigned minimumRequiredVersion = 0x010702;
+
static const VcsBase::VcsBaseEditorParameters editorParameters[] = {
{
VcsBase::RegularCommandOutput,
@@ -848,6 +852,26 @@ void GitPlugin::startCommit(bool amend)
openSubmitEditor(m_commitMessageFileName, data, amend);
}
+void GitPlugin::updateVersionWarning()
+{
+ if (m_gitClient->gitVersion() >= minimumRequiredVersion)
+ return;
+ Core::IEditor *curEditor = Core::EditorManager::currentEditor();
+ if (!curEditor)
+ return;
+ Core::IDocument *curDocument = curEditor->document();
+ if (!curDocument)
+ return;
+ Core::InfoBar *infoBar = curDocument->infoBar();
+ Core::Id gitVersionWarning("GitVersionWarning");
+ if (!infoBar->canInfoBeAdded(gitVersionWarning))
+ return;
+ infoBar->addInfo(Core::InfoBarEntry(gitVersionWarning,
+ tr("Unsupported version of Git found. Git %1 or later required.")
+ .arg(versionString(minimumRequiredVersion)),
+ Core::InfoBarEntry::GlobalSuppressionEnabled));
+}
+
Core::IEditor *GitPlugin::openSubmitEditor(const QString &fileName, const CommitData &cd, bool amend)
{
Core::IEditor *editor = Core::EditorManager::openEditor(fileName, Constants::GITSUBMITEDITOR_ID,
@@ -1157,6 +1181,8 @@ void GitPlugin::updateActions(VcsBase::VcsBasePlugin::ActionState as)
m_commandLocator->setEnabled(repositoryEnabled);
if (!enableMenuAction(as, m_menuAction))
return;
+ if (repositoryEnabled)
+ updateVersionWarning();
// Note: This menu is visible if there is no repository. Only
// 'Create Repository'/'Show' actions should be available.
const QString fileName = currentState().currentFileName();
diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h
index 4535ec5b6fc..3b373ecc762 100644
--- a/src/plugins/git/gitplugin.h
+++ b/src/plugins/git/gitplugin.h
@@ -194,6 +194,7 @@ private:
void cleanRepository(const QString &directory);
void applyPatch(const QString &workingDirectory, QString file = QString());
void startCommit(bool amend);
+ void updateVersionWarning();
static GitPlugin *m_instance;
Locator::CommandLocator *m_commandLocator;
diff --git a/src/plugins/git/gitutils.cpp b/src/plugins/git/gitutils.cpp
index 99d4b15bb02..d318d97ee7d 100644
--- a/src/plugins/git/gitutils.cpp
+++ b/src/plugins/git/gitutils.cpp
@@ -94,5 +94,19 @@ bool inputText(QWidget *parent, const QString &title, const QString &prompt, QSt
*s = dialog.textValue();
return true;
}
+
+static inline QString versionPart(unsigned part)
+{
+ return QString::number(part & 0xff, 16);
+}
+
+QString versionString(unsigned ver)
+{
+ return QString::fromLatin1("%1.%2.%3")
+ .arg(versionPart(ver >> 16))
+ .arg(versionPart(ver >> 8))
+ .arg(versionPart(ver));
+}
+
} // namespace Internal
} // namespace Git
diff --git a/src/plugins/git/gitutils.h b/src/plugins/git/gitutils.h
index 70de3825e6b..4275f3a38d5 100644
--- a/src/plugins/git/gitutils.h
+++ b/src/plugins/git/gitutils.h
@@ -61,6 +61,8 @@ inline unsigned version(unsigned major, unsigned minor, unsigned patch)
return (major << 16) + (minor << 8) + patch;
}
+QString versionString(unsigned ver);
+
} // namespace Internal
} // namespace Git
diff --git a/src/plugins/git/gitversioncontrol.cpp b/src/plugins/git/gitversioncontrol.cpp
index 85b94493acc..be8a42190cc 100644
--- a/src/plugins/git/gitversioncontrol.cpp
+++ b/src/plugins/git/gitversioncontrol.cpp
@@ -35,7 +35,6 @@
#include <utils/qtcassert.h>
#include <vcsbase/vcsbaseconstants.h>
-#include <QDebug>
#include <QFileInfo>
static const char stashMessageKeywordC[] = "IVersionControl@";
@@ -71,32 +70,20 @@ bool GitVersionControl::supportsOperation(Operation operation) const
if (!isConfigured())
return false;
- bool rc = false;
switch (operation) {
case AddOperation:
- rc = m_client->gitVersion() >= version(1, 6, 1);;
- break;
case DeleteOperation:
- rc = true;
- break;
case MoveOperation:
- rc = true;
- break;
- case OpenOperation:
- break;
case CreateRepositoryOperation:
case SnapshotOperations:
- rc = true;
- break;
case AnnotateOperation:
- rc = true;
- break;
case CheckoutOperation:
case GetRepositoryRootOperation:
- rc = true;
+ return true;
+ case OpenOperation:
break;
}
- return rc;
+ return false;
}
bool GitVersionControl::vcsOpen(const QString & /*fileName*/)
@@ -107,7 +94,6 @@ bool GitVersionControl::vcsOpen(const QString & /*fileName*/)
bool GitVersionControl::vcsAdd(const QString & fileName)
{
// Implement in terms of using "--intent-to-add"
- QTC_ASSERT(m_client->gitVersion() >= version(1, 6, 1), return false);
const QFileInfo fi(fileName);
return m_client->synchronousAdd(fi.absolutePath(), true, QStringList(fi.fileName()));
}