rebase --merge: fix for rebasing more than 7 commits.

Instead of using 4-digit numbers to name commits being rebased,
just use "cmt.$msgnum" string, with $msgnum as a decimal number
without leading zero padding.  This makes it possible to rebase
more than 9999 commits, but of more practical importance is that
the earlier code used "printf" to format already formatted
$msgnum and barfed when it counted up to 0008.  In other words,
the old code was incapable of rebasing more than 7 commits, and
this fixes that problem.

Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Junio C Hamano 2006-06-22 01:44:54 -07:00
parent 693c15dc28
commit 5887ac821f

View File

@ -67,16 +67,16 @@ continue_merge () {
prev_head=`git-rev-parse HEAD^0`
# save the resulting commit so we can read-tree on it later
echo "$prev_head" > "$dotest/`printf %0${prec}d $msgnum`.result"
echo "$prev_head" > "$dotest/cmt.$msgnum.result"
echo "$prev_head" > "$dotest/prev_head"
# onto the next patch:
msgnum=$(($msgnum + 1))
printf "%0${prec}d" "$msgnum" > "$dotest/msgnum"
echo "$msgnum" >"$dotest/msgnum"
}
call_merge () {
cmt="$(cat $dotest/`printf %0${prec}d $1`)"
cmt="$(cat $dotest/cmt.$1)"
echo "$cmt" > "$dotest/current"
git-merge-$strategy "$cmt^" -- HEAD "$cmt"
rv=$?
@ -108,15 +108,12 @@ finish_rb_merge () {
end="`cat $dotest/end`"
while test "$msgnum" -le "$end"
do
msgnum=`printf "%0${prec}d" "$msgnum"`
printf "%0${prec}d" "$msgnum" > "$dotest/msgnum"
git-read-tree `cat "$dotest/$msgnum.result"`
git-read-tree `cat "$dotest/cmt.$msgnum.result"`
git-checkout-index -q -f -u -a
git-commit -C "`cat $dotest/$msgnum`"
git-commit -C "`cat $dotest/cmt.$msgnum`"
echo "Committed $msgnum"
echo ' '`git-rev-list --pretty=oneline -1 HEAD | \
printf "Committed %0${prec}d" $msgnum
echo ' '`git-rev-list --pretty=oneline -1 HEAD | \
sed 's/^[a-f0-9]\+ //'`
msgnum=$(($msgnum + 1))
done
@ -322,11 +319,11 @@ for cmt in `git-rev-list --no-merges "$upstream"..ORIG_HEAD \
| perl -e 'print reverse <>'`
do
msgnum=$(($msgnum + 1))
echo "$cmt" > "$dotest/`printf "%0${prec}d" $msgnum`"
echo "$cmt" > "$dotest/cmt.$msgnum"
done
printf "%0${prec}d" 1 > "$dotest/msgnum"
printf "%0${prec}d" "$msgnum" > "$dotest/end"
echo 1 >"$dotest/msgnum"
echo $msgnum >"$dotest/end"
end=$msgnum
msgnum=1