#!/bin/sh # Run with no arguments to find out what this does. ENCRYPTED="${1}" WORK_AREA="${2}" ENCRYPTION_SUFFIX=".asc" BASENAME=`basename ${ENCRYPTED} ${ENCRYPTION_SUFFIX}` THIS_ENCRYPTED=this-${BASENAME}.${ENCRYPTION_SUFFIX} PREV_ENCRYPTED=prev-${BASENAME}.${ENCRYPTION_SUFFIX} THIS_PLAINTEXT=this-${BASENAME} PREV_PLAINTEXT=prev-${BASENAME} EARLY_EXIT="no" if [ "${ENCRYPTED}x" = "x" ]; then echo "ERROR: ENCRYPTED_FILE argument required" EARLY_EXIT="yes" fi if [ "${WORK_AREA}x" = "x" ]; then echo "ERROR: WORK_AREA argument required" EARLY_EXIT="yes" fi if [ ! -f "${ENCRYPTED}" ]; then echo "ERROR: '${ENCRYPTED}' must exist and be under version control" EARLY_EXIT="yes" elif ! svn info "${ENCRYPTED}" > /dev/null 2>&1; then echo "ERROR: '${ENCRYPTED}' must be under Subversion version control" echo " (no git support yet, sorry; patches welcome)" EARLY_EXIT="yes" fi # TBD: The next test in the chain should be that ENCRYPTED is, # in fact, encrypted with GnuPG. Since gpg doesn't appear # to have a --test option for this express purpose, some # other gpg subcommand will have to be used instead. if [ "${EARLY_EXIT}" = "yes" ]; then echo "" echo "Get plaintext diffs for all revisions of a GnuPG-encrypted file." echo "Put the diffs in a designated folder (such as a ramdisk)." echo "" echo "Usage: ${0} ENCRYPTED_FILE WORK_AREA" exit 1 fi for REV in `svn log -q ${ENCRYPTED} | grep -v -- "---------" | cut -d " " -f 1 | cut -c 2-`; do PREV_REV=`dc -e "${REV} 1 - p"` svn cat -r${REV} ${ENCRYPTED} > /${WORK_AREA}/${THIS_ENCRYPTED} svn cat -r${PREV_REV} ${ENCRYPTED} > /${WORK_AREA}/${PREV_ENCRYPTED} gpg -d /${WORK_AREA}/${THIS_ENCRYPTED} > /${WORK_AREA}/${THIS_PLAINTEXT} gpg -d /${WORK_AREA}/${PREV_ENCRYPTED} > /${WORK_AREA}/${PREV_PLAINTEXT} diff -u /${WORK_AREA}/${PREV_PLAINTEXT} /${WORK_AREA}/${THIS_PLAINTEXT} \ > /${WORK_AREA}/${BASENAME}-r${REV}-diff.out # Clean up afterwards. rm /${WORK_AREA}/${THIS_ENCRYPTED} \ /${WORK_AREA}/${THIS_PLAINTEXT} \ /${WORK_AREA}/${PREV_ENCRYPTED} \ /${WORK_AREA}/${PREV_PLAINTEXT} done