Archive for April, 2008

Git svn and Gnome

Friday, April 25th, 2008

Since my work is going to span across many modules and that each of these modules are in it’s own svn repository, I have decided to use git-svn as a source control tool. I will be publishing my git repository at git.jsharpe.net once I’ve got ssh access enabled on my server.

Using git to access svn repository
Some of you may be interested in how to use git to access a svn repository. (A more comprehensive guide is available here) This is how I used it to clone the gnome repositories:

First run:
git svn clone http://svn.gnome.org/svn/jhbuild -T trunk -t tags -b branches
This tells git to clone the jhbuild svn repository with trunk directory named trunk, tags directory tags and branches directory branches. (A pretty standard repository layout however if the repository is laid out in a non-standard fashion there are ways of making git svn play nice here too – ask if you’d like to know).
This will churn away for a long time checking out every single revision from revision 1 to obtain the complete history( the -r flag can be used to reduce the number of revisions that are checked out to a smaller number).
Once this is completed we will then have all the branches and tags from the svn repository available as remote branches.

Space Savings using git over svn
I’m still amazed at how well git compresses repositories. After cloning the nautilus repository the .git directory was 2.0G. Running the command:

git gc –prune –aggressive

compresses this down to 381M.

Working with a git svn repository
Keeping up to date is simple. You simply run the command
git svn fetch
from within your working copy. This will download all updates on all the branches and tags from svn that happened since you last updated. (Incidently if during the initial clone step your connection dies or you need to stop it then to resume the clone you just have to run the above command to resume downloading the history).

Day to day development then should occur on a branch which is then rebased against the master when svn updates are pulled down. Changes can then be pushed back to svn using git svn dcommit.

Google Summer of Code

Wednesday, April 23rd, 2008

So I’ve been accepted onto the google summer of code 2008 program to work on the Gnome desktop project. I’m going to be working on the desktop wallpaper system and adding the functionality of being able to set a different wallpaper for each desktop. This functionality has been desired in Gnome since 2001 (bug 48004). Its an interesting project as it cuts across a number of modules within the Gnome project and also presents some challenges such as keeping memory usage down when a user has a large number of workspaces.

The project consists of two main parts: the backend, which involves dealing with GConf and all the management of the background pixmap, and the user interface; adding the flexibility of choosing a background for each desktop introduces new usability challenges to the interface; its desirable for new users to be able to quickly pick up the interface for changing the background for all desktops, for existing users to not be confused by the new interface but at the same time be able to fully utilise the full functionality available easily.

Its possible that I finish this work early. In which case I have plans to add new functionality to the background system. Some ideas I have already are:

  • Background rotation every N mins
  • New colour gradients
  • Watermarks e.g. a corporate logo can be blended onto the background chosen

I’m open to other ideas too, so if you have any then get in contact with me.