Subversion: Add vcsTopic

This partially addresses QTCREATORBUG-12929 which is about svn commit no
longer showing output which does include the revision number

Change-Id: I149f1fea05a63cc80625ba5e02c10edbce471e1a
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
Tobias Hunger
2014-11-04 16:35:14 +01:00
parent ace663a5be
commit 16844e1fbc
5 changed files with 72 additions and 4 deletions

View File

@@ -209,6 +209,25 @@ QStringList SubversionClient::addAuthenticationOptions(const QStringList &args,
return rc; return rc;
} }
QString SubversionClient::synchronousTopic(const QString &repository)
{
QStringList args;
args << QLatin1String("info");
QByteArray stdOut;
if (!vcsFullySynchronousExec(repository, args, &stdOut))
return QString();
const QString revisionString = QLatin1String("Revision: ");
// stdOut is ASCII only (at least in those areas we care about).
QString output = SynchronousProcess::normalizeNewlines(QString::fromLocal8Bit(stdOut));
foreach (const QString &line, output.split(QLatin1Char('\n'))) {
if (line.startsWith(revisionString))
return QString::fromLatin1("r") + line.mid(revisionString.count());
}
return QString();
}
void SubversionClient::diff(const QString &workingDir, const QStringList &files, void SubversionClient::diff(const QString &workingDir, const QStringList &files,
const QStringList &extraOptions) const QStringList &extraOptions)
{ {

View File

@@ -81,6 +81,8 @@ public:
const QString &userName = QString(), const QString &userName = QString(),
const QString &password = QString()); const QString &password = QString());
QString synchronousTopic(const QString &repository);
protected: protected:
Core::Id vcsEditorKind(VcsCommandTag cmd) const; Core::Id vcsEditorKind(VcsCommandTag cmd) const;
VcsBase::VcsBaseEditorParameterWidget *createDiffEditor(const QString &workingDir, VcsBase::VcsBaseEditorParameterWidget *createDiffEditor(const QString &workingDir,

View File

@@ -36,13 +36,35 @@
#include <QFileInfo> #include <QFileInfo>
using namespace Subversion; namespace Subversion {
using namespace Subversion::Internal; namespace Internal {
class SubversionTopicCache : public Core::IVersionControl::TopicCache
{
public:
SubversionTopicCache(SubversionPlugin *plugin) :
m_plugin(plugin)
{ }
protected:
QString trackFile(const QString &repository)
{
return m_plugin->monitorFile(repository);
}
QString refreshTopic(const QString &repository)
{
return m_plugin->synchronousTopic(repository);
}
private:
SubversionPlugin *m_plugin;
};
SubversionControl::SubversionControl(SubversionPlugin *plugin) : SubversionControl::SubversionControl(SubversionPlugin *plugin) :
Core::IVersionControl(new SubversionTopicCache(plugin)),
m_plugin(plugin) m_plugin(plugin)
{ { }
}
QString SubversionControl::displayName() const QString SubversionControl::displayName() const
{ {
@@ -153,3 +175,6 @@ void SubversionControl::emitConfigurationChanged()
{ {
emit configurationChanged(); emit configurationChanged();
} }
} // namespace Internal
} // namespace Subversion

View File

@@ -1074,6 +1074,25 @@ SubversionPlugin *SubversionPlugin::instance()
return m_subversionPluginInstance; return m_subversionPluginInstance;
} }
QString SubversionPlugin::monitorFile(const QString &repository) const
{
QTC_ASSERT(!repository.isEmpty(), return QString());
QDir repoDir(repository);
foreach (const QString &svnDir, m_svnDirectories) {
if (repoDir.exists(svnDir)) {
QFileInfo fi(repoDir.absoluteFilePath(svnDir + QLatin1String("/wc.db")));
if (fi.exists() && fi.isFile())
return fi.absoluteFilePath();
}
}
return QString();
}
QString SubversionPlugin::synchronousTopic(const QString &repository) const
{
return m_client->synchronousTopic(repository);
}
bool SubversionPlugin::vcsAdd(const QString &workingDir, const QString &rawFileName) bool SubversionPlugin::vcsAdd(const QString &workingDir, const QString &rawFileName)
{ {
const QString file = QDir::toNativeSeparators(rawFileName); const QString file = QDir::toNativeSeparators(rawFileName);

View File

@@ -91,6 +91,9 @@ public:
static SubversionPlugin *instance(); static SubversionPlugin *instance();
QString monitorFile(const QString &repository) const;
QString synchronousTopic(const QString &repository) const;
public slots: public slots:
void vcsAnnotate(const QString &workingDir, const QString &file, void vcsAnnotate(const QString &workingDir, const QString &file,
const QString &revision = QString(), int lineNumber = -1); const QString &revision = QString(), int lineNumber = -1);