'update=true' means that updated 'preload=true' package by downloadable update.
RW global app can be 'preload=true'.
And, RW global app can be 'removalbe=false'.
Also, RW global app can be upgraded using downloaded package file.
After upgrade, the app should have 'update=true' and 'removable=true'.
About the logic to keep 'preload' attribute when 'preload' package is updated
by downloadble upate in StepParsePreload, we don't need to consider direct-update case
(includes partial-update)
Because, we should explicitly give the option to present 'preload' or not,
in direct-install/update request (--preload, --preload-rw or none).
Test:
1. Install as RW global app as not-removable package:
2. Update as download package
Change-Id: I864c348df806eea123b26f55114b24de897592c9
Signed-off-by: jongmyeongko <jongmyeong.ko@samsung.com>
(cherry picked from commit
0e9f4f4950948e00443891a1ba6979f6f28b58ac)
uid_t uid = GetUid();
if (!GetIsPreloadRequest() &&
QueryIsReadonlyPackage(pkgid, uid) &&
- !QueryIsUpdatedReadonlyPackage(pkgid, uid)) {
+ !QueryIsUpdatedPackage(pkgid, uid)) {
return RequestType::ReadonlyUpdateInstall;
} else if (CheckIfAppFilesExists(pkgid, uid,
QueryIsReadonlyPackage(pkgid, uid)
}
case PKGMGR_REQ_UNINSTALL: {
std::string pkgid = GetRequestInfo();
- if (!GetIsPreloadRequest() &&
- QueryIsUpdatedReadonlyPackage(pkgid, GetUid()))
+ uid_t uid = GetUid();
+ if (QueryIsReadonlyPackage(pkgid, uid) &&
+ QueryIsUpdatedPackage(pkgid, uid))
return RequestType::ReadonlyUpdateUninstall;
else if (GetIsPreloadRequest() && GetIsPartialRW())
return RequestType::PartialUninstall;
return true;
}
-bool QueryIsUpdatedReadonlyPackage(const std::string& pkg_id, uid_t uid) {
+bool QueryIsUpdatedPackage(const std::string& pkg_id, uid_t uid) {
pkgmgrinfo_pkginfo_h handle;
int ret = pkgmgrinfo_pkginfo_get_usr_pkginfo(pkg_id.c_str(), uid, &handle);
if (ret != PMINFO_R_OK) {
/**
* \brief Adapter interface for external PkgMgr module used for checking
- * if given package is updated readonly package
+ * if given package is updated package
*
* \param pkg_id package id
* \param uid user id
*
* \return true if package is updated
*/
-bool QueryIsUpdatedReadonlyPackage(const std::string& pkg_id, uid_t uid);
+bool QueryIsUpdatedPackage(const std::string& pkg_id, uid_t uid);
/**
* \brief Adapter interface for external PkgMgr module used for checking
Step::Status StepConfigure::precheck() {
SetupIsPreloadRequest();
SetupIsPreloadRWRequest();
- if (context_->is_readonly_package.get())
- SetupIsNoRemoval();
bool is_readonly = context_->is_readonly_package.get();
bool is_preload_rw = context_->is_preload_rw_package.get();
return Status::ERROR;
}
+ if (is_readonly || is_preload_rw)
+ SetupIsNoRemoval();
+
uid_t uid = pkgmgr_->GetUid();
context_->uid.set(uid);
if (getuid() == 0)
// set update true if package is updated preload package
common_installer::RequestType req_type = context_->request_type.get();
- if (req_type == RequestType::ReadonlyUpdateInstall)
+ if (QueryIsUpdatedPackage(pkg_info->package(), context_->uid.get()))
manifest->update = strdup("true");
- else if (req_type == RequestType::ReadonlyUpdateUninstall)
- manifest->update = strdup("false");
- else if (QueryIsUpdatedReadonlyPackage(pkg_info->package(),
- context_->uid.get()))
+ else if (QueryIsPreloadPackage(pkg_info->package(), context_->uid.get()) &&
+ (req_type == RequestType::Update ||
+ req_type == RequestType::Delta ||
+ req_type == RequestType::MountUpdate ||
+ req_type == RequestType::ReadonlyUpdateInstall))
manifest->update = strdup("true");
else
manifest->update = strdup("false");
free(context_->manifest_data.get()->preload);
RequestType req_type = context_->request_type.get();
if (req_type == RequestType::Update ||
- req_type == RequestType::ManifestDirectUpdate ||
- req_type == RequestType::ManifestPartialUpdate ||
+ req_type == RequestType::Delta ||
+ req_type == RequestType::MountUpdate ||
req_type == RequestType::ReadonlyUpdateInstall) {
// In case of update, keep preload value
bool is_preload = QueryIsPreloadPackage(context_->pkgid.get(),