aboutsummaryrefslogtreecommitdiff
path: root/gitstatus/pull-upstream.zsh
blob: 2cb758a5faba1fa1eb90769d508c89591719efec (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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