Skip to content

Instantly share code, notes, and snippets.

@tomoconnor
Created January 28, 2014 17:40
Show Gist options
  • Select an option

  • Save tomoconnor/8672386 to your computer and use it in GitHub Desktop.

Select an option

Save tomoconnor/8672386 to your computer and use it in GitHub Desktop.
# fattener.py
import sys
import os
import envoy
import json
resolved = {}
def resolve_dependencies(gem_name):
required_dependencies = []
dependencies = envoy.run("gem dependency %s" % gem_name)
if dependencies.status_code != 0:
dependencies = envoy.run("gem dependency --remote %s" % gem_name)
dep_output = dependencies.std_out.split('\n')
for x in dep_output:
if x.startswith(" "):
dep_line = x.strip().split()
dep_name = dep_line[0]
required_dependencies.append(dep_name)
resolved[gem_name] = required_dependencies
return resolved
def flatten_dict_to_set(dict_deep):
master = dict_deep.keys()
subkeys = dict_deep.values()
all_values = []
all_values += master
for keyset in subkeys:
all_values += keyset
return set(all_values)
def build_gem_to_deb(gem_name):
r = envoy.run("fpm -s gem -t deb %s" % gem_name)
print r.std_out
if __name__ == '__main__':
starting_gem = sys.argv[1]
try:
with open("%s.json" % starting_gem, 'r') as infile:
flattened_list = json.load(infile)
for gem_to_build in flattened_list:
build_gem_to_deb(gem_to_build)
except:
initial = resolve_dependencies(starting_gem)
for gem in resolved[starting_gem]:
print gem
resolve_dependencies(gem)
flattened_list = flatten_dict_to_set(resolved)
with open("%s.json" % starting_gem, 'w') as outfile:
json.dump(list(flattened_list),outfile)
for gem_to_build in flattened_list:
build_gem_to_deb(gem_to_build)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment