diff options
-rw-r--r-- | installerbuilder/common/repositorygen.cpp | 11 | ||||
-rw-r--r-- | installerbuilder/common/repositorygen.h | 5 | ||||
-rw-r--r-- | installerbuilder/libinstaller/getrepositorymetainfojob.cpp | 4 | ||||
-rw-r--r-- | installerbuilder/repogen/repogen.cpp | 15 |
4 files changed, 25 insertions, 10 deletions
diff --git a/installerbuilder/common/repositorygen.cpp b/installerbuilder/common/repositorygen.cpp index d281e267b..a0510b6c7 100644 --- a/installerbuilder/common/repositorygen.cpp +++ b/installerbuilder/common/repositorygen.cpp @@ -326,10 +326,11 @@ void QInstaller::compressMetaDirectories(const QString& configDir, const QString } } -void QInstaller::generateMetaDataDirectory(const QString& metapath_, const QString& dataDir, - const QVector< PackageInfo >& packages, const QString& appName, const QString& appVersion) +void QInstaller::generateMetaDataDirectory(const QString& outDir, const QString& dataDir, + const QVector< PackageInfo >& packages, const QString& appName, const QString& appVersion, + const QString &redirectUpdateUrl) { - QString metapath = metapath_; + QString metapath = outDir; if (QFileInfo(metapath).isRelative()) metapath = QDir::cleanPath(QDir::current().absoluteFilePath(metapath)); verbose() << "Generating meta data..." << std::endl; @@ -349,6 +350,10 @@ void QInstaller::generateMetaDataDirectory(const QString& metapath_, const QStri doc.createTextNode(appVersion)); root.appendChild(doc.createElement("Checksum")).appendChild( doc.createTextNode(QLatin1String("true"))); + if (!redirectUpdateUrl.isEmpty()) { + root.appendChild(doc.createElement("RedirectUpdateUrl")).appendChild( + doc.createTextNode(redirectUpdateUrl)); + } } else { root = doc.documentElement(); } diff --git a/installerbuilder/common/repositorygen.h b/installerbuilder/common/repositorygen.h index 0e149a9ca..ddd12a61d 100644 --- a/installerbuilder/common/repositorygen.h +++ b/installerbuilder/common/repositorygen.h @@ -48,12 +48,9 @@ namespace QInstaller { const QVector<PackageInfo> &infos ); void generateMetaDataDirectory( const QString &outDir, const QString &dataDir, const QVector<PackageInfo> &packages, const QString &appName, - const QString& appVersion ); + const QString& appVersion, const QString &redirectUpdateUrl = QString() ); QVector<PackageInfo> createListOfPackages( const QStringList &components, const QString &packagesDirectory, bool addDependencies = true ); - void generateMetaDataDirectory( const QString &outDir, const QString &dataDir, - const QVector<PackageInfo> &packages, const QString &appName, - const QString &appVersion ); } #endif // QINSTALLER_REPOSITORYGEN_H diff --git a/installerbuilder/libinstaller/getrepositorymetainfojob.cpp b/installerbuilder/libinstaller/getrepositorymetainfojob.cpp index 1313472b9..28d1fd77f 100644 --- a/installerbuilder/libinstaller/getrepositorymetainfojob.cpp +++ b/installerbuilder/libinstaller/getrepositorymetainfojob.cpp @@ -287,6 +287,10 @@ void GetRepositoryMetaInfoJob::updatesXmlDownloadFinished() m_packageVersions << c2.at(j).toElement().text(); else if (c2.at(j).toElement().tagName() == QLatin1String("SHA1")) m_packageHash << c2.at(j).toElement().text(); + } else if (el.tagName() == QLatin1String("RedirectUpdateUrl")) { // received a new URL for package download + m_repository.setUrl(QUrl(el.text())); // update the internal repo container + startUpdatesXmlDownload(); // ... and start over + return; } } diff --git a/installerbuilder/repogen/repogen.cpp b/installerbuilder/repogen/repogen.cpp index 9aec9ba23..5d8a36d09 100644 --- a/installerbuilder/repogen/repogen.cpp +++ b/installerbuilder/repogen/repogen.cpp @@ -62,11 +62,12 @@ static void printUsage() std::cout << " -c|--config dir The directory containing the installer configuration " "files to use." << std::endl; std::cout << " -e|--exclude p1,...,pn exclude the given packages and their dependencies from the repository" << std::endl; + std::cout << " -u|--updateurl url instructs clients to receive updates from a different location" << std::endl; std::cout << " -v|--verbose Verbose output" << std::endl; std::cout << " --single Put only the given components (not their dependencies) into the (already existing) repository" << std::endl; std::cout << std::endl; std::cout << "Example:" << std::endl; - std::cout << " " << appName << " -p ../examples/packages -c ../examples/config repository/ com.nokia.sdk" << std::endl; + std::cout << " " << appName << " -p ../examples/packages -c ../examples/config -u http://www.some-server.com:8080 repository/ com.nokia.sdk" << std::endl; } static int printErrorAndUsageAndExit( const QString& err ) @@ -103,6 +104,7 @@ int main( int argc, char** argv ) { bool replaceSingleComponent = false; QString packagesDir; QString configDir; + QString redirectUpdateUrl; //TODO: use a for loop without removing values from args like it is in binarycreator.cpp //for (QStringList::const_iterator it = args.begin(); it != args.end(); ++it) { @@ -150,7 +152,14 @@ int main( int argc, char** argv ) { } configDir = args.first(); args.removeFirst(); - } else { + } else if (args.first() == QLatin1String("-u") || args.first() == QLatin1String("--updateurl")) { + args.removeFirst(); + if (args.isEmpty()) + return printErrorAndUsageAndExit(QObject::tr("Error: Config parameter missing argument")); + redirectUpdateUrl = args.first(); + args.removeFirst(); + } + else { printUsage(); return 1; } @@ -205,7 +214,7 @@ int main( int argc, char** argv ) { const Settings &settings = Settings::fromFileAndPrefix(configDir + QLatin1String("/config.xml"), configDir); generateMetaDataDirectory(metaTmp, repositoryDir, packages, settings.applicationName(), - settings.applicationVersion()); + settings.applicationVersion(), redirectUpdateUrl); compressMetaDirectories(configDir, metaTmp, metaTmp, pathToVersionMapping); QFile::remove(QFileInfo(repositoryDir, QLatin1String("Updates.xml")).absoluteFilePath()); |