diff options
author | Tim Jenssen <tim.jenssen@digia.com> | 2013-04-03 16:50:35 +0200 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@digia.com> | 2013-04-04 10:32:35 +0200 |
commit | 546b7d16d017c9cffdff731400207177b7499488 (patch) | |
tree | 377a6c5fdee52dc32c0bf8452ec6d48359f1e626 /src/libs/installer/settings.cpp | |
parent | f6d6b61f0144c52126f0b11edf82e8660efc18c7 (diff) | |
parent | 59204c3a70b2067f8df39a57bb70a3dfb944a4b7 (diff) |
Merge remote-tracking branch 'origin/1.3'
Conflicts:
installerfw.pri
src/libs/installer/settings.cpp
tests/auto/installer/settings/tst_settings.cpp
Change-Id: Idb89f22fe940a730ed03a7d10f11e1b5fa655b49
Diffstat (limited to 'src/libs/installer/settings.cpp')
-rw-r--r-- | src/libs/installer/settings.cpp | 78 |
1 files changed, 50 insertions, 28 deletions
diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp index 602c6cc06..3ba85cdd6 100644 --- a/src/libs/installer/settings.cpp +++ b/src/libs/installer/settings.cpp @@ -41,6 +41,7 @@ #include "settings.h" #include "errors.h" +#include "qinstallerglobal.h" #include "repository.h" #include <QtCore/QFileInfo> @@ -80,38 +81,57 @@ static QSet<T> variantListToSet(const QVariantList &list) return set; } -static QSet<Repository> readRepositories(QXmlStreamReader &reader, bool isDefault) +static void raiseError(QXmlStreamReader &reader, const QString &error, Settings::ParseMode parseMode) +{ + if (parseMode == Settings::StrictParseMode) { + reader.raiseError(error); + } else { + QFile *xmlFile = qobject_cast<QFile*>(reader.device()); + if (xmlFile) { + qWarning() << QString::fromLatin1("Ignoring following settings reader error in %1, line %2, " + "column %3: %4").arg(xmlFile->fileName()).arg(reader.lineNumber()).arg(reader.columnNumber()) + .arg(reader.errorString()); + } else { + qWarning("Ignoring following settings reader error: %s", qPrintable(error)); + } + } +} + +static QSet<Repository> readRepositories(QXmlStreamReader &reader, bool isDefault, Settings::ParseMode parseMode) { QSet<Repository> set; while (reader.readNextStartElement()) { if (reader.name() == QLatin1String("Repository")) { Repository repo(QString(), isDefault); while (reader.readNextStartElement()) { - if (reader.name() == QLatin1String("Url")) + if (reader.name() == QLatin1String("Url")) { repo.setUrl(reader.readElementText()); - else if (reader.name() == QLatin1String("Username")) + } else if (reader.name() == QLatin1String("Username")) { repo.setUsername(reader.readElementText()); - else if (reader.name() == QLatin1String("Password")) + } else if (reader.name() == QLatin1String("Password")) { repo.setPassword(reader.readElementText()); - else if (reader.name() == QLatin1String("Enabled")) + } else if (reader.name() == QLatin1String("Enabled")) { repo.setEnabled(bool(reader.readElementText().toInt())); - else - reader.raiseError(QString::fromLatin1("Unexpected element '%1'.").arg( - reader.name().toString())); - - if (!reader.attributes().isEmpty()) - reader.raiseError(QString::fromLatin1("Unexpected attribute for element '%1'.").arg( - reader.name().toString())); + } else { + raiseError(reader, QString::fromLatin1("Unexpected element '%1'.").arg(reader.name() + .toString()), parseMode); + } + + if (!reader.attributes().isEmpty()) { + raiseError(reader, QString::fromLatin1("Unexpected attribute for element '%1'.") + .arg(reader.name().toString()), parseMode); + } } set.insert(repo); } else { - reader.raiseError(QString::fromLatin1("Unexpected element '%1'.").arg( - reader.name().toString())); + raiseError(reader, QString::fromLatin1("Unexpected element '%1'.").arg(reader.name().toString()), + parseMode); } - if (!reader.attributes().isEmpty()) - reader.raiseError(QString::fromLatin1("Unexpected attribute for element '%1'.").arg( - reader.name().toString())); + if (!reader.attributes().isEmpty()) { + raiseError(reader, QString::fromLatin1("Unexpected attribute for element '%1'.").arg(reader + .name().toString()), parseMode); + } } return set; } @@ -162,7 +182,7 @@ Settings& Settings::operator=(const Settings &other) } /* static */ -Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix) +Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix, ParseMode parseMode) { QFile file(path); QFile overrideConfig(QLatin1String(":/overrideconfig.xml")); @@ -175,9 +195,10 @@ Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix) QXmlStreamReader reader(&file); if (reader.readNextStartElement()) { - if (reader.name() != QLatin1String("Installer")) - reader.raiseError(QString::fromLatin1("Unexpected element '%1' as root element.").arg( - reader.name().toString())); + if (reader.name() != QLatin1String("Installer")) { + raiseError(reader, QString::fromLatin1("Unexpected element '%1' as root element.").arg(reader + .name().toString()), parseMode); + } } QStringList elementList; elementList << scName << scVersion << scTitle << scPublisher << scProductUrl @@ -195,12 +216,13 @@ Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix) s.d->m_data.insert(scPrefix, prefix); while (reader.readNextStartElement()) { const QString name = reader.name().toString(); - if (!elementList.contains(name)) - reader.raiseError(QString::fromLatin1("Unexpected element '%1'.").arg(name)); + raiseError(reader, QString::fromLatin1("Unexpected element '%1'.").arg(name), parseMode); - if (!reader.attributes().isEmpty()) - reader.raiseError(QString::fromLatin1("Unexpected attribute for element '%1'.").arg(name)); + if (!reader.attributes().isEmpty()) { + raiseError(reader, QString::fromLatin1("Unexpected attribute for element '%1'.").arg(name), + parseMode); + } if (name == scIcon) qWarning() << "Deprecated element 'Icon'."; @@ -209,15 +231,15 @@ Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix) reader.raiseError(QString::fromLatin1("Element '%1' has been defined before.").arg(name)); if (name == scRemoteRepositories) { - s.addDefaultRepositories(readRepositories(reader, true)); + s.addDefaultRepositories(readRepositories(reader, true, parseMode)); } else { s.d->m_data.insert(name, reader.readElementText(QXmlStreamReader::SkipChildElements)); } } if (reader.error() != QXmlStreamReader::NoError) { - throw Error(QString::fromLatin1("Error in %1, line %2, column %3: %4") - .arg(path).arg(reader.lineNumber()).arg(reader.columnNumber()).arg(reader.errorString())); + throw Error(QString::fromLatin1("Error in %1, line %2, column %3: %4").arg(path).arg(reader + .lineNumber()).arg(reader.columnNumber()).arg(reader.errorString())); } if (s.d->m_data.value(scName).isNull()) |