From: Soyoung Kim Date: Fri, 21 Dec 2012 07:47:56 +0000 (+0900) Subject: Remove installed directory and manifest file when installation failed after ace check X-Git-Tag: accepted/tizen_2.1/20130425.023916~20^2~24^2~24 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=be577a3eaba45702a9a4135c75bf5702e1de0392;p=framework%2Fweb%2Fwrt-installer.git Remove installed directory and manifest file when installation failed after ace check [Issue#] N/A [Problem] unremoved installed directory and manifest file when installation failed. [Cause] There aren't abort logic after ace check filed. [Solution] Add abrot logic for remove [SCMRequest] N/A --- diff --git a/src/jobs/widget_install/task_file_manipulation.cpp b/src/jobs/widget_install/task_file_manipulation.cpp index 45e6224..b054e55 100644 --- a/src/jobs/widget_install/task_file_manipulation.cpp +++ b/src/jobs/widget_install/task_file_manipulation.cpp @@ -265,19 +265,12 @@ void TaskFileManipulation::StepAbortRenamePath() { LogDebug("[Rename Widget Path] Aborting.... (Rename path)"); std::string widgetPath; - if (m_context.widgetConfig.packagingType == PKG_TYPE_HYBRID_WEB_APP) { + if (m_context.widgetConfig.packagingType != PKG_TYPE_HYBRID_WEB_APP) { widgetPath = m_context.locations->getPackageInstallationDir(); - } else { - widgetPath = m_context.locations->getSourceDir(); - } - struct stat fileInfo; - if (stat(widgetPath.c_str(), &fileInfo) != 0) { - LogError("Failed to get widget file path : " << widgetPath); - return; - } - - if (!(rename(widgetPath.c_str(), m_context.locations->getTemporaryPackageDir().c_str()) == 0)) { - LogError("Failed to rename"); + if (!WrtUtilRemove(widgetPath)) { + ThrowMsg(Exceptions::RemovingFolderFailure, + "Error occurs during removing existing folder"); + } } LogDebug("Rename widget path sucessful!"); } diff --git a/src/jobs/widget_install/task_manifest_file.cpp b/src/jobs/widget_install/task_manifest_file.cpp index 908c698..21743d2 100755 --- a/src/jobs/widget_install/task_manifest_file.cpp +++ b/src/jobs/widget_install/task_manifest_file.cpp @@ -110,6 +110,8 @@ TaskManifestFile::TaskManifestFile(InstallerContext &inCont) : AddStep(&TaskManifestFile::stepGenerateManifest); AddStep(&TaskManifestFile::stepParseManifest); AddStep(&TaskManifestFile::stepFinalize); + + AddAbortStep(&TaskManifestFile::stepAbortParseManifest); } else { // for widget update. AddStep(&TaskManifestFile::stepBackupIconFiles); @@ -790,5 +792,25 @@ void TaskManifestFile::setAppCategory(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(ManifestParsingError, "Parser returncode: " << code); + } + int ret = unlink(DPL::ToUTF8String(manifest_file).c_str()); + if (0 != ret) + { + LogWarning("No manifest file found: " << manifest_file); + } + +} + } //namespace WidgetInstall } //namespace Jobs diff --git a/src/jobs/widget_install/task_manifest_file.h b/src/jobs/widget_install/task_manifest_file.h index adffa7e..0755d6d 100644 --- a/src/jobs/widget_install/task_manifest_file.h +++ b/src/jobs/widget_install/task_manifest_file.h @@ -68,6 +68,8 @@ class TaskManifestFile : void stepParseManifest(); void stepParseUpgradedManifest(); + void stepAbortParseManifest(); + //For widget update void stepBackupIconFiles(); void stepUpdateFinalize();