<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- 
/*
 * Copyright 2006 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>Source repository</title>
  <author email="commons-dev@jakarta.apache.org">Commons Documentation Team</author>
 </properties>
 <body>
<!-- ================================================== -->
<section name="Source repository">
<p>
  Jakarta Commons Chain is hosted on the Apache
  <a href="http://subversion.tigris.org/">subversion</a> repository.
</p>
<p>
  The project URL is:<br />
  <code>http://svn.apache.org/repos/asf/jakarta/commons/proper/chain/trunk</code>
</p>
<p>
  The best way to view the repository is via the
  <a href="http://svn.apache.org/viewcvs.cgi/jakarta/commons/proper/chain/trunk/">subversion viewer</a>.
</p>
<p>
  The alternative is to use the
  <a href="http://svn.apache.org/repos/asf/jakarta/commons/proper/chain/trunk/">native subversion</a> display.
</p>
<p>
  For more information on subversion and creating patches see the
  <a href="http://www.apache.org/dev/contributors.html">Apache Contributors Guide</a>.
</p>
</section>
<!-- ================================================== -->
</body>
</document>