summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griebl <robert.griebl@pelagicore.com>2018-04-23 01:55:41 +0200
committerDominik Holland <dominik.holland@pelagicore.com>2018-04-23 09:23:55 +0000
commit405e5c3a29ff21183769e322a64bad46ea67078d (patch)
tree2ce73224e7badc6ba5199ac1b8a72658129bcf29
parent19d62811f54505c66ae8f3b661721ee87a9f0cf1 (diff)
downloadqtapplicationmanager-405e5c3a29ff21183769e322a64bad46ea67078d.tar.gz
Fix Windows/Cygwin test package creation
Change-Id: Iaafbc803b8c6a1f5a1e31ed22f9cb53300d59c82 Reviewed-by: Dominik Holland <dominik.holland@pelagicore.com>
-rw-r--r--src/tools/packager/packager.cpp275
-rwxr-xr-xtests/data/create-test-packages.sh6
2 files changed, 141 insertions, 140 deletions
diff --git a/src/tools/packager/packager.cpp b/src/tools/packager/packager.cpp
index 237f8b42..b237cc99 100644
--- a/src/tools/packager/packager.cpp
+++ b/src/tools/packager/packager.cpp
@@ -126,152 +126,153 @@ int main(int argc, char *argv[])
}
clp.setOptionsAfterPositionalArgumentsMode(QCommandLineParser::ParseAsOptions);
- PackagingJob *p = nullptr;
-
- // REMEMBER to update the completion file util/bash/appman-prompt, if you apply changes below!
- switch (command(clp)) {
- default:
- case NoCommand:
- if (clp.isSet(qSL("version")))
- clp.showVersion();
- if (clp.isSet(qSL("help")))
- clp.showHelp();
- clp.showHelp(1);
- break;
-
- case CreatePackage: {
- clp.addOption({ qSL("verbose"), qSL("Dump the package's meta-data header and footer information to stdout.") });
- clp.addOption({ qSL("json"), qSL("Output in JSON format instead of YAML.") });
- clp.addOption({{ qSL("extra-metadata"), qSL("m") }, qSL("Add extra meta-data to the package, supplied on the commandline."), qSL("yaml-snippet") });
- clp.addOption({{ qSL("extra-metadata-file"), qSL("M") }, qSL("Add extra meta-data to the package, read from file."), qSL("yaml-file") });
- clp.addOption({{ qSL("extra-signed-metadata"), qSL("s") }, qSL("Add extra, digitally signed, meta-data to the package, supplied on the commandline."), qSL("yaml-snippet") });
- clp.addOption({{ qSL("extra-signed-metadata-file"), qSL("S") }, qSL("Add extra, digitally signed, meta-data to the package, read from file."), qSL("yaml-file") });
- clp.addPositionalArgument(qSL("package"), qSL("The file name of the created package."));
- clp.addPositionalArgument(qSL("source-directory"), qSL("The package's content root directory."));
- clp.process(a);
-
- if (clp.positionalArguments().size() != 3)
+ try {
+ PackagingJob *p = nullptr;
+
+ // REMEMBER to update the completion file util/bash/appman-prompt, if you apply changes below!
+ switch (command(clp)) {
+ default:
+ case NoCommand:
+ if (clp.isSet(qSL("version")))
+ clp.showVersion();
+ if (clp.isSet(qSL("help")))
+ clp.showHelp();
clp.showHelp(1);
-
- auto parseYamlMetada = [](const QStringList &metadataSnippets, const QStringList &metadataFiles, bool isSigned) -> QVariantMap {
- QVariantMap result;
- QVector<QPair<QByteArray, QString>> metadata;
-
- for (const QString &file : metadataFiles) {
- QFile f(file);
- if (!f.open(QIODevice::ReadOnly))
- throw Exception(f, "Could not open metadata file for reading");
- metadata.append(qMakePair(f.readAll(), file));
- }
- for (const QString &snippet : metadataSnippets)
- metadata.append(qMakePair(snippet.toUtf8(), QString()));
-
- for (const auto &md : metadata) {
- QtYaml::ParseError parseError;
- const QVector<QVariant> docs = QtYaml::variantDocumentsFromYaml(md.first, &parseError);
- if (parseError.error != QJsonParseError::NoError) {
- throw Exception(Error::IO, "YAML parse error in --extra-%4metadata%5 %6 at line %1, column %2: %3")
- .arg(parseError.line).arg(parseError.column).arg(parseError.errorString())
- .arg(isSigned ? "signed-" : "").arg(md.second.isEmpty() ? "": "-file")
- .arg(md.second.isEmpty() ? qSL("option") : md.second);
+ break;
+
+ case CreatePackage: {
+ clp.addOption({ qSL("verbose"), qSL("Dump the package's meta-data header and footer information to stdout.") });
+ clp.addOption({ qSL("json"), qSL("Output in JSON format instead of YAML.") });
+ clp.addOption({{ qSL("extra-metadata"), qSL("m") }, qSL("Add extra meta-data to the package, supplied on the commandline."), qSL("yaml-snippet") });
+ clp.addOption({{ qSL("extra-metadata-file"), qSL("M") }, qSL("Add extra meta-data to the package, read from file."), qSL("yaml-file") });
+ clp.addOption({{ qSL("extra-signed-metadata"), qSL("s") }, qSL("Add extra, digitally signed, meta-data to the package, supplied on the commandline."), qSL("yaml-snippet") });
+ clp.addOption({{ qSL("extra-signed-metadata-file"), qSL("S") }, qSL("Add extra, digitally signed, meta-data to the package, read from file."), qSL("yaml-file") });
+ clp.addPositionalArgument(qSL("package"), qSL("The file name of the created package."));
+ clp.addPositionalArgument(qSL("source-directory"), qSL("The package's content root directory."));
+ clp.process(a);
+
+ if (clp.positionalArguments().size() != 3)
+ clp.showHelp(1);
+
+ auto parseYamlMetada = [](const QStringList &metadataSnippets, const QStringList &metadataFiles, bool isSigned) -> QVariantMap {
+ QVariantMap result;
+ QVector<QPair<QByteArray, QString>> metadata;
+
+ for (const QString &file : metadataFiles) {
+ QFile f(file);
+ if (!f.open(QIODevice::ReadOnly))
+ throw Exception(f, "Could not open metadata file for reading");
+ metadata.append(qMakePair(f.readAll(), file));
}
- if (docs.size() < 1) {
- throw Exception("Could not parse --extra-%1metadata%2 %3: Invalid document format")
- .arg(isSigned ? "signed-" : "").arg(md.second.isEmpty() ? "": "-file")
- .arg(md.second.isEmpty() ? qSL("option") : md.second);
+ for (const QString &snippet : metadataSnippets)
+ metadata.append(qMakePair(snippet.toUtf8(), QString()));
+
+ for (const auto &md : metadata) {
+ QtYaml::ParseError parseError;
+ const QVector<QVariant> docs = QtYaml::variantDocumentsFromYaml(md.first, &parseError);
+ if (parseError.error != QJsonParseError::NoError) {
+ throw Exception(Error::IO, "YAML parse error in --extra-%4metadata%5 %6 at line %1, column %2: %3")
+ .arg(parseError.line).arg(parseError.column).arg(parseError.errorString())
+ .arg(isSigned ? "signed-" : "").arg(md.second.isEmpty() ? "": "-file")
+ .arg(md.second.isEmpty() ? qSL("option") : md.second);
+ }
+ if (docs.size() < 1) {
+ throw Exception("Could not parse --extra-%1metadata%2 %3: Invalid document format")
+ .arg(isSigned ? "signed-" : "").arg(md.second.isEmpty() ? "": "-file")
+ .arg(md.second.isEmpty() ? qSL("option") : md.second);
+ }
+ for (auto doc : docs)
+ recursiveMergeVariantMap(result, doc.toMap());
}
- for (auto doc : docs)
- recursiveMergeVariantMap(result, doc.toMap());
- }
- return result;
- };
-
- QVariantMap extraMetaDataMap = parseYamlMetada(clp.values(qSL("extra-metadata")),
- clp.values(qSL("extra-metadata-file")),
- false);
- QVariantMap extraSignedMetaDataMap = parseYamlMetada(clp.values(qSL("extra-signed-metadata")),
- clp.values(qSL("extra-signed-metadata-file")),
- true);
-
- p = PackagingJob::create(clp.positionalArguments().at(1),
- clp.positionalArguments().at(2),
- extraMetaDataMap,
- extraSignedMetaDataMap,
- clp.isSet(qSL("json")));
- break;
- }
- case DevSignPackage:
- clp.addOption({ qSL("verbose"), qSL("Dump the package's meta-data header and footer information to stdout.") });
- clp.addOption({ qSL("json"), qSL("Output in JSON format instead of YAML.") });
- clp.addPositionalArgument(qSL("package"), qSL("File name of the unsigned package (input)."));
- clp.addPositionalArgument(qSL("signed-package"), qSL("File name of the signed package (output)."));
- clp.addPositionalArgument(qSL("certificate"), qSL("PKCS#12 certificate file."));
- clp.addPositionalArgument(qSL("password"), qSL("Password for the PKCS#12 certificate."));
- clp.process(a);
-
- if (clp.positionalArguments().size() != 5)
- clp.showHelp(1);
-
- p = PackagingJob::developerSign(clp.positionalArguments().at(1),
+ return result;
+ };
+
+ QVariantMap extraMetaDataMap = parseYamlMetada(clp.values(qSL("extra-metadata")),
+ clp.values(qSL("extra-metadata-file")),
+ false);
+ QVariantMap extraSignedMetaDataMap = parseYamlMetada(clp.values(qSL("extra-signed-metadata")),
+ clp.values(qSL("extra-signed-metadata-file")),
+ true);
+
+ p = PackagingJob::create(clp.positionalArguments().at(1),
+ clp.positionalArguments().at(2),
+ extraMetaDataMap,
+ extraSignedMetaDataMap,
+ clp.isSet(qSL("json")));
+ break;
+ }
+ case DevSignPackage:
+ clp.addOption({ qSL("verbose"), qSL("Dump the package's meta-data header and footer information to stdout.") });
+ clp.addOption({ qSL("json"), qSL("Output in JSON format instead of YAML.") });
+ clp.addPositionalArgument(qSL("package"), qSL("File name of the unsigned package (input)."));
+ clp.addPositionalArgument(qSL("signed-package"), qSL("File name of the signed package (output)."));
+ clp.addPositionalArgument(qSL("certificate"), qSL("PKCS#12 certificate file."));
+ clp.addPositionalArgument(qSL("password"), qSL("Password for the PKCS#12 certificate."));
+ clp.process(a);
+
+ if (clp.positionalArguments().size() != 5)
+ clp.showHelp(1);
+
+ p = PackagingJob::developerSign(clp.positionalArguments().at(1),
+ clp.positionalArguments().at(2),
+ clp.positionalArguments().at(3),
+ clp.positionalArguments().at(4),
+ clp.isSet(qSL("json")));
+ break;
+
+ case DevVerifyPackage:
+ clp.addOption({ qSL("verbose"), qSL("Print details regarding the verification to stdout.") });
+ clp.addPositionalArgument(qSL("package"), qSL("File name of the signed package (input)."));
+ clp.addPositionalArgument(qSL("certificates"), qSL("The developer's CA certificate file(s)."), qSL("certificates..."));
+ clp.process(a);
+
+ if (clp.positionalArguments().size() < 3)
+ clp.showHelp(1);
+
+ p = PackagingJob::developerVerify(clp.positionalArguments().at(1),
+ clp.positionalArguments().mid(2));
+ break;
+
+ case StoreSignPackage:
+ clp.addOption({ qSL("verbose"), qSL("Dump the package's meta-data header and footer information to stdout.") });
+ clp.addOption({ qSL("json"), qSL("Output in JSON format instead of YAML.") });
+ clp.addPositionalArgument(qSL("package"), qSL("File name of the unsigned package (input)."));
+ clp.addPositionalArgument(qSL("signed-package"), qSL("File name of the signed package (output)."));
+ clp.addPositionalArgument(qSL("certificate"), qSL("PKCS#12 certificate file."));
+ clp.addPositionalArgument(qSL("password"), qSL("Password for the PKCS#12 certificate."));
+ clp.addPositionalArgument(qSL("hardware-id"), qSL("Unique hardware id to which this package gets bound."));
+ clp.process(a);
+
+ if (clp.positionalArguments().size() != 6)
+ clp.showHelp(1);
+
+ p = PackagingJob::storeSign(clp.positionalArguments().at(1),
clp.positionalArguments().at(2),
clp.positionalArguments().at(3),
clp.positionalArguments().at(4),
+ clp.positionalArguments().at(5),
clp.isSet(qSL("json")));
- break;
-
- case DevVerifyPackage:
- clp.addOption({ qSL("verbose"), qSL("Print details regarding the verification to stdout.") });
- clp.addPositionalArgument(qSL("package"), qSL("File name of the signed package (input)."));
- clp.addPositionalArgument(qSL("certificates"), qSL("The developer's CA certificate file(s)."), qSL("certificates..."));
- clp.process(a);
-
- if (clp.positionalArguments().size() < 3)
- clp.showHelp(1);
-
- p = PackagingJob::developerVerify(clp.positionalArguments().at(1),
- clp.positionalArguments().mid(2));
- break;
-
- case StoreSignPackage:
- clp.addOption({ qSL("verbose"), qSL("Dump the package's meta-data header and footer information to stdout.") });
- clp.addOption({ qSL("json"), qSL("Output in JSON format instead of YAML.") });
- clp.addPositionalArgument(qSL("package"), qSL("File name of the unsigned package (input)."));
- clp.addPositionalArgument(qSL("signed-package"), qSL("File name of the signed package (output)."));
- clp.addPositionalArgument(qSL("certificate"), qSL("PKCS#12 certificate file."));
- clp.addPositionalArgument(qSL("password"), qSL("Password for the PKCS#12 certificate."));
- clp.addPositionalArgument(qSL("hardware-id"), qSL("Unique hardware id to which this package gets bound."));
- clp.process(a);
-
- if (clp.positionalArguments().size() != 6)
- clp.showHelp(1);
-
- p = PackagingJob::storeSign(clp.positionalArguments().at(1),
- clp.positionalArguments().at(2),
- clp.positionalArguments().at(3),
- clp.positionalArguments().at(4),
- clp.positionalArguments().at(5),
- clp.isSet(qSL("json")));
- break;
-
- case StoreVerifyPackage:
- clp.addOption({ qSL("verbose"), qSL("Print details regarding the verification to stdout.") });
- clp.addPositionalArgument(qSL("package"), qSL("File name of the signed package (input)."));
- clp.addPositionalArgument(qSL("certificates"), qSL("Store CA certificate file(s)."), qSL("certificates..."));
- clp.addPositionalArgument(qSL("hardware-id"), qSL("Unique hardware id to which this package was bound."));
- clp.process(a);
-
- if (clp.positionalArguments().size() < 4)
- clp.showHelp(1);
+ break;
+
+ case StoreVerifyPackage:
+ clp.addOption({ qSL("verbose"), qSL("Print details regarding the verification to stdout.") });
+ clp.addPositionalArgument(qSL("package"), qSL("File name of the signed package (input)."));
+ clp.addPositionalArgument(qSL("certificates"), qSL("Store CA certificate file(s)."), qSL("certificates..."));
+ clp.addPositionalArgument(qSL("hardware-id"), qSL("Unique hardware id to which this package was bound."));
+ clp.process(a);
+
+ if (clp.positionalArguments().size() < 4)
+ clp.showHelp(1);
+
+ p = PackagingJob::storeVerify(clp.positionalArguments().at(1),
+ clp.positionalArguments().mid(2, clp.positionalArguments().size() - 2),
+ *--clp.positionalArguments().cend());
+ break;
+ }
- p = PackagingJob::storeVerify(clp.positionalArguments().at(1),
- clp.positionalArguments().mid(2, clp.positionalArguments().size() - 2),
- *--clp.positionalArguments().cend());
- break;
- }
+ if (!p)
+ return 2;
- if (!p)
- return 2;
- try {
p->execute();
if (clp.isSet(qSL("verbose")) && !p->output().isEmpty())
fprintf(stdout, "%s\n", qPrintable(p->output()));
diff --git a/tests/data/create-test-packages.sh b/tests/data/create-test-packages.sh
index 7ec23779..c2f78f98 100755
--- a/tests/data/create-test-packages.sh
+++ b/tests/data/create-test-packages.sh
@@ -120,8 +120,8 @@ signed-key: signed-value
EOT
packager create-package "$dst/test-extra.appkg" "$src" \
- -m '{ "foo": "bar" }' -m '{ "foo2": "bar2" }' -M "$tmp/exmd" -M "$tmp/exmd2" \
- -s '{ "sfoo": "sbar" }' -s '{ "sfoo2": "sbar2" }' -S "$tmp/exmds" -S "$tmp/exmds2"
+ -m '{ "foo": "bar" }' -m '{ "foo2": "bar2" }' -M "$src/../exmd" -M "$src/../exmd2" \
+ -s '{ "sfoo": "sbar" }' -s '{ "sfoo2": "sbar2" }' -S "$src/../exmds" -S "$src/../exmds2"
info "Dev-sign package with extra meta-data"
packager dev-sign-package "$dst/test-extra.appkg" "$dst/test-extra-dev-signed.appkg" certificates/dev1.p12 password
@@ -197,7 +197,7 @@ mv "$src"/info.yaml{.orig,}
info "Create a package with an invalid info.yaml file"
mv "$src"/info.yaml{,.orig}
-sed <"$src/info.yaml.orig" >"$src/info.yaml" 's/code: "test"$/: "test"/'
+sed <"$src/info.yaml.orig" >"$src/info.yaml" 's/code: "test"/: "test"/'
tar -C "$src" -cf "$dst/test-invalid-info.appkg" -- --PACKAGE-HEADER-- info.yaml icon.png test --PACKAGE-FOOTER--
mv "$src"/info.yaml{.orig,}