diff options
author | Niels Weber <niels.weber@digia.com> | 2013-06-11 15:16:49 +0200 |
---|---|---|
committer | Niels Weber <niels.weber@digia.com> | 2013-06-11 16:29:27 +0200 |
commit | 3ddfcacc5179e8d035f04a2b363d3dbab6f6007e (patch) | |
tree | 59afb29e757da5a4be9bc6746e3bdbfd98325831 /tools | |
parent | cbfc8fe905160bb1caf57a0f0231e0dff36be2a6 (diff) |
Allow multiple package directories.
Task-number: QTIFW-24
Change-Id: I4e6e31457ecd63de7a2de98e35a7be00616151a5
Reviewed-by: Karsten Heimrich <karsten.heimrich@digia.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/binarycreator/binarycreator.cpp | 17 | ||||
-rw-r--r-- | tools/common/repositorygen.cpp | 56 | ||||
-rw-r--r-- | tools/common/repositorygen.h | 4 | ||||
-rw-r--r-- | tools/repogen/repogen.cpp | 10 |
4 files changed, 46 insertions, 41 deletions
diff --git a/tools/binarycreator/binarycreator.cpp b/tools/binarycreator/binarycreator.cpp index 5afd3f1dd..909a6af81 100644 --- a/tools/binarycreator/binarycreator.cpp +++ b/tools/binarycreator/binarycreator.cpp @@ -467,9 +467,7 @@ static void printUsage() std::cout << " -r|--resources r1,.,rn include the given resource files into the binary" << std::endl; std::cout << " -v|--verbose Verbose output" << std::endl; - std::cout << std::endl; - std::cout << "Packages are to be found in the current working directory and get listed as " - "their names" << std::endl << std::endl; + std::cout << std::endl << std::endl; std::cout << "Example (offline installer):" << std::endl; char sep = QDir::separator().toLatin1(); std::cout << " " << appName << " --offline-only -c installer-config" << sep << "config.xml -p " @@ -572,7 +570,7 @@ int main(int argc, char **argv) QString target; QString configFile; - QString packagesDirectory = QDir::currentPath(); + QStringList packagesDirectories; bool onlineOnly = false; bool offlineOnly = false; QStringList resources; @@ -593,7 +591,7 @@ int main(int argc, char **argv) return printErrorAndUsageAndExit(QString::fromLatin1("Error: Package directory not found at the " "specified location.")); } - packagesDirectory = *it; + packagesDirectories.append(*it); } else if (*it == QLatin1String("-e") || *it == QLatin1String("--exclude")) { ++it; if (!filteredPackages.isEmpty()) @@ -697,15 +695,18 @@ int main(int argc, char **argv) if (configFile.isEmpty()) return printErrorAndUsageAndExit(QString::fromLatin1("Error: No configuration file selected.")); + if (packagesDirectories.isEmpty()) + return printErrorAndUsageAndExit(QString::fromLatin1("Error: Package directory parameter missing.")); + qDebug() << "Parsed arguments, ok."; int exitCode = EXIT_FAILURE; const QString tmpMetaDir = QInstaller::createTemporaryDirectory(); try { const Settings settings = Settings::fromFileAndPrefix(configFile, QFileInfo(configFile).absolutePath()); - QInstallerTools::PackageInfoVector packages = QInstallerTools::createListOfPackages(packagesDirectory, + QInstallerTools::PackageInfoVector packages = QInstallerTools::createListOfPackages(packagesDirectories, filteredPackages, ftype); - QInstallerTools::copyMetaData(tmpMetaDir, packagesDirectory, packages, settings.applicationName(), + QInstallerTools::copyMetaData(tmpMetaDir, packagesDirectories.first(), packages, settings.applicationName(), settings.applicationVersion()); copyConfigData(configFile, tmpMetaDir + QLatin1String("/installer-config")); @@ -729,7 +730,7 @@ int main(int argc, char **argv) input.binaryResourcePath = createBinaryResourceFile(tmpMetaDir); input.binaryResources = createBinaryResourceFiles(resources); - QInstallerTools::copyComponentData(packagesDirectory, tmpMetaDir, &packages); + QInstallerTools::copyComponentData(packagesDirectories, tmpMetaDir, &packages); // now put the packages into the components section of the binary foreach (const QInstallerTools::PackageInfo &info, packages) { 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<QString, QString> 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 diff --git a/tools/repogen/repogen.cpp b/tools/repogen/repogen.cpp index dfa8852f3..f03cb8afc 100644 --- a/tools/repogen/repogen.cpp +++ b/tools/repogen/repogen.cpp @@ -103,7 +103,7 @@ int main(int argc, char** argv) QStringList filteredPackages; bool updateExistingRepository = false; - QString packagesDir; + QStringList packagesDirectories; QString redirectUpdateUrl; QInstallerTools::FilterType filterType = QInstallerTools::Exclude; bool remove = false; @@ -146,7 +146,7 @@ int main(int argc, char** argv) return printErrorAndUsageAndExit(QObject::tr("Error: Package directory not found " "at the specified location")); } - packagesDir = args.first(); + packagesDirectories.append(args.first()); args.removeFirst(); } else if (args.first() == QLatin1String("-c") || args.first() == QLatin1String("--config")) { args.removeFirst(); @@ -172,7 +172,7 @@ int main(int argc, char** argv) } } - if (packagesDir.isEmpty() || (args.count() != 1)) { + if (packagesDirectories.isEmpty() || (args.count() != 1)) { printUsage(); return 1; } @@ -191,7 +191,7 @@ int main(int argc, char** argv) .arg(repositoryDir)); } - QInstallerTools::PackageInfoVector packages = QInstallerTools::createListOfPackages(packagesDir, + QInstallerTools::PackageInfoVector packages = QInstallerTools::createListOfPackages(packagesDirectories, filteredPackages, filterType); QHash<QString, QString> pathToVersionMapping = QInstallerTools::buildPathToVersionMapping(packages); @@ -202,7 +202,7 @@ int main(int argc, char** argv) } tmpMetaDir = QInstaller::createTemporaryDirectory(); - QInstallerTools::copyComponentData(packagesDir, repositoryDir, &packages); + QInstallerTools::copyComponentData(packagesDirectories, repositoryDir, &packages); QInstallerTools::copyMetaData(tmpMetaDir, repositoryDir, packages, QLatin1String("{AnyApplication}"), QLatin1String(QUOTE(IFW_REPOSITORY_FORMAT_VERSION)), redirectUpdateUrl); QInstallerTools::compressMetaDirectories(tmpMetaDir, tmpMetaDir, pathToVersionMapping); |