Browse code

fix tdnf issue protected pkgs while obsolete

Change-Id: I3185248d939d9a0e55e6562c51f70d47bf32d2c1
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/4008
Tested-by: gerrit-photon <photon-checkins@vmware.com>
Reviewed-by: Xiaolin Li <xiaolinl@vmware.com>
Reviewed-by: Alexey Makhalov <amakhalov@vmware.com>

Priyesh Padmavilasom authored on 2017/10/11 06:20:15
Showing 2 changed files
... ...
@@ -4,7 +4,7 @@
4 4
 Summary:        dnf/yum equivalent using C libs
5 5
 Name:           tdnf
6 6
 Version:        1.2.2
7
-Release:        1%{?dist}
7
+Release:        2%{?dist}
8 8
 Vendor:         VMware, Inc.
9 9
 Distribution:   Photon
10 10
 License:        LGPLv2.1,GPLv2
... ...
@@ -27,6 +27,7 @@ Source1:        cache-updateinfo
27 27
 Source2:        cache-updateinfo.service
28 28
 Source3:        cache-updateinfo.timer
29 29
 Source4:        updateinfo.sh
30
+Patch0:         tdnf_fix_protected_pkgs_in_obsolete.patch
30 31
 
31 32
 %description
32 33
 tdnf is a yum/dnf equivalent
... ...
@@ -50,6 +51,7 @@ Library providing cli libs for tdnf like clients.
50 50
 
51 51
 %prep
52 52
 %setup -q
53
+%patch0 -p1
53 54
 
54 55
 
55 56
 %build
... ...
@@ -152,6 +154,8 @@ systemctl try-restart tdnf-cache-updateinfo.timer >/dev/null 2>&1 || :
152 152
     %{_libdir}/libtdnfcli.so.*
153 153
 
154 154
 %changelog
155
+*   Tue Oct 10 2017 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 1.2.2-2
156
+-   Fix bug in obsolete protected packages.
155 157
 *   Wed Oct 4 2017 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 1.2.2-1
156 158
 -   update to v1.2.2
157 159
 *   Sat Sep 30 2017 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 1.2.1-5
158 160
new file mode 100644
... ...
@@ -0,0 +1,137 @@
0
+From 303b82ea727841e5bd6f3013436e9091f8d2fc64 Mon Sep 17 00:00:00 2001
1
+From: Priyesh Padmavilasom <ppadmavilasom@vmware.com>
2
+Date: Tue, 10 Oct 2017 00:02:32 +0000
3
+Subject: [PATCH] add protected packages to obsoletes path
4
+
5
+Change-Id: I599bee849b1dce3a744d2bf0db4bcf270df3df62
6
+(cherry picked from commit 771948ff1cdeb17ef508ac314fec4bc3605b3f79)
7
+---
8
+ client/api.c          | 14 ++-----------
9
+ client/packageutils.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++
10
+ client/prototypes.h   |  5 +++++
11
+ client/remoterepo.c   |  2 +-
12
+ 4 files changed, 62 insertions(+), 13 deletions(-)
13
+
14
+diff --git a/client/api.c b/client/api.c
15
+index b03916a..e82501c 100644
16
+--- a/client/api.c
17
+@@ -867,7 +867,6 @@ TDNFResolve(
18
+     HyPackageList hPkgListGoal = NULL;
19
+ 
20
+     PTDNF_SOLVED_PKG_INFO pSolvedPkgInfo = NULL;
21
+-    PTDNF_PKG_INFO pPkgInfo = NULL;
22
+ 
23
+     if(!pTdnf || !ppSolvedPkgInfo)
24
+     {
25
+@@ -916,17 +915,8 @@ TDNFResolve(
26
+                   pSolvedPkgInfo);
27
+     BAIL_ON_TDNF_ERROR(dwError);
28
+ 
29
+-    pPkgInfo = pSolvedPkgInfo->pPkgsToRemove;
30
+-    while(pPkgInfo != NULL)
31
+-    {
32
+-        if(pPkgInfo->pszName != NULL &&
33
+-           strcmp(pPkgInfo->pszName, TDNF_NAME) == 0)
34
+-        {
35
+-            dwError = ERROR_TDNF_SELF_ERASE;
36
+-            BAIL_ON_TDNF_ERROR(dwError);
37
+-        }
38
+-        pPkgInfo = pPkgInfo->pNext;
39
+-    }
40
++    dwError = TDNFCheckProtectedPkgs(pSolvedPkgInfo);
41
++    BAIL_ON_TDNF_ERROR(dwError);
42
+ 
43
+     pSolvedPkgInfo->nNeedAction = 
44
+         pSolvedPkgInfo->pPkgsToInstall ||
45
+diff --git a/client/packageutils.c b/client/packageutils.c
46
+index b2f6a82..6e3e09b 100644
47
+--- a/client/packageutils.c
48
+@@ -1108,3 +1108,57 @@ TDNFAddPackagesForDowngrade(
49
+ error:
50
+     goto cleanup;
51
+ }
52
++
53
++uint32_t
54
++TDNFHasProtectedPkgsInList(
55
++    PTDNF_PKG_INFO pPkgInfo
56
++    )
57
++{
58
++    uint32_t dwError = 0;
59
++
60
++    if(!pPkgInfo)
61
++    {
62
++        dwError = ERROR_TDNF_INVALID_PARAMETER;
63
++        BAIL_ON_TDNF_ERROR(dwError);
64
++    }
65
++
66
++    for(; pPkgInfo; pPkgInfo = pPkgInfo->pNext)
67
++    {
68
++        if(pPkgInfo->pszName && !strcmp(pPkgInfo->pszName, TDNF_NAME))
69
++        {
70
++            dwError = ERROR_TDNF_SELF_ERASE;
71
++            BAIL_ON_TDNF_ERROR(dwError);
72
++        }
73
++    }
74
++error:
75
++    return dwError;
76
++}
77
++
78
++uint32_t
79
++TDNFCheckProtectedPkgs(
80
++    PTDNF_SOLVED_PKG_INFO pSolvedPkgInfo
81
++    )
82
++{
83
++    uint32_t dwError = 0;
84
++
85
++    if(!pSolvedPkgInfo)
86
++    {
87
++        dwError = ERROR_TDNF_INVALID_PARAMETER;
88
++        BAIL_ON_TDNF_ERROR(dwError);
89
++    }
90
++
91
++    if(pSolvedPkgInfo->pPkgsToRemove)
92
++    {
93
++        dwError = TDNFHasProtectedPkgsInList(pSolvedPkgInfo->pPkgsToRemove);
94
++        BAIL_ON_TDNF_ERROR(dwError);
95
++    }
96
++
97
++    if(pSolvedPkgInfo->pPkgsObsoleted)
98
++    {
99
++        dwError = TDNFHasProtectedPkgsInList(pSolvedPkgInfo->pPkgsObsoleted);
100
++        BAIL_ON_TDNF_ERROR(dwError);
101
++    }
102
++
103
++error:
104
++    return dwError;
105
++}
106
+diff --git a/client/prototypes.h b/client/prototypes.h
107
+index f5cdb2e..4586d3b 100644
108
+--- a/client/prototypes.h
109
+@@ -277,6 +277,11 @@ TDNFAddPackagesForDowngrade(
110
+     HyPackageList hPkgListGoal
111
+     );
112
+ 
113
++uint32_t
114
++TDNFCheckProtectedPkgs(
115
++    PTDNF_SOLVED_PKG_INFO pSolvedPkgInfo
116
++    );
117
++
118
+ //goal.c
119
+ uint32_t
120
+ TDNFGoalGetResultsIgnoreNoData(
121
+diff --git a/client/remoterepo.c b/client/remoterepo.c
122
+index 946aafd..8011a38 100644
123
+--- a/client/remoterepo.c
124
+@@ -197,7 +197,7 @@ TDNFDownloadFile(
125
+     {
126
+         uint32_t nCurlError = dwError - ERROR_TDNF_CURL_BASE;
127
+         fprintf(stderr,
128
+-                "download error: %d - %s\n",
129
++                "curl#%d: %s\n",
130
+                 nCurlError,
131
+                 curl_easy_strerror(nCurlError));
132
+     }