Skip to content

Instantly share code, notes, and snippets.

@dirk-thomas
Created September 28, 2013 06:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dirk-thomas/6739057 to your computer and use it in GitHub Desktop.
Save dirk-thomas/6739057 to your computer and use it in GitHub Desktop.
wipe obsolete stacks from dry release repo
#!/usr/bin/env python
from distutils.version import LooseVersion
import os
import subprocess
import yaml
rosdistro_path = '../../release_trunk/distros'
distros = ['cturtle', 'diamondback','electric', 'fuerte', 'groovy', 'hydro']
stack_versions = {}
for distro in distros:
#print('')
#print('distro', distro)
with open(os.path.join(rosdistro_path, '%s.rosdistro' % distro)) as f:
data = yaml.load(f.read())
stacks = data['stacks']
for stack_name, stack_data in stacks.items():
if stack_name == '_rules':
continue
#print('stack_name', stack_name)
version = stack_data['version']
if version is not None:
if stack_name not in stack_versions:
stack_versions[stack_name] = set([])
stack_versions[stack_name].add(version)
#print(distro, stack_versions)
#print(stack_versions)
delete_folders = []
for stack_name in sorted(stack_versions.keys()):
versions = stack_versions[stack_name]
subfolders = ['%s-%s' % (stack_name, version) for version in sorted(versions)]
for subfolder in subfolders:
assert os.path.exists(os.path.join(stack_name, subfolder))
version_objs = [LooseVersion(v) for v in versions]
for f in os.listdir(stack_name):
assert f.startswith(stack_name + '-')
# skip releases referenced in a distro
if f in subfolders:
continue
v = f[len(stack_name) + 1:]
v_obj = LooseVersion(v)
is_newer = True
for version_obj in version_objs:
if version_obj > v_obj:
is_newer = False
break
# skip newer releases even when not being referenced in any distro
if is_newer:
continue
delete_folders.append(os.path.join(stack_name, f))
print('to be deleted', len(delete_folders), 'folders')
size = 0
for delete_folder in delete_folders:
for f in os.listdir(delete_folder):
ff = os.path.join(delete_folder, f)
if not os.path.isfile(ff):
continue
size += os.path.getsize(ff)
print(float(size) / 1024 / 1024 / 1024, 'GB')
for delete_folder in delete_folders:
print('delete', delete_folder)
rc = subprocess.call(['svn', 'rm', delete_folder])
assert rc == 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment