diff options
-rw-r--r-- | dist/changes-2.7.0 | 1 | ||||
-rw-r--r-- | src/plugins/git/gitclient.cpp | 44 | ||||
-rw-r--r-- | src/plugins/git/gitplugin.cpp | 26 | ||||
-rw-r--r-- | src/plugins/git/gitplugin.h | 1 | ||||
-rw-r--r-- | src/plugins/git/gitutils.cpp | 14 | ||||
-rw-r--r-- | src/plugins/git/gitutils.h | 2 | ||||
-rw-r--r-- | src/plugins/git/gitversioncontrol.cpp | 20 |
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())); } |