Isolate a Buggy Commit with Git Bisect

A few weeks a go I made a blog post about my success in running Age of Empires II with Wine. Unfortunately the upgrade from wine-0.9.31 to 0.9.32 broke it again. The game doesn’t even start anymore and just displays the following message:

Could not initialize graphics system. Make sure your video card and driver are compatible with directdraw.

See the AppDB Comments for further discussions.

So I decided to try to isolate the commit which is responsible for the breakage. The first step was to get all the required build dependencies installed. Next I did a checkout of the wine source and started regression testing as explained on the wine-wiki. By telling git bisect the last good state and a known broken one it can perform a binary search for the buggy commit.

git bisect start
git bisect good wine-0.9.31
git bisect bad wine-0.9.32

Then you can compile Wine and test whether the bug is still there.

CFLAGS=-fno-stack-protector ./configure && make clean && make depend && make

Depending on the result you run git bisect good or git bisect bad respectively. If you want to see which commits could cause the error run git bisect visualize. Recompile and repeat the above steps until you can isolate the problematic commit.

In my case it was the following:

27113156d96d20296409fcb92839609c8dd7e34a is first bad commit
commit 27113156d96d20296409fcb92839609c8dd7e34a
Author: Stefan Dosinger <stefan@codeweavers.com>
Date:   Mon Feb 19 15:24:00 2007 +0100

    wined3d: Remove IWineD3DDevice::EnumDisplayModes.

So now that I have isolated the commit, I filled a bug report.

Marc