2014-03-02 22:01:07 +00:00
|
|
|
#!/bin/sh
|
2014-04-17 20:10:20 +00:00
|
|
|
#
|
2014-03-02 22:01:07 +00:00
|
|
|
# This script can be used to add git-annex metadata to files when they're
|
2014-04-17 20:10:20 +00:00
|
|
|
# committed. It is typically installed as .git/hooks/pre-commit-annex
|
|
|
|
#
|
|
|
|
# You can also run this script by hand, passing it the names of files
|
|
|
|
# already checked into git-annex, and it will extract/refresh the git-annex
|
|
|
|
# metadata from the files.
|
2014-03-02 22:01:07 +00:00
|
|
|
#
|
|
|
|
# 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
|
|
|
|
|
|
|
|
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="
|
|
|
|
"
|
2014-04-17 20:10:20 +00:00
|
|
|
|
|
|
|
process () {
|
2014-03-02 22:01:07 +00:00
|
|
|
if [ -e "$f" ]; then
|
2015-06-15 19:27:17 +00:00
|
|
|
echo "adding metadata for $f"
|
2014-03-02 22:01:07 +00:00
|
|
|
for l in $(extract "$f" | egrep "$want"); do
|
|
|
|
field="${l%% - *}"
|
|
|
|
value="${l#* - }"
|
|
|
|
addmeta "$f" "$field" "$value"
|
|
|
|
done
|
|
|
|
fi
|
2014-04-17 20:10:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if [ -n "$*" ]; then
|
|
|
|
for f in $@; do
|
|
|
|
process "$f"
|
|
|
|
done
|
|
|
|
else
|
|
|
|
for f in $(git diff-index --name-only --cached $against); do
|
|
|
|
process "$f"
|
|
|
|
done
|
|
|
|
fi
|