Implement StepRestoreWgtSymbolicLink 62/277662/1
authorIlho Kim <ilho159.kim@samsung.com>
Fri, 8 Jul 2022 11:20:42 +0000 (20:20 +0900)
committerIlho Kim <ilho159.kim@samsung.com>
Fri, 8 Jul 2022 11:36:46 +0000 (20:36 +0900)
If the uninstallation fails with the bin path removed
recover the wgt symbolic link

Change-Id: If1a4fd95be319fded67bd778f21e9abd2fae512a
Signed-off-by: Ilho Kim <ilho159.kim@samsung.com>
src/hybrid/hybrid_installer.cc
src/wgt/step/filesystem/step_restore_wgt_symbolic_link.cc [new file with mode: 0644]
src/wgt/step/filesystem/step_restore_wgt_symbolic_link.h [new file with mode: 0644]
src/wgt/wgt_installer.cc

index 6090535..2011131 100644 (file)
 #include "wgt/step/encryption/step_remove_encryption_data.h"
 #include "wgt/step/filesystem/step_copy_preview_icons.h"
 #include "wgt/step/filesystem/step_create_symbolic_link.h"
+#include "wgt/step/filesystem/step_restore_wgt_symbolic_link.h"
 #include "wgt/step/filesystem/step_wgt_patch_icons.h"
 #include "wgt/step/filesystem/step_wgt_patch_storage_directories.h"
 #include "wgt/step/filesystem/step_wgt_undo_patch_storage_directories.h"
@@ -249,6 +250,7 @@ void HybridInstaller::UninstallSteps() {
   AddStep<ci::filesystem::StepOptionalAcquireExternalStorage>();
   AddStep<ci::filesystem::StepRemovePerUserStorageDirectories>(
       wgt::filesystem::HybridAdditionalSharedDirs);
+  AddStep<wgt::filesystem::StepRestoreWgtSymbolicLink>();
   AddStep<ci::pkgmgr::StepUnregisterApplication>();
   AddStep<ci::filesystem::StepRemoveTep>();
   AddStep<ci::filesystem::StepRemoveFiles>();
@@ -625,6 +627,7 @@ void HybridInstaller::PartialUninstallSteps() {
   AddStep<ci::filesystem::StepOptionalAcquireExternalStorage>();
   AddStep<ci::filesystem::StepRemovePerUserStorageDirectories>(
       wgt::filesystem::HybridAdditionalSharedDirs);
+  AddStep<wgt::filesystem::StepRestoreWgtSymbolicLink>();
   AddStep<ci::pkgmgr::StepUnregisterApplication>();
   AddStep<wgt::encryption::StepRemoveEncryptionData>();
   AddStep<ci::security::StepUnregisterTrustAnchor>();
diff --git a/src/wgt/step/filesystem/step_restore_wgt_symbolic_link.cc b/src/wgt/step/filesystem/step_restore_wgt_symbolic_link.cc
new file mode 100644 (file)
index 0000000..8624ad3
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright (c) 2022 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by a apache 2.0 license that can be
+// found in the LICENSE file.
+
+#include "wgt/step/filesystem/step_restore_wgt_symbolic_link.h"
+
+#include "wgt/step/filesystem/step_create_symbolic_link.h"
+
+namespace bf = boost::filesystem;
+namespace bs = boost::system;
+
+namespace wgt {
+namespace filesystem {
+
+common_installer::Step::Status StepRestoreWgtSymbolicLink::undo() {
+  StepCreateSymbolicLink step(context_);
+
+  Status result = step.precheck();
+  if (result != Status::OK) {
+    LOG(ERROR) << "Fail to execute precheck of CreateWgtSymbolicLink";
+    return result;
+  }
+
+  result = step.process();
+  if (result != Status::OK) {
+    LOG(ERROR) << "Fail to execute process of CreateWgtSymbolicLink";
+    return result;
+  }
+
+  return result;
+}
+
+}  // namespace filesystem
+}  // namespace wgt
diff --git a/src/wgt/step/filesystem/step_restore_wgt_symbolic_link.h b/src/wgt/step/filesystem/step_restore_wgt_symbolic_link.h
new file mode 100644 (file)
index 0000000..f0f141e
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright (c) 2022 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by a apache 2.0 license that can be
+// found in the LICENSE file.
+
+#ifndef WGT_STEP_FILESYSTEM_STEP_RESTORE_WGT_SYMBOLIC_LINK_H_
+#define WGT_STEP_FILESYSTEM_STEP_RESTORE_WGT_SYMBOLIC_LINK_H_
+
+#include <manifest_parser/utils/logging.h>
+
+#include <common/installer_context.h>
+#include <common/step/step.h>
+
+namespace wgt {
+namespace filesystem {
+
+/**
+ * \brief Step that create symbolic link to application
+ */
+class StepRestoreWgtSymbolicLink : public common_installer::Step {
+ public:
+  using Step::Step;
+
+  Status precheck() override { return Status::OK; }
+  Status process() override { return Status::OK; }
+  Status clean() override { return Status::OK; }
+  Status undo() override;
+
+  STEP_NAME(RestoreWgtSymbolicLink)
+};
+
+}  // namespace filesystem
+}  // namespace wgt
+
+#endif  // WGT_STEP_FILESYSTEM_STEP_RESTORE_WGT_SYMBOLIC_LINK_H_
index 60c0869..76cdb07 100644 (file)
 #include "wgt/step/encryption/step_remove_encryption_data.h"
 #include "wgt/step/filesystem/step_copy_preview_icons.h"
 #include "wgt/step/filesystem/step_create_symbolic_link.h"
+#include "wgt/step/filesystem/step_restore_wgt_symbolic_link.h"
 #include "wgt/step/filesystem/step_wgt_patch_icons.h"
 #include "wgt/step/filesystem/step_wgt_patch_storage_directories.h"
 #include "wgt/step/filesystem/step_wgt_prepare_package_directory.h"
@@ -245,6 +246,7 @@ void WgtInstaller::UninstallSteps() {
   AddStep<ci::filesystem::StepOptionalAcquireExternalStorage>();
   AddStep<ci::filesystem::StepRemovePerUserStorageDirectories>(
       wgt::filesystem::WgtAdditionalSharedDirs);
+  AddStep<wgt::filesystem::StepRestoreWgtSymbolicLink>();
   AddStep<ci::pkgmgr::StepUnregisterApplication>();
   AddStep<ci::filesystem::StepRemoveTep>();
   AddStep<ci::filesystem::StepRemoveFiles>();
@@ -688,6 +690,7 @@ void WgtInstaller::PartialUninstallSteps() {
       ci::Plugin::ActionType::Uninstall);
   AddStep<ci::filesystem::StepRemovePerUserStorageDirectories>(
       wgt::filesystem::WgtAdditionalSharedDirs);
+  AddStep<wgt::filesystem::StepRestoreWgtSymbolicLink>();
   AddStep<ci::pkgmgr::StepUnregisterApplication>();
   AddStep<wgt::encryption::StepRemoveEncryptionData>();
   AddStep<ci::security::StepUnregisterTrustAnchor>();