blob: d134445f2dca3daf84fa5ca7193e887af95185f5 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css"> /* <![CDATA[ */
@import "branding/css/tigris.css";
@import "branding/css/inst.css";
/* ]]> */</style>
<link rel="stylesheet" type="text/css" media="print"
href="branding/css/print.css"/>
<script type="text/javascript" src="branding/scripts/tigris.js"></script>
<title>What Needs Doing?</title>
</head>
<body>
<div class="app">
<h1 style="text-align: center;">What Needs Doing?</h1>
<p>There are a lot of different things you can do to help Subversion.
Not all involve coding; there are plenty of non-programming roles for
eager volunteers.</p>
<p>Below are some of the needs we've identified, but please don't take
these as gospel! New volunteers bring fresh viewpoints, and one of
the most important things you can do is point out a need we hadn't
recognized before&nbsp;&mdash;&nbsp;and then fill it.</p>
<!-- ************************************************************* -->
<div class="h2" id="summer-of-code" title="summer-of-code">
<h2>Google Summer of Code Tasks</h2>
<p>These are the ideas that the Subversion developers have for <a
href="http://code.google.com/soc/">Google Summer of Code</a>
applicants. These are just some ideas&nbsp;&mdash;&nbsp;if you have
other ideas, we're happy to consider them too, please just post them
to <a
href="mailto:dev@subversion.tigris.org">dev@subversion.tigris.org</a>.</p>
<p>However, please don't select tasks in the other sections of this
page as your Summer of Code proposal, as those are either not the
right size for the Summer of Code, or are not coding tasks and
therefore not eligible.</p>
<p>You should also read the <a href="hacking.html">Hacker's Guide to
Subversion</a> before starting out on a proposal. Don't hesitate to
ask for details or start discussing one of these tasks on the <a
href="mailto:dev@subversion.tigris.org">dev@subversion.tigris.org</a>
mailing list (see <a
href="http://subversion.tigris.org/servlets/ProjectMailingListList"
>here</a> for subscription information).</p>
<p>In fact, please discuss your task on the mailing list regardless of
whether you've submitted your application yet. Eagerness to engage
with the rest of the Subversion development community will be
considered favourable in evaluating your application.</p>
<p>If you have questions about the application process, compensation,
or the Google Summer of Code program in general, please see the
program <a
href="http://code.google.com/opensource/gsoc/2008/faqs.html">FAQ</a>
</p>
<!-- ************************************************************* -->
<div class="h3" id="externals-commit" title="externals-commit">
<h3>Make commit descend into svn:externals directories.</h3>
<p>See <a
href="http://subversion.tigris.org/issues/show_bug.cgi?id=1167"
>issue&nbsp;#1167</a>.</p>
<p>See also <a
href="http://subversion.tigris.org/issues/show_bug.cgi?id=2325" >issue
2325</a> (svn cleanup should follow svn:external references).</p>
</div> <!-- externals-commit -->
<!-- ************************************************************* -->
<div class="h3" id="progress-output" title="progress-output">
<h3>Show progress output.</h3>
<p>Improve the progress output displayed during update and commit.</p>
<p>See <a href="http://subversion.tigris.org/issues/show_bug.cgi?id=1264"
>Issue&nbsp;#1264</a> and <a
href="http://subversion.tigris.org/issues/show_bug.cgi?id=901"
>issue&nbsp;#901</a>.</p>
</div> <!-- progress-output -->
<!-- ************************************************************* -->
<div class="h3" id="customizable-diff" title="customizable-diff">
<h3>More customizable behavior for diff.</h3>
<p>Fully customizable external diff invocations, and support for
external diff commands for non-text types.</p>
<p>See <a href="http://subversion.tigris.org/issues/show_bug.cgi?id=2044"
>Issue&nbsp;#2044</a> and <a
href="http://subversion.tigris.org/issues/show_bug.cgi?id=2447"
>issue&nbsp;#2447</a>.</p>
</div> <!-- customizable-diff -->
<!-- ************************************************************* -->
<div class="h3" id="authz-improvements" title="authz-improvements">
<h3>Authz improvements</h3>
<p>Note: Summer of Code may require two or more depending on
complexity.</p>
<ul>
<li><p><a href="http://subversion.tigris.org/issues/show_bug.cgi?id=2445"
>2445</a>: Allow users to change passwords.</p></li>
<li><p><a href="http://subversion.tigris.org/issues/show_bug.cgi?id=2958"
>2958</a>/<a
href="http://subversion.tigris.org/issues/show_bug.cgi?id=2662"
>2662</a>: Authz path wildcards; these are probably duplicate
issues, and the latter one has a patch already, though it may be
out-of-date now.</p></li>
<li><p><a href="http://subversion.tigris.org/issues/show_bug.cgi?id=2338"
>2338</a> mod_authz_svn should be able to use httpd's groups
config.</p></li>
<li><p><a href="http://subversion.tigris.org/issues/show_bug.cgi?id=2143"
>2143</a> Additional authz action controls (e.g., add/remove
files).</p></li>
</ul>
</div> <!-- authz-improvements -->
<!-- ************************************************************* -->
<div class="h3" id="interactive-merge-source-selection"
title="interactive-merge-source-selection">
<h3>Interactive merge source selection</h3>
<p>See <a href="http://subversion.tigris.org/issues/show_bug.cgi?id=3065"
>issue&nbsp;#3065</a>.</p>
</div> <!-- interactive-merge-source-selection -->
<!-- ************************************************************* -->
<div class="h3" id="tree-conflicts-ui"
title="tree-conflicts-ui">
<h3>Tree Conflicts: User interface improvements for command-line client</h3>
<p>Interactive conflict resolution in the command line client
should be taught about tree conflicts.</p>
<p>See <a href="http://subversion.tigris.org/issues/show_bug.cgi?id=3144"
>issue&nbsp;#3144</a>.</p>
<p>Subclipse has taken an interesting use-case-based approach to this,
see <a href="http://docs.google.com/Doc?id=dd885dbs_30c8x6bvcn"
>this page</a>. The Subversion command-line client could be extended
to provide similar mechanisms when doing interactive conflict resolution
during update and merge, and during 'svn resolve'. Ideas for approaches
other than the one taken by Subclipse are also welcome and can be
discussed.</p>
<p>For a bit of background on tree conflicts, see the section
<a href="http://svnbook.red-bean.com/nightly/en/svn.tour.treeconflicts.html"
>Dealing with Structural Conflicts</a> in the svnbook.</p>
<p>For additional ideas about tree conflict resolution, see
<a href="http://svn.collab.net/repos/svn/trunk/notes/tree-conflicts/resolution.txt"
>notes/tree-conflicts/resolution.txt</a> in the Subversion source tree
(note that this text may be partly out of date, consult Julian
for updates).</p>
</div> <!-- tree-conflicts-ui -->
<!-- These are some other ones I considered for SoC 2008, but decided
(for now) to leave off the list. Feel free to publish them if
you think they're appropriate.
1233 mime-type guessing improved for Unix systems
2286 shared storage for identical files
2194 Support Unicode encodings other than UTF8 as plain text
783 Construct a notification system for properties [iffy...]
-->
<!-- ************************************************************* -->
<div class="h3" id="svn-commit" title="svn-commit">
<h3>Allow Commit from multiple working copies</h3>
<p>Currently, 'svn commit' cannot commit changes that are located in
two or more disconnected working copies (lacking a common parent),
even if those working copies belong to the same repository. This is
a fairly common need for users that work on multiple projects that
are all stored in the same repository and need to commit the changes
for multiple projects in a single atomic commit transaction.</p>
<p>There are several issues in the issue tracker that describe the
problem in more detail (see <a
href="http://subversion.tigris.org/issues/show_bug.cgi?id=2381">issue
#2381</a>).</p>
</div>
<!-- ************************************************************* -->
<div class="h3" id="authz-model-overhaul" title="authz-model-overhaul">
<h3>Authorization model overhaul</h3>
<p>Subversion's authorization model mostly does the job it was
designed to do, but is in some ways overprotective to the point of
unnecessary loss of functionality.
<a href="http://subversion.tigris.org/issues/show_bug.cgi?id=3380"
>Issue #3380</a> tracks the overhaul of the model.</p>
</div>
<!-- ************************************************************* -->
<div class="h3" id="viewspecs" title="viewspecs">
<h3>Viewspecs</h3>
<p>Subversion currently supports some mechanisms for selectively
building and populating a working copy, including sparse directory
support and externals definitions. What Subversion lacks is a handy
way to be told &mdash; in one easy step &mdash; to go off and make use
of those underlying features to build a working copy that looks some
specific way. Imagine being able to tell new developers on your
project to checkout a working copy using some pre-formulated
specification which results in an automated sparse checkout that
includes your <tt>trunk</tt>, <tt>branches</tt>, and then various
branches for the currently maintained versions of your software
(<tt>branches/<em>SOME-VERSION</em></tt>), instead of having to tell
them to first do a <tt>--depth=empty</tt> checkout of the root, then
a <tt>--set-depth=infinity</tt> update of <tt>trunk</tt>
and <tt>branches</tt>, then &hellip;.</p>
</div>
<!-- ************************************************************* -->
<div class="h3" id="successor-links" title="successor-links">
<h3>Successor links in the versioned filesystem</h3>
<p>Subversion's filesystem backends (BDB and FSFS) currently store in
the nodes of the DAG representation of the versioned filesystem
predecessor references, so for any given node (identified by path and
revision number), you can ask the question, "Which node represents the
previous version of this file or directory?" What you cannot ask
today is, "Which node(s) represent the <em>next</em> version(s) of
this file or directory?" (There can be multiple answers because a
given node can be succeeded both by making typical versioned changes
to that file/directory and by copying it elsewhere (via <tt>svn
copy</tt>, e.g.).) Making the predecessor/successor linkage
bi-directional could be crucial to allowing users to answer questions
like, "Now that I've fixed this bug that was introduced
into <em>SOME-FILE</em> at revision <em>REV</em>, to what other
branches was this version of the file copied (so I can fix the bug in
those places, too)?"</p>
<p>Some work for the Berkeley DB backend was done long ago, and lives
today in
the <a href="http://svn.collab.net/viewvc/svn/branches/fs-successor-ids/"
>fs-successor-ids</a> branch.</p>
</div>
<!-- ************************************************************* -->
<div class="h3" id="ctypes-python" title="ctypes-python">
<h3>Integrate the ctypes python bindings into Trac</h3>
<p>Subversion has great new Python bindings, written using ctypes,
but they are not yet used by any major projects. This summer of code
project involves integrating the ctypes python bindings into
<a href="http://trac.edgewall.org/">Trac</a>.</p>
<p>This project will consist of the following tasks:</p>
<ul>
<li>Build redistributable packages for the ctypes bindings that work on
Windows, Linux, and Mac with Subversion 1.4 or later</li>
<li>Teach the <a href="http://svn.edgewall.org/repos/trac/trunk/trac/versioncontrol/">Trac
versioncontrol library</a> to optionally use the ctypes Python bindings</li>
<li>Test the updated versioncontrol library under high load with Apache and mod_python.
Fix any bugs you find.</li>
<li>Convince the <a href="http://trac.edgewall.org/wiki/TracDev">Trac developer community</a>
to integrate your changes into trunk</li>
</ul>
<p>Students accepted for this task will be granted a branch in the Subversion repository
for development of related changes, and will be expected to commit at least one change
or status update per week until the project is complete.</p>
<p>For questions about this project (or feedback on planned proposals), please email
<a href="mailto:dev@subversion.tigris.org">dev@subversion.tigris.org</a> and CC
<a href="mailto:james@cs.toronto.edu">David James</a>, who has volunteered to
mentor ctypes python bindings projects.</p>
</div>
</div>
<!-- ============================================================= -->
<div class="h2" id="information-management" title="information-management">
<h2>Information Management Tasks</h2>
<p>These are non-coding tasks, so they are <b>NOT</b> eligible for
<a href="http://code.google.com/summerofcode.html">Google Summer of Code</a>.
If you have come here from the Summer of Code pages, skip this section of the
page.</p>
<div class="h3" id="issue-management" title="issue-management">
<h3>Issue Management</h3>
<p>Do we need an Issue Manager? Maybe...</p>
<p>The Subversion <a
href="http://subversion.tigris.org/issue-tracker.html">bug
database</a> has been managed in a rather ad hoc fashion thus far.
Periodically we make sweeps over all outstanding issues and try to
prioritize them, organize them into scheduled milestones, note
dependencies between issues, etc. These methods have been moderately
successful up till now, but they are not scaling well as the number of
issues grows. Since issue growth is proportional to user base growth,
the issue tracker is becoming a victim of Subversion's success. We
need to find new ways of managing our issues, ways that do not involve
making O(N) sweeps over the entire list of open issues at regular
intervals.</p>
<p>While we have some semi-formalized management roles (patch manager,
release manager, etc), we have never had an issue manager. It might
be time to get one, though. It's not yet clear whether the problem is
mainly one of attention, or of algorithm, or both, but having someone
dedicated to managing the issues database couldn't hurt. One thing
such a person could do would be to go through the list of outstanding
issues, figure out which ones are likely to be <a
href="#bite-sized">bite-sized tasks</a>, and mark them as such, so
that other volunteers have an easier time choosing things to work on.
We've already marked various issues as bite-sized, but we haven't done
so consistently as new issues come in. This means there are a lot of
potential entry points to the project going unnoticed. Want to help
us solve that?</p>
<p>Creative ideas welcome! If you'd like to help with this, please <a
href="http://subversion.tigris.org/servlets/ProjectMailingListList"
>subscribe</a> to the <a
href="mailto:dev@subversion.tigris.org">dev@subversion.tigris.org</a>
mailing list and post your thoughts.</p>
</div>
<div class="h3" id="faq-management" title="faq-management">
<h3>FAQ Management</h3>
<p>We need a FAQ manager. A FAQ manager is someone who stays
subscribed to the <a
href="mailto:users@subversion.tigris.org">users@subversion.tigris.org</a>
and <a href="mailto:dev@subversion.tigris.org"
>dev@subversion.tigris.org</a> mailing lists, watches for common
questions or addenda to existing questions, and slowly adjusts the
Subversion <a href="faq.html">FAQ</a> in response to the problems
users are having "in the wild". This is also a great way to get
familiar with Subversion usage patterns and common problems. If you
use or administrate Subversion anyway, helping to manage the FAQ is a
great way to expand your troubleshooting skills.</p>
<p>Again, creative ideas are most welcome. Please post to the <a
href="mailto:dev@subversion.tigris.org">dev@subversion.tigris.org</a>
mailing list if you're interested in this.</p>
</div>
</div>
<!-- ============================================================= -->
<div class="h2" id="bite-sized" title="bite-sized">
<h2>Bite-Sized Coding Tasks</h2>
<p>The Subversion bug database contains many issues classified as
"bite-sized" tasks&nbsp;&mdash;&nbsp;tasks that are well-defined and
self-contained, and thus suitable for a volunteer looking to get
involved with the project. You <i>don't</i> need broad or detailed
knowledge of Subversion's design to take on one of these, just a
pretty good idea of how things generally work, and familiarity with
the coding guidelines in the
<a href="hacking.html">Hacker's Guide to Subversion</a>. Many tasks
are things a volunteer could pick off in a spare week or two, and
they're a great way to start learning your way around the Subversion
code.</p>
<p> If you start one of these tasks, please notify the other
developers by marking the issue as "STARTED" in the issue tracker,
then mail <a
href="mailto:dev@subversion.tigris.org">dev@subversion.tigris.org</a>
(<a
href="http://subversion.tigris.org/servlets/ProjectMailingListList"
>subscribe</a> to that list too) with questions. Don't be shy, it's a
very civil mailing list.</p>
<p>When you're ready to send in a patch, see the <a
href="http://subversion.tigris.org/hacking.html#patches"
>patch posting guidelines</a>. Don't be discouraged if your patch
goes through several iterations of review by other developers; this is
normal.</p>
<p>Here is the <a
href="http://subversion.tigris.org/issues/buglist.cgi?component=subversion&amp;issue_status=UNCONFIRMED&amp;issue_status=NEW&amp;issue_status=STARTED&amp;issue_status=REOPENED&amp;keywords=bite-sized&amp;cmdtype=doit"
>list of all bite-sized tasks</a>.</p>
</div>
<!-- ============================================================= -->
<div class="h2" id="larger-tasks" title="larger-tasks">
<h2>Larger (But Not Necessarily Huge) Coding Tasks</h2>
<p>The tasks listed below are bigger than bite-sized, but probably
don't require new research to solve. In other words, most of them are
a <a href="http://www.catb.org/~esr/jargon/html/S/SMOP.html">Simple
Matter Of Programming</a>. You'd need to either be, or be willing to
become, familiar with Subversion's internals to solve one of
these.</p>
<p>As with the <a href="#bite-sized">bite-sized tasks</a>, please read
the
<a href="hacking.html">Hacker's Guide to Subversion</a> and don't
hesitate to ask questions on the
<a href="mailto:users@subversion.tigris.org">users@subversion.tigris.org</a>
and
<a href="mailto:dev@subversion.tigris.org">dev@subversion.tigris.org</a>
mailing lists (see <a
href="http://subversion.tigris.org/servlets/ProjectMailingListList"
>here</a> for subscription information). Before posting any patches,
see the <a
href="http://subversion.tigris.org/hacking.html#patches"
>patch posting guidelines</a>.</p>
<p>For <a href="project_status.html#upcoming">groups of tasks tied to
specific releases</a>, peruse the <a href="project_status.html">status
page</a>. For a longer-term view of Subversion's vision, see the <a
href="roadmap.html">road map</a>.</p>
<div class="h3" id="error-messages" title="error-messages">
<h3><a href="http://subversion.tigris.org/issues/show_bug.cgi?id=1254"
>issue&nbsp;#1254</a>, etc: Improve error messages</h3>
<p>Too many of Subversion's error messages are terse or confusing.
Many instances are recorded in
<a href="http://subversion.tigris.org/issues/show_bug.cgi?id=1254"
>issue&nbsp;#1254</a>, but see also issues
<a href="http://subversion.tigris.org/issues/show_bug.cgi?id=2302"
>#2302</a>,
<a href="http://subversion.tigris.org/issues/show_bug.cgi?id=2295"
>#2295</a>, and
<a href="http://subversion.tigris.org/issues/show_bug.cgi?id=2275"
>#2275</a>.</p>
</div>
</div>
<!-- ============================================================= -->
<div class="h2" id="bindings" title="bindings">
<h2>Improved Bindings to Other Languages</h2>
<p>One of Subversion's strengths is that it offers a rich set of
"binding surfaces": well-documented APIs that are available not only
in C (Subversion's native language) but in other programming languages
as well (see the <a
href="links.html#lang_bindings">complete list</a>).</p>
<p>Some of these language bindings are maintained via <a
href="http://www.swig.org/">SWIG</a>, a tool that partially automates
the process of generating bindings, while others are maintained by
hand. Many of the bindings do not have complete coverage yet, or have
interface problems where they do have coverage. So even though
they're used in many production systems, there's still plenty of work
to do. Specifically:</p>
<ul>
<li><p>The <a
href="http://svn.collab.net/repos/svn/trunk/subversion/bindings/swig/python/"
>SWIG/Python bindings</a> are in pretty good shape, but their coverage
is not yet complete. Help is welcome.</p></li>
<li><p>Our <a
href="http://svn.collab.net/repos/svn/trunk/subversion/bindings/java/javahl/"
>Java</a>, <a
href="http://svn.collab.net/repos/svn/trunk/subversion/bindings/swig/perl/"
>SWIG/Perl</a>, and <a
href="http://svn.collab.net/repos/svn/trunk/subversion/bindings/swig/ruby/"
>SWIG/Ruby</a> bindings are in pretty good shape, but maybe there are
other languages you'd like to call Subversion APIs from? Lisp/Scheme?
Feel free to start a new bindings project, if you don't see what you
need here.</p></li>
</ul>
</div>
<!-- ============================================================= -->
<div class="h2" id="all-issues" title="all-issues">
<h2>All Open Issues</h2>
<p>You want to see the complete list of open bugs, in all its glory?
Don't say we didn't <a
href="http://subversion.tigris.org/issues/buglist.cgi?component=subversion&amp;issue_status=UNCONFIRMED&amp;issue_status=NEW&amp;issue_status=STARTED&amp;issue_status=REOPENED&amp;order=issues.target_milestone%2C%20issues.priority%2C%20issues.issue_type">warn you...</a></p>
</div>
</div>
</body>
</html>