From 4105dc5f4b26f45651e5734d785566572247695b Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Fri, 8 Jan 2010 12:55:30 +0100 Subject: [PATCH] VCS[SVN]: svn add: Accommodate for older Mac-versions. by adding directories in a loop. Introduce #ifdef for Macs in the hopes that the code can be deprecated at some time. --- src/plugins/subversion/subversionplugin.cpp | 40 +++++++++++++++++++++ src/plugins/subversion/subversionplugin.h | 2 ++ 2 files changed, 42 insertions(+) diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp index 3321652c6bb..e83d3262c08 100644 --- a/src/plugins/subversion/subversionplugin.cpp +++ b/src/plugins/subversion/subversionplugin.cpp @@ -1019,6 +1019,16 @@ SubversionPlugin *SubversionPlugin::subversionPluginInstance() } bool SubversionPlugin::vcsAdd(const QString &workingDir, const QString &rawFileName) +{ +#ifdef Q_OS_MAC // See below. + return vcsAdd14(workingDir, rawFileName); +#else + return vcsAdd15(workingDir, rawFileName); +#endif +} + +// Post 1.4 add: Use "--parents" to add directories +bool SubversionPlugin::vcsAdd15(const QString &workingDir, const QString &rawFileName) { const QString file = QDir::toNativeSeparators(rawFileName); QStringList args; @@ -1027,6 +1037,36 @@ bool SubversionPlugin::vcsAdd(const QString &workingDir, const QString &rawFileN return !response.error; } +// Pre 1.5 add: Add directories in a loop. To be deprecated +// once Mac ships newer svn-versions +bool SubversionPlugin::vcsAdd14(const QString &workingDir, const QString &rawFileName) +{ + const QChar slash = QLatin1Char('/'); + const QStringList relativePath = rawFileName.split(slash); + // Add directories (dir1/dir2/file.cpp) in a loop. + if (relativePath.size() > 1) { + QString path; + const int lastDir = relativePath.size() - 1; + for (int p = 0; p < lastDir; p++) { + if (!path.isEmpty()) + path += slash; + path += relativePath.at(p); + if (!managesDirectory(QDir(path))) { + QStringList addDirArgs; + addDirArgs << QLatin1String("add") << QLatin1String("--non-recursive") << QDir::toNativeSeparators(path); + const SubversionResponse addDirResponse = runSvn(workingDir, addDirArgs, m_settings.timeOutMS(), true); + if (addDirResponse.error) + return false; + } + } + } + // Add file + QStringList args; + args << QLatin1String("add") << QDir::toNativeSeparators(rawFileName); + const SubversionResponse response = runSvn(workingDir, args, m_settings.timeOutMS(), true); + return !response.error; +} + bool SubversionPlugin::vcsDelete(const QString &workingDir, const QString &rawFileName) { const QString file = QDir::toNativeSeparators(rawFileName); diff --git a/src/plugins/subversion/subversionplugin.h b/src/plugins/subversion/subversionplugin.h index 3a7e3bfb486..d8ca80810ba 100644 --- a/src/plugins/subversion/subversionplugin.h +++ b/src/plugins/subversion/subversionplugin.h @@ -88,6 +88,8 @@ public: // IVersionControl bool vcsAdd(const QString &workingDir, const QString &fileName); + bool vcsAdd14(const QString &workingDir, const QString &fileName); + bool vcsAdd15(const QString &workingDir, const QString &fileName); bool vcsDelete(const QString &workingDir, const QString &fileName); bool managesDirectory(const QString &directory) const; QString findTopLevelForDirectory(const QString &directory) const; -- GitLab