Commit af87827a authored by Jérome Perrin's avatar Jérome Perrin

prune: fix detection of parts used in scripts

python interpreter is sometimes referenced only in bin/buildout's
shebang, even if not used anymore in any software, if it was used to
initially created the buildout. In that case, the part should still be
considered as used and not pruned.

See merge request !194
parents accc18d8 36795cbf
...@@ -149,6 +149,9 @@ def getUsageSignatureFromSoftwareAndSharedPart( ...@@ -149,6 +149,9 @@ def getUsageSignatureFromSoftwareAndSharedPart(
'.installed.cfg')): '.installed.cfg')):
with open(installed_cfg) as f: with open(installed_cfg) as f:
signatures[installed_cfg] = f.read() signatures[installed_cfg] = f.read()
for script in glob.glob(os.path.join(software_root, '*', 'bin', '*')):
with open(script) as f:
signatures[script] = f.read()
if shared_root: if shared_root:
for shared_signature in glob.glob(os.path.join(shared_root, '*', '*', for shared_signature in glob.glob(os.path.join(shared_root, '*', '*',
'.*signature')): '.*signature')):
......
...@@ -110,6 +110,20 @@ class TestPrune(unittest.TestCase): ...@@ -110,6 +110,20 @@ class TestPrune(unittest.TestCase):
self.logger.warning.assert_called_with( self.logger.warning.assert_called_with(
'Unusued shared parts at %s%s', not_used, ' ... removed') 'Unusued shared parts at %s%s', not_used, ' ... removed')
def test_shared_part_used_in_buildout_script(self):
not_used = self._createSharedPart('not_used')
used_in_script = self._createSharedPart('used_in_script')
fake_software_path = self._createFakeSoftware(self.id())
os.mkdir(os.path.join(fake_software_path, 'bin'))
script = os.path.join(fake_software_path, 'bin', 'buildout')
with open(script, 'w') as f:
f.write('#!{}'.format(used_in_script))
do_prune(self.logger, self.config, False)
self.assertTrue(os.path.exists(used_in_script))
self.assertFalse(os.path.exists(not_used))
self.logger.warning.assert_called_with(
'Unusued shared parts at %s%s', not_used, ' ... removed')
def test_shared_part_used_in_recursive_instance(self): def test_shared_part_used_in_recursive_instance(self):
used_in_software_from_instance = self._createSharedPart('used_in_software_from_instance') used_in_software_from_instance = self._createSharedPart('used_in_software_from_instance')
used_in_shared_part_from_instance = self._createSharedPart('used_in_shared_part_from_instance') used_in_shared_part_from_instance = self._createSharedPart('used_in_shared_part_from_instance')
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment