<?xml version="1.0"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You 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="dev@commons.apache.org">Commons Documentation Team</author>
 </properties>
<body>
<!-- ================================================== -->
<section name="Issue Tracking">
<p>
  Commons FileUpload uses <a href="http://issues.apache.org/jira/browse/FILEUPLOAD">ASF JIRA</a> for tracking issues.
</p>
<p>
  To use JIRA you may need to <a href="http://issues.apache.org/jira/secure/Signup!default.jspa">create an account</a>
  (if you have previously created/updated Commons issues using Bugzilla an account will have been automatically
  created and you can use the <a href="http://issues.apache.org/jira/secure/ForgotPassword!default.jspa">Forgot Password</a>
  page to get a new password).
</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/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310476&amp;sorter/field=issuekey&amp;sorter/order=DESC&amp;status=1&amp;status=4">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/commons-dev/">Search the mailing list archive</a>.
  You may find your issue or idea has already been discussed.</li>
  <li>Decide if your issue is a bug or an enhancement.</li>
  <li>Submit either a <a href="http://issues.apache.org/jira/secure/CreateIssueDetails!init.jspa?pid=12310476&amp;issuetype=1&amp;priority=4&amp;assignee=-1">bug report</a>
  or <a href="http://issues.apache.org/jira/secure/CreateIssueDetails!init.jspa?pid=12310476&amp;issuetype=4&amp;priority=4&amp;assignee=-1">enhancement request</a>.</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/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310476&amp;sorter/field=issuekey&amp;sorter/order=DESC&amp;status=1&amp;status=4">All Open FileUpload bugs</a></li>
  <li><a href="http://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310476&amp;sorter/field=issuekey&amp;sorter/order=DESC&amp;status=5&amp;status=6">All Resolved FileUpload bugs</a></li>
  <li><a href="http://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310476&amp;sorter/field=issuekey&amp;sorter/order=DESC">All FileUpload bugs</a></li>
  </ul>
</p>
</section>
<!-- ================================================== -->
</body>
</document>
