X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=hooks%2Fpre-commit.sh;h=8ac913f6479d86af2a64e2dea1e0aff39f347cd4;hb=1fb84a0250902fdf93bb0de335625975bd69734b;hp=9d677e91279a4275e284fd94077e5a4a90a366d1;hpb=9f685cd79b36ff9459f2d1d8ba0c21fa8875ffad;p=topgit.git diff --git a/hooks/pre-commit.sh b/hooks/pre-commit.sh index 9d677e9..8ac913f 100644 --- a/hooks/pre-commit.sh +++ b/hooks/pre-commit.sh @@ -29,10 +29,36 @@ else exit 0; fi -# TODO: check the index, not the working copy -[ -s "$root_dir/.topdeps" ] || - die ".topdeps is missing" -[ -s "$root_dir/.topmsg" ] || - die ".topmsg is missing" +check_topfile() +{ + local tree file ls_line type size + tree=$1 + file=$2 + + ls_line="$(git ls-tree --long "$tree" "$file")" || + die "Can't ls tree for $file" + + [ -n "$ls_line" ] || + die "$file is missing" + + # check for type and size + set -- $ls_line + type=$2 + size=$4 + + # check file is of type blob (file) + [ "x$type" = "xblob" ] || + die "$file is not a file" + + # check for positive size + [ "$size" -gt 0 ] || + die "$file has empty size" +} + +tree=$(git write-tree) || + die "Can't write tree" + +check_topfile "$tree" ".topdeps" +check_topfile "$tree" ".topmsg" # TODO: Verify .topdeps for valid branch names and against cycles