summaryrefslogtreecommitdiff
path: root/git-bisect.sh
diff options
context:
space:
mode:
authorPetr Baudis <pasky@suse.cz>2006-02-12 17:06:14 +0100
committerJunio C Hamano <junkio@cox.net>2006-02-12 13:07:02 -0800
commit810255fd12536d296597a0366f514bf65c2e10f6 (patch)
treefbc9e0e9664e6f4b62c7107604b4f41a310672bb /git-bisect.sh
parentc5e09c1fbec5dc1c15bcfe21e1a600f9e4b4e419 (diff)
downloadgit-810255fd12536d296597a0366f514bf65c2e10f6.tar.gz
Properly git-bisect reset after bisecting from non-master head
git-bisect reset without an argument would return to master even if the bisecting started at a non-master branch. This patch makes it save the original branch name to .git/head-name and restore it afterwards. This is also compatible with Cogito and cg-seek, so cg-status will show that we are seeked on the bisect branch and cg-reset will properly restore the original branch. git-bisect start will refuse to work if it is not on a bisect but .git/head-name exists; this is to protect against conflicts with other seeking tools. Signed-off-by: Petr Baudis <pasky@suse.cz> Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'git-bisect.sh')
-rwxr-xr-xgit-bisect.sh17
1 files changed, 14 insertions, 3 deletions
diff --git a/git-bisect.sh b/git-bisect.sh
index 51e1e4417d..3c024aae73 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -49,9 +49,16 @@ bisect_start() {
die "Bad HEAD - I need a symbolic ref"
case "$head" in
refs/heads/bisect*)
- git checkout master || exit
+ if [ -s "$GIT_DIR/head-name" ]; then
+ branch=`cat "$GIT_DIR/head-name"`
+ else
+ branch=master
+ fi
+ git checkout $branch || exit
;;
refs/heads/*)
+ [ -s "$GIT_DIR/head-name" ] && die "won't bisect on seeked tree"
+ echo "$head" | sed 's#^refs/heads/##' >"$GIT_DIR/head-name"
;;
*)
die "Bad HEAD - strange symbolic ref"
@@ -159,7 +166,11 @@ bisect_visualize() {
bisect_reset() {
case "$#" in
- 0) branch=master ;;
+ 0) if [ -s "$GIT_DIR/head-name" ]; then
+ branch=`cat "$GIT_DIR/head-name"`
+ else
+ branch=master
+ fi ;;
1) test -f "$GIT_DIR/refs/heads/$1" || {
echo >&2 "$1 does not seem to be a valid branch"
exit 1
@@ -170,7 +181,7 @@ bisect_reset() {
esac
git checkout "$branch" &&
rm -fr "$GIT_DIR/refs/bisect"
- rm -f "$GIT_DIR/refs/heads/bisect"
+ rm -f "$GIT_DIR/refs/heads/bisect" "$GIT_DIR/head-name"
rm -f "$GIT_DIR/BISECT_LOG"
}