Crosstips.org

My fun Crossword solver project. Crosstips.org & Krysstips.se

Kung Fu

Fujian White Crane Kung Fu

Fry-IT

Fry-IT is the company I work for

Photos

Photoalbum, both old and new.

Zope

What I have and am doing with Zope

Receptsamlingen

In Swedish only. About my "Collection of Recipes" website.

Contact me

My contact details and how to contact me.

 

KungFuPeople.com
Do you train Kung Fu?
Or know someone who does?
Then check out KungFuPeople.com


Mobile version of this page Mobile version of this page


 

Git + Twitter = Friedcode


22nd of April 2009

Git + Twitter = Friedcode I've now written my first Git hook. For the people who don't know what Git is you have either lived under a rock for the past few years or your not into computer programming at all.

The hook is a post-commit hook and what it does is that it sends the last commit message up to a twitter account I called "friedcode". I guess it's not entirely useful but for you who want to be loud about your work and the progress you make I guess it can make sense. Or if you're a team and you want to get a brief overview of what your team mates are up to. For me, it was mostly an experiment to try Git hooks and pytwitter. Here's how I did it:

Go into the .git directory and edit the file 'post-commit':

 $ cd myproject
 $ cd .git/hooks
 $ jed post-commit

Here's the script I wrote which contains some horrible python one-liners simply because my sed/awk-fu isn't good enough:

 #: Nothing
 last_message=`git log --pretty=oneline -n1`
 last_message=`echo $last_message |  python -c "import sys;sys.stdout.write(\
 ' '.join(sys.stdin.read().strip().split()[1:]))"
`
 repo_name=`git info | head -n1`
 repo_name=`echo $repo_name | python -c "import \ 
  sys;sys.stdout.write(sys.stdin.read().strip().split('/')[-1])"`
 echo "($repo_name) $last_message" | Update_friedcode.py

To enable the hook what you have to do is simply make it executable and you're done:

 $ chmod +x post-commit

Then I needed the pytwitter script called Update_friedcode.py which I've put in '~/bin':

 #!/usr/bin/env python
 import sys
 """To use:
 $ echo "I ate too much" | ./Update_friedcode.py
 """

 U = 'friedcode'
 P = <something something>

 import pytwitter
 client = pytwitter.pytwitter(username=U, password=P)
 status_update = sys.stdin.read().strip()[:140]
 client.statuses_update(status=status_update)



Comment

Alex - 22nd April 2009  [«« Reply to this]
Nice hack!
Unluckily the link under the image is broken
Peter Bengtsson - 22nd April 2009   [«« Reply to this]
Not any more :)
James Rowe - 22nd April 2009  [«« Reply to this]
Pretty cool idea, and definitely simpler than writing code to spit out HTML/Atom feeds for your co-workers. Couple of comments...

The first one-liner can be replaced with:

echo last_message | sed 's,^[^ ]* ,,'

or if you /bin/sh is always bash:

sed 's,^[^ ]* ,,' <<< $last_message

And the second one-liner is just basename, so os.path.basename if you
really want to use Python or simply the basename command if you don't. Again, if your /bin/sh is bash/ksh you can use ${last_message##*/}

And a question; What version of git has an info command by the way? Don't have it on my systems.
Peter Bengtsson - 22nd April 2009   [«« Reply to this]
Great! Thank you for that sed command.

About the second one-liner, it's the git info returns this:
"== Remote URL: origin ssh://root@git.fry-it.com/var/cache/git/waf"

So basename wouldn't work on that.


I'm using 1.5.6.3 from Ubuntu to get git info.
James Rowe - 22nd April 2009   [«« Reply to this]
Python's os.path.basename, basename from coreutils and busybox's basename all do the "right thing" with your example string.

On my systems, running 1.6.2.3, I'd use `git config --get remote.origin.url' to get for example "git@github.com:JNRowe/misc-overlay.git"
Peter Bengtsson - 23rd April 2009   [«« Reply to this]
I think I know what you mean but the whole string starts with "== Remote URL: " which means that basename fails on it.

$ repo_name=`git info | head -n1`
$ basename $repo_name
basename: extra operand `URL:'
Try `basename --help' for more information.
Anonymous - 23rd April 2009   [«« Reply to this]
My fault, I should have used an example.

basename "$repo_name"

it is the quoting that is important, it makes basename treat the string as an ugly space and symbol including filename
James Rowe - 22nd April 2009  [«« Reply to this]
Bah, I meant to say you could use the following instead of the first one-liner if you're sure you using bash/ksh:

echo ${last_message#* }
Lawrence D'Oliveiro - 30th August 2009  [«« Reply to this]
I have tried 3 different versions of Git—1.4.4.4, 1.5.6,5 and 1.6.2.1—and none of them has the “git info” command.
Peter Bengtsson - 30th August 2009   [«« Reply to this]
Strange. I have 1.6.0.4 and it has git info.

Perhaps you can get the same info from:
$ git remote show origin
 
Name:
Email:
hide my email address.

Your email address will be encoded to prevent email-extraction spiders from reading it so you won't get spammed if you decide to show your email address.