#!/bin/sh do_filename() { desc=$1 postimage=$2 rm -fr file-creation && git init file-creation && ( cd file-creation && git commit --allow-empty -m init && echo postimage >"$postimage" && git add -N "$postimage" && git diff HEAD >"../git-$desc.diff" ) && rm -fr trad-modification && mkdir trad-modification && ( cd trad-modification && echo preimage >"$postimage.orig" && echo postimage >"$postimage" && ! diff -u "$postimage.orig" "$postimage" >"../diff-$desc.diff" ) && rm -fr trad-creation && mkdir trad-creation && ( cd trad-creation && mkdir a b && echo postimage >"b/$postimage" && ! diff -pruN a b >"../add-$desc.diff" ) } do_filename plain postimage.txt && do_filename 'with spaces' 'post image.txt' && do_filename 'with tab' 'post image.txt' && do_filename 'with backslash' 'post\image.txt' && do_filename 'with quote' '"postimage".txt' && expand add-plain.diff >damaged.diff || { echo >&2 Failed. && exit 1 }