#!/bin/bash -e # Helper script for various git mirrors of other VCS types. # I'm lazy and can't be bothered to remember the exact invocation. #if [[ $(git branch | awk '($1 == "*") {print $2}') != master ]] ; then # echo "Switch to master first" # exit 1 #fi g() { set -- git "$@" echo "--- $*" "$@" } if git config svn-remote.svn.url >/dev/null ; then # git-config uses svn.authorsfile relative to repo root # i.e. good to use .git/authors set -- git svn fetch --all "$@" expected="" elif git config remote.hg.url >/dev/null ; then set -- git-hg pull $(git config --get --bool remote.hg.force) && set -- "$@" --force $(git config --get --bool remote.hg.rebase) && set -- "$@" --rebase elif git config cvs.cvsroot >/dev/null ; then # authors file is at .git/cvs-authors set -- git cvsimport -a -d $(git config cvs.cvsroot) $(git config cvs.module) "$@" expected="Already up-to-date." elif [[ -d CVS ]] && git rev-parse origin >/dev/null ; then set -- git cvsimport -a expected="Already up-to-date." else set -- git pull "$@" expected="Already up-to-date." fi output=$( "$@" | tee /proc/$$/fd/1 _pipestatus=${PIPESTATUS[*]} [[ ${_pipestatus// /} -eq 0 ]] || exit 1 ) [[ ${output} == "${expected}" ]] && exit 0 g fsck g count-objects g gc --prune