threads / patch / 3310

patchProperly git-bisect reset after bisecting from non-master head

Subject: [PATCH] Properly git-bisect reset after bisecting from non-master head

## tl;dr

4 messages between Feb 12, 2006 and Feb 12, 2006. Diffs are folded; open one to read it.

replies: 3people: 2as markdown or json

Petr Baudis· Feb 12, 2006, 16:06 UTC · lore

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>

--- commit 143fc0c9a04ca38a70fbd882e38620f566415b6c tree c93f93a984c00cfa08bbb9cb46bd1c6ba2c82de0 parent 8dcc626cd144b2c6eae2a299242bbbe905cb0059 author Petr Baudis <pasky@suse.cz> Sun, 12 Feb 2006 16:57:39 +0100 committer Petr Baudis <xpasky@machine.or.cz> Sun, 12 Feb 2006 16:57:39 +0100

 git-bisect.sh |   17 ++++++++++++++---
 1 files changed, 14 insertions(+), 3 deletions(-)
Show changes to git-bisect.sh +14 −3
diff --git a/git-bisect.sh b/git-bisect.sh
index 51e1e44..3c024aa 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"
 }
 
-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
Of the 3 great composers Mozart tells us what it's like to be human,
Beethoven tells us what it's like to be Beethoven and Bach tells us
what it's like to be the universe.  -- Douglas Adams
Junio C Hamano· Feb 12, 2006, 19:33 UTC · re: Petr Baudis · lore

Re: [PATCH] Properly git-bisect reset after bisecting from non-master head

Petr Baudis <pasky@suse.cz> writes:
Show 20 quoted lines
> diff --git a/git-bisect.sh b/git-bisect.sh
> index 51e1e44..3c024aa 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"
>  		;;

Hmph. It seems that $GIT_DIR/head-name might want to be a symbolic ref?

But other than that the patch looks sane, being able to go back to the original branch, and preventing starting to bisect while bisecting are useful and safe changes. Thanks.

Petr Baudis· Feb 12, 2006, 19:41 UTC · re: Junio C Hamano · lore

Re: [PATCH] Properly git-bisect reset after bisecting from non-master head

Dear diary, on Sun, Feb 12, 2006 at 08:33:26PM CET, I got a letter where Junio C Hamano <junkio@cox.net> said that...

Show 25 quoted lines
> Petr Baudis <pasky@suse.cz> writes:
> 
> > diff --git a/git-bisect.sh b/git-bisect.sh
> > index 51e1e44..3c024aa 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"
> >  		;;
> 
> Hmph.  It seems that $GIT_DIR/head-name might want to be a
> symbolic ref?

That probably isn't a bad idea per se, but I can't think of anything which that would improve either, and this has the plus of being compatible with Cogito.

Anyway, if you want a symref, you should probably give it a different name.

-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
Of the 3 great composers Mozart tells us what it's like to be human,
Beethoven tells us what it's like to be Beethoven and Bach tells us
what it's like to be the universe.  -- Douglas Adams
Junio C Hamano· Feb 12, 2006, 20:35 UTC · re: Petr Baudis · lore

Re: [PATCH] Properly git-bisect reset after bisecting from non-master head

Petr Baudis <pasky@suse.cz> writes:
Show 6 quoted lines
>> Hmph.  It seems that $GIT_DIR/head-name might want to be a
>> symbolic ref?
>
> That probably isn't a bad idea per se, but I can't think of anything
> which that would improve either, and this has the plus of being
> compatible with Cogito.

Ah, I missed that part, that "head-name" is being used by Cogito and you used that format.

← back to recent threads