Name: David James
Email: james@cs.toronto.edu

Project Title: Ruby bindings for the Subversion client library

----------------------------------------------------------------------
Synopsis
----------------------------------------------------------------------

With the recent release of Ruby bindings for Subversion, it has become
possible to access and modify Subversion repositories using the Ruby
programming language. While these bindings are quite useful for
Ruby developers, they still need work: the client library is still
only 48% implemented (14 out of 29 API functions).

My goal this summer is to finish the Ruby bindings for the client
library by implementing more API functions. Specifically, I will 
upgrade the Ruby binding API to support 15 new functions: blame, 
cleanup, export, import, ls, merge, propget, proplist, relocate, 
resolved, revprop_get, revprop_list, status, switch, and 
url_from_path. I will implement this project using C, SWIG, and Ruby.

----------------------------------------------------------------------
Benefits
----------------------------------------------------------------------

Benefits for Ruby Developers:
- High-performance access to Subversion client library using Ruby
- Proven reliability, thanks to the automated test suite
- Easy learning curve, thanks to HTML documentation to be posted on
  the Subversion web site

Benefits for Subversion Developers:
- Increased adoption of Subversion in the Ruby community
- Upgraded Ruby bindings will be easy to maintain because they build
  upon the framework established in the existing SWIG bindings (e.g.
  Ruby, Perl, Python)

----------------------------------------------------------------------
Deliverables
----------------------------------------------------------------------

Code: 
- 15 new Ruby API functions for the Ruby Client Library: 
  * blame, cleanup, export, import, ls, merge, propget, proplist, 
    relocate, resolved, revprop_get, revprop_list, status, switch, 
    url_from_path

- 4 new Ruby API classes and associated C/SWIG constructors:
  * svn_client_blame_receiver_t, svn_error_t (aka Svn::Error), 
    svn_wc_status_t, svn_client_proplist_item_t

- 8 new Ruby API constants:
  * Svn::Core::INVALID_REVNUM, Svn::Error::CLIENT_BAD_REVISION,
    Svn::Error::ENTRY_NOT_FOUND, Svn::Error::FS_NOT_FOUND, 
    Svn::Wc::Notify::Action::commit_added, 
    Svn::Wc::Notify::Action::commit_postfix_txdelta, 
    Svn::Wc::Notify::Action::status_completed,
    Svn::Wc::Notify::Action::status_external

Testing: 
- 45 new test cases. At least 3 test cases for each of the 15 new Ruby
  API functions.

Documentation:
- All public Ruby API functions and classes will be fully documented using 
  comments in the source code.
- This documentation will also be made available in HTML format so 
  that Ruby developers can learn how to use the bindings by looking at
  the Subversion web site.

----------------------------------------------------------------------
Project Schedule
----------------------------------------------------------------------

This ten-week plan assumes that I will start work on this project
on June 25. The project will be complete by August 31, 2005.

1. Planning and Approval (1 week)
- Send the technical details of my plan to Subversion developers
  and solicit feedback
- Revise my plan as necessary to meet the needs of the Subversion
  developers
- Request status as a partial committer for the Ruby bindings

2. Implementation, Documentation & Testing (5 weeks)
- Implement, test, and document 3 API functions every week
- Monitor Subversion developer list and fix issues as required

3. Quality Assurance (3 weeks)
- Review and fix reported bugs as necessary

4. Project completion (4 days)
- Collect documentation as an HTML file and post to the Subversion web
  site

----------------------------------------------------------------------
Biography
----------------------------------------------------------------------

David James is an undergraduate Computer Science student at the
University of Toronto. In Fall 2004, David helped write Subversion 
bindings for a Java-based academic groupware system. Since then, David 
has been a regular contributor to the Subversion project, submitting 
12 patches which were reviewed and accepted by Subversion developers.
David's contributions have made the Java and Ruby bindings easier to
compile, test, and install. Recently, David added Ruby support to the
automated nightly test-suite, so that Subversion developers can be
notified by email whenever a Ruby test fails. 

At the University of Toronto, David has researched improved statistical
models for understanding natural language, earning three research
awards and a teaching assistantship in the process.

For more information on David James, please see my resume:
  http://www.cs.toronto.edu/~james/David_James_Resume_2005.html

----------------------------------------------------------------------
Appendix A: Technical Details
----------------------------------------------------------------------

Extensive documentation on the proposed new functions (and their
dependencies) is available at: 
  http://www.cs.toronto.edu/~james/svn/ruby_docs.html  

The latest version of this proposal can be found at: 
  http://www.cs.toronto.edu/~james/svn/summer_of_code_proposal.html