Sincerest Forms of Flattery
April 22, 2008 on 1:57 pm | In GNOME, fun, announce, clutter | 3 Commentstidy: they say that imitation is the sincerest form of flattery:
the actual amount of code is quite small, and it’s already available in Tidy.
challenges: Luca dared me into making a Clutter-based coverflow-like plugin for Rhythmbox, but it was Iain that picked the challenge up and wrote some basic code for it. I, on the other hand, don’t like coverflow for browsing my music collection, so I finally decided to write something for the Eye of GNOME — a Ken Burns effect slide show. it’s not at all finished, and if nobody picks it up, I’ll try and do my best to have it ready for GNOME 2.24, if EOG maintainers want it, of course. it’s not the best display of Clutter features — except the animation framework — but if you have hardware acceleration it will make slideshows look a lot nicer.
json-glib: this weekend I released the first developers snapshot of JSON-GLib 0.6; the API is stable, the test suite is rocking and this release finally fixes the last bit needed for full RFC 4627 compliance (Unicode escaping). I’m probably going to release 0.6.0 in a couple of weeks.
Being Luis Villa
April 17, 2008 on 2:41 pm | In GNOME, fun, meme, luis-villa-is-people | No Commentsiain’s right: this is funnier than the history meme.
Helm, set a course… for love
February 19, 2008 on 4:32 pm | In GNOME, fun, crack | 2 Commentsa GNOME cruise? I already have the theme song…
GNOME-Love Boat, love exciting and new, Come aboard, we're expecting you. The GNOME-Love Boat soon will be making another release, The GNOME-Love Boat promises something for everyone. Set a course for adventure, Your box's on a new romance. And GNOME-Love Won't hurt anymore, It's an open source, On a userfriendly shore. it's GNOME-Love Welcome aboard it's GNOME-love
When the Levee Breaks
September 11, 2007 on 2:40 pm | In Hacking, Perl, fun, developer, git, die-cvs-die | 5 CommentsYesterday I decided to start working on the porting of the Gtk2::SourceView Perl module to the new upstream API. For my convenience, and because I know I’ll probably screw up, I decided to use a local git repository so I can experiment with all the branches I want before hitting CVS. Yes, you read that right: the Perl GTK+/GNOME bindings still use CVS on SourceForge.net1. Thus, I decided to import the whole gtk2-perl repository into a git one using git-cvsimport, and - lo and behold - after four hours of checkout, I got it on my machine, complete of full history.
The layout of the bindings modules is composed of a single CVS module and all the Perl modules are inside it; this is far from optimal with git2, so I proceeded to split up each Perl module into its own repository, with the help of git-filter-branch - a new command taken from the Cogito suite and added to the 1.5.3 release of git.
The filter-branch command is extremely powerful: it rewrites the history of a repository (which is a destructive operation) by passing a filter function on it. It has a set of predefined filters and contexts of operations, so what you need to do to split out a sub-directory into its own repository is call:
$ git filter-branch --subdirectory-filter directory refspec
and after that you get all the files filtered out marked as new or modified, so you can use git reset --hard to get rid of them, and have your sub-directory contents as the only recognised content of the repository.
Unfortunately, you can’t really filter out a direct import of a CVS repository: git-cvsimport stores branches and tags, and filtering will most likely create dangling objects; so, what I did was cloning the original repository, to get rid of the local branches, and remove all the tags:
$ git clone --no-hardlinks /tmp/gtk2-perl Gtk2-SourceView.git
$ for TAG in `git tag`; do git tag -f -d ${TAG}; done
The --no-hardlinks switch is important for later - I have to thank Ricardo Signes for this tip; in short: it makes git use real copies instead of hardlinking files when cloning a local repository, and will make the garbage collection and pruning phases actually work and prune the unused objects from the git database.
At this point, I just filter-branched and reset:
$ git filter-branch --subdirectory-filter Gtk2-SourceView HEAD $ git reset --hard
and then called:
$ git gc --aggressive $ git prune
and finally obtained my local git repository of the Gtk2-SourceView module from the original CVS repository - with all the history on HEAD preserved. The good part is that the entire set of operations is very repetitive, so it’s suitable for scripting3. Yey for git!
- there has been talk about moving them to GNOME CVS, then to SVN, but in the end the maintenance burden would be too high, and some of the members of the team would need at least SVN accounts anyway [↩]
- or any other SCM software that is not CVS, for that matter [↩]
- I did write a small script which extracted every Perl module sub-directory into its own git repository - but it’s mostly 50 lines sugarcoating the core 5 lines of actual work [↩]
Release Craziness
January 17, 2006 on 1:20 am | In GNOME, fun | No CommentsTonight it was release time - when GNOME tarballs were due in order to allow 48 hours of smoke testing before the actual release, on January 18th.
I did the gnome-utils release, and decided to hang out a bit on #gnome-hackers - and I would have better had not to, since everything happened tonight.
FIrst comes Guilherme de S. Pastore: the newly-appointed gnome-terminal mantainer couldn’t make this release on time, and asked for someone to ship the code inside HEAD; since I love gnome-terminal (usually, I have a dozen terminals laying around on my dozen-workspace layout), how could I not help, after glancing at the bunch of bug fixes Guilherme did in the last two weeks? Also, he is on the Account Team and enabled my SSH account as fast as he could in the occasion of the last release day, so I had a huge debt of gratitude with him.
After the usual ./autogen.sh && make && make distcheck cycle and update, I made the release, and hung around a bit more on the IRC channel.
A mere two hours before the end of the timeline (23:59 UTC), three patches still had to be applied to libgnome, libbonoboui and libgnomeui respectively, and then make a release of those three libraries. In a moment of slight insanity, I began working on it. The madness began.
Each patch applied cleanly to its library; I began making a libgnome release, but noticed that the patch broke libbonobo - upon which libgnomeui depends. I already did a commit to the CVS, so I had to track the origin of the breakage. It was an included header (popt.h) that was conditionally included using a pre-processor macro, but the data structures defined in there were still used and not conditionally compiled out using the same check. In order not to break everything, I had to roll out a new version of libgnome - with the header file unconditionally included. Minutes flew while make distcheck run. Finally, the 2.13.7 release of libgnome was ready. I had to install it on my system in order to make libbonoboui compile: with a mere hour to go, I still had to roll a release for libbonoboui and a release for libgnomeui.
Libbonoboui compiled fine - my fix worked fine. While I was uploading the libbonoboui’s tarball for release 2.13.1, make distcheck run inside libgnomeui. Twentyfive minutes to the deadline.
Finally, libgnomeui finished its check and created the tarball of the 2.13.2 release. I did the upload less than fifteen minutes before the deadline was due.
I’ve never had this much fun: it was a run against time, and against my CPU. Also, I gained a certain degree of automatism when dealing with the release process of a GNOME package. But, seriously: never, never again.
Powered by WordPress with Pool theme design by Borja Fernandez.
Entries and comments feeds.
Valid XHTML and CSS. ^Top^
