Add RecoverDB step and fix codes for it 28/182228/5
authorJunghyun Yeon <jungh.yeon@samsung.com>
Thu, 21 Jun 2018 10:46:06 +0000 (19:46 +0900)
committerJunghyun Yeon <jungh.yeon@samsung.com>
Tue, 26 Jun 2018 06:45:54 +0000 (06:45 +0000)
- This will be invoked when db has corrupted
- Operations like ManifestDirectInstall will parse merged manifest so
  it does not have to merge configurations for hybrid pkg, so add options
  to determine merge or overwrites configurations.

Related changes:
[app-installers] : https://review.tizen.org/gerrit/182176

Change-Id: I5c7f96ab6b98ad751e08ef8ada75d5c63245e331
Signed-off-by: Junghyun Yeon <jungh.yeon@samsung.com>
src/hybrid/hybrid_installer.cc
src/hybrid/hybrid_installer.h
src/hybrid/step/configuration/step_merge_tpk_config.cc
src/hybrid/step/configuration/step_merge_tpk_config.h
src/wgt/wgt_installer.cc
src/wgt/wgt_installer.h

index 0789366..b4798f5 100644 (file)
@@ -65,6 +65,7 @@
 #include <common/step/recovery/step_open_recovery_file.h>
 #include <common/step/recovery/step_create_recovery_file.h>
 #include <common/step/security/step_check_signature.h>
+#include <common/step/security/step_get_privilege_level.h>
 #include <common/step/security/step_privacy_privilege.h>
 #include <common/step/security/step_privilege_compatibility.h>
 #include <common/step/security/step_recover_privilege_compatibility.h>
@@ -153,7 +154,8 @@ void HybridInstaller::InstallSteps() {
   AddStep<wgt::pkgmgr::StepGenerateXml>();
   AddStep<hybrid::pkgmgr::StepGenerateXml>();
   AddStep<tpk::pkgmgr::StepManifestAdjustment>();
-  AddStep<hybrid::configuration::StepMergeTpkConfig>();
+  AddStep<hybrid::configuration::StepMergeTpkConfig>(
+      hybrid::configuration::StepMergeTpkConfig::MergeType::CONCAT);
   AddStep<wgt::filesystem::StepCreateSymbolicLink>();
   AddStep<tpk::filesystem::StepCreateSymbolicLink>();
   AddStep<ci::pkgmgr::StepRegisterApplication>();
@@ -213,7 +215,8 @@ void HybridInstaller::UpdateSteps() {
   AddStep<wgt::pkgmgr::StepGenerateXml>();
   AddStep<hybrid::pkgmgr::StepGenerateXml>();
   AddStep<tpk::pkgmgr::StepManifestAdjustment>();
-  AddStep<hybrid::configuration::StepMergeTpkConfig>();
+  AddStep<hybrid::configuration::StepMergeTpkConfig>(
+      hybrid::configuration::StepMergeTpkConfig::MergeType::CONCAT);
   AddStep<wgt::filesystem::StepCreateSymbolicLink>();
   AddStep<tpk::filesystem::StepCreateSymbolicLink>();
   AddStep<ci::pkgmgr::StepUpdateApplication>();
@@ -309,7 +312,8 @@ void HybridInstaller::DeltaSteps() {
   AddStep<wgt::pkgmgr::StepGenerateXml>();
   AddStep<hybrid::pkgmgr::StepGenerateXml>();
   AddStep<tpk::pkgmgr::StepManifestAdjustment>();
-  AddStep<hybrid::configuration::StepMergeTpkConfig>();
+  AddStep<hybrid::configuration::StepMergeTpkConfig>(
+      hybrid::configuration::StepMergeTpkConfig::MergeType::CONCAT);
   AddStep<wgt::filesystem::StepCreateSymbolicLink>();
   AddStep<tpk::filesystem::StepCreateSymbolicLink>();
   AddStep<ci::security::StepRegisterTrustAnchor>(
@@ -385,7 +389,8 @@ void HybridInstaller::MountInstallSteps() {
   AddStep<wgt::pkgmgr::StepGenerateXml>();
   AddStep<hybrid::pkgmgr::StepGenerateXml>();
   AddStep<tpk::pkgmgr::StepManifestAdjustment>();
-  AddStep<hybrid::configuration::StepMergeTpkConfig>();
+  AddStep<hybrid::configuration::StepMergeTpkConfig>(
+      hybrid::configuration::StepMergeTpkConfig::MergeType::CONCAT);
   AddStep<wgt::filesystem::StepCreateSymbolicLink>();
   AddStep<tpk::filesystem::StepCreateSymbolicLink>();
   AddStep<ci::pkgmgr::StepRegisterApplication>();
@@ -444,7 +449,8 @@ void HybridInstaller::MountUpdateSteps() {
   AddStep<wgt::pkgmgr::StepGenerateXml>();
   AddStep<hybrid::pkgmgr::StepGenerateXml>();
   AddStep<tpk::pkgmgr::StepManifestAdjustment>();
-  AddStep<hybrid::configuration::StepMergeTpkConfig>();
+  AddStep<hybrid::configuration::StepMergeTpkConfig>(
+      hybrid::configuration::StepMergeTpkConfig::MergeType::CONCAT);
   AddStep<wgt::filesystem::StepCreateSymbolicLink>();
   AddStep<tpk::filesystem::StepCreateSymbolicLink>();
   AddStep<ci::pkgmgr::StepUpdateApplication>();
@@ -485,7 +491,8 @@ void HybridInstaller::ManifestDirectInstallSteps() {
   AddStep<wgt::pkgmgr::StepGenerateXml>();
   AddStep<hybrid::pkgmgr::StepGenerateXml>();
   AddStep<tpk::pkgmgr::StepManifestAdjustment>();
-  AddStep<hybrid::configuration::StepMergeTpkConfig>();
+  AddStep<hybrid::configuration::StepMergeTpkConfig>(
+      hybrid::configuration::StepMergeTpkConfig::MergeType::OVERWRITE);
   AddStep<ci::pkgmgr::StepRegisterApplication>();
   AddStep<ci::security::StepRegisterTrustAnchor>(
       ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
@@ -527,7 +534,8 @@ void HybridInstaller::ManifestDirectUpdateSteps() {
   AddStep<wgt::pkgmgr::StepGenerateXml>();
   AddStep<hybrid::pkgmgr::StepGenerateXml>();
   AddStep<tpk::pkgmgr::StepManifestAdjustment>();
-  AddStep<hybrid::configuration::StepMergeTpkConfig>();
+  AddStep<hybrid::configuration::StepMergeTpkConfig>(
+      hybrid::configuration::StepMergeTpkConfig::MergeType::OVERWRITE);
   AddStep<ci::pkgmgr::StepUpdateApplication>();
   AddStep<ci::security::StepRegisterTrustAnchor>(
       ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
@@ -549,7 +557,8 @@ void HybridInstaller::ManifestPartialInstallSteps() {
   AddStep<hybrid::configuration::StepStashTpkConfig>();
   AddStep<wgt::configuration::StepParse>(
       wgt::configuration::StepParse::ConfigLocation::INSTALLED, true);
-  AddStep<hybrid::configuration::StepMergeTpkConfig>();
+  AddStep<hybrid::configuration::StepMergeTpkConfig>(
+      hybrid::configuration::StepMergeTpkConfig::MergeType::OVERWRITE);
   AddStep<ci::configuration::StepParsePreload>();
   AddStep<ci::security::StepCheckSignature>();
   AddStep<ci::security::StepSaveSignature>();
@@ -575,7 +584,8 @@ void HybridInstaller::ManifestPartialUpdateSteps() {
   AddStep<hybrid::configuration::StepStashTpkConfig>();
   AddStep<wgt::configuration::StepParse>(
       wgt::configuration::StepParse::ConfigLocation::INSTALLED, true);
-  AddStep<hybrid::configuration::StepMergeTpkConfig>();
+  AddStep<hybrid::configuration::StepMergeTpkConfig>(
+      hybrid::configuration::StepMergeTpkConfig::MergeType::OVERWRITE);
   AddStep<ci::configuration::StepParsePreload>();
   AddStep<ci::security::StepCheckSignature>();
   AddStep<ci::security::StepSaveSignature>();
@@ -647,5 +657,26 @@ void HybridInstaller::MigrateExtImgSteps() {
   AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
 }
 
+void HybridInstaller::RecoverDBSteps() {
+  AddStep<ci::configuration::StepConfigure>(pkgmgr_);
+  AddStep<ci::configuration::StepParseManifest>(
+      ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
+      ci::configuration::StepParseManifest::StoreLocation::NORMAL);
+  AddStep<ci::pkgmgr::StepCheckInstallable>();
+  AddStep<hybrid::configuration::StepStashTpkConfig>();
+  AddStep<wgt::configuration::StepParse>(
+      wgt::configuration::StepParse::ConfigLocation::INSTALLED, true);
+  AddStep<ci::configuration::StepParsePreload>();
+  AddStep<hybrid::configuration::StepMergeTpkPrivileges>();
+  AddStep<ci::security::StepGetPrivilegeLevel>();
+  AddStep<ci::security::StepPrivilegeCompatibility>(
+      ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH);
+  AddStep<wgt::security::StepCheckSettingsLevel>();
+  AddStep<tpk::pkgmgr::StepManifestAdjustment>();
+  AddStep<hybrid::configuration::StepMergeTpkConfig>(
+      hybrid::configuration::StepMergeTpkConfig::MergeType::OVERWRITE);
+  AddStep<ci::pkgmgr::StepRegisterApplication>();
+}
+
 }  // namespace hybrid
 
index 8331393..54a4d82 100644 (file)
@@ -44,6 +44,7 @@ class HybridInstaller : public common_installer::AppInstaller {
   void ManifestPartialUpdateSteps() override;
   void PartialUninstallSteps() override;
   void MigrateExtImgSteps() override;
+  void RecoverDBSteps() override;
 };
 
 }  // namespace hybrid
index 15d59c3..d63d003 100644 (file)
 namespace hybrid {
 namespace configuration {
 
+StepMergeTpkConfig::StepMergeTpkConfig(
+    common_installer::InstallerContext* context,
+    MergeType type) : Step(context), merge_type_(type) {
+}
+
 common_installer::Step::Status StepMergeTpkConfig::process() {
   HybridBackendData* data =
       static_cast<HybridBackendData*>(context_->backend_data.get());
   manifest_x* tpk_data = data->tpk_manifest_data.get();
   manifest_x* wgt_data = context_->manifest_data.get();
 
-  wgt_data->application =
-      g_list_concat(wgt_data->application, tpk_data->application);
-  tpk_data->application = nullptr;
+  if (merge_type_ == MergeType::CONCAT)
+    wgt_data->application =
+        g_list_concat(wgt_data->application, tpk_data->application);
+  else
+    wgt_data->application = tpk_data->application;
 
+  tpk_data->application = nullptr;
   return Status::OK;
 }
 
index 2171d59..6491d34 100644 (file)
@@ -18,6 +18,14 @@ namespace configuration {
  */
 class StepMergeTpkConfig : public common_installer::Step {
  public:
+  enum class MergeType {
+    CONCAT,      // Concatenate configurations
+    OVERWRITE    // Overwrite one with others
+  };
+
+  explicit StepMergeTpkConfig(common_installer::InstallerContext* context,
+      MergeType type);
+
   using Step::Step;
 
   Status process() override;
@@ -25,6 +33,9 @@ class StepMergeTpkConfig : public common_installer::Step {
   Status undo() override { return Status::OK; }
   Status precheck() override { return Status::OK; }
 
+ private:
+  MergeType merge_type_;
+
   STEP_NAME(MergeTpkConfig)
 };
 
index 9fdf8df..aaf30eb 100644 (file)
@@ -77,6 +77,7 @@
 #include <common/step/recovery/step_create_recovery_file.h>
 #include <common/step/security/step_check_old_certificate.h>
 #include <common/step/security/step_check_signature.h>
+#include <common/step/security/step_get_privilege_level.h>
 #include <common/step/security/step_privacy_privilege.h>
 #include <common/step/security/step_privilege_compatibility.h>
 #include <common/step/security/step_recover_privilege_compatibility.h>
@@ -734,4 +735,19 @@ void WgtInstaller::MigrateExtImgSteps() {
   AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
 }
 
+void WgtInstaller::RecoverDBSteps() {
+  AddStep<ci::configuration::StepConfigure>(pkgmgr_);
+  AddStep<wgt::configuration::StepParse>(
+      wgt::configuration::StepParse::ConfigLocation::INSTALLED, true);
+  AddStep<ci::pkgmgr::StepCheckInstallable>();
+  AddStep<ci::mount::StepCheckMountPath>();
+  AddStep<ci::configuration::StepParsePreload>();
+  AddStep<ci::security::StepGetPrivilegeLevel>();
+  AddStep<ci::security::StepPrivilegeCompatibility>(
+      ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
+  AddStep<wgt::security::StepCheckWgtImePrivilege>();
+  AddStep<wgt::security::StepCheckSettingsLevel>();
+  AddStep<ci::pkgmgr::StepRegisterApplication>();
+}
+
 }  // namespace wgt
index c25c2e1..8c0edcf 100644 (file)
@@ -45,6 +45,7 @@ class WgtInstaller : public common_installer::AppInstaller {
   void DisablePkgSteps() override;
   void EnablePkgSteps() override;
   void MigrateExtImgSteps() override;
+  void RecoverDBSteps() override;
 };
 
 }  // namespace wgt