In the course of trying to organise my life enough that I don’t feel I’m being crushed under the weight of a disorganised mass of files, papers and projects, I discovered a very neat little software tool called Fossil. (This probably isn’t of interest unless you develop your own software or at least do some sort of creative projects using a computer, so feel free to skip it if you don’t. The rest of you, read on!).
For a while I’d half-heartedly wondered about setting up some kind of source code management system and maybe also a bug tracking system for my own projects. It’s not so critical to have all this stuff on a single person project as it is on a bigger collaborative work, but at times things can still get disorganised enough to be a pain, especially if you have a bit of a break and then try to come back to it later. Where did I put the most up-to-date copy of that emulator’s code again? Is it on my desktop machine with all the other projects? Or did I make some updates on my old laptop? Maybe the master copy is on an external drive somewhere, or in that folder called “new”? Oh, now I remember, last time I worked on it was on the Raspberry Pi, but the changes I made there probably won’t work on any other machine. Come to think of it, what do I want to do on it next anyway? I know there was a list of bugs and missing features… it was in my green notebook I think… or maybe it’s in a text file in my Dropbox folder… or did I have a fit of organisation one day and add them all to TaskCoach as individual tasks? Aaargh!
I liked the idea of having a single repository of the code in one place so I always know where it is, and being able to get earlier versions back when I break it would be great as well. A ticket system for the bugs and missing features would also be useful. I considered installing a Trac server somewhere – I’d used it on work projects and liked the way it gave you source code management, a wiki and bug tracking/ticketing system all in one place – but I quickly gave up on that when I saw the length and complexity of the installation instructions. Using Trac for projects like mine would be like hiring a combine harvester, learning how to drive it and then using it to give your front lawn a quick trim.
Enter Fossil! I can’t remember where I heard about it, I think it was a forum post somewhere, but I’m very glad I did. It does all of those things perfectly adequately for small projects (probably even for medium sized multi-person projects) and is much, much more lightweight and easy to install than the likes of Trac or GForge. In fact it doesn’t even need to be installed at all – it comes as a single executable (available for Windows, Mac, Linux and others) with no dependencies on other software at all. You just download it, and away you go. Each project repository you create with it is also stored in a single file so it’s easy to keep track of it, move it around, back it up, etc.
You can access the source control functionality from the command line (commands like “fossil add”, “fossil commit”, clearly reminiscent of well-established SCMs like CVS and SVN), or you can fire up the web interface in your browser by typing “fossil ui”, and that gives you access to the other functions like the wiki and the ticketing system. I’ve been using it for a while now on one of my projects and definitely intend to use it for the others as well once I start working on them more seriously. I must say, so far I’m quite blown away by how capable it is; shoehorning a fully working source code manager, bug tracker and wiki into such a tiny, fast and easy to use package is an amazing achievement. I’m always apprehensive about trying out new development tools. It’s pretty common to be left high and dry with an incomprehensible error message because your version of some library you’ve never even heard of is version 1.2.29 instead of 1.2.28, but Fossil has none of those issues. It Just Works.
(I haven’t tried to use some of the more advanced functionality such as the distributed SCM, so I can’t really comment on that. But for small projects using a local repository, it seems ideal).