From 2957e28288a472d2e9507762e85939c0a0de4b4d Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Mon, 14 May 2012 15:32:58 +0200 Subject: remove the limitation that archivegen could handle directories only Change-Id: I5e7b6740d6df1b858cee091a1174e8fd64e477a7 Reviewed-by: Niels Weber --- src/libs/installer/lib7z_facade.cpp | 27 +++++++++++++-------------- src/libs/installer/lib7z_facade.h | 4 ++-- tools/archivegen/archive.cpp | 2 +- tools/common/repositorygen.cpp | 13 ++++--------- tools/common/repositorygen.h | 2 +- 5 files changed, 21 insertions(+), 27 deletions(-) diff --git a/src/libs/installer/lib7z_facade.cpp b/src/libs/installer/lib7z_facade.cpp index 14bfd25a0..da25c6d28 100644 --- a/src/libs/installer/lib7z_facade.cpp +++ b/src/libs/installer/lib7z_facade.cpp @@ -1011,9 +1011,9 @@ public: // TODO! return S_OK; } - void setSource(const QStringList &dir) + void setSourcePaths(const QStringList &paths) { - sourceDir = dir; + sourcePaths = paths; } void setTarget(QIODevice* archive) { @@ -1024,7 +1024,7 @@ private: UpdateCallback* const q; QIODevice* target; - QStringList sourceDir; + QStringList sourcePaths; }; class Lib7z::UpdateCallbackPrivate @@ -1059,9 +1059,9 @@ UpdateCallbackImpl* UpdateCallback::impl() return d->impl(); } -void UpdateCallback::setSource(const QStringList &dir) +void UpdateCallback::setSourcePaths(const QStringList &paths) { - d->impl()->setSource(dir); + d->impl()->setSourcePaths(paths); } void UpdateCallback::setTarget(QIODevice* target) @@ -1134,7 +1134,7 @@ void ExtractItemJob::setTarget(QIODevice* dev) d->target = dev; } -void Lib7z::createArchive(QIODevice* archive, const QStringList &sourceDirectories, UpdateCallback* callback) +void Lib7z::createArchive(QIODevice* archive, const QStringList &sourcePaths, UpdateCallback* callback) { assert(archive); @@ -1142,8 +1142,7 @@ void Lib7z::createArchive(QIODevice* archive, const QStringList &sourceDirectori if (!callback) callback = dummyCallback.get(); - try - { + try { std::auto_ptr< CCodecs > codecs(new CCodecs); throwIfNotOK(codecs->Load(), QObject::tr("Could not load codecs")); @@ -1157,11 +1156,11 @@ void Lib7z::createArchive(QIODevice* archive, const QStringList &sourceDirectori const QString tempFile = generateTempFileName(); NWildcard::CCensor censor; - foreach(QString dir, sourceDirectories) { - const UString sourceDirectoryPath = QString2UString(QDir::toNativeSeparators(dir)); - if (UString2QString(sourceDirectoryPath) != QDir::toNativeSeparators(dir)) - throw UString2QString(sourceDirectoryPath).toLatin1().data(); - censor.AddItem(true, sourceDirectoryPath, true); + foreach (QString dir, sourcePaths) { + const UString sourcePath = QString2UString(QDir::toNativeSeparators(dir)); + if (UString2QString(sourcePath) != QDir::toNativeSeparators(dir)) + throw UString2QString(sourcePath).toLatin1().data(); + censor.AddItem(true, sourcePath, true); } CUpdateOptions options; @@ -1177,7 +1176,7 @@ void Lib7z::createArchive(QIODevice* archive, const QStringList &sourceDirectori CUpdateErrorInfo errorInfo; callback->setTarget(archive); - callback->setSource(sourceDirectories); + callback->setSourcePaths(sourcePaths); const HRESULT res = UpdateArchive(codecs.get(), censor, options, errorInfo, 0, callback->impl()); if (res != S_OK || !QFile::exists(tempFile)) throw SevenZipException(QObject::tr("Could not create archive %1").arg(tempFile)); diff --git a/src/libs/installer/lib7z_facade.h b/src/libs/installer/lib7z_facade.h index 58774df11..afdc85cfc 100644 --- a/src/libs/installer/lib7z_facade.h +++ b/src/libs/installer/lib7z_facade.h @@ -96,7 +96,7 @@ namespace Lib7z { virtual ~UpdateCallback(); void setTarget( QIODevice* archive ); - void setSource( const QStringList& dir ); + void setSourcePaths( const QStringList& paths ); virtual UpdateCallbackImpl* impl(); @@ -130,7 +130,7 @@ namespace Lib7z { /* * @thows Lib7z::SevenZipException */ - void INSTALLER_EXPORT createArchive( QIODevice* archive, const QStringList& sourceDirectory, UpdateCallback* callback = 0 ); + void INSTALLER_EXPORT createArchive( QIODevice* archive, const QStringList& sourcePaths, UpdateCallback* callback = 0 ); /* * @throws Lib7z::SevenZipException diff --git a/tools/archivegen/archive.cpp b/tools/archivegen/archive.cpp index 2d1257ae7..3b8db3e79 100644 --- a/tools/archivegen/archive.cpp +++ b/tools/archivegen/archive.cpp @@ -64,7 +64,7 @@ int main(int argc, char *argv[]) QInstaller::init(); QInstaller::setVerbose(true); const QStringList sourceDirectories = app.arguments().mid(2); - QInstallerTools::compressDirectory(sourceDirectories, app.arguments().at(1)); + QInstallerTools::compressPaths(sourceDirectories, app.arguments().at(1)); return EXIT_SUCCESS; } catch (const Lib7z::SevenZipException &e) { std::cerr << e.message() << std::endl; diff --git a/tools/common/repositorygen.cpp b/tools/common/repositorygen.cpp index 8534c1c20..d72ea2548 100644 --- a/tools/common/repositorygen.cpp +++ b/tools/common/repositorygen.cpp @@ -65,13 +65,8 @@ void QInstallerTools::printRepositoryGenOptions() std::cout << " --ignore-invalid-packages Ignore all invalid packages instead of aborting." << std::endl; } -void QInstallerTools::compressDirectory(const QStringList &paths, const QString &archivePath) +void QInstallerTools::compressPaths(const QStringList &paths, const QString &archivePath) { - foreach (const QString &path, paths) { - if (!QFileInfo(path).exists()) - throw QInstaller::Error(QObject::tr("Folder %1 does not exist.").arg(path)); - } - QFile archive(archivePath); QInstaller::openForWrite(&archive, archivePath); Lib7z::createArchive(&archive, paths); @@ -87,7 +82,7 @@ void QInstallerTools::compressMetaDirectories(const QString &repoDir) const QString absPath = sd.absolutePath(); const QString fn = QLatin1String("meta.7z"); const QString tmpTarget = repoDir + QLatin1String("/") +fn; - compressDirectory(QStringList() << absPath, tmpTarget); + compressPaths(QStringList() << absPath, tmpTarget); QFile tmp(tmpTarget); const QString finalTarget = absPath + QLatin1String("/") + fn; if (!tmp.rename(finalTarget)) { @@ -545,7 +540,7 @@ void QInstallerTools::compressMetaDirectories(const QString &repoDir, const QStr const QString absPath = sd.absolutePath(); const QString fn = QLatin1String(versionPrefix.toLatin1() + "meta.7z"); const QString tmpTarget = repoDir + QLatin1String("/") +fn; - compressDirectory(QStringList() << absPath, tmpTarget); + compressPaths(QStringList() << absPath, tmpTarget); // remove the files that got compressed QInstaller::removeFiles(absPath, true); @@ -595,7 +590,7 @@ void QInstallerTools::copyComponentData(const QString &packageDir, const QString } else if (fileInfo.isDir()) { qDebug() << "Compressing data directory" << entry; target = QString::fromLatin1("%1/%2/%4%3.7z").arg(repoDir, name, entry, info.version); - QInstallerTools::compressDirectory(QStringList() << dataDir.absoluteFilePath(entry), target); + QInstallerTools::compressPaths(QStringList() << dataDir.absoluteFilePath(entry), target); } else { continue; } diff --git a/tools/common/repositorygen.h b/tools/common/repositorygen.h index 7cb7a07a0..0e73d8a00 100644 --- a/tools/common/repositorygen.h +++ b/tools/common/repositorygen.h @@ -59,7 +59,7 @@ enum FilterType { QHash buildPathToVersionMapping(const PackageInfoVector &info); void compressMetaDirectories(const QString &repoDir); -void compressDirectory(const QStringList &paths, const QString &archivePath); +void compressPaths(const QStringList &paths, const QString &archivePath); void compressMetaDirectories(const QString &repoDir, const QString &baseDir, const QHash &versionMapping); -- cgit v1.2.3