From 2f4c977cd691e29ebd36f28ad724ee522b9e9e00 Mon Sep 17 00:00:00 2001 From: kh1 Date: Wed, 7 Nov 2012 14:07:05 +0100 Subject: Compress symlinks instead of resolving them. Task-number: QTIFW-136 Task-number: QTIFW-137 Do not advance the dir iterator while recursing thru directories. Change-Id: I14a69c7a154c9ff0268ad63c3a926cfefe4f4a11 Reviewed-by: Tim Jenssen --- tools/common/repositorygen.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/tools/common/repositorygen.cpp b/tools/common/repositorygen.cpp index 0f49466f3..92f5c7f78 100644 --- a/tools/common/repositorygen.cpp +++ b/tools/common/repositorygen.cpp @@ -183,11 +183,10 @@ void QInstallerTools::generateMetaDataDirectory(const QString &outDir, const QSt quint64 componentSize = 0; quint64 compressedComponentSize = 0; - const QString cmpDataDir = QString::fromLatin1("%1/%2").arg(dataDir, it->name); - const QFileInfoList entries = !QDir(cmpDataDir + QLatin1String("/data")).exists() - ? QDir(cmpDataDir).entryInfoList(QDir::Files | QDir::NoDotAndDotDot) - : QDir(cmpDataDir + QLatin1String("/data")).entryInfoList(QDir::Files - | QDir::Dirs | QDir::NoDotAndDotDot); + const QDir::Filters filters = QDir::Files | QDir::NoDotAndDotDot; + const QDir cmpDataDir = QString::fromLatin1("%1/%2/data").arg(dataDir, it->name); + const QFileInfoList entries = cmpDataDir.exists() ? cmpDataDir.entryInfoList(filters | QDir::Dirs) + : QDir(QString::fromLatin1("%1/%2").arg(dataDir, it->name)).entryInfoList(filters); foreach (const QFileInfo &fi, entries) { if (fi.isHidden()) @@ -197,8 +196,9 @@ void QInstallerTools::generateMetaDataDirectory(const QString &outDir, const QSt if (fi.isDir()) { QDirIterator recursDirIt(fi.filePath(), QDirIterator::Subdirectories); while (recursDirIt.hasNext()) { - componentSize += QFile(recursDirIt.next()).size(); - compressedComponentSize += QFile(recursDirIt.next()).size(); + const quint64 size = QFile(recursDirIt.next()).size(); + componentSize += size; + compressedComponentSize += size; } } else if (Lib7z::isSupportedArchive(fi.filePath())) { // if it's an archive already, list its files and sum the uncompressed sizes @@ -212,8 +212,9 @@ void QInstallerTools::generateMetaDataDirectory(const QString &outDir, const QSt } } else { // otherwise just add its size - componentSize += fi.size(); - compressedComponentSize += fi.size(); + const quint64 size = fi.size(); + componentSize += size; + compressedComponentSize += size; } } catch(...) { // ignore, that's just about the sizes - and size doesn't matter, you know? @@ -572,7 +573,7 @@ void QInstallerTools::copyComponentData(const QString &packageDir, const QString 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()) { + if (fileInfo.isFile() && !fileInfo.isSymLink()) { const QString absoluteEntryFilePath = dataDir.absoluteFilePath(entry); if (Lib7z::isSupportedArchive(absoluteEntryFilePath)) { QFile tmp(absoluteEntryFilePath); @@ -592,6 +593,8 @@ void QInstallerTools::copyComponentData(const QString &packageDir, const QString 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)); } } -- cgit v1.2.3