# source me to enable tools TOOLSPATH=$( readlink -f $( dirname "$BASH_SOURCE" ) ) PATH=$PATH:"$TOOLSPATH"/bin [[ "$1" = "-f" ]] && PATH="$TOOLSPATH"/bin:$PATH # remove duplicate path PATH=$( echo $PATH | awk -F: '{for (i=1;i<=NF;i++) { if ( !x[$i]++ ) printf("%s:",$i); }}' | sed 's,:\+$,,g' ) export PATH . "$TOOLSPATH"/qcd_function [[ -f "$TOOLSPATH"/tsv/tsvkit.sh ]] && . "$TOOLSPATH"/tsv/tsvkit.sh &>/dev/null function _self_update() { touch "$TOOLSPATH"/.lastupdate pushd "$TOOLSPATH" > /dev/null [[ "$1" = "-u" ]] && { hg pull -u https://bitbucket.org/MoonQ/tools } || { timeout 10 hg pull -u https://bitbucket.org/MoonQ/tools > /dev/null 2>&1 } popd > /dev/null # ncsv update [[ -d "$TOOLSPATH"/ncsv ]] && { pushd "$TOOLSPATH"/ncsv > /dev/null [[ "$1" = "-u" ]] && { hg pull -u } || { timeout 10 hg pull -u > /dev/null 2>&1 } ln -sfT ../ncsv/ncsv/ncsv.py "$TOOLSPATH"/bin/ncsv popd > /dev/null } } function _check_ncsv() { [[ -d "$TOOLSPATH"/ncsv ]] || { hg clone https://bitbucket.org/MoonQ/ncsv "$TOOLSPATH"/ncsv ln -sfT ../ncsv/ncsv/ncsv.py "$TOOLSPATH"/bin/ncsv } } function _change_hg_repo() { [[ -w "$TOOLSPATH"/.hg ]] || return [[ -w "$TOOLSPATH"/.hg/hgrc ]] || return grep -q moonq.kapsi.fi/repo/ "$TOOLSPATH"/.hg/hgrc && { echo -e "Converting read only repository to bitbucket\n" sed 's,\s*default\s*=.*moonq.kapsi.fi.*,default = https://bitbucket.org/MoonQ/tools,' "$TOOLSPATH"/.hg/hgrc \ | diff "$TOOLSPATH"/.hg/hgrc - sed -i 's,\s*default\s*=.*moonq.kapsi.fi.*,default = https://bitbucket.org/MoonQ/tools,' "$TOOLSPATH"/.hg/hgrc } grep -q moonq.kapsi.fi/repoz/ "$TOOLSPATH"/.hg/hgrc && { echo -e "Converting writable repository to bitbucket\n" sed 's,\s*default\s*=.*moonq.kapsi.fi.*,default = ssh://hg@bitbucket.org/MoonQ/tools,' "$TOOLSPATH"/.hg/hgrc \ | diff "$TOOLSPATH"/.hg/hgrc - echo sed -i 's,\s*default\s*=.*moonq.kapsi.fi.*,default = ssh://hg@bitbucket.org/MoonQ/tools,' "$TOOLSPATH"/.hg/hgrc } } # install ncsv if necessary which ncsv > /dev/null 2>&1 || _check_ncsv > /dev/null 2>&1 unset -f _check_ncsv [[ "$1" = "-u" ]] && { _self_update -u unset -f _self_update } # Update self weekly, # if folder writable, if repository, if an interactive terminal, if not updated the last week [[ -w "$TOOLSPATH" ]] || return [[ -w "$TOOLSPATH"/.hg ]] || return [[ -t 0 ]] || return [[ -t 1 ]] || return [[ -t 2 ]] || return [[ -f "$TOOLSPATH"/.lastupdate ]] || touch -t 0101010101 "$TOOLSPATH"/.lastupdate 2> /dev/null [[ -w "$TOOLSPATH"/.lastupdate ]] || return _change_hg_repo unset -f _change_hg_repo TOOLS_LASTUPDATE=$(( $( date +%s ) - $( stat -c %Y "$TOOLSPATH"/.lastupdate ) )) [[ "$TOOLS_LASTUPDATE" -gt 604800 ]] && _self_update unset TOOLS_LASTUPDATE unset -f _self_update