                                                       -*- text -*-

                        REPORTING BUGS
                        ==============

This document tells how and where to report bugs.  It is not a list of
all outstanding bugs -- we use an online issue tracker for that, see

   http://subversion.tigris.org/project_issues.html
   http://subversion.tigris.org/project_tasks.html

(the latter links to a fairly user-friendly list of all open bugs).

If you're about to report a bug, please take a look at the guidelines
in the section "How To Report A Bug" below.

Where To Report A Bug:
======================

   * If the bug is in Subversion itself, send mail to
     users@subversion.tigris.org.  Once it's confirmed as a bug,
     someone, possibly you, can enter it into the issue tracker at
     http://subversion.tigris.org/servlets/ProjectIssues

   * If the bug is in the APR library, please report it to both of
     these mailing lists: dev@apr.apache.org, dev@subversion.tigris.org

   * If the bug is in the Neon HTTP library, please report it to:
     neon@webdav.org, dev@subversion.tigris.org

   * If the bug is in Apache httpd 2.0, please report it to both of
     these mailing lists: dev@httpd.apache.org, dev@subversion.tigris.org
     The Apache httpd developer mailing list is high-traffic, so your
     bug report post has the possibility to be overlooked.  You may also 
     file a bug report at:
     http://httpd.apache.org/bug_report.html

   * If the bug is in your rug, please give it a hug and keep it snug.

How To Report A Bug:
====================

First, make sure it's a bug.  If Subversion does not behave the way
you expect, look in the documentation and mailing list archives for
evidence that it should behave the way you expect.  Of course, if it's
a common-sense thing, like Subversion just destroyed your data and
caused smoke to pour out of your monitor, then you can trust your
judgement.  But if you're not sure, go ahead and ask on the users
mailing list first, users@subversion.tigris.org.

Once you've established that it's a bug, the most important thing you
can do is come up with a simple description and reproduction recipe.
For example, if the bug, as you initially found it, involves five
files over ten commits, try to make it happen with just one file and
one commit.  The simpler the reproduction recipe, the more likely a
developer is to successfully reproduce the bug and fix it.

When you write up the reproduction recipe, don't just write a prose
description of what you did to make the bug happen.  Instead, give a
literal transcript of the exact series of commands you ran, and their
output.  If there are files involved, be sure to include the names of
the files, and even their content if you think it might be relevant.
The very best thing is to package your reproduction recipe as a
script, that helps us a lot.

  [Quick sanity check: you *are* running the most recent version of
  Subversion, right? :-) Possibly the bug has already been fixed; you
  should test your reproduction recipe against the most recent
  Subversion development tree.  Also, make sure your APR tree is
  up-to-date.]

In addition to the reproduction recipe, we'll also need a complete
description of the environment in which you reproduced the bug.
That means:

   - Your operating system
   - The release and/or revision of Subversion
   - The compiler and configuration options you built Subversion with
   - Any private modifications you made to your Subversion
   - The version of Berkeley DB you're running Subversion with
   - Anything else that could possibly be relevant.  Err on the side
     of too much information, rather than too little.

Once you have all this, you're ready to write the report.  Start out
with a clear description of what the bug is.  That is, say how you
expected Subversion to behave, and contrast that with how it actually
behaved.  While the bug may seem obvious to you, it may not be so
obvious to someone else, so it's best to avoid a guessing game.

Follow that with the environment description, and the reproduction
recipe.  If you also want to include speculation as to the cause, and
even a patch to fix the bug, that's great!  See the HACKING file for
more information about writing patches.
