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 :)

Another merge failed. on Twitpic

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!

Comments