From 303b82ea727841e5bd6f3013436e9091f8d2fc64 Mon Sep 17 00:00:00 2001
From: Priyesh Padmavilasom <ppadmavilasom@vmware.com>
Date: Tue, 10 Oct 2017 00:02:32 +0000
Subject: [PATCH] add protected packages to obsoletes path
Change-Id: I599bee849b1dce3a744d2bf0db4bcf270df3df62
(cherry picked from commit 771948ff1cdeb17ef508ac314fec4bc3605b3f79)
---
client/api.c | 14 ++-----------
client/packageutils.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++
client/prototypes.h | 5 +++++
client/remoterepo.c | 2 +-
4 files changed, 62 insertions(+), 13 deletions(-)
diff --git a/client/api.c b/client/api.c
index b03916a..e82501c 100644
--- a/client/api.c
+++ b/client/api.c
@@ -867,7 +867,6 @@ TDNFResolve(
HyPackageList hPkgListGoal = NULL;
PTDNF_SOLVED_PKG_INFO pSolvedPkgInfo = NULL;
- PTDNF_PKG_INFO pPkgInfo = NULL;
if(!pTdnf || !ppSolvedPkgInfo)
{
@@ -916,17 +915,8 @@ TDNFResolve(
pSolvedPkgInfo);
BAIL_ON_TDNF_ERROR(dwError);
- pPkgInfo = pSolvedPkgInfo->pPkgsToRemove;
- while(pPkgInfo != NULL)
- {
- if(pPkgInfo->pszName != NULL &&
- strcmp(pPkgInfo->pszName, TDNF_NAME) == 0)
- {
- dwError = ERROR_TDNF_SELF_ERASE;
- BAIL_ON_TDNF_ERROR(dwError);
- }
- pPkgInfo = pPkgInfo->pNext;
- }
+ dwError = TDNFCheckProtectedPkgs(pSolvedPkgInfo);
+ BAIL_ON_TDNF_ERROR(dwError);
pSolvedPkgInfo->nNeedAction =
pSolvedPkgInfo->pPkgsToInstall ||
diff --git a/client/packageutils.c b/client/packageutils.c
index b2f6a82..6e3e09b 100644
--- a/client/packageutils.c
+++ b/client/packageutils.c
@@ -1108,3 +1108,57 @@ TDNFAddPackagesForDowngrade(
error:
goto cleanup;
}
+
+uint32_t
+TDNFHasProtectedPkgsInList(
+ PTDNF_PKG_INFO pPkgInfo
+ )
+{
+ uint32_t dwError = 0;
+
+ if(!pPkgInfo)
+ {
+ dwError = ERROR_TDNF_INVALID_PARAMETER;
+ BAIL_ON_TDNF_ERROR(dwError);
+ }
+
+ for(; pPkgInfo; pPkgInfo = pPkgInfo->pNext)
+ {
+ if(pPkgInfo->pszName && !strcmp(pPkgInfo->pszName, TDNF_NAME))
+ {
+ dwError = ERROR_TDNF_SELF_ERASE;
+ BAIL_ON_TDNF_ERROR(dwError);
+ }
+ }
+error:
+ return dwError;
+}
+
+uint32_t
+TDNFCheckProtectedPkgs(
+ PTDNF_SOLVED_PKG_INFO pSolvedPkgInfo
+ )
+{
+ uint32_t dwError = 0;
+
+ if(!pSolvedPkgInfo)
+ {
+ dwError = ERROR_TDNF_INVALID_PARAMETER;
+ BAIL_ON_TDNF_ERROR(dwError);
+ }
+
+ if(pSolvedPkgInfo->pPkgsToRemove)
+ {
+ dwError = TDNFHasProtectedPkgsInList(pSolvedPkgInfo->pPkgsToRemove);
+ BAIL_ON_TDNF_ERROR(dwError);
+ }
+
+ if(pSolvedPkgInfo->pPkgsObsoleted)
+ {
+ dwError = TDNFHasProtectedPkgsInList(pSolvedPkgInfo->pPkgsObsoleted);
+ BAIL_ON_TDNF_ERROR(dwError);
+ }
+
+error:
+ return dwError;
+}
diff --git a/client/prototypes.h b/client/prototypes.h
index f5cdb2e..4586d3b 100644
--- a/client/prototypes.h
+++ b/client/prototypes.h
@@ -277,6 +277,11 @@ TDNFAddPackagesForDowngrade(
HyPackageList hPkgListGoal
);
+uint32_t
+TDNFCheckProtectedPkgs(
+ PTDNF_SOLVED_PKG_INFO pSolvedPkgInfo
+ );
+
//goal.c
uint32_t
TDNFGoalGetResultsIgnoreNoData(
diff --git a/client/remoterepo.c b/client/remoterepo.c
index 946aafd..8011a38 100644
--- a/client/remoterepo.c
+++ b/client/remoterepo.c
@@ -197,7 +197,7 @@ TDNFDownloadFile(
{
uint32_t nCurlError = dwError - ERROR_TDNF_CURL_BASE;
fprintf(stderr,
- "download error: %d - %s\n",
+ "curl#%d: %s\n",
nCurlError,
curl_easy_strerror(nCurlError));
}