#!/bin/sh FILECODE=${1} DIR="uninitialized" HIDDEN="uninitialized" INTERMEDIATE="uninitialized" PLAIN="uninitialized" GPGOPTS="uninitialized" LOG_MSG="The usual." # Unset this to be prompted at commit time instead. VCSYS="svn" # default is svn, alternative is 'git' (someday 'hg' if needed) if [ "${FILECODE}x" = "x" ]; then echo "Argument required, one of:" echo "" echo " foo bar osi" echo "" exit 1 elif [ "${FILECODE}x" = "foox" ]; then DIR="${HOME}/blah/blah/blah/foo" HIDDEN="asset-keys.asc" INTERMEDIATE="asset-keys" PLAIN="a" GPGOPTS="ca" elif [ "${FILECODE}x" = "barx" ]; then DIR="${HOME}/private/whatever/bar/private/folder" HIDDEN="asset-keys.asc" INTERMEDIATE="asset-keys" PLAIN="a" GPGOPTS="ca" elif [ "${FILECODE}x" = "osix" ]; then DIR="${HOME}/path/to/my/working/copy/of/osi-infra" HIDDEN="asset-keys.asc" INTERMEDIATE="asset-keys" PLAIN="a" GPGOPTS="ca" unset LOG_MSG else echo "Unrecognized argument '${FILECODE}'." exit 1 fi cd ${DIR} if [ "${VCSYS}x" = "svnx" ]; then svn up ${HIDDEN} elif [ "${VCSYS}x" = "gitx" ]; then git pull # just get everything; that works fine for our use cases else echo "ERROR Unknown version control system specified: '${VCSYS}'" exit 1 fi gpg -d ${HIDDEN} > ${INTERMEDIATE} echo "" DIFFERENCES="no" if [ -f ${PLAIN} ]; then if diff -u ${INTERMEDIATE} ${PLAIN}; then echo "No differences." rm ${INTERMEDIATE} else DIFFERENCES="yes" fi else echo "Fresh checkout, thus no differences." mv ${INTERMEDIATE} ${PLAIN} fi if [ "${DIFFERENCES}x" = "yesx" ]; then echo "" echo -n \ "(-) for accept upstream, (+) for accept downstream, (n) for neither: " read WHICH if [ "x${WHICH}x" = "x-x" ]; then mv ${INTERMEDIATE} ${PLAIN} elif [ "x${WHICH}x" = "x+x" ]; then cp ${PLAIN} ${INTERMEDIATE} # Kluge conditional because we need to insert an arg in the -ear case. if [ ${GPGOPTS} = "ear" ]; then gpg -${GPGOPTS} kfogel ${INTERMEDIATE} elif [ ${GPGOPTS} = "ca" ]; then gpg -${GPGOPTS} ${INTERMEDIATE} else # Can't happen. echo "Unrecognized GnuPG options '${GPGOPTS}'." exit 1 fi if [ "${LOG_MSG}x" = "x" ]; then # Prompt for log message. if [ "${VCSYS}x" = "svnx" ]; then svn ci ${HIDDEN} elif [ "${VCSYS}x" = "gitx" ]; then git add ${HIDDEN} git commit ${HIDDEN} git push else echo "ERROR Unknown version control system specified: '${VCSYS}'" exit 1 fi else # Use the default log message. if [ "${VCSYS}x" = "svnx" ]; then svn ci -m "${LOG_MSG}" ${HIDDEN} elif [ "${VCSYS}x" = "gitx" ]; then git add ${HIDDEN} git commit -m "${LOG_MSG}" ${HIDDEN} git push else echo "ERROR Unknown version control system specified: '${VCSYS}'" exit 1 fi fi rm ${INTERMEDIATE} elif [ "x${WHICH}x" = "xnx" ]; then echo "No action taken; see '${INTERMEDIATE}' for more." else echo "ERROR: unrecognized response '${WHICH}'" exit 1 fi fi chmod go-rwx ${PLAIN} emacsclient -n ${PLAIN}