diff options
author | Knut Petter Svendsen <knutpett@pvv.org> | 2013-04-02 13:03:24 +0200 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2013-04-11 16:52:38 +0200 |
commit | 567098f210a7f73b98f02132a545bd5b5420e5a4 (patch) | |
tree | 3b46aa7f9146b75ca71753db5645f1a7f2c8b01f /src/plugins/clearcase | |
parent | 6d3e0fbd04b66e4ee4e41cd44daba63590b3125b (diff) | |
download | qt-creator-567098f210a7f73b98f02132a545bd5b5420e5a4.tar.gz |
ClearCase: Fixed get active VOBs
The correct way to check if a VOB is active (mounted) is to check for
a "*" in the output of "cleartool lsvob". On windows a directory for
each active VOB exists under topLevel, but this is not true for unix
where directories (mount points) for all VOBs exists always.
Change-Id: Iccb0e38a39dfcae72326d68b9ff43b2555187f6c
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Diffstat (limited to 'src/plugins/clearcase')
-rw-r--r-- | src/plugins/clearcase/clearcaseplugin.cpp | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp index 43023fa91f..0da8dd8d0b 100644 --- a/src/plugins/clearcase/clearcaseplugin.cpp +++ b/src/plugins/clearcase/clearcaseplugin.cpp @@ -555,21 +555,40 @@ QString ClearCasePlugin::ccGetPredecessor(const QString &version) const return response.stdOut; } +//! Get a list of paths to active VOBs. +//! Paths are relative to topLevel QStringList ClearCasePlugin::ccGetActiveVobs() const { QStringList res; QStringList args(QLatin1String("lsvob")); - args << QLatin1String("-short"); - QString topLevel = currentState().topLevel(); + const QString topLevel = currentState().topLevel(); const ClearCaseResponse response = runCleartool(topLevel, args, m_settings.timeOutMS(), SilentRun); if (response.error) return res; - foreach (QString dir, response.stdOut.split(QLatin1Char('\n'), QString::SkipEmptyParts)) { - dir = dir.mid(1); // omit first slash - QFileInfo fi(topLevel, dir); - if (fi.exists()) - res.append(dir); + + // format of output unix: + // * /path/to/vob /path/to/vob/storage.vbs <and some text omitted here> + // format of output windows: + // * \vob \\share\path\to\vob\storage.vbs <and some text omitted here> + QString prefix = topLevel; + if (!prefix.endsWith(QLatin1Char('/'))) + prefix += QLatin1Char('/'); + + foreach (const QString &line, response.stdOut.split(QLatin1Char('\n'), QString::SkipEmptyParts)) { + const bool isActive = line.at(0) == QLatin1Char('*'); + if (!isActive) + continue; + + const QString dir = + QDir::fromNativeSeparators(line.mid(3, line.indexOf(QLatin1Char(' '), 3) - 3)); + const QString relativeDir = QDir(topLevel).relativeFilePath(dir); + + // Snapshot views does not necessarily have all active VOBs loaded, so we'll have to + // check if the dirs exists as well. Else the command will work, but the output will + // complain about the element not being loaded. + if (QFile::exists(prefix + relativeDir)) + res.append(relativeDir); } return res; } |