[PATCH] Possible cleanups for local-pull.c
[gitweb.git] / git-cherry
index e2a1a2db9fda633c174c25df76d4307ec33ff643..fe8c1090e97faa0fd0a34c2a12d748916aaa6b05 100755 (executable)
@@ -3,7 +3,9 @@
 # Copyright (c) 2005 Junio C Hamano.
 #
 
-usage="usage: $0 "'<upstream> [<head>]
+. git-sh-setup-script || die "Not a git archive."
+
+usage="usage: $0 "'[-v] <upstream> [<head>]
 
              __*__*__*__*__> <upstream>
             /
@@ -12,35 +14,34 @@ usage="usage: $0 "'<upstream> [<head>]
 
 Each commit between the fork-point and <head> is examined, and
 compared against the change each commit between the fork-point and
-<upstream> introduces.  If the change does not seem to be in the
-upstream, it is shown on the standard output.
+<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 "-".
+'
 
-The output is intended to be used as:
+case "$1" in -v) verbose=t; shift ;; esac 
 
-    OLD_HEAD=$(git-rev-parse HEAD)
-    git-rev-parse linus >${GIT_DIR-.}/HEAD
-    git-cherry linus OLD_HEAD |
-    while read commit
-    do
-        GIT_EXTERNAL_DIFF=git-apply-patch-script git-diff-tree -p "$commit" &&
-       git-commit-script -m "$commit"
-    done
-'
+case "$#,$1" in
+1,*..*)
+    upstream=$(expr "$1" : '\(.*\)\.\.') ours=$(expr "$1" : '.*\.\.\(.*\)$')
+    set x "$upstream" "$ours"
+    shift ;;
+esac
 
 case "$#" in
-1) linus=`git-rev-parse "$1"` &&
-   junio=`git-rev-parse HEAD` || exit
+1) upstream=`git-rev-parse --verify "$1"` &&
+   ours=`git-rev-parse --verify HEAD` || exit
    ;;
-2) linus=`git-rev-parse "$1"` &&
-   junio=`git-rev-parse "$2"` || exit
+2) upstream=`git-rev-parse --verify "$1"` &&
+   ours=`git-rev-parse --verify "$2"` || exit
    ;;
 *) echo >&2 "$usage"; exit 1 ;;
 esac
 
 # Note that these list commits in reverse order;
 # not that the order in inup matters...
-inup=`git-rev-list ^$junio $linus` &&
-ours=`git-rev-list $junio ^$linus` || exit
+inup=`git-rev-list ^$ours $upstream` &&
+ours=`git-rev-list $ours ^$upstream` || exit
 
 tmp=.cherry-tmp$$
 patch=$tmp-patch
@@ -74,6 +75,10 @@ do
                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" ;;