#!/usr/bin/env bash # Fetch arbitrary files from a remote location for processing/ # inclusion in local build. declare -A stx_repo message () { echo -e "$@" 1>&2; } usage_error () { message "\nUsage: $0 -c config-file -o [-f -b] -c contains fetch and save locations for files -o sets the output path to the save locations in or to STDOUT -f optionally forces existing output files to be overwritten -b skips branch lookup. Use this if downloading from a non-git URL\n" exit 1 } check_util_deps () { for dep in $@ do if ! hash $dep 2>/dev/null; then message >&2 "... $dep dependency not met. Please install." exit 1 fi done } check_file_deps () { for filereq in $@ do if [ ! -f "${filereq}" ] && [ ! -L "${filereq}" ]; then message "${filereq} not found. Quiting."; exit 1; fi done } load_configs () { CONTEXT_DIR="${BASH_SOURCE%/*}" if [[ ! -d "$CONTEXT_DIR" ]]; then CONTEXT_DIR="$PWD"; fi . "$CONTEXT_DIR/$config_file" message "Loaded $CONTEXT_DIR/$config_file" } get_remote () { if [[ $no_branch = "t" ]]; then message "Branch ignored"; return; fi local _regex_br="^defaultbranch\=(.*)\s*$" local _remote=$(grep defaultbranch $branch_file) if [[ "${_remote}" =~ $_regex_br ]] then remote="${BASH_REMATCH[1]}" else message "Can't find remote branch"; exit 1 fi for b in "${!stx_repo[@]}" do if [[ ${remote} == ${b} ]] then remote="${stx_repo[$b]}" break fi done remote="$remote/" message "Remote is: $remote" } fetch_files () { local _f for _f in "${!remote_files[@]}"; do local _outfile case $out_method in "file") _outfile="$common_target${remote_files[$_f]}" if [ ! -d $(dirname $_outfile) ]; then mkdir -p `dirname $_outfile`; fi ;; "stdout") _outfile="-" ;; *) message "Should never get here!"; exit 1; ;; esac if [ -f $_outfile ] && [ ! "$force" = "t" ] && [ "$out_method" = "file" ]; then message "$_outfile already exists, use \"-f\" to override. Quiting" usage_error exit 1 fi wget $addtional_flags -q -O $_outfile $prot://$remote_repo/$remote$_f if [ $? -ne 0 ]; then if [ ! -s $_outfile ]; then rm -f $_outfile; fi message "Could not download ${remote_files[$_f]}. Quiting" exit 1 fi done } while getopts "c:o:fb" flag do case "${flag}" in c) config_file=$OPTARG ;; o) case $OPTARG in file) out_method="file" ;; stdout) out_method="stdout" ;; *) usage_error ;; esac ;; f) force="t" ;; b) no_branch="t" ;; *) message "Unknown arg \"$flag\""; usage_error ;; esac done shift "$(( OPTIND - 1 ))" if [ -z "$config_file" ] || [ -z "$out_method" ] then message "ARGS CHECK FAILED" usage_error fi branch_file=".gitreview" ## Run check_util_deps wget check_file_deps $branch_file $config_file declare -A remote_files && load_configs $config_file get_remote fetch_files