You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
#!/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 |
|
|
|
|
awk '/^:/ { if ($5 == "M" || $5 == "N") print $4, $6 }' |
|
|
|
|
LC_ALL=C sort -s -k 2 | uniq |
|
|
|
|
while read sha1 file; 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
|