summaryrefslogtreecommitdiff
path: root/git-bisect.sh
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@osdl.org>2005-11-27 19:32:03 (GMT)
committerJunio C Hamano <junkio@cox.net>2005-11-29 07:11:38 (GMT)
commitb3cfd939c330211c9812f814094aa1dbe9531bdc (patch)
treeafa5d0e13f83afecf3b0810eba29eaf3ad3e531e /git-bisect.sh
parent9ef2b3cbf62d15aa0312bde349347873d7c0f399 (diff)
downloadgit-b3cfd939c330211c9812f814094aa1dbe9531bdc.zip
git-b3cfd939c330211c9812f814094aa1dbe9531bdc.tar.gz
git-b3cfd939c330211c9812f814094aa1dbe9531bdc.tar.bz2
bisect: limit the searchspace by pathspecs
It was surprisingly easy to do. git bisect start <pathspec> followed by all the normal "git bisect good/bad" stuff. Almost totally untested, and I guarantee that if your pathnames have spaces in them (or your GIT_DIR has spaces in it) this won't work. I don't know how to fix that, my shell programming isn't good enough. This involves small changes to make "git-rev-list --bisect" work in the presense of a pathspec limiter, and then truly trivial (and that's the broken part) changes to make "git bisect" save away and use the pathspec. I tried one bisection, and a "git bisect visualize", and it all looked correct. But hey, don't be surprised if it has problems. Linus Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'git-bisect.sh')
-rwxr-xr-xgit-bisect.sh10
1 files changed, 5 insertions, 5 deletions
diff --git a/git-bisect.sh b/git-bisect.sh
index d92993b..2455f00 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -33,7 +33,6 @@ bisect_autostart() {
}
bisect_start() {
- case "$#" in 0) ;; *) usage ;; esac
#
# Verify HEAD. If we were bisecting before this, reset to the
# top-of-line master first!
@@ -57,7 +56,8 @@ bisect_start() {
rm -f "$GIT_DIR/refs/heads/bisect"
rm -rf "$GIT_DIR/refs/bisect/"
mkdir "$GIT_DIR/refs/bisect"
- echo "git-bisect start" >"$GIT_DIR/BISECT_LOG"
+ echo "git-bisect start $@" >"$GIT_DIR/BISECT_LOG"
+ echo "$@" > "$GIT_DIR/BISECT_NAMES"
}
bisect_bad() {
@@ -121,7 +121,7 @@ bisect_next() {
bad=$(git-rev-parse --verify refs/bisect/bad) &&
good=$(git-rev-parse --sq --revs-only --not \
$(cd "$GIT_DIR" && ls refs/bisect/good-*)) &&
- rev=$(eval "git-rev-list --bisect $good $bad") || exit
+ rev=$(eval "git-rev-list --bisect $good $bad -- $(cat $GIT_DIR/BISECT_NAMES)") || exit
if [ -z "$rev" ]; then
echo "$bad was both good and bad"
exit 1
@@ -131,7 +131,7 @@ bisect_next() {
git-diff-tree --pretty $rev
exit 0
fi
- nr=$(eval "git-rev-list $rev $good" | wc -l) || exit
+ nr=$(eval "git-rev-list $rev $good -- $(cat $GIT_DIR/BISECT_NAMES)" | wc -l) || exit
echo "Bisecting: $nr revisions left to test after this"
echo "$rev" > "$GIT_DIR/refs/heads/new-bisect"
git checkout new-bisect || exit
@@ -142,7 +142,7 @@ bisect_next() {
bisect_visualize() {
bisect_next_check fail
- gitk bisect/bad --not `cd "$GIT_DIR/refs" && echo bisect/good-*`
+ gitk bisect/bad --not `cd "$GIT_DIR/refs" && echo bisect/good-*` -- $(cat $GIT_DIR/BISECT_NAMES)
}
bisect_reset() {