forked from qt-creator/qt-creator
SVN: Refactor SVN detection code
Reviewed-by: Jonathan Liu <net147@gmail.com> Change-Id: Ib78251b69a89ee503bb78ab122c6e37a6ec7aacb Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com>
This commit is contained in:
@@ -1357,58 +1357,43 @@ QString SubversionPlugin::vcsGetRepositoryURL(const QString &directory)
|
|||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Subversion < 1.7 has ".svn" directory in each directory
|
|
||||||
* it manages. The top level is the first directory
|
|
||||||
* under the directory that does not have a ".svn".
|
|
||||||
*
|
|
||||||
* Subversion >= 1.7 has ".svn" directory in the root of the
|
|
||||||
* working copy. The top level is the root of the working copy
|
|
||||||
* containg ".svn". */
|
|
||||||
bool SubversionPlugin::managesDirectory(const QString &directory, QString *topLevel /* = 0 */) const
|
bool SubversionPlugin::managesDirectory(const QString &directory, QString *topLevel /* = 0 */) const
|
||||||
{
|
{
|
||||||
const QDir dir(directory);
|
const QDir dir(directory);
|
||||||
|
if (!dir.exists())
|
||||||
|
return false;
|
||||||
|
|
||||||
if (topLevel)
|
if (topLevel)
|
||||||
topLevel->clear();
|
topLevel->clear();
|
||||||
bool manages = false;
|
|
||||||
// Subversion >= 1.7: Check for furthest parent containing
|
/* Subversion >= 1.7 has ".svn" directory in the root of the working copy. Check for
|
||||||
// ".svn/wc.db". Need to check for furthest parent as closer
|
* furthest parent containing ".svn/wc.db". Need to check for furthest parent as closer
|
||||||
// parents may be svn:externals.
|
* parents may be svn:externals. */
|
||||||
if (dir.exists()) {
|
QDir parentDir = dir;
|
||||||
QDir parentDir = dir;
|
while (parentDir.cdUp()) {
|
||||||
while (parentDir.cdUp()) {
|
if (checkSVNSubDir(parentDir, QLatin1String("wc.db"))) {
|
||||||
if (checkSVNSubDir(parentDir, QLatin1String("wc.db"))) {
|
if (topLevel)
|
||||||
manages = true;
|
*topLevel = parentDir.absolutePath();
|
||||||
if (topLevel)
|
return true;
|
||||||
*topLevel = parentDir.absolutePath();
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Subversion < 1.7 has ".svn" directory in each directory
|
||||||
|
* it manages. The top level is the first directory
|
||||||
|
* under the directory that does not have a ".svn".*/
|
||||||
|
if (!checkSVNSubDir(dir))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (topLevel) {
|
||||||
|
QDir lastDirectory = dir;
|
||||||
|
for (parentDir = lastDirectory; parentDir.cdUp() ; lastDirectory = parentDir) {
|
||||||
|
if (!checkSVNSubDir(parentDir)) {
|
||||||
|
*topLevel = lastDirectory.absolutePath();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
do {
|
return false;
|
||||||
if (manages)
|
|
||||||
break;
|
|
||||||
if (!dir.exists() || !checkSVNSubDir(dir))
|
|
||||||
break;
|
|
||||||
manages = true;
|
|
||||||
if (!topLevel)
|
|
||||||
break;
|
|
||||||
/* Recursing up, the top level is a child of the first directory that does
|
|
||||||
* not have a ".svn" directory. The starting directory must be a managed
|
|
||||||
* one. Go up and try to find the first unmanaged parent dir. */
|
|
||||||
QDir lastDirectory = dir;
|
|
||||||
for (QDir parentDir = lastDirectory; parentDir.cdUp() ; lastDirectory = parentDir) {
|
|
||||||
if (!checkSVNSubDir(parentDir)) {
|
|
||||||
*topLevel = lastDirectory.absolutePath();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} while (false);
|
|
||||||
if (Subversion::Constants::debug) {
|
|
||||||
QDebug nsp = qDebug().nospace();
|
|
||||||
nsp << "SubversionPlugin::managesDirectory" << directory << manages;
|
|
||||||
if (topLevel)
|
|
||||||
nsp << *topLevel;
|
|
||||||
}
|
|
||||||
return manages;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check whether SVN management subdirs exist.
|
// Check whether SVN management subdirs exist.
|
||||||
|
Reference in New Issue
Block a user