What’s taking so long? Part I

Posted in Miscellaneous on March 10th, 2009 by Bruce van der Kooij – 3 Comments

In the words of Jace Hall (when sitting across the table from George Broussard and Scott Miller of 3D Realms, developers of Duke Nukem Forever):

On behalf of all of the fans out there, who know and love you guys. I say this with the most love that anyone could possibly [ask the question]: what the fuck is taking so long?

Let me take a shot at answering that question, let’s begin with the background. Starting with this chart from Ohloh, which should give you a rough idea of the activity of this project (note that the Google Code project, which Ohloh analyzes, was only started recently, in June of 2008, while NautilusSvn was originally started somewhere late 2006).

The last actual release was made by Jason in  July of 2008 and sported only a few minor changes, after that development pretty much died down.  The pace started to pick up once again when Adam joined the project mid November. This eventually led to my decision that Christmas (the time of the year people normally celebrate with their family) was the ideal time to start hacking away on NautilusSvn. During that period a lot of changes to NautilusSvn were made, more so than probably over entire 2008.

First of all, the entire codebase was heavily refactored. This is not something we took lightly. Every step of the way has been extensively documented on the wiki, from the decisions regarding the directory layout and the coding style to the architecture and the actual implementation. One aspect we’ve paid a lot of attention to was to clearly separate autonomous components. With an eye to the future we’ve started abstracting away from the actual VCS implementation. By doing this we increase the re-usability of major components of the system, so that in the future it will be trivially easy to support a different VCS whether that be Bazaar, Monotone, Git or any other VCS. We’re not there yet, but we believe we’re well underway. We’ve made sure that this goal would not interfere with our support of Subversion.

Somewhat of a sore eye in the previous version (for those of you who remember the dreaded “Refresh status” button) the core functionality, status checking and emblem handling, has been significantly improved. We’ve worked around some of the Nautilus extension API limitations and now NautilusSvn will also keep directory emblems up-to-date. This was somewhat of a pet issue of mine and I’m happy to see my efforts have not gon to waste. It’s still not quite there yet in terms of robustness, but overall it’s pretty decent and should work properly in most cases.

Another major change was that we’ve switched from using wxWidgets to GTK+ as our widget toolkit. This also means we’ve switched from using XRC files to Glade XML to describe the user interface, combined with the excellent Glade Interface Designer this should make modifying the GUI much more comfortable. As loyal users lurking on these mailing lists know this change was set in motion by the latest addition to our team, Adam Plumb. I personally think he’s done a fantastic job with refactoring the GUI layer.

This should give you some idea of what’s been happening over the last few months. In Part II I’m actually going to answer the question posed above.

First beta real soon now(TM)

Posted in Miscellaneous on March 9th, 2009 by Adam Plumb – 2 Comments

For the past week, we’ve been working on releasing an actual beta package for NautilusSvn.  Alas, there are still some glitches and bugs we’re trying to work out, which is slowing down the release.  Hopefully we will have these worked out soon and we can charge forth into the next stage of development.  Stay tuned!

Translating the v0.12 branch

Posted in Miscellaneous on February 25th, 2009 by Adam Plumb – 5 Comments

After initially writing off localization capabilities for v0.12, preferring to wait until v0.13 for that, I later changed my mind and spent some time figuring out how to do it, implementing it, and writing up the documentation for others.

Translating NautilusSvn is a fairly simple process.  We provide a template file that has the English text from our program and a space for the translated text that you will write.  The template file is located at branches/v0.12/nautilussvn/po/NautilusSvn.pot in our svn repository.  In order to start your own translation, you will first need to install the gettext and intltool utilities, which you can generally get from your linux distribution.  You may also want to install poedit, which is a popular and very useful GUI translation tool.

Once you’ve got your environment set up correctly, you can generate the actual translation file you’ll be using.  First, figure out which language and locale you’ll be translating NautilusSvn to.  For example,  en_US is English/United States (the default), and en_CA is English/Canada.  For a list of locale codes, go here.  And for a list of country codes, go here.

Once you’ve figured out your language and locale, you can begin.  For the purposes of this tutorial, I will set up a translation for en_CA (Canadian English).

$ cd /path/to/nautilussvn
$ msginit –input=po/NautilusSvn.pot –locale=en_CA
$ mv en_CA.po po/en_CA.po

The translation file you want to modifiy is now in the po folder, and you can begin your translation!  You may use poedit or another GUI tool or edit the text file by hand.  Once you’ve finished, type:

$ mkdir -p locale/en_CA/LC_MESSAGES
$ msgfmt –output-file=locale/en_CA/LC_MESSAGES/NautilusSvn.mo po/en_CA.po

And you’re done!  If you want NautilusSvn to use your changes, you’ll want to export your language (en_CA) to the LANGUAGE environment variable and restart nautilus and NautilusSvn:

$ export LANGUAGE=en_CA
$ nautilus q; pgrep f service.py | xargs kill; nautilus nodesktop; pgrep f service.py | xargs kill

When your translation is all finished, open a new issue in our Issue Tracker and attach the NautilusSvn.mo and .po files that you created.  We will immediately update our development trunk, and it will be included in the next official release.

Launchpad Translations

We’re currently trying to get our project set up on Launchpad in order to coordinate translations from there, but it isn’t quite set up yet.  We will make an announcement on this development blog and also our mailing list when it is completely set up.

String Freeze

NautilusSvn is currently in the “ALPHA” stage of release and we have not yet reached “string freeze” (the point at which we will not change the English strings in the program).  Strings won’t be frozen until we reach the “BETA” release, which is scheduled to happen next week (but it may not if there is a delay).  You can start translating now if you’d like, but please be aware of any changes that happen to the NautilusSvn.pot template file until the beta.

Happy Translating!

Release announcement for v0.12 ALPHA

Posted in Release on February 17th, 2009 by Adam Plumb – Be the first to comment

It has been a long few months of development, but we’re finally ready to announce that the NautilusSvn v0.12 branch is in the ALPHA stage and ready for testing!  This new major version of NautilusSvn is a complete rewrite from top-to-bottom, and features an automatic status monitor (works better than in v0.11), all-new windows/dialogs using PyGTK instead of wxPython, an all new and improved context menu system, and full localization support!

Here’s a proposed release schedule to give you an idea of our release timeline:

FEB 17 – Alpha release (only for brave testers, no installation package)
MAR 3  – Beta release (for general use and testing, with installation package, string freeze)
MAR 10 – RC Release (for general use, nothing should change unless its an urgent bugfix)
MAR 17 – Final v0.12 release!

INSTALLATION
http://code.google.com/p/nautilussvn/wiki/v012_Installation

Note: there are no installation packages available for the alpha release

KNOWN ISSUES
– The main context menu will appear with items in incorrect places.  This is a bug in nautilus (we think) and so far we haven’t found a workaround.  If you get this, most of the time you can click away (in the nautilus background) and then click back on the original item, and this will give you a correct menu.  If you want to try to find a workaround for us, we’ve created a simple test extension at http://nautilussvn.googlecode.com/files/contextmenubugtest.py.  Put this in your ~/.nautilus/python-extensions folder and type ‘nautilus -q && nautilus –no-desktop’ to load it up.  If you can find a workaround, you will be a hero.

– The new status monitor is slower than it was in v0.11 because it is fully automated and actually works (most of the time), whereas v0.11 required manual refreshes and did not apply status updates to parent folders.

HOW TO HELP

– We’ve put together installation instructions for Ubuntu, Fedora, and OpenSUSE.  If you install NautilusSvn on a different distro, we’d love it if you could send in distro-specific instructions!

– v0.12 is now fully localizable using .po/.pot files.  If you are interesting in helping us with translations, you can get started immediately by going here (http://code.google.com/p/nautilussvn/source/browse/#svn/branches/v0.12/nautilussvn/po) and reading the README file there for instructions.  We will have our translations hosted on launchpad shortly, but you can work from the source in the meantime.  Also, keep in mind that string-freeze does not start until the BETA release.

– Just use the extension and windows to their fullest and report any bugs or issues you find.  Go here (http://code.google.com/p/nautilussvn/issues/list) to report any issues you have.

We’re very excited about the v0.12 release and we hope you all are too!

The NautilusSvn Team

Highlighting the Commit window

Posted in Miscellaneous on February 9th, 2009 by Adam Plumb – 1 Comment

This is my first post highlighting NautilusSvn’s many UI windows and dialogs.  First in line is the frequently used Commit window.

The Commit window provides an interface for committing or checking in modifications made to your working copy.   The first area of the window, “Commit to:”, shows you the repository you are working with.  The “Add Message” area allows you to add a log entry to your commit.  The Changed Files table shows all added, deleted, modified, missing, replaced, obstructed, or unversioned files.  Best of all, there is now a context menu that gives you the opportunity to View Diff, Open, Browse to, Delete, Add. Revert, or Ignore the file in question.

screenshot-commit

When you click the “Previous Messages” button, a dialog pops up with the past 30 messages you’ve written (changeable in settings).

screenshot-previous-messages

When you click “OK”, the commit starts and the notification window pops up, giving you feedback and what is going on…

screenshot-commit-finished

Happy committing!

Highlighting the nautilussvn shell script

Posted in Miscellaneous on January 29th, 2009 by Adam Plumb – Be the first to comment

At some point in the past few weeks I decided that I want to be able to access the v0.12 NautilusSvn UI elements from the command line. So I wrote a simple executable python script called “nautilussvn” which calls the UI element of your choice as well as passes through any other arguments you give it. I simply put a copy of the script in my PATH (mine is at /usr/local/bin/nautilussvn) and call it any time I want from the command line.

Here’s an example of what I’d do if I was in the base directory of some working copy and I wanted to commit the code with svn:

#$ svn commit -m "MESSAGE GOES HERE"

With the nautilussvn script, It’s just about as easy, and you get all the UI goodies you’ve come to love…

#$ nautilussvn commit

Or to specify a path:

#$ nautilussvn commit ~/Development/thiswc

If you want to see all the available modules, just enter “nautilussvn” and you’ll get something like the following:

#$ nautilussvn
usage: nautilussvn <module> [path1] [path2] …

Available Modules
——————
about, add, blame, checkout, cleanup, commit, create, delete, export,
ignore, import, lock, log, merge, properties, relocate, rename,
resolve, revert, settings, switch, unlock, update, updateto

I tend to use the command line quite a lot for work already, so this gives me access to some of the UI features I love (like working with files in the commit dialog) without the hassle of having to open up nautilus.

Another intro and status update

Posted in Miscellaneous on January 27th, 2009 by Bruce van der Kooij – Be the first to comment

Just as Adam did I too would like to introduce myself. My name is Bruce van der Kooij and I was born and raised in The Netherlands, am in my early twenties, recently graduated and currently work as a technical consultant for a local IT company.

I’ve been involved in the NautilusSvn project for quite a while already, at least since Juli 2007. I was one of the major reasons Jason migrated the project to Google Code in June of 2008 (prior to that it was solely being distributed as a tarball through Jason’s personal website). However, up untill recently my contributions to the project consisted of a few minor patches here and there (one liners) and janitorial work (helping people on the mailing list, triaging bugs, updating the website etc.).

Largely thanks to Adam all that changed last Christmas. I felt that the time of the year people normally celebrate with their family was the ideal time to start hacking away on NautilusSvn. And hacking away I did. I worked some 8 days non-stop (8 to 16 hours a day) on implementing some major parts of the extension.

The core functionality, status checking and emblem handling was significantly improved. Though as Adam indicated there are still some kinks to work out. Another major feature was the implementation of submenus, an implementation I’m quite proud of myself.

In the process we have to work around several limitations in the Nautilus extension API (libnautilus-extension). One example of this is that the update_file_info function tells us about changes to items (directories and files) but not about items that aren’t visible in the current view, this is the major reason directory emblems are not kept up-to-date in v0.11 (and a manual refresh is required). We’ve worked around this particular issue by using inotify to keep track of modifications ourselves.

As Adam indicated in the previous post I’m currently working on finishing up the status checking code (mostly performance issues), I hope to do so somewhere in the coming days/weeks (but certainly not months ;-).

Intro and End of January Project Status

Posted in Status Update on January 26th, 2009 by Adam Plumb – 4 Comments

I’d like to introduce myself. My name is Plumb…Adam Plumb. I live in Northampton, Massachusetts, USA, am in my twenties, and work from home as a web developer. I recently created an online boggle clone game called Serpentine, which people have been having a lot of fun with. I’ve been a linux user for a few years now, and have strongly missed having a subversion extension for my file managers (I used TortoiseSVN in Windows). Queue to this autumn when I started learning the Python language and found out about the nautilus-python bindings. I decided to make a TortoiseSVN clone for Nautilus, and started working on my idea until I found the NautilusSvn project and joined forces with Bruce. Together, we decided to do a complete rewrite of NautilusSvn and transform it from a collection of scripts to a robust, well-engineered application.

We’ve been hard at work on the NautilusSvn v0.12 rewrite for well over two months now, and are getting quite close to an alpha (“feature-complete but expect breakage”) milestone. At this point, we’re only waiting for Bruce to finish up his status checking code before we can release an alpha snapshot and ask people to start testing. Indeed, Bruce has been very busy with work and “real life” lately, but the positive side to that is the “delay” has given me an opportunity to continue to polish the UI (which needs to be a bit more robust).

Once we release an alpha snapshot (hopefully within the next couple weeks), we’ll get to work fixing bugs and refactoring in order to get a really solid v0.12 final release.

Hello world!

Posted in Miscellaneous on January 26th, 2009 by Adam Plumb – 1 Comment

Hi everyone!

Welcome to the development blog for the NautilusSvn project.  Our project’s actual website is hosted on google code at http://code.google.com/p/nautilussvn.

What is NautilusSvn?
NautilusSvn is a Python extension for Nautilus which integrates a load of Subversion functionality into the GNOME Nautilus file manager, basically as a clone of the TortoiseSVN project on Windows.

What is the project’s current status?
The current “stable” version is v0.11, which provides a set of basic tools, including:

  • Checkout
  • Commit
  • Revert
  • Diff (using Meld or gvimdiff)
  • Log Viewer
  • Revision and SVN User as columns in Nautilus views
  • Emblems to show file status (though buggy)
  • SSL authentication (buggy)
  • Username and password entry dialog
  • Editing Properties

However, the next version, v0.12, is going to be a total rewrite, with some pretty awesome features and functionality.  Here is a list of what to expect for v0.12:

  • Complete rewrite of extension and user interface layer.
  • Improved status checking and emblem support. Manual status refresh no longer required.
  • An entirely new context menu in Nautilus including submenus.
  • New UIs: Add, Copy/Branch, Cleanup, Export, Import, Lock, Merge, Relocate, Revert, Rename, Settings, Switch, Unlock, Update-to-Revision.
  • Updated UIs: Checkout, Commit, Popup Dialogs, Log, Notifications, Properties.
  • Many UIs now have context menus.
  • Working packages and installation instructions for major distros (Ubuntu, Fedora)

We’re getting really close to an alpha (“feature-complete but expect breakage”) milestone, with beta and final milestones coming soon afterwards.

Keep your eyes peeled here for more news, updates, and developments on the NautilusSvn project.