diff --git a/gitstatus/pull-upstream.zsh b/gitstatus/pull-upstream.zsh new file mode 100755 index 00000000..2cb758a5 --- /dev/null +++ b/gitstatus/pull-upstream.zsh @@ -0,0 +1,30 @@ +#!/usr/bin/zsh + +emulate -L zsh +setopt err_exit no_unset pipe_fail extended_glob xtrace + +: ${GITSTATUS_DIR:=${${(%):-%x}:A:h}} +: ${GITSTATUS_URL:=https://github.com/romkatv/gitstatus.git} + +readonly GITSTATUS_DIR GITSTATUS_URL +readonly -a IGNORE=(pull-upstream.zsh README.md) + +function pull() { + local repo && repo=$(mktemp -d ${TMPDIR:-/tmp}/gitstatus-pull-upstream.XXXXXXXXXX) + trap "rm -rf ${(q)repo}" EXIT + git clone $GITSTATUS_URL $repo + + local dst + for dst in $GITSTATUS_DIR/**/*(.,@); do + local f=${dst#$GITSTATUS_DIR/} + (( ! ${IGNORE[(I)$f]} )) || continue + local src=$repo/$f + [[ -f $src ]] && { + mkdir -p ${dst:h} && cp -f $src $dst || return + } || { + rm $dst + } + done +} + +pull