diff options
author | Gerrit Pape <pape@smarden.org> | 2008-05-05 07:43:00 +0000 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-05-05 17:18:20 -0700 |
commit | ee831f7ddfc40e9144208c93e24d20ff0ad69194 (patch) | |
tree | be7a81b489709ead6ebbbb6a0c662dca1f1add84 /git-bisect.sh | |
parent | 6233a5210ef64ba31bbf0e867e03e9176e0aace9 (diff) | |
download | git-ee831f7ddfc40e9144208c93e24d20ff0ad69194.tar.gz git-ee831f7ddfc40e9144208c93e24d20ff0ad69194.tar.xz |
git-bisect.sh: don't accidentally override existing branch "bisect"
If a branch named "bisect" or "new-bisect" already was created in the
repo by other means than git bisect, doing a git bisect used to override
the branch without a warning. Now if the branch "bisect" or
"new-bisect" already exists, and it was not created by git bisect itself,
git bisect start fails with an appropriate error message. Additionally,
if checking out a new bisect state fails due to a merge problem, git
bisect cleans up the temporary branch "new-bisect".
The accidental override has been noticed by Andres Salomon, reported
through
http://bugs.debian.org/478647
Signed-off-by: Gerrit Pape <pape@smarden.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-bisect.sh')
-rwxr-xr-x | git-bisect.sh | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/git-bisect.sh b/git-bisect.sh index 8e57e9a75..54bfd71da 100755 --- a/git-bisect.sh +++ b/git-bisect.sh @@ -65,14 +65,19 @@ 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" + # + # Check that we either already have BISECT_START, or that the + # branches bisect, new-bisect don't exist, to not override them. + # + test -s "$GIT_DIR/BISECT_START" || + if git show-ref --verify -q refs/heads/bisect || + git show-ref --verify -q refs/heads/new-bisect; then + die 'The branches "bisect" and "new-bisect" must not exist.' + fi start_head='' case "$head" in refs/heads/bisect) - if [ -s "$GIT_DIR/BISECT_START" ]; then - branch=`cat "$GIT_DIR/BISECT_START"` - else - branch=master - fi + branch=`cat "$GIT_DIR/BISECT_START"` git checkout $branch || exit ;; refs/heads/*|$_x40) @@ -324,8 +329,8 @@ bisect_next() { exit_if_skipped_commits "$bisect_rev" echo "Bisecting: $bisect_nr revisions left to test after this" - git branch -f new-bisect "$bisect_rev" - git checkout -q new-bisect || exit + git branch -D new-bisect 2> /dev/null + git checkout -q -b new-bisect "$bisect_rev" || exit git branch -M new-bisect bisect git show-branch "$bisect_rev" } |