Archive for May 20, 2011

Friday, May 20, 2011

Scripting Is Dead; Long Live Scripting


The long and short of it is that we all know half of Google runs on Python. If you program today, you will write scripts, you will write applications and you will write systems, and you will do it in a few different languages, but the two axes are now truly disjointed. There’s no reason for me to not write scripts in C# and a network server in JavaScript any longer, and to burden either language with labels of their heritage is a mistake.

SourceTree 1.2.1

SourceTree is a Git and Mercurial client (via @FogBugz). It seems to include all the expected features, including the ability to send diffs to BBEdit. Overall, I prefer the way Tower’s interface is designed. SourceTree’s seems busier, a bit unpolished, and it wants you to make wide windows. However, SourceTree also seems to be faster at showing diffs, and it can do some things that Tower can’t, such as blame view and per-file change logs (which, alas, do not seem to use --follow to track the history through moves and renames). After switching to Git about four years ago and using it via Terminal and some AppleScripts for a long time, it’s great to be able to choose from multiple good GUI clients (including Xcode 4). I plan to use several of them in concert going forward. The next thing I’d like is for the clients to let you search based on the changed source lines, rather than just the commit messages.

Update: Developer Steve Streeting replied to my e-mail almost immediately with this explanation:

I used to use --follow in an earlier version of SourceTree, until I discovered that, for now at least, this option is fundamentally flawed in Git, and it causes random dropping of log lines in many cases. This has been reported here for example.

I don’t know if git has any plan to fix this, but I disabled it a few point releases ago because it was doing more harm than good (at least the lack of history over rename is predictable). I intend to add a new option to the dialog to selectively allow users to re-enable it when they need it, so that hopefully you can get the information back in those cases without it randomly breaking other logs.