git-commit-vandalism/git-deltafy-script
Nicolas Pitre e002a16ba5 [PATCH] delta creation
This adds the ability to actually create delta objects using a new tool:
git-mkdelta.  It uses an ordered list of potential objects to deltafy
against earlier objects in the list.  A cap on the depth of delta
references can be provided as well, otherwise the default is to not have
any limit.  A limit of 0 will also undeltafy any given object.

Also provided is the beginning of a script to deltafy an entire
repository.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-05-20 15:41:45 -07:00

40 lines
1.1 KiB
Bash

#!/bin/bash
# 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 delta overhead is
# pushed towards older version of any given file.
#
# NOTE: the "best earlier version" is not implemented in mkdelta yet
# and therefore only the next eariler version is used at this time.
#
# TODO: deltafy tree objects as well.
#
# The -d argument allows to provide a limit on the delta chain depth.
# If 0 is passed then everything is undeltafied.
set -e
depth=
[ "$1" == "-d" ] && depth="--max-depth=$2" && shift 2
curr_file=""
git-rev-list HEAD |
git-diff-tree -r --stdin |
sed -n '/^\*/ s/^.*->\(.\{41\}\)\(.*\)$/\2 \1/p' | sort | uniq |
while read file sha1; do
if [ "$file" == "$curr_file" ]; then
list="$list $sha1"
else
if [ "$list" ]; then
echo "Processing $curr_file"
echo "$head $list" | xargs git-mkdelta $depth -v
fi
curr_file="$file"
list=""
head="$sha1"
fi
done