summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorNiels Weber <niels.weber@digia.com>2013-06-11 15:16:49 +0200
committerNiels Weber <niels.weber@digia.com>2013-06-11 16:29:27 +0200
commit3ddfcacc5179e8d035f04a2b363d3dbab6f6007e (patch)
tree59afb29e757da5a4be9bc6746e3bdbfd98325831 /tools
parentcbfc8fe905160bb1caf57a0f0231e0dff36be2a6 (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.cpp17
-rw-r--r--tools/common/repositorygen.cpp56
-rw-r--r--tools/common/repositorygen.h4
-rw-r--r--tools/repogen/repogen.cpp10
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);