summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--installerbuilder/common/repositorygen.cpp11
-rw-r--r--installerbuilder/common/repositorygen.h5
-rw-r--r--installerbuilder/libinstaller/getrepositorymetainfojob.cpp4
-rw-r--r--installerbuilder/repogen/repogen.cpp15
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());