From c0d3df4e0d0f6a4877a8b90ab13baa39292664f6 Mon Sep 17 00:00:00 2001 From: Soyoung Kim Date: Mon, 5 Aug 2013 20:32:00 +0900 Subject: [PATCH] separate generation manifest and update pkginfo. [Issue#] N/A [Problem] N/A [Cause] N/A [Solution] To update package info separate from generation manifest file. Because package info is double updated when hybrid app. [SCMRequest] N/A Change-Id: Ib32dd11d6108630480918bff9529aa85a6c56185 --- src/CMakeLists.txt | 2 +- src/jobs/widget_install/job_widget_install.cpp | 6 +- src/jobs/widget_install/task_install_ospsvc.cpp | 25 ---- src/jobs/widget_install/task_install_ospsvc.h | 1 - src/jobs/widget_install/task_manifest_file.cpp | 67 +--------- src/jobs/widget_install/task_manifest_file.h | 2 - ...k_certificates.cpp => task_pkg_info_update.cpp} | 147 +++++++++++++++++---- ...{task_certificates.h => task_pkg_info_update.h} | 41 +++--- src/jobs/widget_install/task_smack.cpp | 4 - src/jobs/widget_install/widget_install_context.h | 3 +- 10 files changed, 146 insertions(+), 152 deletions(-) rename src/jobs/widget_install/{task_certificates.cpp => task_pkg_info_update.cpp} (61%) rename src/jobs/widget_install/{task_certificates.h => task_pkg_info_update.h} (54%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 93a2431..6192474 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -77,8 +77,8 @@ SET(INSTALLER_SOURCES ${INSTALLER_JOBS}/widget_install/task_update_files.cpp ${INSTALLER_JOBS}/widget_install/task_remove_backup.cpp ${INSTALLER_JOBS}/widget_install/task_encrypt_resource.cpp - ${INSTALLER_JOBS}/widget_install/task_certificates.cpp ${INSTALLER_JOBS}/widget_install/task_prepare_reinstall.cpp + ${INSTALLER_JOBS}/widget_install/task_pkg_info_update.cpp ${INSTALLER_JOBS}/widget_install/widget_security.cpp ${INSTALLER_JOBS}/widget_install/widget_update_info.cpp ${INSTALLER_JOBS}/widget_install/directory_api.cpp diff --git a/src/jobs/widget_install/job_widget_install.cpp b/src/jobs/widget_install/job_widget_install.cpp index 99d102d..e746f01 100644 --- a/src/jobs/widget_install/job_widget_install.cpp +++ b/src/jobs/widget_install/job_widget_install.cpp @@ -68,7 +68,7 @@ #include #include #include -#include +#include #include #include @@ -205,10 +205,10 @@ JobWidgetInstall::JobWidgetInstall( { AddTask(new TaskInstallOspsvc(m_installerContext)); } - AddTask(new TaskCertificates(m_installerContext)); AddTask(new TaskDatabase(m_installerContext)); AddTask(new TaskAceCheck(m_installerContext)); AddTask(new TaskSmack(m_installerContext)); + AddTask(new TaskPkgInfoUpdate(m_installerContext)); } else if (result == ConfigureResult::Updated) { LogDebug("Configure installation updated"); LogDebug("Widget Update"); @@ -245,7 +245,6 @@ JobWidgetInstall::JobWidgetInstall( { AddTask(new TaskInstallOspsvc(m_installerContext)); } - AddTask(new TaskCertificates(m_installerContext)); AddTask(new TaskDatabase(m_installerContext)); AddTask(new TaskAceCheck(m_installerContext)); //TODO: remove widgetHandle from this task and move before database task @@ -253,6 +252,7 @@ JobWidgetInstall::JobWidgetInstall( // Any error in acecheck while update will break widget AddTask(new TaskSmack(m_installerContext)); AddTask(new TaskRemoveBackupFiles(m_installerContext)); + AddTask(new TaskPkgInfoUpdate(m_installerContext)); } else { // Installation is not allowed to proceed due to widget update policy LogWarning("Configure installation failed!"); diff --git a/src/jobs/widget_install/task_install_ospsvc.cpp b/src/jobs/widget_install/task_install_ospsvc.cpp index 29228e3..0a3e2f6 100644 --- a/src/jobs/widget_install/task_install_ospsvc.cpp +++ b/src/jobs/widget_install/task_install_ospsvc.cpp @@ -52,7 +52,6 @@ TaskInstallOspsvc::TaskInstallOspsvc(InstallerContext& context) : { AddStep(&TaskInstallOspsvc::StartStep); AddStep(&TaskInstallOspsvc::StepInstallOspService); - AddStep(&TaskInstallOspsvc::StepUpdateManifestFile); AddStep(&TaskInstallOspsvc::EndStep); } @@ -96,30 +95,6 @@ void TaskInstallOspsvc::StepInstallOspService() pclose(fd); } -void TaskInstallOspsvc::StepUpdateManifestFile() -{ - std::string pkgid = DPL::ToUTF8String(m_context.widgetConfig.tzPkgid); - pkgmgrinfo_pkginfo_h handle; - - LogDebug("StepUpdateManifestFile"); - std::ostringstream manifest_file; - if (m_context.mode.rootPath == InstallMode::RootPath::RO) { - manifest_file << "/usr/share/packages/"; //TODO constant with path - } else { - manifest_file << "/opt/share/packages/"; //TODO constant with path - } - manifest_file << pkgid; - manifest_file << ".xml"; - LogDebug("manifest file : " << manifest_file.str()); - - int code = pkgmgr_parser_parse_manifest_for_upgrade( - manifest_file.str().c_str(), NULL); - - if (code != 0) { - LogError("Manifest parser error: " << code); - } -} - void TaskInstallOspsvc::StartStep() { LogDebug("--------- : START ----------"); diff --git a/src/jobs/widget_install/task_install_ospsvc.h b/src/jobs/widget_install/task_install_ospsvc.h index 1385580..3e3a7e6 100644 --- a/src/jobs/widget_install/task_install_ospsvc.h +++ b/src/jobs/widget_install/task_install_ospsvc.h @@ -36,7 +36,6 @@ class TaskInstallOspsvc : public DPL::TaskDecl InstallerContext &m_context; void StepInstallOspService(); - void StepUpdateManifestFile(); void StepAbortInstall(); diff --git a/src/jobs/widget_install/task_manifest_file.cpp b/src/jobs/widget_install/task_manifest_file.cpp index 7d85146..37d856e 100644 --- a/src/jobs/widget_install/task_manifest_file.cpp +++ b/src/jobs/widget_install/task_manifest_file.cpp @@ -117,7 +117,6 @@ TaskManifestFile::TaskManifestFile(InstallerContext &inCont) : AddStep(&TaskManifestFile::stepCopyLiveboxFiles); AddStep(&TaskManifestFile::stepCreateExecFile); AddStep(&TaskManifestFile::stepGenerateManifest); - AddStep(&TaskManifestFile::stepParseManifest); AddAbortStep(&TaskManifestFile::stepAbortIconFiles); } else { @@ -125,9 +124,6 @@ TaskManifestFile::TaskManifestFile(InstallerContext &inCont) : AddStep(&TaskManifestFile::stepCopyLiveboxFiles); AddStep(&TaskManifestFile::stepCreateExecFile); AddStep(&TaskManifestFile::stepGenerateManifest); - AddStep(&TaskManifestFile::stepParseManifest); - - AddAbortStep(&TaskManifestFile::stepAbortParseManifest); } } @@ -599,53 +595,11 @@ void TaskManifestFile::stepGenerateManifest() commit_manifest = destFile.str(); LogDebug("Commiting manifest file : " << commit_manifest); - m_context.job->UpdateProgress( - InstallerContext::INSTALL_CREATE_MANIFEST, - "Widget Manifest Creation Finished"); -} - -void TaskManifestFile::stepParseManifest() -{ - int code = 0; - char* updateTags[3] = {NULL, }; - - if (!m_context.mode.removable) { - updateTags[0] = "preload=false"; - updateTags[1] = "removable=false"; - updateTags[2] = NULL; - - } - commitManifest(); - if (m_context.isUpdateMode || ( - m_context.mode.rootPath == InstallMode::RootPath::RO - && m_context.mode.installTime == InstallMode::InstallTime::PRELOAD - && m_context.mode.extension == InstallMode::ExtensionType::DIR)) { - - if (m_context.widgetConfig.packagingType != PKG_TYPE_HYBRID_WEB_APP) { - code = pkgmgr_parser_parse_manifest_for_upgrade( - commit_manifest.c_str(), (updateTags[0] == NULL) ? NULL : updateTags); - - if (code != 0) { - LogError("Manifest parser error: " << code); - ThrowMsg(Exceptions::ManifestInvalid, "Parser returncode: " << code); - } - } - } else { - code = pkgmgr_parser_parse_manifest_for_installation( - commit_manifest.c_str(), (updateTags[0] == NULL) ? NULL : updateTags); - - if (code != 0) { - LogError("Manifest parser error: " << code); - ThrowMsg(Exceptions::ManifestInvalid, "Parser returncode: " << code); - } - } - m_context.job->UpdateProgress( - InstallerContext::INSTALL_CREATE_MANIFEST, - "Widget Manifest Parsing Finished"); - LogDebug("Manifest parsed"); + InstallerContext::INSTALL_CREATE_MANIFEST, + "Widget Manifest Creation Finished"); } void TaskManifestFile::commitManifest() @@ -1051,23 +1005,6 @@ void TaskManifestFile::setMetadata(UiApplication &uiApp) } } -void TaskManifestFile::stepAbortParseManifest() -{ - LogError("[Parse Manifest] Abroting...."); - - int code = pkgmgr_parser_parse_manifest_for_uninstallation( - DPL::ToUTF8String(manifest_file).c_str(), NULL); - - if (0 != code) { - LogWarning("Manifest parser error: " << code); - ThrowMsg(Exceptions::ManifestInvalid, "Parser returncode: " << code); - } - int ret = unlink(DPL::ToUTF8String(manifest_file).c_str()); - if (0 != ret) { - LogWarning("No manifest file found: " << manifest_file); - } -} - void TaskManifestFile::setLiveBoxInfo(Manifest& manifest) { FOREACH(it, m_context.widgetConfig.configInfo.m_livebox) { diff --git a/src/jobs/widget_install/task_manifest_file.h b/src/jobs/widget_install/task_manifest_file.h index 5f006da..a318fc8 100644 --- a/src/jobs/widget_install/task_manifest_file.h +++ b/src/jobs/widget_install/task_manifest_file.h @@ -64,8 +64,6 @@ class TaskManifestFile : void stepCopyIconFiles(); void stepCopyLiveboxFiles(); void stepGenerateManifest(); - void stepParseManifest(); - void stepParseUpgradedManifest(); void stepAbortParseManifest(); diff --git a/src/jobs/widget_install/task_certificates.cpp b/src/jobs/widget_install/task_pkg_info_update.cpp similarity index 61% rename from src/jobs/widget_install/task_certificates.cpp rename to src/jobs/widget_install/task_pkg_info_update.cpp index 5283e53..7f6a1d5 100644 --- a/src/jobs/widget_install/task_certificates.cpp +++ b/src/jobs/widget_install/task_pkg_info_update.cpp @@ -13,42 +13,105 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* - * @file task_certificates.cpp - * @author Leerang Song(leerang.song@samsung.com) +/** + * @file task_pkg_info_update.cpp + * @author Soyoung Kim (sy037.kim@samsung.com) * @version 1.0 - * @brief Implementation file for installer task certificates + * @brief Implementation file for installer task information about package + * update */ -#include -#include -#include -#include -#include -#include -#include +#include "task_pkg_info_update.h" +#include +#include + +#include #include -#include -#include +#include #include #include +#include +#include +#include +#include +#include + +#include +#include +#include using namespace WrtDB; +namespace { +} + namespace Jobs { namespace WidgetInstall { -TaskCertificates::TaskCertificates(InstallerContext& context) : - DPL::TaskDecl(this), - m_context(context), - m_pkgHandle(NULL) +TaskPkgInfoUpdate::TaskPkgInfoUpdate(InstallerContext& context) : + DPL::TaskDecl(this), + m_context(context) +{ + AddStep(&TaskPkgInfoUpdate::StartStep); + AddStep(&TaskPkgInfoUpdate::StepPkgInfo); + AddStep(&TaskPkgInfoUpdate::StepSetCertiInfo); + AddStep(&TaskPkgInfoUpdate::EndStep); + AddStep(&TaskPkgInfoUpdate::StepSetEndofInstallation); + + AddAbortStep(&TaskPkgInfoUpdate::StepAbortCertiInfo); + AddAbortStep(&TaskPkgInfoUpdate::stepAbortParseManifest); +} + +void TaskPkgInfoUpdate::StepPkgInfo() { - AddStep(&TaskCertificates::StartStep); - AddStep(&TaskCertificates::StepSetCertiInfo); - AddStep(&TaskCertificates::EndStep); - AddAbortStep(&TaskCertificates::StepAbortCertiInfo); + int code = 0; + char* updateTags[3] = {NULL, }; + + if (!m_context.mode.removable) { + updateTags[0] = "preload=false"; + updateTags[1] = "removable=false"; + updateTags[2] = NULL; + + } + + if (m_context.mode.rootPath == InstallMode::RootPath::RO) { + m_manifest += "/usr/share/packages/"; + } else { + m_manifest += "/opt/share/packages/"; + } + m_manifest += DPL::ToUTF8String(m_context.widgetConfig.tzPkgid) + ".xml"; + LogDebug("manifest file : " << m_manifest); + + if (m_context.isUpdateMode || ( + m_context.mode.rootPath == InstallMode::RootPath::RO + && m_context.mode.installTime == InstallMode::InstallTime::PRELOAD + && m_context.mode.extension == InstallMode::ExtensionType::DIR)) { + + if (m_context.widgetConfig.packagingType != PKG_TYPE_HYBRID_WEB_APP) { + code = pkgmgr_parser_parse_manifest_for_upgrade( + m_manifest.c_str(), (updateTags[0] == NULL) ? NULL : updateTags); + + if (code != 0) { + LogError("Manifest parser error: " << code); + ThrowMsg(Exceptions::ManifestInvalid, "Parser returncode: " << code); + } + } + } else { + code = pkgmgr_parser_parse_manifest_for_installation( + m_manifest.c_str(), (updateTags[0] == NULL) ? NULL : updateTags); + + if (code != 0) { + LogError("Manifest parser error: " << code); + ThrowMsg(Exceptions::ManifestInvalid, "Parser returncode: " << code); + } + } + + m_context.job->UpdateProgress( + InstallerContext::INSTALL_PKGINFO_UPDATE, + "Manifest Update Finished"); + LogDebug("Manifest parsed"); } -void TaskCertificates::StepSetCertiInfo() +void TaskPkgInfoUpdate::StepSetCertiInfo() { LogDebug("StepSetCertiInfo"); @@ -78,11 +141,12 @@ void TaskCertificates::StepSetCertiInfo() } } -void TaskCertificates::SetCertiInfo(CertificateSource source) +void TaskPkgInfoUpdate::SetCertiInfo(int source) { LogDebug("Set CertiInfo to pkgmgr : " << source); CertificateChainList certificateChainList; - m_context.widgetSecurity.getCertificateChainList(certificateChainList, source); + m_context.widgetSecurity.getCertificateChainList(certificateChainList, + (CertificateSource)source); FOREACH(it, certificateChainList) { @@ -167,7 +231,7 @@ void TaskCertificates::SetCertiInfo(CertificateSource source) } } -void TaskCertificates::StepAbortCertiInfo() +void TaskPkgInfoUpdate::StepAbortCertiInfo() { if ((pkgmgr_installer_delete_certinfo( const_cast(DPL::ToUTF8String( @@ -178,18 +242,43 @@ void TaskCertificates::StepAbortCertiInfo() } } -void TaskCertificates::StartStep() +void TaskPkgInfoUpdate::StartStep() { - LogDebug("--------- : START ----------"); + LogDebug("--------- : START ----------"); } -void TaskCertificates::EndStep() +void TaskPkgInfoUpdate::EndStep() { m_context.job->UpdateProgress( InstallerContext::INSTALL_SET_CERTINFO, "Save certinfo to pkgmgr"); - LogDebug("--------- : END ----------"); + LogDebug("--------- : END ----------"); } + +void TaskPkgInfoUpdate::stepAbortParseManifest() +{ + LogError("[Parse Manifest] Abroting...."); + + int code = pkgmgr_parser_parse_manifest_for_uninstallation( + m_manifest.c_str(), NULL); + + if (0 != code) { + LogWarning("Manifest parser error: " << code); + ThrowMsg(Exceptions::ManifestInvalid, "Parser returncode: " << code); + } + int ret = unlink(m_manifest.c_str()); + if (0 != ret) { + LogWarning("No manifest file found: " << m_manifest); + } +} + +void TaskPkgInfoUpdate::StepSetEndofInstallation() +{ + m_context.job->UpdateProgress( + InstallerContext::INSTALL_END, + "End installation"); +} + } //namespace WidgetInstall } //namespace Jobs diff --git a/src/jobs/widget_install/task_certificates.h b/src/jobs/widget_install/task_pkg_info_update.h similarity index 54% rename from src/jobs/widget_install/task_certificates.h rename to src/jobs/widget_install/task_pkg_info_update.h index 215f543..e1e9235 100644 --- a/src/jobs/widget_install/task_certificates.h +++ b/src/jobs/widget_install/task_pkg_info_update.h @@ -14,46 +14,45 @@ * limitations under the License. */ /* - * @file task_certificates.h - * @author Leerang Song(leerang.song@samsung.com) - * @version 1.0 - * @brief Header file for installer task certificates + * @file task_pkg_info_update.h + * @author soyoung kim (sy037.kim@samsung.com) + * @version 1.0 */ -#ifndef INSTALLER_CORE_JOS_WIDGET_INSTALL_TASK_CERTIFICATES_H -#define INSTALLER_CORE_JOS_WIDGET_INSTALL_TASK_CERTIFICATES_H -#include -#include -#include -#include +#ifndef SRC_JOBS_WIDGET_INSTALL_TASK_PKG_INFO_UPDATE_H_ +#define SRC_JOBS_WIDGET_INSTALL_TASK_PKG_INFO_UPDATE_H_ +#include +#include #include -using namespace WrtDB; class InstallerContext; namespace Jobs { namespace WidgetInstall { -class TaskCertificates : - public DPL::TaskDecl, - public DPL::Event::ICDelegateSupport +class TaskPkgInfoUpdate : public DPL::TaskDecl { private: - InstallerContext& m_context; + // Installation context + InstallerContext &m_context; + void StepPkgInfo(); void StepSetCertiInfo(); + void SetCertiInfo(int source); + void StepSetEndofInstallation(); + + void stepAbortParseManifest(); void StepAbortCertiInfo(); - void SetCertiInfo(CertificateSource source); void StartStep(); void EndStep(); pkgmgr_instcertinfo_h m_pkgHandle; + std::string m_manifest; public: - TaskCertificates(InstallerContext& context); + explicit TaskPkgInfoUpdate(InstallerContext &installerContext); }; -} //namespace WidgetInstall -} //namespace Jobs - -#endif /* INSTALLER_CORE_JOS_WIDGET_INSTALL_TASK_CERTIFICATES_H */ +} // namespace WidgetInstall +} // namespace Jobs +#endif /* SRC_JOBS_WIDGET_INSTALL_TASK_PKG_INFO_UPDATE_H_ */ diff --git a/src/jobs/widget_install/task_smack.cpp b/src/jobs/widget_install/task_smack.cpp index a86e43e..f338fc3 100644 --- a/src/jobs/widget_install/task_smack.cpp +++ b/src/jobs/widget_install/task_smack.cpp @@ -279,10 +279,6 @@ void TaskSmack::StartStep() void TaskSmack::EndStep() { - m_context.job->UpdateProgress( - InstallerContext::INSTALL_END, - "End installation"); - LogDebug("--------- : END ----------"); } } //namespace WidgetInstall diff --git a/src/jobs/widget_install/widget_install_context.h b/src/jobs/widget_install/widget_install_context.h index 3d735b6..0c118e9 100644 --- a/src/jobs/widget_install/widget_install_context.h +++ b/src/jobs/widget_install/widget_install_context.h @@ -67,11 +67,12 @@ struct InstallerContext INSTALL_CREATE_EXECFILE, INSTALL_CREATE_MANIFEST, INSTALL_INSTALL_OSPSVC, - INSTALL_SET_CERTINFO, INSTALL_NEW_DB_INSERT, INSTALL_ACE_PREPARE, INSTALL_ACE_CHECK, INSTALL_SMACK_ENABLE, + INSTALL_PKGINFO_UPDATE, + INSTALL_SET_CERTINFO, INSTALL_END } InstallStep; -- 2.7.4