8ac913f6479d86af2a64e2dea1e0aff39f347cd4
[topgit.git] / hooks / pre-commit.sh
blob8ac913f6479d86af2a64e2dea1e0aff39f347cd4
1 #!/bin/sh
2 # TopGit - A different patch queue manager
3 # (c) Petr Baudis <pasky@suse.cz> 2008
4 # GPLv2
7 ## Set up all the tg machinery
9 set -e
10 tg__include=1
11 tg_util() {
12 . "@bindir@"/tg
14 tg_util
17 ## Generally have fun
19 # Don't do anything on non-topgit branch
20 if head_=$(git symbolic-ref -q HEAD); then
21 case "$head_" in
22 refs/heads/*)
23 git rev-parse -q --verify "refs/top-bases${head_#refs/heads}" >/dev/null || exit 0;;
25 exit 0;;
26 esac
28 else
29 exit 0;
32 check_topfile()
34 local tree file ls_line type size
35 tree=$1
36 file=$2
38 ls_line="$(git ls-tree --long "$tree" "$file")" ||
39 die "Can't ls tree for $file"
41 [ -n "$ls_line" ] ||
42 die "$file is missing"
44 # check for type and size
45 set -- $ls_line
46 type=$2
47 size=$4
49 # check file is of type blob (file)
50 [ "x$type" = "xblob" ] ||
51 die "$file is not a file"
53 # check for positive size
54 [ "$size" -gt 0 ] ||
55 die "$file has empty size"
58 tree=$(git write-tree) ||
59 die "Can't write tree"
61 check_topfile "$tree" ".topdeps"
62 check_topfile "$tree" ".topmsg"
64 # TODO: Verify .topdeps for valid branch names and against cycles