#include "step/mount/step_mount_install.h"
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/path.hpp>
-
+#include <filesystem>
#include <string>
-#include "common/paths.h"
-#include "common/request.h"
+#include "common/shared_dirs.h"
+#include "common/utils/paths.h"
#include "common/tzip_interface.h"
+#include "common/zip_interface.h"
#include "common/utils/file_util.h"
+#include "common/utils/request.h"
-namespace bf = boost::filesystem;
-namespace bs = boost::system;
+namespace ci = common_installer;
+namespace fs = std::filesystem;
namespace common_installer {
namespace mount {
Step::Status StepMountInstall::process() {
- context_->pkg_path.set(
- context_->root_application_path.get() / context_->pkgid.get());
-
- TzipInterface tzip_unpack(context_->unpacked_dir_path.get());
- if (!tzip_unpack.UnmountZip()) {
+ auto zip_unpack = CreateZipInterface(context_->unpacked_dir_path.get());
+ if (!zip_unpack->UnmountZip()) {
LOG(ERROR) << "Failed to unmount zip package from temporary path";
return Status::APP_DIR_ERROR;
}
- bf::path zip_destination_path =
- GetZipPackageLocation(context_->pkg_path.get(), context_->pkgid.get());
- if (!bf::exists(zip_destination_path.parent_path())) {
- bs::error_code error;
- bf::create_directories(zip_destination_path.parent_path(), error);
+ fs::path zip_destination_path =
+ GetZipPackageLocation(context_->GetPkgPath(), context_->pkgid.get());
+ if (!fs::exists(zip_destination_path.parent_path())) {
+ std::error_code error;
+ fs::create_directories(zip_destination_path.parent_path(), error);
if (error) {
LOG(ERROR) << "Failed to create diretory: "
<< zip_destination_path.parent_path();
if (!CopyFile(context_->file_path.get(), zip_destination_path)) {
return Status::APP_DIR_ERROR;
}
+ ci::RemoveRWDirectories(zip_destination_path);
context_->manifest_data.get()->zip_mount_file =
strdup(zip_destination_path.c_str());
- bf::path mount_point = GetMountLocation(context_->pkg_path.get());
- TzipInterface tzip_final(mount_point);
- if (!tzip_final.MountZip(zip_destination_path)) {
+ fs::path mount_point = GetMountLocation(context_->GetPkgPath());
+ auto zip_final = CreateZipInterface(mount_point);
+ if (!zip_final->MountZip(zip_destination_path)) {
LOG(ERROR) << "Failed to mount zip package in installation path";
return Status::APP_DIR_ERROR;
}
}
Step::Status StepMountInstall::UmountPackagePath() {
- bf::path mount_point = GetMountLocation(context_->pkg_path.get());
- TzipInterface tzip_final(mount_point);
- if (!tzip_final.UnmountZip()) {
+ fs::path mount_point = GetMountLocation(context_->GetPkgPath());
+ auto zip_final = CreateZipInterface(mount_point);
+ if (!zip_final->UnmountZip()) {
LOG(ERROR) << "Failed to unmount zip package after installation";
return Status::APP_DIR_ERROR;
}
return Status::OK;
}
-Step::Status StepMountInstall::clean() {
- return UmountPackagePath();
-}
-
Step::Status StepMountInstall::undo() {
- bs::error_code error;
+ std::error_code error;
UmountPackagePath();
- bf::remove(GetZipPackageLocation(context_->pkg_path.get(),
+ fs::remove(GetZipPackageLocation(context_->GetPkgPath(),
context_->pkgid.get()), error);
- bf::remove_all(context_->pkg_path.get(), error);
+ if (error) {
+ LOG(ERROR) << "Failed to remove zip package";
+ return Status::APP_DIR_ERROR;
+ }
+ fs::remove_all(context_->GetPkgPath(), error);
if (error) {
LOG(ERROR) << "Failed to remove package content";
return Status::APP_DIR_ERROR;
LOG(ERROR) << "root_application_path attribute is empty";
return Step::Status::INVALID_VALUE;
}
- if (!bf::exists(context_->root_application_path.get())) {
+ if (!fs::exists(context_->root_application_path.get())) {
LOG(ERROR) << "root_application_path ("
<< context_->root_application_path.get()
<< ") path does not exist";
LOG(ERROR) << "unpacked_dir_path attribute is empty";
return Step::Status::INVALID_VALUE;
}
- if (!bf::exists(context_->unpacked_dir_path.get())) {
+ if (!fs::exists(context_->unpacked_dir_path.get())) {
LOG(ERROR) << "unpacked_dir_path ("
<< context_->unpacked_dir_path.get()
<< ") path does not exist";
return Step::Status::OK;
}
+std::unique_ptr<IZipInterface> StepMountInstall::CreateZipInterface(
+ const fs::path& mount_path) {
+ std::unique_ptr<IZipInterface> zip_interface(
+ new TzipInterface(mount_path));
+ return zip_interface;
+}
+
} // namespace mount
} // namespace common_installer