summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2013-10-02 00:18:39 +0300
committerOrgad Shaneh <orgads@gmail.com>2013-10-11 12:43:25 +0200
commitfdb6ef90fc7a695e2b8d37abdfcf48fe0d8afb03 (patch)
treedbf64e035c2a58235ad16b0e0d575f300e56db36
parent6f24665e7e133d9d64ea07ae37e35b9e1a1e83a7 (diff)
downloadqt-creator-fdb6ef90fc7a695e2b8d37abdfcf48fe0d8afb03.tar.gz
VCS: Do not try to add files that are already tracked
Task-number: QTCREATORBUG-2455 Change-Id: I4b1fa9676ad4a8d7293e035e4d6103251bef8aee Reviewed-by: Nikita Baryshnikov <nib952051@gmail.com> Reviewed-by: Cristian Tibirna <tibirna@kde.org> Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
-rw-r--r--src/plugins/bazaar/bazaarclient.cpp10
-rw-r--r--src/plugins/bazaar/bazaarclient.h1
-rw-r--r--src/plugins/bazaar/bazaarcontrol.cpp5
-rw-r--r--src/plugins/bazaar/bazaarcontrol.h1
-rw-r--r--src/plugins/clearcase/clearcasecontrol.cpp5
-rw-r--r--src/plugins/clearcase/clearcasecontrol.h1
-rw-r--r--src/plugins/clearcase/clearcaseplugin.cpp7
-rw-r--r--src/plugins/clearcase/clearcaseplugin.h1
-rw-r--r--src/plugins/coreplugin/iversioncontrol.h8
-rw-r--r--src/plugins/coreplugin/vcsmanager.cpp13
-rw-r--r--src/plugins/cvs/cvscontrol.cpp5
-rw-r--r--src/plugins/cvs/cvscontrol.h1
-rw-r--r--src/plugins/cvs/cvsplugin.cpp13
-rw-r--r--src/plugins/cvs/cvsplugin.h4
-rw-r--r--src/plugins/git/gitclient.cpp9
-rw-r--r--src/plugins/git/gitclient.h1
-rw-r--r--src/plugins/git/gitversioncontrol.cpp5
-rw-r--r--src/plugins/git/gitversioncontrol.h1
-rw-r--r--src/plugins/mercurial/mercurialclient.cpp9
-rw-r--r--src/plugins/mercurial/mercurialclient.h1
-rw-r--r--src/plugins/mercurial/mercurialcontrol.cpp5
-rw-r--r--src/plugins/mercurial/mercurialcontrol.h1
-rw-r--r--src/plugins/perforce/perforceplugin.cpp8
-rw-r--r--src/plugins/perforce/perforceplugin.h1
-rw-r--r--src/plugins/perforce/perforceversioncontrol.cpp5
-rw-r--r--src/plugins/perforce/perforceversioncontrol.h1
-rw-r--r--src/plugins/subversion/subversioncontrol.cpp5
-rw-r--r--src/plugins/subversion/subversioncontrol.h1
-rw-r--r--src/plugins/subversion/subversionplugin.cpp13
-rw-r--r--src/plugins/subversion/subversionplugin.h5
-rw-r--r--src/plugins/vcsbase/vcsbaseclient.cpp2
-rw-r--r--src/plugins/vcsbase/vcsbaseclient.h2
32 files changed, 140 insertions, 10 deletions
diff --git a/src/plugins/bazaar/bazaarclient.cpp b/src/plugins/bazaar/bazaarclient.cpp
index 431ff8c6a5..5df1804457 100644
--- a/src/plugins/bazaar/bazaarclient.cpp
+++ b/src/plugins/bazaar/bazaarclient.cpp
@@ -128,6 +128,16 @@ QString BazaarClient::findTopLevelForFile(const QFileInfo &file) const
repositoryCheckFile);
}
+bool BazaarClient::managesFile(const QString &workingDirectory, const QString &fileName) const
+{
+ QStringList args(QLatin1String("status"));
+ args << fileName;
+ QByteArray stdOut;
+ if (!vcsFullySynchronousExec(workingDirectory, args, &stdOut))
+ return false;
+ return !stdOut.startsWith("unknown");
+}
+
void BazaarClient::view(const QString &source, const QString &id, const QStringList &extraOptions)
{
QStringList args(QLatin1String("log"));
diff --git a/src/plugins/bazaar/bazaarclient.h b/src/plugins/bazaar/bazaarclient.h
index d0b1f4a216..3dc756ef58 100644
--- a/src/plugins/bazaar/bazaarclient.h
+++ b/src/plugins/bazaar/bazaarclient.h
@@ -57,6 +57,7 @@ public:
void view(const QString &source, const QString &id,
const QStringList &extraOptions = QStringList());
QString findTopLevelForFile(const QFileInfo &file) const;
+ bool managesFile(const QString &workingDirectory, const QString &fileName) const;
protected:
Core::Id vcsEditorKind(VcsCommand cmd) const;
diff --git a/src/plugins/bazaar/bazaarcontrol.cpp b/src/plugins/bazaar/bazaarcontrol.cpp
index bf480761a0..5d27b46f63 100644
--- a/src/plugins/bazaar/bazaarcontrol.cpp
+++ b/src/plugins/bazaar/bazaarcontrol.cpp
@@ -61,6 +61,11 @@ bool BazaarControl::managesDirectory(const QString &directory, QString *topLevel
return !topLevelFound.isEmpty();
}
+bool BazaarControl::managesFile(const QString &workingDirectory, const QString &fileName) const
+{
+ return m_bazaarClient->managesFile(workingDirectory, fileName);
+}
+
bool BazaarControl::isConfigured() const
{
const QString binary = m_bazaarClient->settings()->binaryPath();
diff --git a/src/plugins/bazaar/bazaarcontrol.h b/src/plugins/bazaar/bazaarcontrol.h
index 673b70a524..94e57aebdd 100644
--- a/src/plugins/bazaar/bazaarcontrol.h
+++ b/src/plugins/bazaar/bazaarcontrol.h
@@ -53,6 +53,7 @@ public:
Core::Id id() const;
bool managesDirectory(const QString &filename, QString *topLevel = 0) const;
+ bool managesFile(const QString &workingDirectory, const QString &fileName) const;
bool isConfigured() const;
bool supportsOperation(Operation operation) const;
bool vcsOpen(const QString &fileName);
diff --git a/src/plugins/clearcase/clearcasecontrol.cpp b/src/plugins/clearcase/clearcasecontrol.cpp
index 79f81242a1..c2f7dd44e0 100644
--- a/src/plugins/clearcase/clearcasecontrol.cpp
+++ b/src/plugins/clearcase/clearcasecontrol.cpp
@@ -134,6 +134,11 @@ bool ClearCaseControl::managesDirectory(const QString &directory, QString *topLe
return m_plugin->managesDirectory(directory, topLevel);
}
+bool ClearCaseControl::managesFile(const QString &workingDirectory, const QString &fileName) const
+{
+ return m_plugin->managesFile(workingDirectory, fileName);
+}
+
bool ClearCaseControl::vcsAnnotate(const QString &file, int line)
{
const QFileInfo fi(file);
diff --git a/src/plugins/clearcase/clearcasecontrol.h b/src/plugins/clearcase/clearcasecontrol.h
index f4a0fb5743..fa980595e2 100644
--- a/src/plugins/clearcase/clearcasecontrol.h
+++ b/src/plugins/clearcase/clearcasecontrol.h
@@ -48,6 +48,7 @@ public:
Core::Id id() const;
bool managesDirectory(const QString &directory, QString *topLevel = 0) const;
+ bool managesFile(const QString &workingDirectory, const QString &fileName) const;
bool isConfigured() const;
diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp
index 3e2c34a505..4775f2e876 100644
--- a/src/plugins/clearcase/clearcaseplugin.cpp
+++ b/src/plugins/clearcase/clearcaseplugin.cpp
@@ -1850,6 +1850,13 @@ bool ClearCasePlugin::ccCheckUcm(const QString &viewname, const QString &working
return QRegExp(QLatin1String("(^|\\n)ucm\\n")).indexIn(catcsData) != -1;
}
+bool ClearCasePlugin::managesFile(const QString &workingDirectory, const QString &fileName) const
+{
+ QStringList args;
+ args << QLatin1String("ls") << fileName;
+ return runCleartoolSync(workingDirectory, args).contains(QLatin1String("@@"));
+}
+
ViewData ClearCasePlugin::ccGetView(const QString &workingDir) const
{
static QHash<QString, ViewData> viewCache;
diff --git a/src/plugins/clearcase/clearcaseplugin.h b/src/plugins/clearcase/clearcaseplugin.h
index 6d62e2e5e8..929844197a 100644
--- a/src/plugins/clearcase/clearcaseplugin.h
+++ b/src/plugins/clearcase/clearcaseplugin.h
@@ -166,6 +166,7 @@ public:
void setStatus(const QString &file, FileStatus::Status status, bool update = true);
bool ccCheckUcm(const QString &viewname, const QString &workingDir) const;
+ bool managesFile(const QString &workingDirectory, const QString &fileName) const;
public slots:
void vcsAnnotate(const QString &workingDir, const QString &file,
diff --git a/src/plugins/coreplugin/iversioncontrol.h b/src/plugins/coreplugin/iversioncontrol.h
index 4ba0277a71..329f687f21 100644
--- a/src/plugins/coreplugin/iversioncontrol.h
+++ b/src/plugins/coreplugin/iversioncontrol.h
@@ -81,6 +81,14 @@ public:
virtual bool managesDirectory(const QString &filename, QString *topLevel = 0) const = 0;
/*!
+ * Returns whether \a fileName is managed by this version control.
+ *
+ * \a workingDirectory is assumed to be part of a valid repository (not necessarily its
+ * top level). \a fileName is expected to be relative to workingDirectory.
+ */
+ virtual bool managesFile(const QString &workingDirectory, const QString &fileName) const = 0;
+
+ /*!
* Returns true is the VCS is configured to run.
*/
virtual bool isConfigured() const = 0;
diff --git a/src/plugins/coreplugin/vcsmanager.cpp b/src/plugins/coreplugin/vcsmanager.cpp
index c2419d8beb..1345aca4ea 100644
--- a/src/plugins/coreplugin/vcsmanager.cpp
+++ b/src/plugins/coreplugin/vcsmanager.cpp
@@ -412,11 +412,20 @@ void VcsManager::promptToAdd(const QString &directory, const QStringList &fileNa
if (!vc || !vc->supportsOperation(Core::IVersionControl::AddOperation))
return;
+ QStringList unmanagedFiles;
+ QDir dir(directory);
+ foreach (const QString &fileName, fileNames) {
+ if (!vc->managesFile(directory, dir.relativeFilePath(fileName)))
+ unmanagedFiles << fileName;
+ }
+ if (unmanagedFiles.isEmpty())
+ return;
+
Internal::AddToVcsDialog dlg(Core::ICore::mainWindow(), VcsManager::msgAddToVcsTitle(),
- fileNames, vc->displayName());
+ unmanagedFiles, vc->displayName());
if (dlg.exec() == QDialog::Accepted) {
QStringList notAddedToVc;
- foreach (const QString &file, fileNames) {
+ foreach (const QString &file, unmanagedFiles) {
if (!vc->vcsAdd(file))
notAddedToVc << file;
}
diff --git a/src/plugins/cvs/cvscontrol.cpp b/src/plugins/cvs/cvscontrol.cpp
index 87fdc2cf24..af579f3e99 100644
--- a/src/plugins/cvs/cvscontrol.cpp
+++ b/src/plugins/cvs/cvscontrol.cpp
@@ -163,6 +163,11 @@ bool CvsControl::managesDirectory(const QString &directory, QString *topLevel) c
return m_plugin->managesDirectory(directory, topLevel);
}
+bool CvsControl::managesFile(const QString &workingDirectory, const QString &fileName) const
+{
+ return m_plugin->managesFile(workingDirectory, fileName);
+}
+
void CvsControl::emitRepositoryChanged(const QString &s)
{
emit repositoryChanged(s);
diff --git a/src/plugins/cvs/cvscontrol.h b/src/plugins/cvs/cvscontrol.h
index 586296fa4d..4a765557a3 100644
--- a/src/plugins/cvs/cvscontrol.h
+++ b/src/plugins/cvs/cvscontrol.h
@@ -48,6 +48,7 @@ public:
Core::Id id() const;
bool managesDirectory(const QString &directory, QString *topLevel = 0) const;
+ bool managesFile(const QString &workingDirectory, const QString &fileName) const;
bool isConfigured() const;
bool supportsOperation(Operation operation) const;
diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp
index adbde2d7df..9d4a8055f7 100644
--- a/src/plugins/cvs/cvsplugin.cpp
+++ b/src/plugins/cvs/cvsplugin.cpp
@@ -1226,7 +1226,7 @@ CvsResponse CvsPlugin::runCvs(const QString &workingDirectory,
const QStringList &arguments,
int timeOut,
unsigned flags,
- QTextCodec *outputCodec)
+ QTextCodec *outputCodec) const
{
const QString executable = m_settings.cvsBinaryPath;
CvsResponse response;
@@ -1365,6 +1365,17 @@ bool CvsPlugin::managesDirectory(const QString &directory, QString *topLevel /*
return manages;
}
+bool CvsPlugin::managesFile(const QString &workingDirectory, const QString &fileName) const
+{
+ QStringList args;
+ args << QLatin1String("status") << fileName;
+ const CvsResponse response =
+ runCvs(workingDirectory, args, m_settings.timeOutMS(), SshPasswordPrompt);
+ if (response.result != CvsResponse::Ok)
+ return false;
+ return !response.stdOut.contains(QLatin1String("Status: Unknown"));
+}
+
bool CvsPlugin::checkCVSDirectory(const QDir &directory) const
{
const QString cvsDir = directory.absoluteFilePath(QLatin1String("CVS"));
diff --git a/src/plugins/cvs/cvsplugin.h b/src/plugins/cvs/cvsplugin.h
index ba5aad89b8..6d8f057b83 100644
--- a/src/plugins/cvs/cvsplugin.h
+++ b/src/plugins/cvs/cvsplugin.h
@@ -90,6 +90,7 @@ public:
bool vcsAdd(const QString &workingDir, const QString &fileName);
bool vcsDelete(const QString &workingDir, const QString &fileName);
bool managesDirectory(const QString &directory, QString *topLevel = 0) const;
+ bool managesFile(const QString &workingDirectory, const QString &fileName) const;
// cvs 'edit' is used to implement 'open' (cvsnt).
bool edit(const QString &topLevel, const QStringList &files);
@@ -143,7 +144,8 @@ private:
CvsResponse runCvs(const QString &workingDirectory,
const QStringList &arguments,
int timeOut,
- unsigned flags, QTextCodec *outputCodec = 0);
+ unsigned flags,
+ QTextCodec *outputCodec = 0) const;
void annotate(const QString &workingDir, const QString &file,
const QString &revision = QString(), int lineNumber= -1);
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 413f663e90..eab02e8c05 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -972,6 +972,15 @@ QString GitClient::findGitDirForRepository(const QString &repositoryDir) const
return res;
}
+bool GitClient::managesFile(const QString &workingDirectory, const QString &fileName) const
+{
+ QByteArray output;
+ QStringList arguments;
+ arguments << QLatin1String("ls-files") << QLatin1String("--error-unmatch") << fileName;
+ return fullySynchronousGit(workingDirectory, arguments, &output, 0,
+ VcsBasePlugin::SuppressCommandLogging);
+}
+
VcsBase::VcsBaseEditorWidget *GitClient::findExistingVCSEditor(const char *registerDynamicProperty,
const QString &dynamicPropertyValue) const
{
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index 7517f2629a..f21a148672 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -137,6 +137,7 @@ public:
QString findRepositoryForDirectory(const QString &dir);
QString findGitDirForRepository(const QString &repositoryDir) const;
+ bool managesFile(const QString &workingDirectory, const QString &fileName) const;
void diff(const QString &workingDirectory, const QString &fileName);
void diff(const QString &workingDirectory,
diff --git a/src/plugins/git/gitversioncontrol.cpp b/src/plugins/git/gitversioncontrol.cpp
index b98e9ea350..ae5154e81e 100644
--- a/src/plugins/git/gitversioncontrol.cpp
+++ b/src/plugins/git/gitversioncontrol.cpp
@@ -229,6 +229,11 @@ bool GitVersionControl::managesDirectory(const QString &directory, QString *topL
return !topLevelFound.isEmpty();
}
+bool GitVersionControl::managesFile(const QString &workingDirectory, const QString &fileName) const
+{
+ return m_client->managesFile(workingDirectory, fileName);
+}
+
bool GitVersionControl::vcsAnnotate(const QString &file, int line)
{
const QFileInfo fi(file);
diff --git a/src/plugins/git/gitversioncontrol.h b/src/plugins/git/gitversioncontrol.h
index 6baa152077..71c53be43c 100644
--- a/src/plugins/git/gitversioncontrol.h
+++ b/src/plugins/git/gitversioncontrol.h
@@ -48,6 +48,7 @@ public:
Core::Id id() const;
bool managesDirectory(const QString &directory, QString *topLevel) const;
+ bool managesFile(const QString &workingDirectory, const QString &fileName) const;
bool isConfigured() const;
bool supportsOperation(Operation operation) const;
diff --git a/src/plugins/mercurial/mercurialclient.cpp b/src/plugins/mercurial/mercurialclient.cpp
index e4966d2627..f1969682f5 100644
--- a/src/plugins/mercurial/mercurialclient.cpp
+++ b/src/plugins/mercurial/mercurialclient.cpp
@@ -257,6 +257,15 @@ QString MercurialClient::vcsGetRepositoryURL(const QString &directory)
return QString();
}
+bool MercurialClient::managesFile(const QString &workingDirectory, const QString &fileName) const
+{
+ QStringList args;
+ args << QLatin1String("status") << QLatin1String("--unknown") << fileName;
+ QByteArray output;
+ vcsFullySynchronousExec(workingDirectory, args, &output);
+ return output.isEmpty();
+}
+
void MercurialClient::incoming(const QString &repositoryRoot, const QString &repository)
{
QStringList args;
diff --git a/src/plugins/mercurial/mercurialclient.h b/src/plugins/mercurial/mercurialclient.h
index 7f12b8470f..845d2db478 100644
--- a/src/plugins/mercurial/mercurialclient.h
+++ b/src/plugins/mercurial/mercurialclient.h
@@ -63,6 +63,7 @@ public:
void incoming(const QString &repositoryRoot, const QString &repository = QString());
void outgoing(const QString &repositoryRoot);
QString vcsGetRepositoryURL(const QString &directory);
+ bool managesFile(const QString &workingDirectory, const QString &fileName) const;
void annotate(const QString &workingDir, const QString &file,
const QString revision = QString(), int lineNumber = -1,
diff --git a/src/plugins/mercurial/mercurialcontrol.cpp b/src/plugins/mercurial/mercurialcontrol.cpp
index 8eaa73dce1..c8fa812e2d 100644
--- a/src/plugins/mercurial/mercurialcontrol.cpp
+++ b/src/plugins/mercurial/mercurialcontrol.cpp
@@ -64,6 +64,11 @@ bool MercurialControl::managesDirectory(const QString &directory, QString *topLe
return !topLevelFound.isEmpty();
}
+bool MercurialControl::managesFile(const QString &workingDirectory, const QString &fileName) const
+{
+ return mercurialClient->managesFile(workingDirectory, fileName);
+}
+
bool MercurialControl::isConfigured() const
{
const QString binary = mercurialClient->settings()->binaryPath();
diff --git a/src/plugins/mercurial/mercurialcontrol.h b/src/plugins/mercurial/mercurialcontrol.h
index 3fac104c04..4a5c2e872c 100644
--- a/src/plugins/mercurial/mercurialcontrol.h
+++ b/src/plugins/mercurial/mercurialcontrol.h
@@ -53,6 +53,7 @@ public:
QString displayName() const;
Core::Id id() const;
bool managesDirectory(const QString &filename, QString *topLevel = 0) const;
+ bool managesFile(const QString &workingDirectory, const QString &fileName) const;
bool isConfigured() const;
bool supportsOperation(Operation operation) const;
bool vcsOpen(const QString &fileName);
diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp
index ec8e13e5ee..69dcc62fbc 100644
--- a/src/plugins/perforce/perforceplugin.cpp
+++ b/src/plugins/perforce/perforceplugin.cpp
@@ -828,6 +828,14 @@ bool PerforcePlugin::managesDirectory(const QString &directory, QString *topLeve
return rc;
}
+bool PerforcePlugin::managesFile(const QString &workingDirectory, const QString &fileName) const
+{
+ QStringList args;
+ args << QLatin1String("fstat") << QLatin1String("-m1") << fileName;
+ const PerforceResponse result = runP4Cmd(workingDirectory, args, RunFullySynchronous);
+ return result.stdOut.contains(QLatin1String("depotFile"));
+}
+
bool PerforcePlugin::managesDirectoryFstat(const QString &directory)
{
if (!m_settings.isValid())
diff --git a/src/plugins/perforce/perforceplugin.h b/src/plugins/perforce/perforceplugin.h
index 71e0a6e39d..b03fab15c9 100644
--- a/src/plugins/perforce/perforceplugin.h
+++ b/src/plugins/perforce/perforceplugin.h
@@ -86,6 +86,7 @@ public:
void extensionsInitialized();
bool managesDirectory(const QString &directory, QString *topLevel = 0);
+ bool managesFile(const QString &workingDirectory, const QString &fileName) const;
bool vcsOpen(const QString &workingDir, const QString &fileName);
bool vcsAdd(const QString &workingDir, const QString &fileName);
bool vcsDelete(const QString &workingDir, const QString &filename);
diff --git a/src/plugins/perforce/perforceversioncontrol.cpp b/src/plugins/perforce/perforceversioncontrol.cpp
index a647733591..37c78efce9 100644
--- a/src/plugins/perforce/perforceversioncontrol.cpp
+++ b/src/plugins/perforce/perforceversioncontrol.cpp
@@ -184,6 +184,11 @@ bool PerforceVersionControl::managesDirectory(const QString &directory, QString
return rc;
}
+bool PerforceVersionControl::managesFile(const QString &workingDirectory, const QString &fileName) const
+{
+ return m_plugin->managesFile(workingDirectory, fileName);
+}
+
void PerforceVersionControl::emitRepositoryChanged(const QString &s)
{
emit repositoryChanged(s);
diff --git a/src/plugins/perforce/perforceversioncontrol.h b/src/plugins/perforce/perforceversioncontrol.h
index 888ce89850..844791429e 100644
--- a/src/plugins/perforce/perforceversioncontrol.h
+++ b/src/plugins/perforce/perforceversioncontrol.h
@@ -47,6 +47,7 @@ public:
Core::Id id() const;
bool managesDirectory(const QString &directory, QString *topLevel = 0) const;
+ bool managesFile(const QString &workingDirectory, const QString &fileName) const;
bool isConfigured() const;
bool supportsOperation(Operation operation) const;
diff --git a/src/plugins/subversion/subversioncontrol.cpp b/src/plugins/subversion/subversioncontrol.cpp
index 3b11ef8aca..200105bb3b 100644
--- a/src/plugins/subversion/subversioncontrol.cpp
+++ b/src/plugins/subversion/subversioncontrol.cpp
@@ -146,6 +146,11 @@ bool SubversionControl::managesDirectory(const QString &directory, QString *topL
return m_plugin->managesDirectory(directory, topLevel);
}
+bool SubversionControl::managesFile(const QString &workingDirectory, const QString &fileName) const
+{
+ return m_plugin->managesFile(workingDirectory, fileName);
+}
+
bool SubversionControl::vcsAnnotate(const QString &file, int line)
{
const QFileInfo fi(file);
diff --git a/src/plugins/subversion/subversioncontrol.h b/src/plugins/subversion/subversioncontrol.h
index d7b3a5ca44..ce7c54dfb2 100644
--- a/src/plugins/subversion/subversioncontrol.h
+++ b/src/plugins/subversion/subversioncontrol.h
@@ -47,6 +47,7 @@ public:
Core::Id id() const;
bool managesDirectory(const QString &directory, QString *topLevel = 0) const;
+ bool managesFile(const QString &workingDirectory, const QString &fileName) const;
bool isConfigured() const;
bool supportsOperation(Operation operation) const;
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index 946e8e5026..de57be400e 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -1083,7 +1083,7 @@ SubversionResponse
const QStringList &arguments,
int timeOut,
unsigned flags,
- QTextCodec *outputCodec)
+ QTextCodec *outputCodec) const
{
const bool hasAuth = m_settings.hasAuthentication();
return runSvn(workingDir,
@@ -1142,7 +1142,7 @@ SubversionPlugin::Version SubversionPlugin::svnVersion()
SubversionResponse SubversionPlugin::runSvn(const QString &workingDir,
const QString &userName, const QString &password,
const QStringList &arguments, int timeOut,
- unsigned flags, QTextCodec *outputCodec)
+ unsigned flags, QTextCodec *outputCodec) const
{
const QString executable = m_settings.binaryPath();
SubversionResponse response;
@@ -1354,6 +1354,15 @@ bool SubversionPlugin::managesDirectory(const QString &directory, QString *topLe
return true;
}
+bool SubversionPlugin::managesFile(const QString &workingDirectory, const QString &fileName) const
+{
+ QStringList args;
+ args << QLatin1String("status") << fileName;
+ SubversionResponse response =
+ runSvn(workingDirectory, args, m_settings.timeOutMs(), 0);
+ return response.stdOut.isEmpty() || response.stdOut.at(0) != QLatin1Char('?');
+}
+
// Check whether SVN management subdirs exist.
bool SubversionPlugin::checkSVNSubDir(const QDir &directory, const QString &fileName) const
{
diff --git a/src/plugins/subversion/subversionplugin.h b/src/plugins/subversion/subversionplugin.h
index 81a89b668e..82940f1ae6 100644
--- a/src/plugins/subversion/subversionplugin.h
+++ b/src/plugins/subversion/subversionplugin.h
@@ -96,6 +96,7 @@ public:
bool vcsDelete(const QString &workingDir, const QString &fileName);
bool vcsMove(const QString &workingDir, const QString &from, const QString &to);
bool managesDirectory(const QString &directory, QString *topLevel = 0) const;
+ bool managesFile(const QString &workingDirectory, const QString &fileName) const;
bool vcsCheckout(const QString &directory, const QByteArray &url);
QString vcsGetRepositoryURL(const QString &directory);
@@ -161,12 +162,12 @@ private:
// Run using the settings' authentication options.
SubversionResponse runSvn(const QString &workingDir,
const QStringList &arguments, int timeOut,
- unsigned flags, QTextCodec *outputCodec = 0);
+ unsigned flags, QTextCodec *outputCodec = 0) const;
// Run using custom authentication options.
SubversionResponse runSvn(const QString &workingDir,
const QString &userName, const QString &password,
const QStringList &arguments, int timeOut,
- unsigned flags, QTextCodec *outputCodec = 0);
+ unsigned flags, QTextCodec *outputCodec = 0) const;
void filelog(const QString &workingDir,
const QString &file = QString(),
diff --git a/src/plugins/vcsbase/vcsbaseclient.cpp b/src/plugins/vcsbase/vcsbaseclient.cpp
index ca8a7dd3ff..442313d87e 100644
--- a/src/plugins/vcsbase/vcsbaseclient.cpp
+++ b/src/plugins/vcsbase/vcsbaseclient.cpp
@@ -276,7 +276,7 @@ bool VcsBaseClient::synchronousPush(const QString &workingDir,
bool VcsBaseClient::vcsFullySynchronousExec(const QString &workingDir,
const QStringList &args,
- QByteArray *output)
+ QByteArray *output) const
{
QProcess vcsProcess;
if (!workingDir.isEmpty())
diff --git a/src/plugins/vcsbase/vcsbaseclient.h b/src/plugins/vcsbase/vcsbaseclient.h
index 2d3ff336a0..9734e4829c 100644
--- a/src/plugins/vcsbase/vcsbaseclient.h
+++ b/src/plugins/vcsbase/vcsbaseclient.h
@@ -166,7 +166,7 @@ protected:
// Fully synchronous VCS execution (QProcess-based)
bool vcsFullySynchronousExec(const QString &workingDir,
const QStringList &args,
- QByteArray *output);
+ QByteArray *output) const;
// Synchronous VCS execution using Utils::SynchronousProcess, with
// log windows updating (using VcsBasePlugin::runVcs with flags)
Utils::SynchronousProcessResponse vcsSynchronousExec(const QString &workingDir,