[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>
This commit is contained in:

committed by
Linus Torvalds

parent
d1af002dc6
commit
e002a16ba5
39
git-deltafy-script
Normal file
39
git-deltafy-script
Normal file
@ -0,0 +1,39 @@
|
||||
#!/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
|
Reference in New Issue
Block a user