You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.9 KiB
67 lines
1.9 KiB
10 months ago
|
"""
|
||
|
Script for installing dependencies for specific actor.
|
||
|
It is called from Makefile install-deps target.
|
||
|
If given actor doesn't exist, script exits with return
|
||
|
code 1 and stderr message.
|
||
|
If given actor doesn't have Makefile, warning printed on stderr.
|
||
|
If no actor is specified dependencies will be installed
|
||
|
for all actors with Makefile.
|
||
|
|
||
|
usage: python install_actor_deps.py [--actor actorname]
|
||
|
"""
|
||
|
|
||
|
import argparse
|
||
|
import os
|
||
|
import sys
|
||
|
from subprocess import check_call, CalledProcessError
|
||
|
|
||
|
|
||
|
def error(msg, rc):
|
||
|
sys.stderr.write(msg)
|
||
|
sys.exit(rc)
|
||
|
|
||
|
|
||
|
def install(path):
|
||
|
cmd = "make -f {} install-deps".format(path)
|
||
|
try:
|
||
|
check_call(cmd, shell=True)
|
||
|
except CalledProcessError as e:
|
||
|
error(str(e) + '\n', e.returncode)
|
||
|
|
||
|
|
||
|
def install_actor_deps(actor, directory):
|
||
|
for root, dirs, files in os.walk(directory):
|
||
|
if actor in dirs:
|
||
|
makefile_path = os.path.join(root, actor, 'Makefile')
|
||
|
if os.path.isfile(makefile_path):
|
||
|
install(makefile_path)
|
||
|
else:
|
||
|
sys.stderr.write("Actor '{}' doesn't have Makefile!\n".format(actor))
|
||
|
return
|
||
|
error("Actor '{}' doesn't exist!\n".format(actor), 1)
|
||
|
|
||
|
|
||
|
def install_all_deps(directory, repos):
|
||
|
repos = repos.split() if repos else repos
|
||
|
for root, dirs, files in os.walk(directory):
|
||
|
if repos and not any([repo in dirs for repo in repos]):
|
||
|
continue
|
||
|
if 'Makefile' in files:
|
||
|
install(os.path.join(root, 'Makefile'))
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
ACTORS_DIR = './repos'
|
||
|
|
||
|
parser = argparse.ArgumentParser()
|
||
|
parser.add_argument(
|
||
|
"--actor", help="name of the actor for which to install dependencies")
|
||
|
parser.add_argument(
|
||
|
"--repos", help="repositories to look into")
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
if args.actor:
|
||
|
install_actor_deps(args.actor, ACTORS_DIR)
|
||
|
else:
|
||
|
install_all_deps(ACTORS_DIR, args.repos)
|