dodoc: adjust to "git add ." complaints.
[git.git] / PU
diff --git a/PU b/PU
index 856b582..4b4be2b 100755 (executable)
--- a/PU
+++ b/PU
@@ -3,18 +3,88 @@
 # Rebuild "pu" from topic branches.
 #
 
-git status && exit
-git checkout pu &&
-git reset --hard master &&
+git-update-index --refresh || exit
+case "$(git-diff-index --name-status HEAD)" in
+'')    ;;
+*)     echo 2>&1 "Local modifications exist."
+       exit 1;;
+esac
+
+case "$1" in
+--continue)
+       shift
+       ;;
+*)
+       git checkout pu &&
+       git reset --hard master || exit
+esac
 ORIG_HEAD=`git rev-parse ORIG_HEAD` || exit
+LF='
+'
+
+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 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`)