<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
   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.
-->
<html>
<head>
    <title>Apache Axis2/C - Developing Apache Axis2/C</title>
</head>
<body>
    <h2>
        Developing Apache Axis2/C</h2>
    <p>
        This document provides information on how to use SVN to get an SVN checkout/update
        and make commits to the source repository.</p>
    <div class="subsection">
        <a name="Contents"></a>
        <h3>
            Contents</h3>
        <ul>
            <li><a href="#svn">Working with Subversion (SVN)</a></li>
            <li><a href="#checkout">Checking-out Axis2 from Subversion</a></li>
        </ul>
        <p>
            <a name="svn"></a>
        </p>
    </div>
    <div class="subsection">
        <a name="Working_with_Subversion__SVN_"></a>
        <h3>
            Working with Subversion (SVN)</h3>
        <p>
            The Apache Axis2/C development team uses Subversion (SVN) for source control. Subversion
            is a compelling replacement for CVS, developed under the auspices of the Tigris
            community and is licensed under an Apache compatible license. To learn more about
            Subversion or to download the latest distribution, visit the <a href="http:///subversion.tigris.org"
                class="newWindow" title="New Window" target="_blank">Subversion project site</a>.
            If you are looking for guidelines on setting up/installing Subversion, please read
            the ASF <a href="http://www.apache.org/dev/version-control.html" class="newWindow"
                title="New Window" target="_blank">Source Code Repositories page</a>.</p>
        <p>
            <a name="checkout"></a>
        </p>
    </div>
    <div class="subsection">
        <a name="Checking-out_Apache_Axis2_C_from_Subversion"></a>
        <h3>
            Checking-out Apache Axis2/C from Subversion</h3>
        <p>
            When checking out the latest version of Apache Axis2/C from the Apache Foundation's
            Subversion repository, you must use one of the following URLs, depending on your
            level of access to the Apache Axis2/C source code:</p>
        <ul>
            <li><b>If you are not a committer:</b><a href="http://svn.apache.org/repos/asf/webservices/axis2/trunk/c"
                class="newWindow" title="New Window" target="_blank">http://svn.apache.org/repos/asf/webservices/axis2/trunk/c</a></li>
            <li><b>If you are a committer:</b> <a href="https://svn.apache.org/repos/asf/webservices/axis2/trunk/c"
                class="newWindow" title="New Window" target="_blank">https://svn.apache.org/repos/asf/webservices/axis2/trunk/c</a></li>
        </ul>
        <p>
            If you are a committer, make sure that you have set your svnpasswd. To do this you
            must log into svn.apache.org. For more information, please read the ASF <a href="http://www.apache.org/dev/version-control.html"
                class="newWindow" title="New Window" target="_blank">Source Code Repositories page</a>.
        </p>
        <p>
            Once you have successfully installed Subversion, you can checkout the Axis2/C trunk
            by running the following command:</p>
        <p>
            <strong>svn co &lt;repository URL&gt; &lt;folder name&gt;</strong></p>
        <p>
            where 'repository URL' is one of the URLs from the previous list and 'folder name'
            is the name of the folder into which the source code is to be checked out.</p>
        <p>
            To update your working copy to the latest version from the repository, execute:</p>
        <p>
            <strong>svn update</strong></p>
        <br/>
        <p>
            If you would like to submit a patch, execute:</p>
        <p>
            <strong>svn diff</strong></p>
        <p>
            The above command will create a unified diff that can be attached to the Apache
            Axis2/C JIRA issue tracker.</p>
            <br />
        
            <h3>View Source Code</h3>
            <p>
            you can view the source code via the following link
            <ul>
            
            <li><a href="http://svn.apache.org/viewvc/axis/axis2/c/core/trunk/">http://svn.apache.org/viewvc/axis/axis2/c/core/trunk/</a></li>
            </ul>
            </p>
        <br/>
    </div>
</body></html>
