From 3ddfcacc5179e8d035f04a2b363d3dbab6f6007e Mon Sep 17 00:00:00 2001 From: Niels Weber Date: Tue, 11 Jun 2013 15:16:49 +0200 Subject: Allow multiple package directories. Task-number: QTIFW-24 Change-Id: I4e6e31457ecd63de7a2de98e35a7be00616151a5 Reviewed-by: Karsten Heimrich --- tools/common/repositorygen.cpp | 56 ++++++++++++++++++++++-------------------- tools/common/repositorygen.h | 4 +-- 2 files changed, 32 insertions(+), 28 deletions(-) (limited to 'tools/common') diff --git a/tools/common/repositorygen.cpp b/tools/common/repositorygen.cpp index e820436fe..3c12187db 100644 --- a/tools/common/repositorygen.cpp +++ b/tools/common/repositorygen.cpp @@ -62,7 +62,7 @@ using namespace QInstallerTools; void QInstallerTools::printRepositoryGenOptions() { std::cout << " -p|--packages dir The directory containing the available packages." << std::endl; - std::cout << " Defaults to the current working directory." << std::endl; + std::cout << " This entry can be given multiple times." << std::endl; std::cout << " -e|--exclude p1,...,pn Exclude the given packages." << std::endl; std::cout << " -i|--include p1,...,pn Include the given packages and their dependencies" << std::endl; @@ -364,7 +364,7 @@ void QInstallerTools::copyMetaData(const QString &_targetDir, const QString &met QInstaller::blockingWrite(&targetUpdatesXml, doc.toByteArray()); } -PackageInfoVector QInstallerTools::createListOfPackages(const QString &packagesDirectory, +PackageInfoVector QInstallerTools::createListOfPackages(const QStringList &packagesDirectories, const QStringList &filteredPackages, FilterType filterType) { qDebug() << "\nCollecting information about available packages..."; @@ -372,7 +372,9 @@ PackageInfoVector QInstallerTools::createListOfPackages(const QString &packagesD bool ignoreInvalidPackages = qApp->arguments().contains(QString::fromLatin1("--ignore-invalid-packages")); PackageInfoVector dict; - const QFileInfoList entries = QDir(packagesDirectory).entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot); + QFileInfoList entries; + foreach (const QString &packagesDirectory, packagesDirectories) + entries.append(QDir(packagesDirectory).entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot)); for (QFileInfoList::const_iterator it = entries.begin(); it != entries.end(); ++it) { if (filterType == Exclude) { if (filteredPackages.contains(it->fileName())) @@ -523,7 +525,7 @@ void QInstallerTools::compressMetaDirectories(const QString &repoDir, const QStr existingUpdatesXml.close(); } -void QInstallerTools::copyComponentData(const QString &packageDir, const QString &repoDir, +void QInstallerTools::copyComponentData(const QStringList &packageDirs, const QString &repoDir, PackageInfoVector *const infos) { for (int i = 0; i < infos->count(); ++i) { @@ -539,31 +541,33 @@ void QInstallerTools::copyComponentData(const QString &packageDir, const QString QStringList compressedFiles; QStringList filesToCompress; - const QDir dataDir(QString::fromLatin1("%1/%2/data").arg(packageDir, name)); - foreach (const QString &entry, dataDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot | QDir::Files)) { - QFileInfo fileInfo(dataDir.absoluteFilePath(entry)); - if (fileInfo.isFile() && !fileInfo.isSymLink()) { - const QString absoluteEntryFilePath = dataDir.absoluteFilePath(entry); - if (Lib7z::isSupportedArchive(absoluteEntryFilePath)) { - QFile tmp(absoluteEntryFilePath); - QString target = QString::fromLatin1("%1/%3%2").arg(namedRepoDir, entry, info.version); - qDebug() << QString::fromLatin1("Copying archive from '%1' to '%2'").arg(tmp.fileName(), - target); - if (!tmp.copy(target)) { - throw QInstaller::Error(QString::fromLatin1("Could not copy '%1' to '%2': %3") - .arg(tmp.fileName(), target, tmp.errorString())); + foreach (const QString &packageDir, packageDirs) { + const QDir dataDir(QString::fromLatin1("%1/%2/data").arg(packageDir, name)); + foreach (const QString &entry, dataDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot | QDir::Files)) { + QFileInfo fileInfo(dataDir.absoluteFilePath(entry)); + if (fileInfo.isFile() && !fileInfo.isSymLink()) { + const QString absoluteEntryFilePath = dataDir.absoluteFilePath(entry); + if (Lib7z::isSupportedArchive(absoluteEntryFilePath)) { + QFile tmp(absoluteEntryFilePath); + QString target = QString::fromLatin1("%1/%3%2").arg(namedRepoDir, entry, info.version); + qDebug() << QString::fromLatin1("Copying archive from '%1' to '%2'").arg(tmp.fileName(), + target); + if (!tmp.copy(target)) { + throw QInstaller::Error(QString::fromLatin1("Could not copy '%1' to '%2': %3") + .arg(tmp.fileName(), target, tmp.errorString())); + } + compressedFiles.append(target); + } else { + filesToCompress.append(absoluteEntryFilePath); } + } else if (fileInfo.isDir()) { + qDebug() << "Compressing data directory" << entry; + QString target = QString::fromLatin1("%1/%3%2.7z").arg(namedRepoDir, entry, info.version); + QInstallerTools::compressPaths(QStringList() << dataDir.absoluteFilePath(entry), target); compressedFiles.append(target); - } else { - filesToCompress.append(absoluteEntryFilePath); + } else if (fileInfo.isSymLink()) { + filesToCompress.append(dataDir.absoluteFilePath(entry)); } - } else if (fileInfo.isDir()) { - qDebug() << "Compressing data directory" << entry; - QString target = QString::fromLatin1("%1/%3%2.7z").arg(namedRepoDir, entry, info.version); - QInstallerTools::compressPaths(QStringList() << dataDir.absoluteFilePath(entry), target); - compressedFiles.append(target); - } else if (fileInfo.isSymLink()) { - filesToCompress.append(dataDir.absoluteFilePath(entry)); } } diff --git a/tools/common/repositorygen.h b/tools/common/repositorygen.h index 49a81eb1d..c90f8332f 100644 --- a/tools/common/repositorygen.h +++ b/tools/common/repositorygen.h @@ -68,7 +68,7 @@ void printRepositoryGenOptions(); QString makePathAbsolute(const QString &path); void copyWithException(const QString &source, const QString &target, const QString &kind = QString()); -PackageInfoVector createListOfPackages(const QString &packagesDirectory, const QStringList &filteredPackages, +PackageInfoVector createListOfPackages(const QStringList &packagesDirectory, const QStringList &filteredPackages, FilterType ftype); QHash buildPathToVersionMapping(const PackageInfoVector &info); @@ -78,7 +78,7 @@ void compressMetaDirectories(const QString &repoDir, const QString &baseDir, void copyMetaData(const QString &outDir, const QString &dataDir, const PackageInfoVector &packages, const QString &appName, const QString& appVersion, const QString &redirectUpdateUrl = QString()); -void copyComponentData(const QString &packageDir, const QString &repoDir, PackageInfoVector *const infos); +void copyComponentData(const QStringList &packageDir, const QString &repoDir, PackageInfoVector *const infos); } // namespace QInstallerTools -- cgit v1.2.3