git-branch --contains: doc and test

Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt
index 5ce905d..16303ef 100644
--- a/Documentation/git-branch.txt
+++ b/Documentation/git-branch.txt
@@ -10,6 +10,7 @@
 [verse]
 'git-branch' [--color | --no-color] [-r | -a]
 	   [-v [--abbrev=<length> | --no-abbrev]]
+	   [--contains <commit>]
 'git-branch' [--track | --no-track] [-l] [-f] <branchname> [<start-point>]
 'git-branch' (-m | -M) [<oldbranch>] <newbranch>
 'git-branch' (-d | -D) [-r] <branchname>...
@@ -20,6 +21,9 @@
 will be shown, the current branch will be highlighted with an asterisk.
 Option `-r` causes the remote-tracking branches to be listed,
 and option `-a` shows both.
+With `--contains <commit>`, shows only the branches that
+contains the named commit (in other words, the branches whose
+tip commits are descendant of the named commit).
 
 In its second form, a new branch named <branchname> will be created.
 It will start out with a head equal to the one given as <start-point>.
diff --git a/t/t3201-branch-contains.sh b/t/t3201-branch-contains.sh
new file mode 100755
index 0000000..9ef593f
--- /dev/null
+++ b/t/t3201-branch-contains.sh
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+test_description='branch --contains <commit>'
+
+. ./test-lib.sh
+
+test_expect_success setup '
+
+	>file &&
+	git add file &&
+	test_tick &&
+	git commit -m initial &&
+	git branch side &&
+
+	echo 1 >file &&
+	test_tick &&
+	git commit -a -m "second on master" &&
+
+	git checkout side &&
+	echo 1 >file &&
+	test_tick &&
+	git commit -a -m "second on side" &&
+
+	git merge master
+
+'
+
+test_expect_success 'branch --contains=master' '
+
+	git branch --contains=master >actual &&
+	{
+		echo "  master" && echo "* side"
+	} >expect &&
+	diff -u expect actual
+
+'
+
+test_expect_success 'branch --contains master' '
+
+	git branch --contains master >actual &&
+	{
+		echo "  master" && echo "* side"
+	} >expect &&
+	diff -u expect actual
+
+'
+
+test_expect_success 'branch --contains=side' '
+
+	git branch --contains=side >actual &&
+	{
+		echo "* side"
+	} >expect &&
+	diff -u expect actual
+
+'
+
+test_done