#!/bin/sh set -e DATA=/var/lib/duhome case "$1" in init) mkdir -p $DATA cd $DATA git init ;; save) cd $DATA if [ -n "$(git ls-files)" ]; then git rm --force --quiet '*' # Remove old data - perhaps, some homes were removed fi for i in /home/*; do du -shx $i | cut -f1 > ${i#/home/}; git add ${i#/home/} done ;; commit) cd $DATA shift GIT_AUTHOR_NAME="$0" GIT_AUTHOR_EMAIL="$USER@$(hostname -f)" \ git commit --quiet -m 'Automatic commit' "$@" > /dev/null || : ;; status) cd $DATA git ls-files --with-tree=HEAD | while read f; do printf "%-8s\t%s\n" "$f" "$(git show "HEAD:$f")" done | sort -h -k2 ;; log) cd $DATA dir=$2 if ! [ "$dir" ]; then echo "Missing directory name" >&2; exit 1; fi if ! [ -f "$dir" ]; then echo "No information about $dir in $DATA" >&2; exit 1; fi git log --format='%H %ci' -- $dir | while read commit date; do echo $date $(git show $commit:$dir) done ;; help|"") cat < [ ] Commands: - init - save - commit [ ] - status - log EOF ;; esac