const std::string& entry, const bf::path& backup_path) {
if (!bf::exists(context_->pkg_path.get() / entry))
return Status::OK;
- if (!ci::MoveDir(context_->pkg_path.get() / entry, backup_path,
- ci::FSFlag::FS_MERGE_OVERWRITE | ci::FSFlag::FS_COMMIT_COPY_FILE)) {
+ if (!ci::MoveDir(context_->pkg_path.get() / entry, backup_path / entry,
+ ci::FSFlag::FS_MERGE_OVERWRITE |
+ ci::FSFlag::FS_COMMIT_COPY_FILE |
+ ci::FSFlag::FS_PRESERVE_OWNERSHIP_AND_PERMISSIONS)) {
LOG(ERROR) << "Failed to backup file";
return Status::APP_DIR_ERROR;
}
if (!bf::exists(backupPath_ / entry))
continue;
ci::MoveDir(backupPath_ / entry, context_->pkg_path.get() / entry,
- ci::FSFlag::FS_MERGE_OVERWRITE | ci::FSFlag::FS_COMMIT_COPY_FILE);
+ ci::FSFlag::FS_MERGE_OVERWRITE |
+ ci::FSFlag::FS_COMMIT_COPY_FILE |
+ ci::FSFlag::FS_PRESERVE_OWNERSHIP_AND_PERMISSIONS);
}
ci::RemoveAll(backupPath_);
return Status::OK;