chiark / gitweb /
8ac913f6479d86af2a64e2dea1e0aff39f347cd4
[topgit.git] / hooks / pre-commit.sh
1 #!/bin/sh
2 # TopGit - A different patch queue manager
3 # (c) Petr Baudis <pasky@suse.cz>  2008
4 # GPLv2
5
6
7 ## Set up all the tg machinery
8
9 set -e
10 tg__include=1
11 tg_util() {
12         . "@bindir@"/tg
13 }
14 tg_util
15
16
17 ## Generally have fun
18
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;;
24                 *)
25                         exit 0;;
26         esac
27
28 else
29         exit 0;
30 fi
31
32 check_topfile()
33 {
34         local tree file ls_line type size
35         tree=$1
36         file=$2
37
38         ls_line="$(git ls-tree --long "$tree" "$file")" ||
39                 die "Can't ls tree for $file"
40
41         [ -n "$ls_line" ] ||
42                 die "$file is missing"
43
44         # check for type and size
45         set -- $ls_line
46         type=$2
47         size=$4
48
49         # check file is of type blob (file)
50         [ "x$type" = "xblob" ] ||
51                 die "$file is not a file"
52
53         # check for positive size
54         [ "$size" -gt 0 ] ||
55                 die "$file has empty size"
56 }
57
58 tree=$(git write-tree) ||
59         die "Can't write tree"
60
61 check_topfile "$tree" ".topdeps"
62 check_topfile "$tree" ".topmsg"
63
64 # TODO: Verify .topdeps for valid branch names and against cycles