You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
1.5 KiB
90 lines
1.5 KiB
#!/bin/sh |
|
# |
|
# Rebuild "pu" from topic branches. |
|
# |
|
|
|
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 `git rev-parse --short $ORIG_HEAD`)
|
|
|