57 lines
		
	
	
	
		
			1.1 KiB
			
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			1.1 KiB
			
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/bin/sh
 | 
						|
# This script can be used to add git-annex metadata to files when they're
 | 
						|
# committed.
 | 
						|
#
 | 
						|
# Copyright 2014 Joey Hess <id@joeyh.name>
 | 
						|
# License: GPL-3+
 | 
						|
 | 
						|
extract="$(git config metadata.extract || true)" 
 | 
						|
want="$(perl -e 'print (join("|", map {s/_/ /g; "^$_ - "} (split " ", shift())))' "$extract")"
 | 
						|
 | 
						|
if [ -z "$want" ]; then
 | 
						|
	exit 0
 | 
						|
fi
 | 
						|
 | 
						|
echo "$want"
 | 
						|
 | 
						|
case "$(git config --bool metadata.overwrite || true)" in
 | 
						|
	true)
 | 
						|
		overwrite=1
 | 
						|
	;;
 | 
						|
	*)
 | 
						|
		overwrite=""
 | 
						|
	;;
 | 
						|
esac
 | 
						|
 | 
						|
addmeta () {
 | 
						|
	file="$1"
 | 
						|
	field="$2"
 | 
						|
	value="$3"
 | 
						|
	afield="$(echo "$field" | tr ' ' _)"
 | 
						|
	if [ "$overwrite" ]; then
 | 
						|
		p="$afield=$value"
 | 
						|
 | 
						|
	else
 | 
						|
		p="$afield?=$value"
 | 
						|
	fi
 | 
						|
	git -c annex.alwayscommit=false annex metadata "$file" -s "$p" --quiet
 | 
						|
}
 | 
						|
 | 
						|
if git rev-parse --verify HEAD >/dev/null 2>&1; then
 | 
						|
	against=HEAD
 | 
						|
else
 | 
						|
	# Initial commit: diff against an empty tree object
 | 
						|
	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
 | 
						|
fi
 | 
						|
 | 
						|
IFS="
 | 
						|
"
 | 
						|
for f in $(git diff-index --name-only --cached $against); do
 | 
						|
	if [ -e "$f" ]; then
 | 
						|
		for l in $(extract "$f" | egrep "$want"); do
 | 
						|
			field="${l%% - *}"
 | 
						|
			value="${l#* - }"
 | 
						|
			addmeta "$f" "$field" "$value"
 | 
						|
		done
 | 
						|
	fi
 | 
						|
done
 |