- Patch #1060577: Extract list of RPM files from spec file in

bdist_rpm
Will backport to 2.5.
This commit is contained in:
Martin v. Löwis 2006-11-04 18:14:06 +00:00
parent abd8a336a3
commit 5310e5078a
2 changed files with 38 additions and 25 deletions

View File

@ -337,37 +337,47 @@ class bdist_rpm (Command):
if not self.keep_temp: if not self.keep_temp:
rpm_cmd.append('--clean') rpm_cmd.append('--clean')
rpm_cmd.append(spec_path) rpm_cmd.append(spec_path)
# Determine the binary rpm names that should be built out of this spec
# file
# Note that some of these may not be really built (if the file
# list is empty)
nvr_string = "%{name}-%{version}-%{release}"
src_rpm = nvr_string + ".src.rpm"
non_src_rpm = "%{arch}/" + nvr_string + ".%{arch}.rpm"
q_cmd = r"rpm -q --qf '%s %s\n' --specfile '%s'" % (
src_rpm, non_src_rpm, spec_path)
out = os.popen(q_cmd)
binary_rpms = []
source_rpm = None
while 1:
line = out.readline()
if not line:
break
l = string.split(string.strip(line))
assert(len(l) == 2)
binary_rpms.append(l[1])
# The source rpm is named after the first entry in the spec file
if source_rpm is None:
source_rpm = l[0]
status = out.close()
if status:
raise DistutilsExecError("Failed to execute: %s" % repr(q_cmd))
self.spawn(rpm_cmd) self.spawn(rpm_cmd)
# XXX this is a nasty hack -- we really should have a proper way to
# find out the names of the RPM files created; also, this assumes
# that RPM creates exactly one source and one binary RPM.
if not self.dry_run: if not self.dry_run:
if not self.binary_only: if not self.binary_only:
srpms = glob.glob(os.path.join(rpm_dir['SRPMS'], "*.rpm")) srpm = os.path.join(rpm_dir['SRPMS'], source_rpm)
assert len(srpms) == 1, \ assert(os.path.exists(srpm))
"unexpected number of SRPM files found: %s" % srpms self.move_file(srpm, self.dist_dir)
dist_file = ('bdist_rpm', 'any',
self._dist_path(srpms[0]))
self.distribution.dist_files.append(dist_file)
self.move_file(srpms[0], self.dist_dir)
if not self.source_only: if not self.source_only:
rpms = glob.glob(os.path.join(rpm_dir['RPMS'], "*/*.rpm")) for rpm in binary_rpms:
debuginfo = glob.glob(os.path.join(rpm_dir['RPMS'], rpm = os.path.join(rpm_dir['RPMS'], rpm)
"*/*debuginfo*.rpm")) if os.path.exists(rpm):
if debuginfo: self.move_file(rpm, self.dist_dir)
rpms.remove(debuginfo[0])
assert len(rpms) == 1, \
"unexpected number of RPM files found: %s" % rpms
dist_file = ('bdist_rpm', get_python_version(),
self._dist_path(rpms[0]))
self.distribution.dist_files.append(dist_file)
self.move_file(rpms[0], self.dist_dir)
if debuginfo:
dist_file = ('bdist_rpm', get_python_version(),
self._dist_path(debuginfo[0]))
self.move_file(debuginfo[0], self.dist_dir)
# run() # run()
def _dist_path(self, path): def _dist_path(self, path):

View File

@ -92,6 +92,9 @@ Core and builtins
Library Library
------- -------
- Patch #1060577: Extract list of RPM files from spec file in
bdist_rpm
- Bug #1586613: fix zlib and bz2 codecs' incremental en/decoders. - Bug #1586613: fix zlib and bz2 codecs' incremental en/decoders.
- Patch #1583880: fix tarfile's problems with long names and posix/ - Patch #1583880: fix tarfile's problems with long names and posix/