From c74390e4a1d78e718de72e5615b7352aeec03979 Mon Sep 17 00:00:00 2001
From: Junio C Hamano <junkio@cox.net>
Date: Sun, 5 Nov 2006 11:26:21 -0800
Subject: [PATCH] cherry is built-in, do not ship git-cherry.sh

Noticed by Rene; Makefile now has another maintainer's check
target to catch this kind of mistakes.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---
 Makefile          |  5 +++
 check-builtins.sh | 34 ++++++++++++++++++
 git-cherry.sh     | 91 -----------------------------------------------
 3 files changed, 39 insertions(+), 91 deletions(-)
 create mode 100755 check-builtins.sh
 delete mode 100755 git-cherry.sh

diff --git a/Makefile b/Makefile
index 7c3860a52e..2af4eb31ce 100644
--- a/Makefile
+++ b/Makefile
@@ -932,3 +932,8 @@ check-docs::
 		*) echo "no link: $$v";; \
 		esac ; \
 	done | sort
+
+### Make sure built-ins do not have dups and listed in git.c
+#
+check-builtins::
+	./check-builtins.sh
diff --git a/check-builtins.sh b/check-builtins.sh
new file mode 100755
index 0000000000..d6fe6cf174
--- /dev/null
+++ b/check-builtins.sh
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+{
+	cat <<\EOF
+sayIt:
+	$(foreach b,$(BUILT_INS),echo XXX $b YYY;)
+EOF
+	cat Makefile
+} |
+make -f - sayIt 2>/dev/null |
+sed -n -e 's/.*XXX \(.*\) YYY.*/\1/p' |
+sort |
+{
+    bad=0
+    while read builtin
+    do
+	base=`expr "$builtin" : 'git-\(.*\)'`
+	x=`sed -ne 's/.*{ "'$base'", \(cmd_[^, ]*\).*/'$base'	\1/p' git.c`
+	if test -z "$x"
+	then
+		echo "$base is builtin but not listed in git.c command list"
+		bad=1
+	fi
+	for sfx in sh perl py
+	do
+		if test -f "$builtin.$sfx"
+		then
+			echo "$base is builtin but $builtin.$sfx still exists"
+			bad=1
+		fi
+	done
+    done
+    exit $bad
+}
diff --git a/git-cherry.sh b/git-cherry.sh
deleted file mode 100755
index cf7af5502c..0000000000
--- a/git-cherry.sh
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2005 Junio C Hamano.
-#
-
-USAGE='[-v] <upstream> [<head>] [<limit>]'
-LONG_USAGE='             __*__*__*__*__> <upstream>
-            /
-  fork-point
-            \__+__+__+__+__+__+__+__> <head>
-
-Each commit between the fork-point (or <limit> if given) and <head> is
-examined, and compared against the change each commit between the
-fork-point and <upstream> introduces.  If the change seems to be in
-the upstream, it is shown on the standard output with prefix "-".
-Otherwise it is shown with prefix "+".'
-. git-sh-setup
-
-case "$1" in -v) verbose=t; shift ;; esac 
-
-case "$#,$1" in
-1,*..*)
-    upstream=$(expr "z$1" : 'z\(.*\)\.\.') ours=$(expr "z$1" : '.*\.\.\(.*\)$')
-    set x "$upstream" "$ours"
-    shift ;;
-esac
-
-case "$#" in
-1) upstream=`git-rev-parse --verify "$1"` &&
-   ours=`git-rev-parse --verify HEAD` || exit
-   limit="$upstream"
-   ;;
-2) upstream=`git-rev-parse --verify "$1"` &&
-   ours=`git-rev-parse --verify "$2"` || exit
-   limit="$upstream"
-   ;;
-3) upstream=`git-rev-parse --verify "$1"` &&
-   ours=`git-rev-parse --verify "$2"` &&
-   limit=`git-rev-parse --verify "$3"` || exit
-   ;;
-*) usage ;;
-esac
-
-# Note that these list commits in reverse order;
-# not that the order in inup matters...
-inup=`git-rev-list ^$ours $upstream` &&
-ours=`git-rev-list $ours ^$limit` || exit
-
-tmp=.cherry-tmp$$
-patch=$tmp-patch
-mkdir $patch
-trap "rm -rf $tmp-*" 0 1 2 3 15
-
-for c in $inup
-do
-	git-diff-tree -p $c
-done | git-patch-id |
-while read id name
-do
-	echo $name >>$patch/$id
-done
-
-LF='
-'
-
-O=
-for c in $ours
-do
-	set x `git-diff-tree -p $c | git-patch-id`
-	if test "$2" != ""
-	then
-		if test -f "$patch/$2"
-		then
-			sign=-
-		else
-			sign=+
-		fi
-		case "$verbose" in
-		t)
-			c=$(git-rev-list --pretty=oneline --max-count=1 $c)
-		esac
-		case "$O" in
-		'')	O="$sign $c" ;;
-		*)	O="$sign $c$LF$O" ;;
-		esac
-	fi
-done
-case "$O" in
-'') ;;
-*)  echo "$O" ;;
-esac