73 lines
2.1 KiB
Python
73 lines
2.1 KiB
Python
#!/usr/bin/env python
|
|
|
|
from git import Repo
|
|
import os
|
|
import sys
|
|
import yaml
|
|
|
|
# constants
|
|
CONFIG_FILE = 'sfm.yaml'
|
|
|
|
# reads configuration and returns the dictionary
|
|
def read_config():
|
|
f = open(CONFIG_FILE, 'r')
|
|
conf = yaml.load(f)
|
|
f.close()
|
|
|
|
return conf
|
|
|
|
# makes the formulas directory if it doesn't exist
|
|
def check_formula_dir(conf):
|
|
# check if the formulas directory is actually a directory
|
|
if not os.path.isdir(conf['formulas_dir']):
|
|
# check if it's a file
|
|
if os.path.exists(conf['formulas_dir']):
|
|
print(str(conf['formulas_dir']) + ' exists but is not a directory. Please fix this.')
|
|
sys.exit(1)
|
|
# create it if not
|
|
else:
|
|
os.makedirs(conf['formulas_dir'])
|
|
|
|
# loops through the array of repos and downloads them
|
|
def get_formulas(conf):
|
|
# loop through the defined formulas
|
|
for formula in conf['formulas']:
|
|
git_url = ''
|
|
local_path = ''
|
|
|
|
# check if the formula entry is a string or a dictionary
|
|
if isinstance(formula, dict):
|
|
# entry is a dictionary
|
|
git_url = str(formula['url'])
|
|
local_path = str(conf['formulas_dir']) + '/' + str(formula['name'])
|
|
elif isinstance(formula, str):
|
|
# entry is a string
|
|
git_url = str(conf['formulas_url']) + str(formula) + '-formula'
|
|
local_path = str(conf['formulas_dir']) + '/' + str(formula) + '-formula'
|
|
else:
|
|
# entry type is not supported
|
|
print('One of your entries is not a dict or a string (' + str(formula) + ') - please fix this.')
|
|
sys.exit(1)
|
|
|
|
# check if the destination directory exists
|
|
if os.path.exists(local_path):
|
|
print(local_path + ' already exists, so we\'re skipping this.')
|
|
else:
|
|
print('Downloading ' + git_url + ' into ' + local_path)
|
|
# clone git repo
|
|
Repo.clone_from(git_url, local_path)
|
|
|
|
# main program
|
|
def main():
|
|
# read configuration settings
|
|
conf = read_config()
|
|
|
|
# make sure the formulas directory exists
|
|
check_formula_dir(conf)
|
|
|
|
# do the formula stuff
|
|
get_formulas(conf)
|
|
|
|
# run main
|
|
main()
|