import os
import json
import subprocess
def sort_by_dep(unsorted):
sorted = []
unsorted = dict(unsorted)
while unsorted:
for node, edges in unsorted.items():
for edge in edges:
if edge in unsorted:
break
else:
del unsorted[node]
sorted.append((node, edges))
return sorted
def load_metadata():
return json.loads(subprocess.Popen(
'cargo metadata --no-deps --format-version=1',
shell=True, stdout=subprocess.PIPE).communicate()[0])
def get_packages():
metadata = load_metadata()
graph = []
for pkg in metadata['packages']:
graph.append((
pkg['name'],
[x['name'] for x in pkg['dependencies'] if x['name'].startswith('symbolic-')]
))
return sort_by_dep(graph)
for pkg, deps in get_packages():
if os.path.isdir(pkg):
subprocess.Popen(['cargo', 'publish'], cwd=pkg).wait()
else:
subprocess.Popen(['cargo', 'publish']).wait()