run `make clean-stage-for-incremental-build` to remove all upward
dependencies (rpms) baased on latest commit change
Extras:
- ceph: fix multiversioning support (use proper dep versions)
Change-Id: I536cd0a0db86cb18036e397b3fa6297ea044df19
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/5775
Reviewed-by: Alexey Makhalov <amakhalov@vmware.com>
Tested-by: Anish Swaminathan <anishs@vmware.com>
... | ... |
@@ -235,6 +235,14 @@ who-needs: |
235 | 235 |
@cd $(PHOTON_SPECDEPS_DIR) && \ |
236 | 236 |
$(PHOTON_SPECDEPS) -s $(PHOTON_SPECS_DIR) -i who-needs -p $(pkg) |
237 | 237 |
|
238 |
+# This target analyzes top git commit and removes staged RPMS that can be affected |
|
239 |
+# by this change and should be rebuilt as part of incremental build support |
|
240 |
+# For every spec file touched - remove all upward dependent packages (rpms) |
|
241 |
+# If support folder was touched - do full build |
|
242 |
+clean-stage-for-incremental-build: |
|
243 |
+ @test -n "$$(git show @ SPECS)" && $(PHOTON_SPECDEPS) -s $(PHOTON_SPECS_DIR) -i remove-upward-deps -p $$(echo `git show --pretty="format:" --name-only @ | grep .spec | xargs -n1 basename 2>/dev/null` | tr ' ' :) |
|
244 |
+ @test -n "$$(git show @ support)" && $(RM) -rf $(PHOTON_RPMS_DIR) |
|
245 |
+ |
|
238 | 246 |
packages: check-docker-py check-tools $(PHOTON_STAGE) $(PHOTON_PUBLISH_XRPMS) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTAIN) generate-dep-lists |
239 | 247 |
@echo "Building all RPMS..." |
240 | 248 |
@cd $(PHOTON_PKG_BUILDER_DIR) && \ |
... | ... |
@@ -29,10 +29,10 @@ Patch0: fix-build-warnings-errors-gcc-7.3.patch |
29 | 29 |
################################################################################# |
30 | 30 |
# dependencies that apply across all distro families |
31 | 31 |
################################################################################# |
32 |
-Requires: ceph-osd = %{epoch}:%{version}-%{release} |
|
33 |
-Requires: ceph-mds = %{epoch}:%{version}-%{release} |
|
34 |
-Requires: ceph-mgr = %{epoch}:%{version}-%{release} |
|
35 |
-Requires: ceph-mon = %{epoch}:%{version}-%{release} |
|
32 |
+Requires: ceph-osd = %{version}-%{release} |
|
33 |
+Requires: ceph-mds = %{version}-%{release} |
|
34 |
+Requires: ceph-mgr = %{version}-%{release} |
|
35 |
+Requires: ceph-mon = %{version}-%{release} |
|
36 | 36 |
Requires(post): binutils |
37 | 37 |
BuildRequires: boost-devel |
38 | 38 |
BuildRequires: cmake |
... | ... |
@@ -93,11 +93,11 @@ on commodity hardware and delivers object, block and file system storage. |
93 | 93 |
%package base |
94 | 94 |
Summary: Ceph Base Package |
95 | 95 |
Group: System Environment/Base |
96 |
-Requires: ceph-common = %{epoch}:%{version}-%{release} |
|
97 |
-Requires: librbd1 = %{epoch}:%{version}-%{release} |
|
98 |
-Requires: librados2 = %{epoch}:%{version}-%{release} |
|
99 |
-Requires: libcephfs2 = %{epoch}:%{version}-%{release} |
|
100 |
-Requires: librgw2 = %{epoch}:%{version}-%{release} |
|
96 |
+Requires: ceph-common = %{version}-%{release} |
|
97 |
+Requires: librbd1 = %{version}-%{release} |
|
98 |
+Requires: librados2 = %{version}-%{release} |
|
99 |
+Requires: libcephfs2 = %{version}-%{release} |
|
100 |
+Requires: librgw2 = %{version}-%{release} |
|
101 | 101 |
|
102 | 102 |
Requires: python2 |
103 | 103 |
Requires: python-requests |
... | ... |
@@ -114,13 +114,13 @@ Base is the package that includes all the files shared amongst ceph servers |
114 | 114 |
%package -n ceph-common |
115 | 115 |
Summary: Ceph Common |
116 | 116 |
Group: System Environment/Base |
117 |
-Requires: librbd1 = %{epoch}:%{version}-%{release} |
|
118 |
-Requires: librados2 = %{epoch}:%{version}-%{release} |
|
119 |
-Requires: libcephfs2 = %{epoch}:%{version}-%{release} |
|
120 |
-Requires: python-rados = %{epoch}:%{version}-%{release} |
|
121 |
-Requires: python-rbd = %{epoch}:%{version}-%{release} |
|
122 |
-Requires: python-cephfs = %{epoch}:%{version}-%{release} |
|
123 |
-Requires: python-rgw = %{epoch}:%{version}-%{release} |
|
117 |
+Requires: librbd1 = %{version}-%{release} |
|
118 |
+Requires: librados2 = %{version}-%{release} |
|
119 |
+Requires: libcephfs2 = %{version}-%{release} |
|
120 |
+Requires: python-rados = %{version}-%{release} |
|
121 |
+Requires: python-rbd = %{version}-%{release} |
|
122 |
+Requires: python-cephfs = %{version}-%{release} |
|
123 |
+Requires: python-rgw = %{version}-%{release} |
|
124 | 124 |
Requires: python-requests |
125 | 125 |
%{?systemd_requires} |
126 | 126 |
%description -n ceph-common |
... | ... |
@@ -130,7 +130,7 @@ Comprised of files that are common to Ceph clients and servers. |
130 | 130 |
%package mds |
131 | 131 |
Summary: Ceph Metadata Server Daemon |
132 | 132 |
Group: System Environment/Base |
133 |
-Requires: ceph-base = %{epoch}:%{version}-%{release} |
|
133 |
+Requires: ceph-base = %{version}-%{release} |
|
134 | 134 |
%description mds |
135 | 135 |
ceph-mds is the metadata server daemon for the Ceph distributed file system. |
136 | 136 |
One or more instances of ceph-mds collectively manage the file system |
... | ... |
@@ -139,7 +139,7 @@ namespace, coordinating access to the shared OSD cluster. |
139 | 139 |
%package mon |
140 | 140 |
Summary: Ceph Monitor Daemon |
141 | 141 |
Group: System Environment/Base |
142 |
-Requires: ceph-base = %{epoch}:%{version}-%{release} |
|
142 |
+Requires: ceph-base = %{version}-%{release} |
|
143 | 143 |
%description mon |
144 | 144 |
ceph-mon is the cluster monitor daemon for the Ceph distributed file |
145 | 145 |
system. One or more instances of ceph-mon form a Paxos part-time |
... | ... |
@@ -150,7 +150,7 @@ of cluster membership, configuration, and state. |
150 | 150 |
Summary: Ceph Manager Daemon |
151 | 151 |
License: LGPL-2.1 and CC-BY-SA-1.0 and GPL-2.0 and BSL-1.0 and GPL-2.0-with-autoconf-exception and BSD-3-Clause and MIT |
152 | 152 |
Group: System Environment/Base |
153 |
-Requires: ceph-base = %{epoch}:%{version}-%{release} |
|
153 |
+Requires: ceph-base = %{version}-%{release} |
|
154 | 154 |
|
155 | 155 |
%description mgr |
156 | 156 |
ceph-mgr enables python modules that provide services (such as the REST |
... | ... |
@@ -167,16 +167,16 @@ FUSE based client for Ceph distributed network file system |
167 | 167 |
%package -n rbd-fuse |
168 | 168 |
Summary: Ceph fuse-based client |
169 | 169 |
Group: System Environment/Base |
170 |
-Requires: librados2 = %{epoch}:%{version}-%{release} |
|
171 |
-Requires: librbd1 = %{epoch}:%{version}-%{release} |
|
170 |
+Requires: librados2 = %{version}-%{release} |
|
171 |
+Requires: librbd1 = %{version}-%{release} |
|
172 | 172 |
%description -n rbd-fuse |
173 | 173 |
FUSE based client to map Ceph rbd images to files |
174 | 174 |
|
175 | 175 |
%package -n rbd-mirror |
176 | 176 |
Summary: Ceph daemon for mirroring RBD images |
177 | 177 |
Group: System Environment/Base |
178 |
-Requires: ceph-common = %{epoch}:%{version}-%{release} |
|
179 |
-Requires: librados2 = %{epoch}:%{version}-%{release} |
|
178 |
+Requires: ceph-common = %{version}-%{release} |
|
179 |
+Requires: librados2 = %{version}-%{release} |
|
180 | 180 |
%description -n rbd-mirror |
181 | 181 |
Daemon for mirroring RBD images between Ceph clusters, streaming |
182 | 182 |
changes asynchronously. |
... | ... |
@@ -184,17 +184,17 @@ changes asynchronously. |
184 | 184 |
%package -n rbd-nbd |
185 | 185 |
Summary: Ceph RBD client base on NBD |
186 | 186 |
Group: System Environment/Base |
187 |
-Requires: librados2 = %{epoch}:%{version}-%{release} |
|
188 |
-Requires: librbd1 = %{epoch}:%{version}-%{release} |
|
187 |
+Requires: librados2 = %{version}-%{release} |
|
188 |
+Requires: librbd1 = %{version}-%{release} |
|
189 | 189 |
%description -n rbd-nbd |
190 | 190 |
NBD based client to map Ceph rbd images to local device |
191 | 191 |
|
192 | 192 |
%package radosgw |
193 | 193 |
Summary: Rados REST gateway |
194 | 194 |
Group: Development/Libraries |
195 |
-Requires: ceph-common = %{epoch}:%{version}-%{release} |
|
196 |
-Requires: librados2 = %{epoch}:%{version}-%{release} |
|
197 |
-Requires: librgw2 = %{epoch}:%{version}-%{release} |
|
195 |
+Requires: ceph-common = %{version}-%{release} |
|
196 |
+Requires: librados2 = %{version}-%{release} |
|
197 |
+Requires: librgw2 = %{version}-%{release} |
|
198 | 198 |
%description radosgw |
199 | 199 |
RADOS is a distributed object store used by the Ceph distributed |
200 | 200 |
storage system. This package provides a REST gateway to the |
... | ... |
@@ -204,7 +204,7 @@ service as well as the OpenStack Object Storage ("Swift") API. |
204 | 204 |
%package osd |
205 | 205 |
Summary: Ceph Object Storage Daemon |
206 | 206 |
Group: System Environment/Base |
207 |
-Requires: ceph-base = %{epoch}:%{version}-%{release} |
|
207 |
+Requires: ceph-base = %{version}-%{release} |
|
208 | 208 |
Requires: gptfdisk |
209 | 209 |
Requires: parted |
210 | 210 |
%description osd |
... | ... |
@@ -217,7 +217,7 @@ Summary: RADOS distributed object store client library |
217 | 217 |
Group: System Environment/Libraries |
218 | 218 |
License: LGPL-2.0 |
219 | 219 |
%if 0%{?rhel} || 0%{?fedora} |
220 |
-Obsoletes: ceph-libs < %{epoch}:%{version}-%{release} |
|
220 |
+Obsoletes: ceph-libs < %{version}-%{release} |
|
221 | 221 |
Requires: libatomic_ops |
222 | 222 |
%endif |
223 | 223 |
%description -n librados2 |
... | ... |
@@ -230,10 +230,10 @@ store using a simple file-like interface. |
230 | 230 |
Summary: RADOS headers |
231 | 231 |
Group: Development/Libraries |
232 | 232 |
License: LGPL-2.0 |
233 |
-Requires: librados2 = %{epoch}:%{version}-%{release} |
|
234 |
-Obsoletes: ceph-devel < %{epoch}:%{version}-%{release} |
|
235 |
-Provides: librados2-devel = %{epoch}:%{version}-%{release} |
|
236 |
-Obsoletes: librados2-devel < %{epoch}:%{version}-%{release} |
|
233 |
+Requires: librados2 = %{version}-%{release} |
|
234 |
+Obsoletes: ceph-devel < %{version}-%{release} |
|
235 |
+Provides: librados2-devel = %{version}-%{release} |
|
236 |
+Obsoletes: librados2-devel < %{version}-%{release} |
|
237 | 237 |
%description -n librados-devel |
238 | 238 |
This package contains libraries and headers needed to develop programs |
239 | 239 |
that use RADOS object store. |
... | ... |
@@ -242,7 +242,7 @@ that use RADOS object store. |
242 | 242 |
Summary: RADOS gateway client library |
243 | 243 |
Group: System Environment/Libraries |
244 | 244 |
License: LGPL-2.0 |
245 |
-Requires: librados2 = %{epoch}:%{version}-%{release} |
|
245 |
+Requires: librados2 = %{version}-%{release} |
|
246 | 246 |
%description -n librgw2 |
247 | 247 |
This package provides a library implementation of the RADOS gateway |
248 | 248 |
(distributed object store with S3 and Swift personalities). |
... | ... |
@@ -251,10 +251,10 @@ This package provides a library implementation of the RADOS gateway |
251 | 251 |
Summary: RADOS gateway client library |
252 | 252 |
Group: Development/Libraries |
253 | 253 |
License: LGPL-2.0 |
254 |
-Requires: librados-devel = %{epoch}:%{version}-%{release} |
|
255 |
-Requires: librgw2 = %{epoch}:%{version}-%{release} |
|
256 |
-Provides: librgw2-devel = %{epoch}:%{version}-%{release} |
|
257 |
-Obsoletes: librgw2-devel < %{epoch}:%{version}-%{release} |
|
254 |
+Requires: librados-devel = %{version}-%{release} |
|
255 |
+Requires: librgw2 = %{version}-%{release} |
|
256 |
+Provides: librgw2-devel = %{version}-%{release} |
|
257 |
+Obsoletes: librgw2-devel < %{version}-%{release} |
|
258 | 258 |
%description -n librgw-devel |
259 | 259 |
This package contains libraries and headers needed to develop programs |
260 | 260 |
that use RADOS gateway client library. |
... | ... |
@@ -263,9 +263,9 @@ that use RADOS gateway client library. |
263 | 263 |
Summary: Python 2 libraries for the RADOS gateway |
264 | 264 |
Group: System Environment/Libraries |
265 | 265 |
License: LGPL-2.0 |
266 |
-Requires: librgw2 = %{epoch}:%{version}-%{release} |
|
267 |
-Requires: python-rados = %{epoch}:%{version}-%{release} |
|
268 |
-Obsoletes: python-ceph < %{epoch}:%{version}-%{release} |
|
266 |
+Requires: librgw2 = %{version}-%{release} |
|
267 |
+Requires: python-rados = %{version}-%{release} |
|
268 |
+Obsoletes: python-ceph < %{version}-%{release} |
|
269 | 269 |
%description -n python-rgw |
270 | 270 |
This package contains Python 2 libraries for interacting with Cephs RADOS |
271 | 271 |
gateway. |
... | ... |
@@ -274,8 +274,8 @@ gateway. |
274 | 274 |
Summary: Python 3 libraries for the RADOS gateway |
275 | 275 |
Group: System Environment/Libraries |
276 | 276 |
License: LGPL-2.0 |
277 |
-Requires: librgw2 = %{epoch}:%{version}-%{release} |
|
278 |
-Requires: python3-rados = %{epoch}:%{version}-%{release} |
|
277 |
+Requires: librgw2 = %{version}-%{release} |
|
278 |
+Requires: python3-rados = %{version}-%{release} |
|
279 | 279 |
%description -n python3-rgw |
280 | 280 |
This package contains Python 3 libraries for interacting with Cephs RADOS |
281 | 281 |
gateway. |
... | ... |
@@ -284,8 +284,8 @@ gateway. |
284 | 284 |
Summary: Python 2 libraries for the RADOS object store |
285 | 285 |
Group: System Environment/Libraries |
286 | 286 |
License: LGPL-2.0 |
287 |
-Requires: librados2 = %{epoch}:%{version}-%{release} |
|
288 |
-Obsoletes: python-ceph < %{epoch}:%{version}-%{release} |
|
287 |
+Requires: librados2 = %{version}-%{release} |
|
288 |
+Obsoletes: python-ceph < %{version}-%{release} |
|
289 | 289 |
%description -n python-rados |
290 | 290 |
This package contains Python 2 libraries for interacting with Cephs RADOS |
291 | 291 |
object store. |
... | ... |
@@ -295,7 +295,7 @@ Summary: Python 3 libraries for the RADOS object store |
295 | 295 |
Group: System Environment/Libraries |
296 | 296 |
License: LGPL-2.0 |
297 | 297 |
Requires: python3 |
298 |
-Requires: librados2 = %{epoch}:%{version}-%{release} |
|
298 |
+Requires: librados2 = %{version}-%{release} |
|
299 | 299 |
%description -n python3-rados |
300 | 300 |
This package contains Python 3 libraries for interacting with Cephs RADOS |
301 | 301 |
object store. |
... | ... |
@@ -304,7 +304,7 @@ object store. |
304 | 304 |
Summary: RADOS striping interface |
305 | 305 |
Group: System Environment/Libraries |
306 | 306 |
License: LGPL-2.0 |
307 |
-Requires: librados2 = %{epoch}:%{version}-%{release} |
|
307 |
+Requires: librados2 = %{version}-%{release} |
|
308 | 308 |
%description -n libradosstriper1 |
309 | 309 |
Striping interface built on top of the rados library, allowing |
310 | 310 |
to stripe bigger objects onto several standard rados objects using |
... | ... |
@@ -314,11 +314,11 @@ an interface very similar to the rados one. |
314 | 314 |
Summary: RADOS striping interface headers |
315 | 315 |
Group: Development/Libraries |
316 | 316 |
License: LGPL-2.0 |
317 |
-Requires: libradosstriper1 = %{epoch}:%{version}-%{release} |
|
318 |
-Requires: librados-devel = %{epoch}:%{version}-%{release} |
|
319 |
-Obsoletes: ceph-devel < %{epoch}:%{version}-%{release} |
|
320 |
-Provides: libradosstriper1-devel = %{epoch}:%{version}-%{release} |
|
321 |
-Obsoletes: libradosstriper1-devel < %{epoch}:%{version}-%{release} |
|
317 |
+Requires: libradosstriper1 = %{version}-%{release} |
|
318 |
+Requires: librados-devel = %{version}-%{release} |
|
319 |
+Obsoletes: ceph-devel < %{version}-%{release} |
|
320 |
+Provides: libradosstriper1-devel = %{version}-%{release} |
|
321 |
+Obsoletes: libradosstriper1-devel < %{version}-%{release} |
|
322 | 322 |
%description -n libradosstriper-devel |
323 | 323 |
This package contains libraries and headers needed to develop programs |
324 | 324 |
that use RADOS striping interface. |
... | ... |
@@ -327,8 +327,8 @@ that use RADOS striping interface. |
327 | 327 |
Summary: RADOS block device client library |
328 | 328 |
Group: System Environment/Libraries |
329 | 329 |
License: LGPL-2.0 |
330 |
-Requires: librados2 = %{epoch}:%{version}-%{release} |
|
331 |
-Obsoletes: ceph-libs < %{epoch}:%{version}-%{release} |
|
330 |
+Requires: librados2 = %{version}-%{release} |
|
331 |
+Obsoletes: ceph-libs < %{version}-%{release} |
|
332 | 332 |
%description -n librbd1 |
333 | 333 |
RBD is a block device striped across multiple distributed objects in |
334 | 334 |
RADOS, a reliable, autonomic distributed object storage cluster |
... | ... |
@@ -339,11 +339,11 @@ shared library allowing applications to manage these block devices. |
339 | 339 |
Summary: RADOS block device headers |
340 | 340 |
Group: Development/Libraries |
341 | 341 |
License: LGPL-2.0 |
342 |
-Requires: librbd1 = %{epoch}:%{version}-%{release} |
|
343 |
-Requires: librados-devel = %{epoch}:%{version}-%{release} |
|
344 |
-Obsoletes: ceph-devel < %{epoch}:%{version}-%{release} |
|
345 |
-Provides: librbd1-devel = %{epoch}:%{version}-%{release} |
|
346 |
-Obsoletes: librbd1-devel < %{epoch}:%{version}-%{release} |
|
342 |
+Requires: librbd1 = %{version}-%{release} |
|
343 |
+Requires: librados-devel = %{version}-%{release} |
|
344 |
+Obsoletes: ceph-devel < %{version}-%{release} |
|
345 |
+Provides: librbd1-devel = %{version}-%{release} |
|
346 |
+Obsoletes: librbd1-devel < %{version}-%{release} |
|
347 | 347 |
%description -n librbd-devel |
348 | 348 |
This package contains libraries and headers needed to develop programs |
349 | 349 |
that use RADOS block device. |
... | ... |
@@ -352,9 +352,9 @@ that use RADOS block device. |
352 | 352 |
Summary: Python 2 libraries for the RADOS block device |
353 | 353 |
Group: System Environment/Libraries |
354 | 354 |
License: LGPL-2.0 |
355 |
-Requires: librbd1 = %{epoch}:%{version}-%{release} |
|
356 |
-Requires: python-rados = %{epoch}:%{version}-%{release} |
|
357 |
-Obsoletes: python-ceph < %{epoch}:%{version}-%{release} |
|
355 |
+Requires: librbd1 = %{version}-%{release} |
|
356 |
+Requires: python-rados = %{version}-%{release} |
|
357 |
+Obsoletes: python-ceph < %{version}-%{release} |
|
358 | 358 |
%description -n python-rbd |
359 | 359 |
This package contains Python 2 libraries for interacting with Cephs RADOS |
360 | 360 |
block device. |
... | ... |
@@ -363,8 +363,8 @@ block device. |
363 | 363 |
Summary: Python 3 libraries for the RADOS block device |
364 | 364 |
Group: System Environment/Libraries |
365 | 365 |
License: LGPL-2.0 |
366 |
-Requires: librbd1 = %{epoch}:%{version}-%{release} |
|
367 |
-Requires: python3-rados = %{epoch}:%{version}-%{release} |
|
366 |
+Requires: librbd1 = %{version}-%{release} |
|
367 |
+Requires: python3-rados = %{version}-%{release} |
|
368 | 368 |
%description -n python3-rbd |
369 | 369 |
This package contains Python 3 libraries for interacting with Cephs RADOS |
370 | 370 |
block device. |
... | ... |
@@ -373,7 +373,7 @@ block device. |
373 | 373 |
Summary: Ceph distributed file system client library |
374 | 374 |
Group: System Environment/Libraries |
375 | 375 |
License: LGPL-2.0 |
376 |
-Obsoletes: ceph-libs < %{epoch}:%{version}-%{release} |
|
376 |
+Obsoletes: ceph-libs < %{version}-%{release} |
|
377 | 377 |
Obsoletes: ceph-libcephfs |
378 | 378 |
%description -n libcephfs2 |
379 | 379 |
Ceph is a distributed network file system designed to provide excellent |
... | ... |
@@ -385,11 +385,11 @@ POSIX-like interface. |
385 | 385 |
Summary: Ceph distributed file system headers |
386 | 386 |
Group: Development/Libraries |
387 | 387 |
License: LGPL-2.0 |
388 |
-Requires: libcephfs2 = %{epoch}:%{version}-%{release} |
|
389 |
-Requires: librados-devel = %{epoch}:%{version}-%{release} |
|
390 |
-Obsoletes: ceph-devel < %{epoch}:%{version}-%{release} |
|
391 |
-Provides: libcephfs2-devel = %{epoch}:%{version}-%{release} |
|
392 |
-Obsoletes: libcephfs2-devel < %{epoch}:%{version}-%{release} |
|
388 |
+Requires: libcephfs2 = %{version}-%{release} |
|
389 |
+Requires: librados-devel = %{version}-%{release} |
|
390 |
+Obsoletes: ceph-devel < %{version}-%{release} |
|
391 |
+Provides: libcephfs2-devel = %{version}-%{release} |
|
392 |
+Obsoletes: libcephfs2-devel < %{version}-%{release} |
|
393 | 393 |
%description -n libcephfs-devel |
394 | 394 |
This package contains libraries and headers needed to develop programs |
395 | 395 |
that use Cephs distributed file system. |
... | ... |
@@ -398,9 +398,9 @@ that use Cephs distributed file system. |
398 | 398 |
Summary: Python 2 libraries for Ceph distributed file system |
399 | 399 |
Group: System Environment/Libraries |
400 | 400 |
License: LGPL-2.0 |
401 |
-Requires: libcephfs2 = %{epoch}:%{version}-%{release} |
|
402 |
-Requires: python-rados = %{epoch}:%{version}-%{release} |
|
403 |
-Obsoletes: python-ceph < %{epoch}:%{version}-%{release} |
|
401 |
+Requires: libcephfs2 = %{version}-%{release} |
|
402 |
+Requires: python-rados = %{version}-%{release} |
|
403 |
+Obsoletes: python-ceph < %{version}-%{release} |
|
404 | 404 |
%description -n python-cephfs |
405 | 405 |
This package contains Python 2 libraries for interacting with Cephs distributed |
406 | 406 |
file system. |
... | ... |
@@ -409,8 +409,8 @@ file system. |
409 | 409 |
Summary: Python 3 libraries for Ceph distributed file system |
410 | 410 |
Group: System Environment/Libraries |
411 | 411 |
License: LGPL-2.0 |
412 |
-Requires: libcephfs2 = %{epoch}:%{version}-%{release} |
|
413 |
-Requires: python3-rados = %{epoch}:%{version}-%{release} |
|
412 |
+Requires: libcephfs2 = %{version}-%{release} |
|
413 |
+Requires: python3-rados = %{version}-%{release} |
|
414 | 414 |
%description -n python3-cephfs |
415 | 415 |
This package contains Python 3 libraries for interacting with Cephs distributed |
416 | 416 |
file system. |
... | ... |
@@ -429,12 +429,12 @@ descriptions, and submitting the command to the appropriate daemon. |
429 | 429 |
Summary: Compatibility package for Cephs python libraries |
430 | 430 |
Group: System Environment/Libraries |
431 | 431 |
License: LGPL-2.0 |
432 |
-Obsoletes: python-ceph < %{epoch}:%{version}-%{release} |
|
433 |
-Requires: python-rados = %{epoch}:%{version}-%{release} |
|
434 |
-Requires: python-rbd = %{epoch}:%{version}-%{release} |
|
435 |
-Requires: python-cephfs = %{epoch}:%{version}-%{release} |
|
436 |
-Requires: python-rgw = %{epoch}:%{version}-%{release} |
|
437 |
-Provides: python-ceph = %{epoch}:%{version}-%{release} |
|
432 |
+Obsoletes: python-ceph < %{version}-%{release} |
|
433 |
+Requires: python-rados = %{version}-%{release} |
|
434 |
+Requires: python-rbd = %{version}-%{release} |
|
435 |
+Requires: python-cephfs = %{version}-%{release} |
|
436 |
+Requires: python-rgw = %{version}-%{release} |
|
437 |
+Provides: python-ceph = %{version}-%{release} |
|
438 | 438 |
%description -n python-ceph-compat |
439 | 439 |
This is a compatibility package to accommodate python-ceph split into |
440 | 440 |
python-rados, python-rbd, python-rgw and python-cephfs. Packages still |
... | ... |
@@ -39,6 +39,7 @@ class SpecObjectsUtils(object): |
39 | 39 |
def __init__(self, logPath): |
40 | 40 |
self.mapSpecObjects = {} |
41 | 41 |
self.mapPackageToSpec = {} |
42 |
+ self.mapSpecFileNameToSpecObj = {} |
|
42 | 43 |
self.logger = Logger.getLogger("Serializable Spec objects", logPath) |
43 | 44 |
|
44 | 45 |
def readSpecsAndConvertToSerializableObjects(self, specFilesPath): |
... | ... |
@@ -76,6 +77,7 @@ class SpecObjectsUtils(object): |
76 | 76 |
self.mapSpecObjects[specName].append(specObj) |
77 | 77 |
else: |
78 | 78 |
self.mapSpecObjects[specName]=[specObj] |
79 |
+ self.mapSpecFileNameToSpecObj[os.path.basename(specFile)]=specObj |
|
79 | 80 |
for key, value in self.mapSpecObjects.items(): |
80 | 81 |
if len(value) > 1: |
81 | 82 |
self.mapSpecObjects[key] = sorted(value, |
... | ... |
@@ -97,25 +99,29 @@ class SpecObjectsUtils(object): |
97 | 97 |
if (depPkg.compare == ""): |
98 | 98 |
return self.getHighestVersion(depPkg.package) |
99 | 99 |
specObjs=self.getSpecObj(depPkg.package) |
100 |
- for obj in specObjs: |
|
100 |
+ try: |
|
101 |
+ for obj in specObjs: |
|
101 | 102 |
verrel=obj.version+"-"+obj.release |
102 | 103 |
if depPkg.compare == ">=": |
103 |
- if LooseVersion(verrel) >= LooseVersion(depPkg.version): |
|
104 |
- return obj.version |
|
104 |
+ if LooseVersion(verrel) >= LooseVersion(depPkg.version): |
|
105 |
+ return obj.version |
|
105 | 106 |
elif depPkg.compare == "<=": |
106 |
- if LooseVersion(verrel) <= LooseVersion(depPkg.version): |
|
107 |
- return obj.version |
|
107 |
+ if LooseVersion(verrel) <= LooseVersion(depPkg.version): |
|
108 |
+ return obj.version |
|
108 | 109 |
elif depPkg.compare == "=": |
109 |
- if LooseVersion(verrel) == LooseVersion(depPkg.version): |
|
110 |
- return obj.version |
|
111 |
- if LooseVersion(obj.version) == LooseVersion(depPkg.version): |
|
112 |
- return obj.version |
|
110 |
+ if LooseVersion(verrel) == LooseVersion(depPkg.version): |
|
111 |
+ return obj.version |
|
112 |
+ if LooseVersion(obj.version) == LooseVersion(depPkg.version): |
|
113 |
+ return obj.version |
|
113 | 114 |
elif depPkg.compare == "<": |
114 |
- if LooseVersion(verrel) < LooseVersion(depPkg.version): |
|
115 |
- return obj.version |
|
115 |
+ if LooseVersion(verrel) < LooseVersion(depPkg.version): |
|
116 |
+ return obj.version |
|
116 | 117 |
elif depPkg.compare == ">": |
117 |
- if LooseVersion(verrel) > LooseVersion(depPkg.version): |
|
118 |
- return obj.version |
|
118 |
+ if LooseVersion(verrel) > LooseVersion(depPkg.version): |
|
119 |
+ return obj.version |
|
120 |
+ except Exception as e: |
|
121 |
+ self.logger.error("Exception happened while searching for: " + depPkg.package + depPkg.compare + depPkg.version) |
|
122 |
+ raise e |
|
119 | 123 |
|
120 | 124 |
# about to throw exception |
121 | 125 |
availableVersions="" |
... | ... |
@@ -144,10 +150,6 @@ class SpecObjectsUtils(object): |
144 | 144 |
package, version = StringUtils.splitPackageNameAndVersion(pkg) |
145 | 145 |
return self.getBuildRequiresForPackage(package, version) |
146 | 146 |
|
147 |
- def getBuildRequiresForPkg(self, pkg): |
|
148 |
- package, version = StringUtils.splitPackageNameAndVersion(pkg) |
|
149 |
- return self.getBuildRequiresForPackage(package, version) |
|
150 |
- |
|
151 | 147 |
# Returns list of [ "pkg1-vers1", "pkg2-vers2",.. ] |
152 | 148 |
def getRequiresAllForPackage(self, package, version): |
153 | 149 |
requiresList=[] |
... | ... |
@@ -284,33 +286,24 @@ class SpecObjectsUtils(object): |
284 | 284 |
def printAllObjects(self): |
285 | 285 |
listSpecs = self.mapSpecObjects.keys() |
286 | 286 |
for spec in listSpecs: |
287 |
- specObj = self.mapSpecObjects[spec] |
|
288 |
- self.logger.info("-----------Spec:"+specObj.name+"--------------") |
|
289 |
- self.logger.info("Version:"+specObj.version) |
|
290 |
- self.logger.info("Release:"+specObj.release) |
|
291 |
- self.logger.info("SpecFile:"+specObj.specFile) |
|
292 |
- self.logger.info(" ") |
|
293 |
- self.logger.info("Source Files") |
|
294 |
- self.logger.info(specObj.listSources) |
|
295 |
- self.logger.info(" ") |
|
296 |
- self.logger.info("Patch Files") |
|
297 |
- self.logger.info(specObj.listPatches) |
|
298 |
- self.logger.info(" ") |
|
299 |
- self.logger.info(" ") |
|
300 |
- self.logger.info("List RPM packages") |
|
301 |
- self.logger.info(specObj.listPackages) |
|
302 |
- self.logger.info(" ") |
|
303 |
- self.logger.info(" ") |
|
304 |
- self.logger.info("Build require packages") |
|
305 |
- self.logger.info(self.getPkgNamesFromObj(specObj.buildRequirePackages)) |
|
306 |
- self.logger.info(" ") |
|
307 |
- self.logger.info(" ") |
|
308 |
- self.logger.info("install require packages") |
|
309 |
- self.logger.info(self.getPkgNamesFromObj(specObj.installRequiresAllPackages)) |
|
310 |
- self.logger.info(" ") |
|
311 |
- self.logger.info(specObj.installRequiresPackages) |
|
312 |
- self.logger.info("security_hardening: " + specObj.securityHardening) |
|
313 |
- self.logger.info("------------------------------------------------") |
|
287 |
+ for specObj in self.mapSpecObjects[spec]: |
|
288 |
+ self.logger.info("-----------Spec:"+specObj.name+"--------------") |
|
289 |
+ self.logger.info("Version:"+specObj.version) |
|
290 |
+ self.logger.info("Release:"+specObj.release) |
|
291 |
+ self.logger.info("SpecFile:"+specObj.specFile) |
|
292 |
+ self.logger.info("Source Files") |
|
293 |
+ self.logger.info(specObj.listSources) |
|
294 |
+ self.logger.info("Patch Files") |
|
295 |
+ self.logger.info(specObj.listPatches) |
|
296 |
+ self.logger.info("List RPM packages") |
|
297 |
+ self.logger.info(specObj.listPackages) |
|
298 |
+ self.logger.info("Build require packages") |
|
299 |
+ self.logger.info(self.getPkgNamesFromObj(specObj.buildRequirePackages)) |
|
300 |
+ self.logger.info("install require packages") |
|
301 |
+ self.logger.info(self.getPkgNamesFromObj(specObj.installRequiresAllPackages)) |
|
302 |
+ self.logger.info(specObj.installRequiresPackages) |
|
303 |
+ self.logger.info("security_hardening: " + specObj.securityHardening) |
|
304 |
+ self.logger.info("------------------------------------------------") |
|
314 | 305 |
|
315 | 306 |
|
316 | 307 |
class SPECS(object): |
... | ... |
@@ -411,6 +404,17 @@ class SpecDependencyGenerator(object): |
411 | 411 |
whoNeedsBuild.append(depSpecPkg) |
412 | 412 |
depQue.put(depSpecPkg) |
413 | 413 |
|
414 |
+ def findTotalWhoNeeds(self, depQue, whoNeeds): |
|
415 |
+ while not depQue.empty(): |
|
416 |
+ specPkg = depQue.get() |
|
417 |
+ listPackagesRequired = SPECS.getData().getBuildRequiresForPkg(specPkg) |
|
418 |
+ listPackagesRequired.extend(SPECS.getData().getRequiresAllForPkg(specPkg)) |
|
419 |
+ for depPkg in listPackagesRequired: |
|
420 |
+ depSpecPkg = SPECS.getData().getBasePkg(depPkg) |
|
421 |
+ if depSpecPkg not in whoNeeds: |
|
422 |
+ whoNeeds.append(depSpecPkg) |
|
423 |
+ depQue.put(depSpecPkg) |
|
424 |
+ |
|
414 | 425 |
def printTree(self, children, curParent, depth): |
415 | 426 |
if curParent in children: |
416 | 427 |
for child in children[curParent]: |
... | ... |
@@ -500,11 +504,25 @@ class SpecDependencyGenerator(object): |
500 | 500 |
return self.displayDependencies(displayOption, inputType, outputFile, mapDependencies, parent) |
501 | 501 |
else: |
502 | 502 |
return self.displayDependencies(displayOption, inputType, inputValue, mapDependencies, parent) |
503 |
+ elif inputType == "remove-upward-deps": |
|
504 |
+ depQue = queue.Queue() |
|
505 |
+ for specFile in inputValue.split(":"): |
|
506 |
+ if specFile in SPECS.getData().mapSpecFileNameToSpecObj: |
|
507 |
+ specObj = SPECS.getData().mapSpecFileNameToSpecObj[specFile] |
|
508 |
+ whoNeedsList.append(specObj.name+"-"+specObj.version) |
|
509 |
+ for package in specObj.listPackages: |
|
510 |
+ depQue.put(package+"-"+specObj.version) |
|
511 |
+ self.findTotalWhoNeeds(depQue, whoNeedsList) |
|
512 |
+ return whoNeedsList |
|
513 |
+ |
|
503 | 514 |
elif inputType == "who-needs": |
504 |
- for depPkg in SPECS.getData().mapPackageToSpec: |
|
515 |
+ for depPackage in SPECS.getData().mapPackageToSpec: |
|
505 | 516 |
pkg=inputValue+"-"+SPECS.getData().getHighestVersion(inputValue) |
506 |
- if pkg in SPECS.getData().getRequiresForPkg(depPkg): |
|
507 |
- whoNeedsList.append(depPkg) |
|
517 |
+ for version in SPECS.getData().getVersions(depPackage): |
|
518 |
+ depPkg = depPackage+"-"+version |
|
519 |
+ print (depPkg) |
|
520 |
+ if pkg in SPECS.getData().getRequiresForPkg(depPkg): |
|
521 |
+ whoNeedsList.append(depPkg) |
|
508 | 522 |
print (whoNeedsList) |
509 | 523 |
return whoNeedsList |
510 | 524 |
elif inputType == "who-needs-build": |
... | ... |
@@ -8,10 +8,11 @@ import os |
8 | 8 |
from argparse import ArgumentParser |
9 | 9 |
import shutil |
10 | 10 |
import traceback |
11 |
-from SpecData import SpecDependencyGenerator |
|
11 |
+from SpecData import SpecDependencyGenerator, SPECS |
|
12 | 12 |
from jsonwrapper import JsonWrapper |
13 | 13 |
from constants import constants |
14 | 14 |
from CommandUtils import CommandUtils |
15 |
+from StringUtils import StringUtils |
|
15 | 16 |
|
16 | 17 |
DEFAULT_INPUT_TYPE = "pkg" |
17 | 18 |
DEFAULT_DISPLAY_OPTION = "tree" |
... | ... |
@@ -47,8 +48,17 @@ def main(): |
47 | 47 |
try: |
48 | 48 |
specDeps = SpecDependencyGenerator() |
49 | 49 |
|
50 |
+ if options.input_type == "remove-upward-deps": |
|
51 |
+ whoNeedsList = specDeps.process(options.input_type, options.pkg, options.display_option) |
|
52 |
+ print ("Removing upward dependencies: " + str(whoNeedsList)) |
|
53 |
+ for pkg in whoNeedsList: |
|
54 |
+ package, version = StringUtils.splitPackageNameAndVersion(pkg) |
|
55 |
+ release = SPECS.getData().getRelease(package, version) |
|
56 |
+ buildarch=SPECS.getData().getBuildArch(package, version) |
|
57 |
+ rpmFile = "stage/RPMS/" + buildarch + "/" +package + "-" + version + "-" + release + ".*" + buildarch+".rpm" |
|
58 |
+ cmdUtils.runCommandInShell2("rm -f "+rpmFile) |
|
50 | 59 |
# To display/print package dependencies on console |
51 |
- if (options.input_type == "pkg" or |
|
60 |
+ elif (options.input_type == "pkg" or |
|
52 | 61 |
options.input_type == "who-needs" or |
53 | 62 |
options.input_type == "who-needs-build"): |
54 | 63 |
specDeps.process(options.input_type, options.pkg, options.display_option) |
... | ... |
@@ -76,7 +86,6 @@ def main(): |
76 | 76 |
sys.stderr.write("Failed to generate dependency lists from spec files\n") |
77 | 77 |
sys.exit(1) |
78 | 78 |
|
79 |
- sys.stderr.write("Successfully generated dependency lists from spec files\n") |
|
80 | 79 |
sys.exit(0) |
81 | 80 |
|
82 | 81 |
|