How Do You Look When Merging Fails ;-)

There was a Simpsons episode, I can’t recall correctly, but I think Bart recorded Lisa when her heart broke and he watched it in slow motion to stop exactly at that point.

I thought of this episode yesterday while playing around with my laptop’s webcam and a Python shell. Finally I wrote a little fun script that does almost the same: Just register it as a hg hook and it takes a picture of you exactly at the unique moment when merging fails and it sends it directly and without any further questions to Twitpic and Twitter:

#!/usr/bin/env python import os import sys import tempfile import time from CVtypes import cv from twitpic import TwitPicAPI DEVICE = 0 TWITTER_USER = 'xxx' # CHANGE THIS! TWITTER_PWD = 'xxx' # CHANGE THIS! # This is the time in seconds you need to realize that the merge has # failed. When setting this consider that it already takes about a second # for the camera to take the picture. "0" means no delay ;-) EMOTIONAL_SLUGGISHNESS_RATE = 0.0 def grab_image(fname): camera = cv.CreateCameraCapture(DEVICE) frame = cv.QueryFrame(camera) cv.SaveImage(fname, frame) def how_do_you_look(): failed = bool(os.environ.get('HG_ERROR', 0)) if not failed: return # hmpf, maybe next time... fd, fname = tempfile.mkstemp('.jpg') if EMOTIONAL_SLUGGISHNESS_RATE > 0: time.sleep(EMOTIONAL_SLUGGISHNESS_RATE) grab_image(fname) twit = TwitPicAPI(TWITTER_USER, TWITTER_PWD) retcode = twit.upload(fname, post_to_twitter=True, message='Another merge failed.') os.remove(fname) if __name__ == '__main__': how_do_you_look()

You’ll need the CVtypes OpenCV wrapper and this Twitpic Python module. I’ve patched the twitpic module to support messages. Have a look at this issue if it’s already supported, otherwise a diff that adds the message keyword is attached to the issue. To use it as a Mercurial hook just add to .hg/hgrc:

[hooks] update = /path/to/the/above/script.py

and make the script executable.

The results are pretty good :)

Have fun!

BTW, the way how to access the camera is inspired by this nice blog post about face recognition using OpenCV.

Edit (2009-05-12): It was Ralph, not Lisa. Thanks Florian!