coverage on multiple packages
diff --git a/Makefile b/Makefile
index 5bc38be..12e84e4 100644
--- a/Makefile
+++ b/Makefile
@@ -47,4 +47,4 @@
go clean google.golang.org/grpc/...
coverage: testdeps
- goveralls -v google.golang.org/grpc/...
+ ./coverage.sh --coveralls
diff --git a/coverage.sh b/coverage.sh
new file mode 100755
index 0000000..b67e85f
--- /dev/null
+++ b/coverage.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+
+set -e
+
+workdir=.cover
+profile="$workdir/cover.out"
+mode=count
+
+generate_cover_data() {
+ rm -rf "$workdir"
+ mkdir "$workdir"
+
+ for pkg in "$@"; do
+ f="$workdir/$(echo $pkg | tr / -).cover"
+ go test -covermode="$mode" -coverprofile="$f" "$pkg"
+ done
+
+ echo "mode: $mode" >"$profile"
+ grep -h -v "^mode:" "$workdir"/*.cover >>"$profile"
+}
+
+show_cover_report() {
+ go tool cover -${1}="$profile"
+}
+
+push_to_coveralls() {
+ goveralls -coverprofile="$profile"
+}
+
+generate_cover_data $(go list ./...)
+show_cover_report func
+push_to_coveralls
+case "$1" in
+"")
+ ;;
+--coveralls)
+ push_to_coveralls ;;
+*)
+ echo >&2 "error: invalid option: $1" ;;
+esac
+rm -rf "$workdir"