Skip to content

Commit 0c9d233

Browse files
committed
implement "--record-rpm" option for distutils installations
Patch: Python-3.0b1-record-rpm.patch
1 parent 8d999cb commit 0c9d233

File tree

1 file changed

+53
-1
lines changed

1 file changed

+53
-1
lines changed

Lib/distutils/command/install.py

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ class install(Command):
131131

132132
('record=', None,
133133
"filename in which to record list of installed files"),
134+
('record-rpm=', None,
135+
"filename in which to record list of installed files and directories suitable as filelist for rpm"),
134136
]
135137

136138
boolean_options = ['compile', 'force', 'skip-build']
@@ -213,6 +215,7 @@ def initialize_options(self):
213215
#self.install_info = None
214216

215217
self.record = None
218+
self.record_rpm = None
216219

217220

218221
# -- Option finalizing methods -------------------------------------
@@ -560,12 +563,61 @@ def run(self):
560563
self.create_path_file()
561564

562565
# write list of installed files, if requested.
563-
if self.record:
566+
if self.record or self.record_rpm:
564567
outputs = self.get_outputs()
565568
if self.root: # strip any package prefix
566569
root_len = len(self.root)
567570
for counter in range(len(outputs)):
568571
outputs[counter] = outputs[counter][root_len:]
572+
if self.record_rpm: # add directories
573+
self.record = self.record_rpm
574+
dirs = []
575+
# directories to reject:
576+
rejectdirs = [
577+
'/etc',
578+
'/',
579+
'',
580+
self.prefix,
581+
self.exec_prefix,
582+
self.install_base,
583+
self.install_platbase,
584+
self.install_purelib,
585+
self.install_platlib,
586+
self.install_headers[:len(self.install_headers) - len(self.distribution.get_name()) - 1],
587+
self.install_libbase,
588+
self.install_scripts,
589+
self.install_data,
590+
os.path.join(self.install_data, 'share'),
591+
os.path.join(self.install_data, 'share', 'doc'),
592+
]
593+
# directories whose childs reject:
594+
rejectdirs2 = [
595+
os.path.join(self.install_data, 'share', 'man'),
596+
]
597+
# directories whose grandsons reject:
598+
rejectdirs3 = [
599+
os.path.join(self.install_data, 'share', 'man'),
600+
os.path.join(self.install_data, 'share', 'locale'),
601+
]
602+
for counter in range(len(rejectdirs)):
603+
if len(rejectdirs[counter]) > root_len:
604+
rejectdirs[counter] = rejectdirs[counter][root_len:]
605+
for counter in range(len(rejectdirs2)):
606+
if len(rejectdirs2[counter]) > root_len:
607+
rejectdirs2[counter] = rejectdirs2[counter][root_len:]
608+
for counter in range(len(rejectdirs3)):
609+
if len(rejectdirs3[counter]) > root_len:
610+
rejectdirs3[counter] = rejectdirs3[counter][root_len:]
611+
for counter in range(len(outputs)):
612+
directory = os.path.dirname(outputs[counter])
613+
while directory not in rejectdirs and \
614+
os.path.dirname(directory) not in rejectdirs2 and \
615+
os.path.dirname(os.path.dirname(directory)) not in rejectdirs3:
616+
dirname = '%dir ' + directory
617+
if dirname not in dirs:
618+
dirs.append(dirname)
619+
directory = os.path.dirname(directory)
620+
outputs += dirs
569621
self.execute(write_file,
570622
(self.record, outputs),
571623
"writing list of installed files to '%s'" %

0 commit comments

Comments
 (0)