From 48949a18c852e5119827278c37f791921e640688 Mon Sep 17 00:00:00 2001 From: Christian Couder Date: Wed, 16 Apr 2008 04:09:49 +0200 Subject: bisect: squelch "fatal: ref HEAD not a symref" misleading message To get the current HEAD when we start bisecting using for example "git bisect start", we first try "git symbolic-ref HEAD" to get a nice name, and if it fails, we fall back to "git rev-parse --verify HEAD". The problem is that when "git symbolic-ref HEAD" fails, it displays "fatal: ref HEAD not a symref", so it looks like "git bisect start" failed and does not accept detached HEAD, even if in fact it worked fine. This patch adds "-q" option to the "git symbolic-ref" call to get rid of the misleading error message. Signed-off-by: Christian Couder Signed-off-by: Junio C Hamano --- git-bisect.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'git-bisect.sh') diff --git a/git-bisect.sh b/git-bisect.sh index c99ffee122..dd91bd5bc7 100755 --- a/git-bisect.sh +++ b/git-bisect.sh @@ -62,7 +62,7 @@ bisect_start() { # Verify HEAD. If we were bisecting before this, reset to the # top-of-line master first! # - head=$(GIT_DIR="$GIT_DIR" git symbolic-ref HEAD) || + head=$(GIT_DIR="$GIT_DIR" git symbolic-ref -q HEAD) || head=$(GIT_DIR="$GIT_DIR" git rev-parse --verify HEAD) || die "Bad HEAD - I need a HEAD" case "$head" in -- cgit v1.2.3 From d3e54c88291c2d880ff3a72167c5d3159aed8e97 Mon Sep 17 00:00:00 2001 From: Christian Couder Date: Mon, 14 Apr 2008 05:41:45 +0200 Subject: git-bisect: make "start", "good" and "skip" succeed or fail atomically Before this patch, when "git bisect start", "git bisect good" or "git bisect skip" were called with many revisions, they could fail after having already marked some revisions as "good", "bad" or "skip". This could be especilally bad for "git bisect start" because as the file ".git/BISECT_NAMES" would not have been written, there would have been no attempt to clear the marked revisions on a "git bisect reset". That's because if there is no ".git/BISECT_NAMES" file, nothing is done to clean things up, as the bisect session is not supposed to have started. While at it, let's also create the ".git/BISECT_START" file, only after ".git/BISECT_NAMES" as been created. Signed-off-by: Christian Couder Signed-off-by: Junio C Hamano --- git-bisect.sh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'git-bisect.sh') diff --git a/git-bisect.sh b/git-bisect.sh index dd91bd5bc7..b42f94cd39 100755 --- a/git-bisect.sh +++ b/git-bisect.sh @@ -65,6 +65,7 @@ bisect_start() { head=$(GIT_DIR="$GIT_DIR" git symbolic-ref -q HEAD) || head=$(GIT_DIR="$GIT_DIR" git rev-parse --verify HEAD) || die "Bad HEAD - I need a HEAD" + start_head='' case "$head" in refs/heads/bisect) if [ -s "$GIT_DIR/BISECT_START" ]; then @@ -78,7 +79,7 @@ bisect_start() { # This error message should only be triggered by cogito usage, # and cogito users should understand it relates to cg-seek. [ -s "$GIT_DIR/head-name" ] && die "won't bisect on seeked tree" - echo "${head#refs/heads/}" >"$GIT_DIR/BISECT_START" + start_head="${head#refs/heads/}" ;; *) die "Bad HEAD - strange symbolic ref" @@ -99,6 +100,7 @@ bisect_start() { done orig_args=$(sq "$@") bad_seen=0 + eval='' while [ $# -gt 0 ]; do arg="$1" case "$arg" in @@ -116,13 +118,15 @@ bisect_start() { 0) state='bad' ; bad_seen=1 ;; *) state='good' ;; esac - bisect_write "$state" "$rev" 'nolog' + eval="$eval bisect_write '$state' '$rev' 'nolog'; " shift ;; esac done sq "$@" >"$GIT_DIR/BISECT_NAMES" + test -n "$start_head" && echo "$start_head" >"$GIT_DIR/BISECT_START" + eval "$eval" echo "git-bisect start$orig_args" >>"$GIT_DIR/BISECT_LOG" bisect_auto_next } @@ -153,12 +157,14 @@ bisect_state() { bisect_write "$state" "$rev" ;; 2,bad|*,good|*,skip) shift + eval='' for rev in "$@" do sha=$(git rev-parse --verify "$rev^{commit}") || die "Bad rev input: $rev" - bisect_write "$state" "$sha" - done ;; + eval="$eval bisect_write '$state' '$sha'; " + done + eval "$eval" ;; *,bad) die "'git bisect bad' can take only one argument." ;; *) -- cgit v1.2.3