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:
Tobias Hunger
2013-05-31 18:47:22 +02:00
parent de24f0170b
commit f8b052188f
2 changed files with 41 additions and 1 deletions
+29 -1
View File
@@ -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,
+12
View File
@@ -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;
};