41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Bash
		
	
	
			
		
		
	
	
			41 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 |
 | 
						|
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
 |