forked from qt-creator/qt-creator
SVN: Add method to find SVN version and use it in svnDiff
We want to enforce the internal diff if possible, but that option is only in 1.7 and later. Task-number: QTCREATORBUG-9425 Change-Id: If89f0a7eedae51a04a5f1c40d48287a6425f7a12 Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
@@ -572,7 +572,9 @@ void SubversionPlugin::svnDiff(const Subversion::Internal::SubversionDiffParamet
|
||||
QFileInfo(p.files.front()).fileName() : p.diffName;
|
||||
|
||||
QStringList args(QLatin1String("diff"));
|
||||
args.append(QLatin1String("--internal-diff"));
|
||||
Version v = svnVersion();
|
||||
if (v.majorVersion >= 1 && v.minorVersion >= 7) // --internal-diff is new in v1.7.0
|
||||
args.append(QLatin1String("--internal-diff"));
|
||||
args.append(p.arguments);
|
||||
args << p.files;
|
||||
|
||||
@@ -1110,6 +1112,32 @@ QStringList SubversionPlugin::addAuthenticationOptions(const QStringList &args,
|
||||
return rc;
|
||||
}
|
||||
|
||||
SubversionPlugin::Version SubversionPlugin::svnVersion()
|
||||
{
|
||||
if (m_svnVersionBinary != m_settings.binaryPath()) {
|
||||
QStringList args;
|
||||
args << QLatin1String("--version") << QLatin1String("-q");
|
||||
const Utils::SynchronousProcessResponse response =
|
||||
VcsBase::VcsBasePlugin::runVcs(QDir().absolutePath(), m_settings.binaryPath(),
|
||||
args, m_settings.timeOutMs(), 0);
|
||||
if (response.result == Utils::SynchronousProcessResponse::Finished &&
|
||||
response.exitCode == 0) {
|
||||
m_svnVersionBinary = m_settings.binaryPath();
|
||||
m_svnVersion = response.stdOut.trimmed();
|
||||
} else {
|
||||
m_svnVersionBinary.clear();
|
||||
m_svnVersion.clear();
|
||||
}
|
||||
}
|
||||
|
||||
SubversionPlugin::Version v;
|
||||
if (::sscanf(m_svnVersion.toLatin1().constData(), "%d.%d.%d",
|
||||
&v.majorVersion, &v.minorVersion, &v.patchVersion) != 3)
|
||||
v.majorVersion = v.minorVersion = v.patchVersion = -1;
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
SubversionResponse SubversionPlugin::runSvn(const QString &workingDir,
|
||||
const QString &userName, const QString &password,
|
||||
const QStringList &arguments, int timeOut,
|
||||
|
||||
@@ -106,6 +106,15 @@ public:
|
||||
const QString &userName = QString(),
|
||||
const QString &password = QString());
|
||||
|
||||
class Version {
|
||||
public:
|
||||
int majorVersion;
|
||||
int minorVersion;
|
||||
int patchVersion;
|
||||
};
|
||||
|
||||
Version svnVersion();
|
||||
|
||||
public slots:
|
||||
void vcsAnnotate(const QString &workingDir, const QString &file,
|
||||
const QString &revision = QString(), int lineNumber = -1);
|
||||
@@ -204,6 +213,9 @@ private:
|
||||
QAction *m_menuAction;
|
||||
bool m_submitActionTriggered;
|
||||
|
||||
QString m_svnVersionBinary;
|
||||
QString m_svnVersion;
|
||||
|
||||
static SubversionPlugin *m_subversionPluginInstance;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user