Skip to content

Instantly share code, notes, and snippets.

@ktoso
Created March 16, 2011 21:09
Show Gist options
  • Save ktoso/873312 to your computer and use it in GitHub Desktop.
Save ktoso/873312 to your computer and use it in GitHub Desktop.
A simple showcase of how you can use git bisect and maven to find a commit that introduced a bug.
ktoso@dynames breakMe $ mvn org.apache.maven.plugins:maven-archetype-plugin:1.0-alpha-7:create -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DartifactId=bisectfun -DgroupId=pl.project13
#.........................
ktoso@dynames breakMe $ ls
bisectfun mavenbisect.sh
ktoso@dynames breakMe $ cd bisectfun/
ktoso@dynames bisectfun $ mkdir src/test/resources/
ktoso@dynames bisectfun $ git init .
Initialized empty Git repository in /tmp/breakMe/bisectfun/.git/
ktoso@dynames bisectfun $ git commit ^C
ktoso@dynames bisectfun $ vim .gitignore
ktoso@dynames bisectfun $ git add .
ktoso@dynames bisectfun $ git commit
[master (root-commit) 5b46510] Initial commit
4 files changed, 78 insertions(+), 0 deletions(-)
create mode 100644 .gitignore
create mode 100644 pom.xml
create mode 100644 src/main/java/pl/project13/App.java
create mode 100644 src/test/java/pl/project13/AppTest.java
********************************************************************************
Git Achievement Unlocked!
Master Author (Level 10)
Made 2^Level commits using git commit.
********************************************************************************
#.........................
ktoso@dynames bisectfun @ master $ mvn test
#.........................
[INFO] BUILD SUCCESSFUL
#.........................
ktoso@dynames bisectfun @ master $ git tag wasOkHere
ktoso@dynames bisectfun @ master $ for i in {1..50}; do fortune > src/test/resources/fortune$i; git add .; git commit -a -m 'some commit'; done;
[master 20ae1c1] some commit
1 files changed, 3 insertions(+), 0 deletions(-)
create mode 100644 src/test/resources/fortune1
[master 64b779e] some commit
1 files changed, 15 insertions(+), 0 deletions(-)
create mode 100644 src/test/resources/fortune2
#.........................
#.........................
#.........................
ktoso@dynames bisectfun @ master $ mvn clean test > /dev/null 2> /dev/null
ktoso@dynames bisectfun @ master $ echo $?
0
ktoso@dynames bisectfun @ master $ echo "fail :D" >> src/test/java/pl/project13/AppTest.java
ktoso@dynames bisectfun @ master $ echo "fail :D" >> src/test/java/pl/project13/AppTest.java
ktoso@dynames bisectfun @ master $ echo "fail :D" >> src/test/java/pl/project13/AppTest.java
ktoso@dynames bisectfun @ master $ git add .
ktoso@dynames bisectfun @ master $ git commit
[master 09a58fb] let it crash
1 files changed, 3 insertions(+), 0 deletions(-)
ktoso@dynames bisectfun @ master $ for i in {1..50}; do fortune > src/test/resources/fortune$i; git add .; git commit -a -m 'some commit'; done;
[master f83cdae] some commit
1 files changed, 3 insertions(+), 3 deletions(-)
[master 725c5ce] some commit
1 files changed, 4 insertions(+), 15 deletions(-)
rewrite src/test/resources/fortune2 (100%)
#.........................
#.........................
#.........................
ktoso@dynames bisectfun @ master $ for i imvn clean test > /dev/null 2> /dev/null
ktoso@dynames bisectfun @ master $ echo $?
1
ktoso@dynames bisectfun @ master $ echo '!!!!!!!!!!!!!!OH NO IT FAILS!!!!!!!!'
!!!!!!!!!!!!!!!!OH NO IT FAILS!!!!!!!!
ktoso@dynames bisectfun @ master $ git tag failsHere
ktoso@dynames bisectfun @ master $ git bisect start
ktoso@dynames bisectfun @ master $ git bisect bad failsHere
ktoso@dynames bisectfun @ master $ git bisect good wasOkHere
Bisecting: 50 revisions left to test after this (roughly 6 steps)
[ca199e0cbd19e498eabf6196036313e206b00a7f] some commit
ktoso@dynames bisectfun @ (no branch) $ git bisect run ../mavenbisect.sh
running ../mavenbisect.sh
Bisecting: 25 revisions left to test after this (roughly 5 steps)
[c8658db8e0c5df1d603a9a96ae7a04e71c4ba9d1] some commit
running ../mavenbisect.sh
Bisecting: 12 revisions left to test after this (roughly 4 steps)
[ddc2100ab90d0624df74e81f17d7ed7ea0fc9a61] some commit
running ../mavenbisect.sh
Bisecting: 5 revisions left to test after this (roughly 3 steps)
[31ba35661eecb7a96159e483954d315a63a3789d] some commit
running ../mavenbisect.sh
Bisecting: 2 revisions left to test after this (roughly 2 steps)
[725c5cec8803b1e62dd36a3b74fd8c52d42e807c] some commit
running ../mavenbisect.sh
Bisecting: 0 revisions left to test after this (roughly 1 step)
[f83cdaeb34072a6f9c9a63abf8bb8f2390b996de] some commit
running ../mavenbisect.sh
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[09a58fbf2821c4f66c003a65f19f6ff99f5ee37d] let it crash
running ../mavenbisect.sh
09a58fbf2821c4f66c003a65f19f6ff99f5ee37d is the first bad commit
commit 09a58fbf2821c4f66c003a65f19f6ff99f5ee37d
Author: Konrad Malawski <konrad.malawski@project13.pl>
Date: Wed Mar 16 22:02:38 2011 +0100
let it crash
:040000 040000 ef88527072e0b1532819a75f288a0e65a2737c6a 49083a7d820a731d5edad117a4af097bd9ffb444 M src
bisect run success
ktoso@dynames bisectfun @ (no branch) $ git show 09a58fbf2821c4f66c003a65f19f6ff99f5ee37d
commit 09a58fbf2821c4f66c003a65f19f6ff99f5ee37d
Author: Konrad Malawski <konrad.malawski@project13.pl>
Date: Wed Mar 16 22:02:38 2011 +0100
let it crash
diff --git a/src/test/java/pl/project13/AppTest.java b/src/test/java/pl/project13/AppTest.java
index c6ffd44..b27c8b8 100644
--- a/src/test/java/pl/project13/AppTest.java
+++ b/src/test/java/pl/project13/AppTest.java
@@ -36,3 +36,6 @@ public class AppTest
assertTrue( true );
}
}
+fail :D
+fail :D
+fail :D
ktoso@dynames bisectfun @ (no branch) $ git bisect reset
Previous HEAD position was 09a58fb... let it crash
Switched to branch 'master'
ktoso@dynames bisectfun @ master $
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment