#!/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) # purge un-managed formulas def clean_formulas(conf): if conf['purge_formulas']: print('Cleaning out unmanaged formulas') else: print('Not cleaning out unmanaged formulas') # 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) # clean unmanaged formulas clean_formulas(conf) # run main main()