<?xml version="1.0"?>
<!--
Copyright 2005 The Apache Software Foundation.
 
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<document>
 <properties>
  <title>Issue Tracking</title>
  <author email="commons-dev@jakarta.apache.org">Commons Documentation Team</author>
 </properties>
<body>
<!-- ================================================== -->
<section name="Issue Tracking">
<p>
  Commons FileUpload uses <a href="http://issues.apache.org/bugzilla/">ASF Bugzilla</a> for tracking issues.
  To use Bugzilla you may need to <a href="http://issues.apache.org/bugzilla/createaccount.cgi">create an account</a>.
</p>
<p>
  If you would like to report a bug, or raise an enhancement request against
  Commons FileUpload please do the following:
  <ol>
  <li><a href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_status=NEEDINFO&amp;product=Commons&amp;component=File+Upload">Search existing open bugs</a>.
  If you find your issue listed then please add a comment with your details.</li>
  <li><a href="http://mail-archives.apache.org/mod_mbox/jakarta-commons-dev/">Search the mailing list archive</a>.
  You may find your issue or idea has already been discussed.</li>
  <li><a href="http://issues.apache.org/bugzilla/enter_bug.cgi?product=Commons&amp;component=File+Upload&amp;version=unspecified&amp;short_desc=%5Bfileupload%5D%20%22Your%20subject%20heading%20here%22&amp;comment=Please%20provide%20details%20here.%20Its%20best%20to%20submit%20patches%20that%20alter%0D%0Aexisting%20file%20content%20in%20%22unified%20diff%22%20format.%20%0D%0A%0D%0ASubmissions%20that%20provide%20new%20files%20can%20be%20supplied%20as%20direct%20file%0D%0Aattachments%20or%20archives%20in%20zip%20or%20tar.gz%20format.%20please%20be%20kind%20%0D%0Aenough%20to%20identify%20the%20format%20of%20the%20attached%20archive%20as%20bugzilla%0D%0Atends%20to%20strip%20these%20characterstics%20by%20removing%20the%20files%20extension.">Submit a bug report or enhancement request</a>.
  Please prefix all new issues with <em>[fileupload]</em> in the summary line.
  </li>
  </ol>
</p>
<p>
  Please also remember these points:
  <ul>
  <li>The more information you provide, the better we can help you.</li>
  <li>Test cases are vital, particularly for any proposed enhancements.</li>
  <li>The developers of Commons FileUpload are all unpaid volunteers.</li>
  </ul>
</p>
<p>
  You may also find these links useful:
  <ul>
  <li><a href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_status=NEEDINFO&amp;product=Commons&amp;component=File+Upload">All Open FileUpload bugs</a></li>
  <li><a href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=RESOLVED&amp;bug_status=VERIFIED&amp;bug_status=CLOSED&amp;product=Commons&amp;component=File+Upload">All Closed FileUpload bugs</a></li>
  <li><a href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_status=NEEDINFO&amp;bug_status=RESOLVED&amp;bug_status=VERIFIED&amp;bug_status=CLOSED&amp;product=Commons&amp;component=File+Upload">All FileUpload bugs</a></li>
  </ul>
</p>
</section>
<!-- ================================================== -->
</body>
</document>
