Two more maintainer scripts.
[git.git] / PU
diff --git a/PU b/PU
index 8d3d38f..2a22632 100755 (executable)
--- a/PU
+++ b/PU
@@ -3,20 +3,81 @@
 # Rebuild "pu" from topic branches.
 #
 
-. git-sh-setup
+git-update-index --refresh || exit
+case "$(git-diff-index --name-status HEAD)" in
+'')    ;;
+*)     echo 2>&1 "Local modifications exist."
+       exit 1;;
+esac
+git checkout pu &&
+git reset --hard master &&
+ORIG_HEAD=`git rev-parse ORIG_HEAD` || exit
+LF='
+'
 
-git-status && exit
-git-checkout pu &&
-git-reset --hard master &&
-ORIG_HEAD=`git-rev-parse ORIG_HEAD` || exit
+case "$#" in
+0)
+       # interactive ;-)
+       shift
+       HH=`cd .git/refs/heads && find -type f |
+       sed -e 's/^\.\///' \
+           -e '/^naster$/d' -e '/^master$/d' -e '/^maint$/d' -e '/^pu$/d'`
+       while test "$HH"
+       do
+               I=0
+               echo "0: done"
+               NHH=
+               for H in $HH
+               do
+                       HSHA1=`git-rev-parse --verify $H` || continue
+                       MB=`git-show-branch --merge-base pu $HSHA1`
+                       case "$LF$MB$LF" in
+                       *"$LF$HSHA1$LF"*) continue ;; # already merged.
+                       esac
+                       I=$(($I+1))
+                       echo -n "$I: "
+                       git-show-branch $H
+                       NHH="${NHH}$H "
+               done
+               case "$I" in
+               0)
+                       break ;;
+               esac
+               HH=$NHH
+               echo -n "Merge which ones (0 to finish)? "
+               read ans
+               case "$ans" in
+               '' | 0)
+                       break ;;
+               esac
+               I=0
+               UNUSE= USE= USED=
+               for H in $HH
+               do
+                       I=$(($I+1))
+                       case " $ans " in
+                       *' '$I' '*)
+                               USE="$USE$H "
+                               USED="$USED,$H"
+                               ;;
+                       *)
+                               UNUSE="$UNUSE$H "
+                               ;;
+                       esac
+               done
+               USED=`expr "$USED" : ',\(.*\)'`
+               git pull -n . $USE || exit
+               # git merge -n "Merge $USED" pu $USE || exit
+               HH=$UNUSE
+       done
+       exit
+       ;;
+esac
 
 for H
 do
-       (IFS=",$IFS"; git-pull -n . $H) || exit
+#      (IFS=",$IFS"; git merge -n "Merge $H" pu $H) || exit
+       (IFS=",$IFS"; git pull -n . $H) || exit
 done
 
-(IFS=",$IFS"; git-show-branch master pu $* $ORIG_HEAD)
-
-
-
-
+(IFS=",$IFS"; git show-branch master $* pu `git rev-parse --short $ORIG_HEAD`)