The name D. Richard Hipp is most likely familiar: he is the man who created the immensely popular embedded database called SQLite, contained in probably thousands of projects including, very possibly, your mobile phone. He also created a version control system named Fossil. I’ve been looking at Fossil a bit: a single binary (called fossil) implements the client as well as the server side of the version control system, and it adds a Wiki, a ticket tracker, and a Web interface to the lot, as well as distributed version control over HTTP (with proxy support). Let me briefly introduce you to Fossil with an example, sort of the “hello world” of a version control system. You can follow along with this after downloading the binary, which BTW also exists for Windows.

    $ cd $SOMEWHERE
    $ fossil new demo.fossil
    project-id: 7dee78d01d77151b6e2109724525b877d97c6b3d
    server-id:  a296eb764ca24168e1a54167353a43e2a9fbf77c
    admin-user: jpm (initial password is "dad08c")
    $ fossil open demo.fossil 
    $ vi README
    $ vi prog.c
    $ fossil add README *.c
    ADDED prog.c
    $ export VISUAL=vi
    $ fossil commit
    New_Version: ae0864bfb4308af7aa22d0cf370cbffc3fa289c8

So far there is nothing particular spectacular. We’ve created a new repository, and we “opened” that repository, thereby making it our default. After creating a few files, I committed those files, and that’s it. What is, however, quite sexy is this. From within that same directory, launch the ui (i.e. the user interface).

    $ fossil ui

If all works well, this will have launched your Web browser onto an HTTP server implemented by the fossil binary. (If your Web browser doesn’t start, point it at localhost:8080/index. If you look around the interface, you’ll see the individual features that Fossil has to offer. What I can also do is to import a project from Git. As an example, I’ll use my couch-sdb project:

    $ cd /path/to/git/repo
    $ git fast-export --all | \
        fossil import /tmp/fos/couch-sdb.fossil
    Rebuilding repository meta-data...
      100.0% complete...
    Vacuuming... ok
    project-id: 45c947fc821987201b034c2b55a5b852b55cba6e
    server-id:  c0757fcd1b028e8d99c7de540183b60196e4b7d6
    admin-user: jpm (password is "74c80c")
    $ cd /tmp/fos
    $ ls
    $ file couch-sdb.fossil
    couch-sdb.fossil: SQLite 3.x database
    $ fossil open couch-sdb.fossil
    project-name: <unnamed>
    repository:   /private/tmp/fos/couch-sdb.fossil
    local-root:   /private/tmp/fos/
    project-code: 45c947fc821987201b034c2b55a5b852b55cba6e
    server-code:  c0757fcd1b028e8d99c7de540183b60196e4b7d6
    checkout:     ce166d86752d740a7f8fde06529ce059c8f8bf3d 2010-10-11 15:07:41 UTC
    parent:       03e62d89edf085f4bbece538b8d1f1213fcc875a 2010-10-06 18:48:20 UTC
    tags:         master
    comment:      CouchApp design components (user:
    $ fossil ui

Let me show you the timeline: Fossil incorporates a a small Ticket tracker as well, which looks like this. Fossil isn’t without criticisms, but I think it is a very robust package, and I feel it is particularly suited to environments that want to collaborate on projects, but which don’t feel like setting up the usual and typically rather large number of prerequisites to do so (think: Apache, bug tracker, Wiki, etc.) Fossil’s data store is SQLite but there is no reason to change that at some point in time.

Database, CLI, and versioncontrol :: 04 Dec 2010 :: e-mail