#!/bin/bash

# Example script to deltafy an entire GIT repository based on the commit list.
# The most recent version of a file is the reference and previous versions
# are made delta against the best earlier version available. And so on for
# successive versions going back in time.  This way the increasing delta
# overhead is pushed towards older versions of any given file.
#
# The -d argument allows to provide a limit on the delta chain depth.
# If 0 is passed then everything is undeltafied.  Limiting the delta
# depth is meaningful for subsequent access performance to old revisions.
# A value of 16 might be a good compromize between performance and good
# space saving.  Current default is unbounded.
#
# The --max-behind=30 argument is passed to git-mkdelta so to keep
# combinations and memory usage bounded a bit.  If you have lots of memory
# and CPU power you may remove it (or set to 0) to let git-mkdelta find the
# best delta match regardless of the number of revisions for a given file.
# You can also make the value smaller to make it faster and less
# memory hungry.  A value of 5 ought to still give pretty good results.
# When set to 0 or ommitted then look behind is unbounded.  Note that
# git-mkdelta might die with a segmentation fault in that case if it
# runs out of memory.  Note that the GIT repository will still be consistent
# even if git-mkdelta dies unexpectedly.

set -e

depth=
[ "$1" == "-d" ] && depth="--max-depth=$2" && shift 2

function process_list() {
	if [ "$list" ]; then
		echo "Processing $curr_file"
		echo "$head $list" | xargs git-mkdelta $depth --max-behind=30 -v
	fi
}

curr_file=""

git-rev-list HEAD |
git-diff-tree -r -t --stdin |
awk '/^:/ { if ($5 == "M" || $5 == "N") print $4, $6;
            if ($5 == "M") print $3, $6 }' |
LC_ALL=C sort -s -k 2 | uniq |
while read sha1 file; do
	if [ "$file" == "$curr_file" ]; then
		list="$list $sha1"
	else
		process_list
		curr_file="$file"
		list=""
		head="$sha1"
	fi
done
process_list

curr_file="root directory"
head=""
list="$(
	git-rev-list HEAD |
	while read commit; do
		git-cat-file commit $commit |
		sed -n 's/tree //p;Q'
	done
	)"
process_list

