--- ./contrib/specialist.orig	2014-06-29 12:15:04.244544161 +0200
+++ ./contrib/specialist	2014-06-29 12:15:04.245544128 +0200
@@ -0,0 +1,79 @@
+#! /bin/sh
+
+# specialist: assist creation of special files.
+
+PATH=/bin:/usr/bin:/usr/local/bin; export PATH
+
+SCRIPT=`basename "$0"`
+INPUT_FORMAT=${INPUT_FORMAT:=path}
+
+usage() {
+    echo "usage: ${SCRIPT} [ -T ]" 1>&2
+    exit 1
+}
+
+die() {
+    msg=$*
+
+    echo "${msg}" 1>&2
+    exit 2
+}
+
+# create a special transcript line for the given path.
+specialize() {
+    local path="$1"
+
+    [ -n "${path}" -a -f "${path}" ] || die "Invalid path: ${path}"
+
+    fsdiff -1 -c sha1 "${path}"
+    return $?
+}
+
+specialize_transcript() {
+    local path=""
+    status=0
+
+    while read type path remainder; do
+	if [ x"${type}" != x"f" ]; then
+	    continue
+	fi
+
+	specialize "${path}"
+    done
+}
+
+specialize_paths() {
+    local path=""
+    status=0
+
+    while read path; do
+	specialize "${path}"
+	if [ $? -ne 0 ]; then
+	    status=1
+	fi
+    done
+
+    return "${status}"
+}
+
+while getopts T opt; do
+    case $opt in
+    T)
+	INPUT_FORMAT="transcript"
+	;;
+
+    *)
+	usage
+	;;
+	
+    esac
+done
+shift $((OPTIND - 1))
+
+if [ x"${INPUT_FORMAT}" = x"transcript" ]; then
+    specialize_transcript
+else
+    specialize_paths
+fi
+
+exit $?
