<?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 Code</title>
		<author email="sebawagner@apache.org">
			Sebastian Wagner
		</author>
	</properties>

	<body>

		<section name="OpenMeetings Source Code">

			<p>
				OpenMeetings uses
				<a class="external" rel="nofollow" href="http://subversion.tigris.org">
					Subversion
				</a>
				to manage its source code.
				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>
			<p>
				To receive notice of commits to the repository subscribe to
				<a href="mailto:openmeetings-commits@incubator.apache.org">
					openmeetings-commits@incubator.apache.org
				</a>
				by sending email to
				<a href="mailto:openmeetings-commits-subscribe@incubator.apache.org">
					openmeetings-commits-subscribe@incubator.apache.org
				</a>
				.
			</p>

		</section>

		<section name="Web Access to Subversion">

			<p>
				If you just want to browse the source code, you can use the
				<a class="external" rel="nofollow"
					href="http://svn.apache.org/viewcvs/incubator/openmeetings">
					ViewCVS web interface
				</a>
				to Subversion. This is current at all times.
			</p>

		</section>

		<section name="Checking Out Code Using Subversion">

			<p>Anyone can check code out of Subversion. You only need to specify
				a
				username and password to update the Subversion repository, and only
				OpenMeetings committers can do that.
				If you are a committer, are working from behind a firewall, or are
				connected to the internet through a proxy server, please see the
				sections
				below for more information.
			</p>

			<subsection name="Anonymous check out from Subversion">
				<p>Use a command like:</p>
				<pre>% svn checkout
					http://svn.apache.org/repos/asf/incubator/openmeetings </pre>
				<p>Once you have OpenMeetings checked out you can update the source
					by executing the following command from within the openmeetings
					directory.
				</p>
				<pre>
					% svn update
				</pre>
			</subsection>
			<subsection name="Access from behind a firewall">

				<p>For those users who are stuck behind a corporate firewall which
					is
					blocking http access to the Subversion repository, you can try to access it
					via HTTPS:
				</p>
				<pre>
					% svn checkout
					https://svn.apache.org/repos/asf/incubator/openmeetings
				</pre>

			</subsection>
			<subsection name="Access through a proxy">

				<p>The Subversion client can go through a proxy, if you configure it
					to do so. First, edit your "servers" configuration file to indicate
					which
					proxy to use. The files location depends on your operating system.
					On Linux or Unix it is located in the directory "~/.subversion".
					On Windows it is in "%APPDATA%\Subversion". (Try "echo %APPDATA%",
					note this is a hidden directory.)
				</p>
				<p>There are comments in the file explaining what to do. If you
					don't have
					that file, get the latest Subversion client and run any command; this
					will
					cause the configuration directory and template files to be created.
				</p>
				<p>Example : Edit the 'servers' file and add something like :
				</p>
				<pre>
					[global]
					http-proxy-host = your.proxy.name
					http-proxy-port = 3128
				</pre>

			</subsection>

			<subsection name="Committer access">

				<p>Everyone can access the Apache Podling Subversion repository via
					HTTPS,
					but OpenMeetings Committers must checkout the Subversion repository
					via HTTPS.
				</p>
				<pre>
					% svn checkout
					https://svn.apache.org/repos/asf/incubator/openmeetings
				</pre>
			</subsection>
		</section>

		<section name="Submitting Code Changes">
			<subsection name="Submitting a patch">

				<p>If you make changes to OpenMeetings, and would like to contribute
					it to the project, you should open a JIRA issue and discuss the
					merits
					of the proposal with the developer community. If there is agreement,
					create a patch and attach it to the JIRA issue.
				</p>
				<p>
					To create a patch, execute the svn diff command. This creates a patch
					that
					can easily be uploaded to a JIRA issue. A good name for the patch
					includes
					the JIRA issue name, e.g. OPENMEETINGS-104.patch. If there are several
					patches
					for the same JIRA issue, you might include your initials, e.g.
					OPENMEETINGS-104.clr.patch
				</p>
				<pre>
					% svn diff &gt; OPENMEETINGS-104.clr.patch
				</pre>
			</subsection>

			<subsection name="Committing changes to subversion">
				<p>
					To commit changes to the subversion repository, you must be an
					OpenMeetings committer. See
					<a href="get-involved.html">get involved</a>
					for information on how to become a committer and how to set up your
					password once you become a committer.
				</p>

				<p>
					Once your password is set, you can use a command like this to commit:
				</p>
				<pre>
					$&gt; svn commit --username your-username
					Authentication realm: &lt;https://svn.apache.org:443&gt; ASF Committers
					Password for 'your-username': your-password
				</pre>
				<p>You can also pass your password on the command line directly, but
					this is a security problem on multiuser unix computers (the command
					line
					arguments are available via the ps command). Here is the command if you
					are Windows or a single user unix computer:
				</p>
				<pre>
					$&gt; svn commit --username your-username --password your-password
				</pre>
				<p>Remember to replace 'your-username' and 'your-password' with
					your actual username and password on svn.apache.org.
				</p>

			</subsection>
		</section>

		<section name="Building Podling from Source">
			<p>
				<!-- ***************** TBD ************************** -->
				<!-- ***************** TBD ************************** -->
				<!-- ***************** TBD ************************** -->
				<!-- ***************** TBD ************************** -->
				<!-- ***************** TBD ************************** -->
				<!-- ***************** TBD ************************** -->
				<!-- ***************** TBD ************************** -->
			</p>

		</section>

		<section name="Using Subversion on Windows with cygwin">

			<p>
				If you use Subversion on Windows under cygwin, you may find that the
				Subversion client automatically assigns the executable property to
				non-executable files. In that case, you would see this at the bottom
				of
				an
				<em>svn diff</em>
				of the file:
			</p>
			<pre>
				Property changes on: test/sql/derby/datastoreidentity/schema1.sql
				___________________________________________________________________
				Name: svn:executable
				+ *
			</pre>
			<p>This section explains the source of the problem and suggests some
				actions to avoid it.
			</p>

			<subsection name="Background">

				<p>Subversion carries executable information in the built-in
					property
					called svn:executable. This property, unlike others, may be present
					or absent, but it has no value. You can add it or delete it, but you
					cannot change its value.
				</p>
				<p>In theory, Subversion ignores Windows file permissions and by
					default
					does not set svn:executable. However, cygwin svn acts like Unix svn and
					determines the svn:executable property based on file permissions.
				</p>
				<p>
					If you create a file from the cygwin command line, by default it is
					executable only if the filename ends with .bat, .com or .exe, or if
					its
					content starts with #!. [This is what the doc says, but you may see -x
					for all files.] If you create a file using a Windows tool, by default
					its Windows permissions are executable by all. Cygwin interprets
					the
					Unix-style permissions this way as well. If the file is executable by all,
					cygwin svn sets the svn:executable property on the file when you
					invoke
					<em>svn add</em>
					.
				</p>
			</subsection>
			<subsection
				name="Removing existing executable properties from the repository">

				<p>You can use svn propdel to remove the svn:executable property
					from your
					working copy.
				</p>
				<pre>
					svn propdel -R svn:executable .
				</pre>
				<p>will recursively remove the svn:executable property from all of
					the
					files below the current directory. You can use this and commit the
					files to clean the repository if necessary.
				</p>

			</subsection>
			<subsection
				name="Preventing Subversion from adding unwanted executable 
properties">

				<p>
					Windows/cygwin users who don't want to have to think about using
					<em>svn
						propdel
					</em>
					or
					<em>chmod</em>
					on each added file can use a non-cygwin
					version of svn. The Subversion 1.2.3 Win32 binaries, downloadable from the
					link at the bottom of
					<a rel="nofollow" href="http://subversion.tigris.org/project_packages.html">
						http://subversion.tigris.org/project_packages.html
					</a>
					, appear to work
					well. After installation add the svn.exe location to your Windows PATH
					variable. If you are switching from cygwin svn to Win32 svn
				</p>
				<ol type="1">
					<li>
						<p>Remove the subversion component from your cygwin installation
							because when svn is invoked from a cygwin window, the cygwin
							version is
							found even if your cygwin/bin directory is later on the path. (In the
							Select Packages window of the setup wizard, navigate to the
							subversion
							package in the Devel. category. Click on the status icon until Uninstall
							is displayed. Click next and continue through the wizard until
							installation
							is complete.)
						</p>
					</li>
					<li>
						<p>Copy the servers file and the auth folder from the sygwin
							~/.subversion
							directory to C:\Documents and
							Settings\&lt;user&gt;\Application Data\Subversion used by Win32
							subversion.
						</p>
					</li>
				</ol>
				<p>Note that windows svn uses backslash as the path separator when
					displaying file names. You cannot just copy and paste this file
					name
					to another svn command when running from within a cygwin shell.
					You need to enclose the file name into double quotes.
				</p>
				<p>Alternatively, Windows users can set file permissions in Windows
					Explorer. (Right-click on the top-level folder &amp; select
					Properties.
					Select the Security tab. Click Advanced. Remove all instances of
					Read &amp; Execute from the Permission Entries. Click "Reset
					permissions
					on all child objects and enable propogations of inheritable
					permissions".
					Click Apply. OK. OK.) You will have to do this again when you do a clean
					checkout to a new directory.
				</p>

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