#!/usr/bin/env bash set -eux set -o pipefail > /dev/null 2>&1 || true if ! [ -e to-be-saved/im-a-fifo ] then # You can't check fifo's into subversion, so we create one here, and remove it later fifo_name=to-be-saved/im-a-fifo if type mkfifo > /dev/null then mkfifo "$fifo_name" else mknod "$fifo_name" p fi fi rm -rf save-dir-* function files { find $(pwd)/to-be-saved -name .svn -prune -o -print0 case "$(uname -s)" in Haiku) # We don't try to do device files on Haiku, because its system python has no # os.major or os.minor ;; *) find \ $([ -e /dev/loop1 ] && echo /dev/loop1) \ $([ -e /dev/urandom ] && echo /dev/urandom) \ $([ -e /dev/zero ] && echo /dev/zero) \ $([ -e /dev/null ] && echo /dev/null) \ -name .svn -prune \ -o -print0 ;; esac } hn=$(set -eu; hostname) if type gtar > /dev/null 2>&1 then tar=gtar else tar=tar fi files | \ $tar --null --no-recursion --files-from - --create --file - | \ $tar tvf - 2>&1 | \ sed 's/ */ /g' | \ ../canonicalize-dates | \ sort -k 6 > tar.tvf for record in $(../../this-interpreter --variety all) do pyver=$(echo "$record" | awk -F'%' ' { print $1 }') interp=$(echo "$record" | awk -F'%' ' { print $2 }') case "$pyver" in jython*|pypy-1.4|pypy-1.4.1|pypy-1.6) # Jython doesn't (yet?) have os.major and os.minor, so it will fail this test. # Neither do the older PyPy's, but PyPy 1.5 does # Oddly, PyPy 1.6 is missing st_rdev, so we skip this test there too. 1.5 continues to work fine. ;; *) rm -rf save-dir-$pyver files | \ "$interp" ../../backshift \ --save-directory save-dir-$pyver \ --backup \ --hostname "$hn" \ --subset test \ --init-savedir backup_id=$(set -eu; "$interp" ../../backshift --save-directory save-dir-$pyver --list-backups | \ tail -1 | \ sed 's/ .*$//') "$interp" ../../backshift \ --save-directory save-dir-$pyver \ --produce-tar \ --backup-id $backup_id | \ $tar tvf - | \ sed 's/ */ /g' | \ ../canonicalize-dates | \ sort -k 6 > $pyver.tvf echo Diffing $pyver diff -C8 -b tar.tvf ${pyver}.tvf ;; esac done