<?xml version="1.0"?>
<!--
Copyright 2004 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>
  <author email="ddewolf@apache.org">David DeWolf</author>
  <title>Developer Guide: Obtaining the Source Code</title>
</properties>

<body>
  <section name="Developer Guide: Obtaining the Pluto 1.0.1 Source Code">
  <p>
    There are several reasons why you may want to have access to
    the Pluto source code.  Some may want to participate in
    the development of Pluto by submiting patches.  Others may want
    to utilize Pluto as a reference implementation to clarify
    the Portlet Specification.  Whatever the reason, there are two
    ways to access the source code:
  </p>

  <p>
  <ol>
  	<li>
    <a href="#Downloading_the_Source_Distribution">Downloading the
    most recent Source Distribution</a> is the easiest
    way to access the source.  Of course, because this method is
    reliant on releases, you may not have the most recent source.
    That said, you do have a better chance at recieving a more
    stable codebase if you are using a distribution.
  	</li>
  	<li>
    <A href="#Using_Subversion">Using Subversion</A> to checkout the
    absolute up-to-date version of the code is the best way to
    retrieve the source code.  If you plan to submit patches,
    we ask that you use the Subversion Trunk to create your
    diffs.
  	</li>
  </ol>
  </p>
    <subsection name="Downloading the Source Distribution">
		<p>See the <a href="../../mirrors.cgi">download instructions</a></p>
    </subsection>

    <subsection name="Using Subversion">
		<p>The Pluto project uses the
		<a href="http://subversion.tigris.org/">Subversion</a> version control
		system.  If you're new to Subversion, you can check out the
		<a href="http://svnbook.red-bean.com/">online book</a> about Subversion.
		Note that we are currently using Subversion 1.1.x (there are separate
		versions of the book covering 1.0 and 1.1).
		</p>

    	<h2>Web Access to Subversion</h2>
		<p>
		If you just want to browse the Pluto 1.0.1 source code, you can use the
		<a
		href="http://svn.apache.org/viewcvs.cgi/portals/pluto/tags/release-1.0.1?root=Apache-SVN">ViewCVS
		web interface</a> to Subversion.  This is current at all times.
		</p>

		<h2>Normal Subversion Access</h2>
		<p>Anyone can check code out of Subversion anonymously.  However, you need to specify a
		username and password in order to update the Subversion repository, and only
		Pluto committers have the permissions to do that.  We run Subversion
		over standard HTTPS, so hopefully you won't have problems with intervening
		firewalls.</p>

		<h3>Check out from Subversion</h3>
		
		<p>Again, anyone can do this.  To check out Pluto 1.0.1 (general release) to a directory 
		called 'pluto' use this command:
		</p>

		<pre>svn checkout https://svn.apache.org/repos/asf/portals/pluto/tags/release-1.0.1/ pluto</pre>

		<p>To check out Pluto 1.0.1 (bug fix version) use this command:
		</p>

		<pre>svn checkout https://svn.apache.org/repos/asf/portals/pluto/branches/pluto-1.0.2/ pluto</pre>

		<p>This code base will become Pluto 1.0.2 if we feel necessary to release a new version.
		</p>

  
    </subsection>

  </section>
</body>
</document>
