Change-Id: Ie75759c317cd21289cb6de2dcceb482835913c3f
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/4798
Tested-by: gerrit-photon <photon-checkins@vmware.com>
Reviewed-by: Xiaolin Li <xiaolinl@vmware.com>
1 | 1 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,264 @@ |
0 |
+diff --git a/client/defines.h b/client/defines.h |
|
1 |
+index c112074..637eb31 100644 |
|
2 |
+--- a/client/defines.h |
|
3 |
+@@ -199,4 +199,5 @@ typedef enum |
|
4 |
+ {ERROR_TDNF_RPM_CHECK, "ERROR_TDNF_RPM_CHECK", "rpm check reported errors"}, \ |
|
5 |
+ {ERROR_TDNF_METADATA_EXPIRE_PARSE, "ERROR_TDNF_METADATA_EXPIRE_PARSE", "metadata_expire value could not be parsed. Check your repo files."},\ |
|
6 |
+ {ERROR_TDNF_SELF_ERASE, "ERROR_TDNF_SELF_ERASE", "The operation would result in removing the protected package : tdnf"},\ |
|
7 |
++ {ERROR_TDNF_PERM, "ERROR_TDNF_PERM", "Operation not permitted. You have to be root."},\ |
|
8 |
+ }; |
|
9 |
+diff --git a/client/packageutils.c b/client/packageutils.c |
|
10 |
+index 6b86d20..0ee3212 100644 |
|
11 |
+--- a/client/packageutils.c |
|
12 |
+@@ -763,22 +763,14 @@ TDNFPopulatePkgInfos( |
|
13 |
+ (void**)&pPkgInfo); |
|
14 |
+ BAIL_ON_TDNF_ERROR(dwError); |
|
15 |
+ |
|
16 |
+- dwError = SolvGetPkgNameFromId(pSack, dwPkgId, &pPkgInfo->pszName); |
|
17 |
+- BAIL_ON_TDNF_ERROR(dwError); |
|
18 |
+- |
|
19 |
+- dwError = SolvGetPkgVersionFromId( |
|
20 |
+- pSack, |
|
21 |
+- dwPkgId, |
|
22 |
+- &pPkgInfo->pszVersion); |
|
23 |
+- BAIL_ON_TDNF_ERROR(dwError); |
|
24 |
+- |
|
25 |
+- dwError = SolvGetPkgReleaseFromId( |
|
26 |
++ dwError = SolvGetNevraFromId( |
|
27 |
+ pSack, |
|
28 |
+ dwPkgId, |
|
29 |
+- &pPkgInfo->pszRelease); |
|
30 |
+- BAIL_ON_TDNF_ERROR(dwError); |
|
31 |
+- |
|
32 |
+- dwError = SolvGetPkgArchFromId(pSack, dwPkgId, &pPkgInfo->pszArch); |
|
33 |
++ &pPkgInfo->dwEpoch, |
|
34 |
++ &pPkgInfo->pszName, |
|
35 |
++ &pPkgInfo->pszVersion, |
|
36 |
++ &pPkgInfo->pszRelease, |
|
37 |
++ &pPkgInfo->pszArch); |
|
38 |
+ BAIL_ON_TDNF_ERROR(dwError); |
|
39 |
+ |
|
40 |
+ dwError = SolvGetPkgRepoNameFromId( |
|
41 |
+diff --git a/client/rpmtrans.c b/client/rpmtrans.c |
|
42 |
+index 212169d..92e88bf 100644 |
|
43 |
+--- a/client/rpmtrans.c |
|
44 |
+@@ -29,14 +29,15 @@ TDNFRpmExecTransaction( |
|
45 |
+ { |
|
46 |
+ uint32_t dwError = 0; |
|
47 |
+ int nKeepCachedRpms = 0; |
|
48 |
+- TDNFRPMTS ts = {pTdnf->pArgs->nQuiet}; |
|
49 |
++ TDNFRPMTS ts = {0}; |
|
50 |
+ |
|
51 |
+- if(!pTdnf || !pTdnf->pConf || !pSolvedInfo) |
|
52 |
++ if(!pTdnf || !pTdnf->pArgs || !pTdnf->pConf || !pSolvedInfo) |
|
53 |
+ { |
|
54 |
+ dwError = ERROR_TDNF_INVALID_PARAMETER; |
|
55 |
+ BAIL_ON_TDNF_ERROR(dwError); |
|
56 |
+ } |
|
57 |
+ |
|
58 |
++ ts.nQuiet = pTdnf->pArgs->nQuiet; |
|
59 |
+ nKeepCachedRpms = pTdnf->pConf->nKeepCache; |
|
60 |
+ |
|
61 |
+ dwError = TDNFAllocateMemory( |
|
62 |
+diff --git a/include/tdnferror.h b/include/tdnferror.h |
|
63 |
+index 9033efc..1eeb714 100644 |
|
64 |
+--- a/include/tdnferror.h |
|
65 |
+@@ -122,10 +122,11 @@ extern "C" { |
|
66 |
+ #define ERROR_TDNF_TRANS_INCOMPLETE 1525 |
|
67 |
+ #define ERROR_TDNF_TRANS_PKG_NOT_FOUND 1526 |
|
68 |
+ |
|
69 |
+-//System errors 1600 and up |
|
70 |
+-#define ERROR_TDNF_SYSTEM_BASE 1600 |
|
71 |
+ // No search results found |
|
72 |
+-#define ERROR_TDNF_NO_SEARCH_RESULTS 1601 |
|
73 |
++#define ERROR_TDNF_NO_SEARCH_RESULTS 1599 |
|
74 |
++#define ERROR_TDNF_SYSTEM_BASE 1600 |
|
75 |
++//System errors 1600 and up |
|
76 |
++#define ERROR_TDNF_PERM (ERROR_TDNF_SYSTEM_BASE + EPERM) |
|
77 |
+ #define ERROR_TDNF_INVALID_PARAMETER (ERROR_TDNF_SYSTEM_BASE + EINVAL) |
|
78 |
+ #define ERROR_TDNF_OUT_OF_MEMORY (ERROR_TDNF_SYSTEM_BASE + ENOMEM) |
|
79 |
+ #define ERROR_TDNF_NO_DATA (ERROR_TDNF_SYSTEM_BASE + ENODATA) |
|
80 |
+diff --git a/include/tdnftypes.h b/include/tdnftypes.h |
|
81 |
+index 6aabaf0..2ebc466 100644 |
|
82 |
+--- a/include/tdnftypes.h |
|
83 |
+@@ -160,6 +160,7 @@ typedef struct _TDNF_SOLVED_PKG_INFO |
|
84 |
+ { |
|
85 |
+ int nNeedAction; |
|
86 |
+ int nNeedDownload; |
|
87 |
++ TDNF_ALTERTYPE nAlterType; |
|
88 |
+ PTDNF_PKG_INFO pPkgsNotAvailable; |
|
89 |
+ PTDNF_PKG_INFO pPkgsExisting; |
|
90 |
+ PTDNF_PKG_INFO pPkgsToInstall; |
|
91 |
+diff --git a/solv/prototypes.h b/solv/prototypes.h |
|
92 |
+index 1865b99..0fd08a5 100644 |
|
93 |
+--- a/solv/prototypes.h |
|
94 |
+@@ -246,6 +246,17 @@ SolvFindHighestOrLowestInstalled( |
|
95 |
+ uint32_t dwFindHighest |
|
96 |
+ ); |
|
97 |
+ |
|
98 |
++uint32_t |
|
99 |
++SolvGetNevraFromId( |
|
100 |
++ PSolvSack pSack, |
|
101 |
++ uint32_t dwPkgId, |
|
102 |
++ uint32_t *pdwEpoch, |
|
103 |
++ char **ppszName, |
|
104 |
++ char **ppszVersion, |
|
105 |
++ char **ppszRelease, |
|
106 |
++ char **ppszArch |
|
107 |
++ ); |
|
108 |
++ |
|
109 |
+ // tdnfpool.c |
|
110 |
+ uint32_t |
|
111 |
+ SolvCreateSack( |
|
112 |
+diff --git a/solv/tdnfpackage.c b/solv/tdnfpackage.c |
|
113 |
+index d394f07..3a926a1 100644 |
|
114 |
+--- a/solv/tdnfpackage.c |
|
115 |
+@@ -1558,4 +1558,119 @@ cleanup: |
|
116 |
+ |
|
117 |
+ error: |
|
118 |
+ goto cleanup; |
|
119 |
+-} |
|
120 |
+\ No newline at end of file |
|
121 |
++} |
|
122 |
++ |
|
123 |
++uint32_t |
|
124 |
++SolvGetNevraFromId( |
|
125 |
++ PSolvSack pSack, |
|
126 |
++ uint32_t dwPkgId, |
|
127 |
++ uint32_t *pdwEpoch, |
|
128 |
++ char **ppszName, |
|
129 |
++ char **ppszVersion, |
|
130 |
++ char **ppszRelease, |
|
131 |
++ char **ppszArch |
|
132 |
++ ) |
|
133 |
++{ |
|
134 |
++ uint32_t dwError = 0; |
|
135 |
++ const char* pszTmp = NULL; |
|
136 |
++ Solvable *pSolv = NULL; |
|
137 |
++ uint32_t dwEpoch = 0; |
|
138 |
++ char *pszName = NULL; |
|
139 |
++ char *pszEpoch = NULL; |
|
140 |
++ char *pszVersion = NULL; |
|
141 |
++ char *pszRelease = NULL; |
|
142 |
++ char *pszArch = NULL; |
|
143 |
++ |
|
144 |
++ if(!pSack || |
|
145 |
++ !ppszName || |
|
146 |
++ !ppszVersion || |
|
147 |
++ !ppszRelease || |
|
148 |
++ !ppszArch || |
|
149 |
++ !pdwEpoch) |
|
150 |
++ { |
|
151 |
++ dwError = ERROR_TDNF_INVALID_PARAMETER; |
|
152 |
++ BAIL_ON_TDNF_LIBSOLV_ERROR(dwError); |
|
153 |
++ } |
|
154 |
++ |
|
155 |
++ pSolv = pool_id2solvable(pSack->pPool, dwPkgId); |
|
156 |
++ if(!pSolv) |
|
157 |
++ { |
|
158 |
++ dwError = ERROR_TDNF_NO_DATA; |
|
159 |
++ BAIL_ON_TDNF_ERROR(dwError); |
|
160 |
++ } |
|
161 |
++ |
|
162 |
++ pszTmp = solvable_lookup_str(pSolv, SOLVABLE_NAME); |
|
163 |
++ if(!pszTmp) |
|
164 |
++ { |
|
165 |
++ dwError = ERROR_TDNF_NO_DATA; |
|
166 |
++ BAIL_ON_TDNF_ERROR(dwError); |
|
167 |
++ } |
|
168 |
++ |
|
169 |
++ dwError = TDNFAllocateString(pszTmp, &pszName); |
|
170 |
++ BAIL_ON_TDNF_ERROR(dwError); |
|
171 |
++ |
|
172 |
++ pszTmp = solvable_lookup_str(pSolv, SOLVABLE_ARCH); |
|
173 |
++ if(!pszTmp) |
|
174 |
++ { |
|
175 |
++ dwError = ERROR_TDNF_NO_DATA; |
|
176 |
++ BAIL_ON_TDNF_ERROR(dwError); |
|
177 |
++ } |
|
178 |
++ |
|
179 |
++ dwError = TDNFAllocateString(pszTmp, &pszArch); |
|
180 |
++ BAIL_ON_TDNF_ERROR(dwError); |
|
181 |
++ |
|
182 |
++ pszTmp = solvable_lookup_str(pSolv, SOLVABLE_EVR); |
|
183 |
++ if(!pszTmp) |
|
184 |
++ { |
|
185 |
++ dwError = ERROR_TDNF_NO_DATA; |
|
186 |
++ BAIL_ON_TDNF_ERROR(dwError); |
|
187 |
++ } |
|
188 |
++ |
|
189 |
++ dwError = SolvSplitEvr(pSack, |
|
190 |
++ pszTmp, |
|
191 |
++ &pszEpoch, |
|
192 |
++ &pszVersion, |
|
193 |
++ &pszRelease); |
|
194 |
++ BAIL_ON_TDNF_ERROR(dwError); |
|
195 |
++ |
|
196 |
++ if(!IsNullOrEmptyString(pszEpoch)) |
|
197 |
++ { |
|
198 |
++ dwEpoch = strtol(pszEpoch, NULL, 10); |
|
199 |
++ } |
|
200 |
++ |
|
201 |
++ *pdwEpoch = dwEpoch; |
|
202 |
++ *ppszName = pszName; |
|
203 |
++ *ppszVersion = pszVersion; |
|
204 |
++ *ppszRelease = pszRelease; |
|
205 |
++ *ppszArch = pszArch; |
|
206 |
++cleanup: |
|
207 |
++ TDNF_SAFE_FREE_MEMORY(pszEpoch); |
|
208 |
++ return dwError; |
|
209 |
++ |
|
210 |
++error: |
|
211 |
++ if(pdwEpoch) |
|
212 |
++ { |
|
213 |
++ *pdwEpoch = 0; |
|
214 |
++ } |
|
215 |
++ if(ppszName) |
|
216 |
++ { |
|
217 |
++ *ppszName = NULL; |
|
218 |
++ } |
|
219 |
++ if(ppszVersion) |
|
220 |
++ { |
|
221 |
++ *ppszVersion = NULL; |
|
222 |
++ } |
|
223 |
++ if(ppszRelease) |
|
224 |
++ { |
|
225 |
++ *ppszRelease = NULL; |
|
226 |
++ } |
|
227 |
++ if(ppszArch) |
|
228 |
++ { |
|
229 |
++ *ppszArch = NULL; |
|
230 |
++ } |
|
231 |
++ TDNF_SAFE_FREE_MEMORY(pszName); |
|
232 |
++ TDNF_SAFE_FREE_MEMORY(pszVersion); |
|
233 |
++ TDNF_SAFE_FREE_MEMORY(pszRelease); |
|
234 |
++ TDNF_SAFE_FREE_MEMORY(pszArch); |
|
235 |
++ goto cleanup; |
|
236 |
++} |
|
237 |
+diff --git a/tools/cli/main.c b/tools/cli/main.c |
|
238 |
+index c1df143..dc7a505 100644 |
|
239 |
+--- a/tools/cli/main.c |
|
240 |
+@@ -63,6 +63,15 @@ int main(int argc, char* argv[]) |
|
241 |
+ PTDNF pTdnf = NULL; |
|
242 |
+ int nFound = 0; |
|
243 |
+ |
|
244 |
++ //granular permissions for non root users are pending. |
|
245 |
++ //blocking all operations for non root and show the |
|
246 |
++ //right error to avoid confusion. |
|
247 |
++ if(geteuid() != 0) |
|
248 |
++ { |
|
249 |
++ dwError = ERROR_TDNF_PERM; |
|
250 |
++ BAIL_ON_CLI_ERROR(dwError); |
|
251 |
++ } |
|
252 |
++ |
|
253 |
+ _context.pFnCheck = TDNFCliInvokeCheck; |
|
254 |
+ _context.pFnCheckLocal = TDNFCliInvokeCheckLocal; |
|
255 |
+ _context.pFnCheckUpdate = TDNFCliInvokeCheckUpdate; |
... | ... |
@@ -3,42 +3,40 @@ |
3 | 3 |
# |
4 | 4 |
Summary: dnf/yum equivalent using C libs |
5 | 5 |
Name: tdnf |
6 |
-Version: 1.2.2 |
|
7 |
-Release: 3%{?dist} |
|
6 |
+Version: 2.0.0 |
|
7 |
+Release: 1%{?dist} |
|
8 | 8 |
Vendor: VMware, Inc. |
9 | 9 |
Distribution: Photon |
10 | 10 |
License: LGPLv2.1,GPLv2 |
11 | 11 |
Url: http://www.vmware.com |
12 | 12 |
Group: Applications/RPM |
13 |
-Requires: hawkey >= 2017.1 |
|
14 | 13 |
Requires: rpm-libs |
15 | 14 |
Requires: curl |
15 |
+Requires: tdnf-cli-libs = %{version}-%{release} |
|
16 |
+Requires: libsolv |
|
16 | 17 |
BuildRequires: popt-devel |
17 | 18 |
BuildRequires: rpm-devel |
18 |
-BuildRequires: hawkey-devel >= 2017.1 |
|
19 | 19 |
BuildRequires: openssl-devel |
20 | 20 |
BuildRequires: libsolv-devel |
21 | 21 |
BuildRequires: curl-devel |
22 | 22 |
Obsoletes: yum |
23 | 23 |
Provides: yum |
24 |
-Source0: %{name}-%{version}.tar.gz |
|
25 |
-%define sha1 tdnf=51e084e294e1ae4eae800dbf6f4e435c3d18a8ff |
|
24 |
+Source0: %{name}-%{version}-alpha.1.tar.gz |
|
25 |
+%define sha1 tdnf=625331f1b2e72fdacd64c137667553be1c4236cf |
|
26 | 26 |
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 |
|
31 |
-Patch1: tdnf-perm.patch |
|
30 |
+Patch0: tdnf-epoch-and-perm.patch |
|
32 | 31 |
|
33 | 32 |
%description |
34 |
-tdnf is a yum/dnf equivalent |
|
35 |
-which uses libsolv and libhawkey |
|
33 |
+tdnf is a yum/dnf equivalent which uses libsolv and libcurl |
|
36 | 34 |
|
37 | 35 |
%package devel |
38 | 36 |
Summary: A Library providing C API for tdnf |
39 | 37 |
Group: Development/Libraries |
40 | 38 |
Requires: tdnf = %{version}-%{release} |
41 |
-Requires: hawkey-devel >= 2017.1 |
|
39 |
+Requires: libsolv-devel |
|
42 | 40 |
|
43 | 41 |
%description devel |
44 | 42 |
Development files for tdnf |
... | ... |
@@ -51,13 +49,10 @@ Group: Development/Libraries |
51 | 51 |
Library providing cli libs for tdnf like clients. |
52 | 52 |
|
53 | 53 |
%prep |
54 |
-%setup -q |
|
54 |
+%setup -qn %{name}-%{version}-alpha.1 |
|
55 | 55 |
%patch0 -p1 |
56 |
-%patch1 -p1 |
|
57 |
- |
|
58 | 56 |
|
59 | 57 |
%build |
60 |
-sed -i 's/tdnf, 1.2.0/tdnf, 1.2.2/' configure.ac |
|
61 | 58 |
autoreconf -i |
62 | 59 |
./configure \ |
63 | 60 |
--prefix=%{_prefix} \ |
... | ... |
@@ -136,7 +131,7 @@ systemctl try-restart tdnf-cache-updateinfo.timer >/dev/null 2>&1 || : |
136 | 136 |
%{_bindir}/tyum |
137 | 137 |
%{_bindir}/yum |
138 | 138 |
%{_bindir}/tdnf-cache-updateinfo |
139 |
- %{_libdir}/*.so.* |
|
139 |
+ %{_libdir}/libtdnf.so.* |
|
140 | 140 |
%config(noreplace) %{_sysconfdir}/tdnf/tdnf.conf |
141 | 141 |
%config %{_libdir}/systemd/system/tdnf-cache-updateinfo.service |
142 | 142 |
%config(noreplace) %{_libdir}/systemd/system/tdnf-cache-updateinfo.timer |
... | ... |
@@ -146,7 +141,8 @@ systemctl try-restart tdnf-cache-updateinfo.timer >/dev/null 2>&1 || : |
146 | 146 |
%files devel |
147 | 147 |
%defattr(-,root,root) |
148 | 148 |
%{_includedir}/tdnf/*.h |
149 |
- %{_libdir}/*.so |
|
149 |
+ %{_libdir}/libtdnf.so |
|
150 |
+ %{_libdir}/libtdnfcli.so |
|
150 | 151 |
%exclude %{_libdir}/debug |
151 | 152 |
%{_libdir}/pkgconfig/tdnf.pc |
152 | 153 |
%{_libdir}/pkgconfig/tdnf-cli-libs.pc |
... | ... |
@@ -156,6 +152,8 @@ systemctl try-restart tdnf-cache-updateinfo.timer >/dev/null 2>&1 || : |
156 | 156 |
%{_libdir}/libtdnfcli.so.* |
157 | 157 |
|
158 | 158 |
%changelog |
159 |
+* Fri Feb 09 2018 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 2.0.0-1 |
|
160 |
+- update to 2.0.0 |
|
159 | 161 |
* Tue Jan 30 2018 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 1.2.2-3 |
160 | 162 |
- patch to error out early for permission issues. |
161 | 163 |
* Tue Oct 10 2017 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 1.2.2-2 |