<html>
  <head>
    <title>
      Mylar FAQ
    </title>
  </head>
  <body>
    <center><h1>Mylar Contributor Reference</h1></center>
	<p>Those interested in contributing should start out by emailing
<a href="mailto:mylar-dev@eclipse.org">mylar-dev@eclipse.org</a> in order to get 
an idea of the current priorities.&nbsp; Also refer to the list of <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylar&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&keywords_type=allwords&keywords=helpwanted&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0=">
reports marked help wanted</a>.&nbsp;</p>
	<ul>
		<li><a href="#contributing-intro">Introduction</a></li>
		<li><a href="#contributing-setup">Workspace setup</a></li>
		<li><a href="#tests">Running tests</a></li>
		<li><a href="#bootstrap">Working bootstrapped</a></li>
		<li><a href="#contributing-patches">Contributing patches</li>
<!--	<li>Building</li>-->
		</a></li>
		<li><a href="#building-jira">Building the JIRA Connector</a></li>
		<li><a href="#building-trac">Building the Trac Connector</a></li>
		<li><a href="#building-dist">Building a distribution</a></li>
		<li><a href="#web-site-authoring">Web site authoring</a></li>
	</ul><hr width="50%">
	<h3>&nbsp; <br>
	<a name="contributing-setup">Workspace setup</a></h3>
	<ul>
		<li>Building Mylar feature from HEAD requires
		the latest Eclipse milestone release and
		<a href="http://java.sun.com/j2se/1.5.0/download.jsp">JDK 1.5</a>.&nbsp; 
		Associate the J2SE-1.5 with your installed JRE on the Execution Environments preference page. </li>
		<li>In the CVS Repositories view, add the following CVS location:
		<b>HOST =</b> dev.eclipse.org&nbsp; <b>Repository Path</b>: 
		/cvsroot/technology.<br>If you do not have an account you may enter <b>anonymous</b> for the user name 
and leave the password blank.</li>
		<li>Check out all of the projects under org.eclipse.mylar (except mylar.jira, 
		mylar.sandbox, mylar.viz, and mylar.zest.* which have additional 
		dependencies).&nbsp; There should be no errors or warnings.</li>
		<li>Run org.eclipse.mylar.tests.AllTests as a JUnit Plug-in Test, with 
		assertions enabled.&nbsp; All tests should pass and there should be no 
		console output.</li>
	</ul>
	<hr>
	<h3><a name="tests">Running tests</a></h3>
	<p>Each component has it's own All&lt;Component&gt;Tests suite, and all can be run 
	via org.eclipse.mylar.tests.AllTests.&nbsp; </p>
	<ul>
		<li>Add the following to the test configuration under Arguments -&gt; VM 
		Arguments: -enableassertions -Xmx384M</li>
		<li>Add a <b>credentials.properties</b> file to 
		org.eclipse.mylar.bugzilla.tests, and define &quot;username: xxx&quot; and 
		&quot;password: yyy&quot; in it. Email mylar-dev@ecipse.org for a username and 
		password.</li>
	</ul>
	<hr>
	<h3><a name="building-jira">JIRA Connector</a></h3>
	<ul>
		<li>Get the latest <a href="http://subclipse.tigris.org/download.html">
		Subclipse</a> plug-in, e.g. from the following update site: 
		subclipse.tigris.org/update_1.0.x</li>
		<li>Set up a Subversion repository for
		<a href="http://jira-dashboard.tigris.org/">JIRA Dashboard</a> (see the
		<a href="http://jira-dashboard.tigris.org/servlets/ProjectSource">JIRA 
		Dahsboard doc</a> for troubleshooting):<ul>
			<li>username: <code>guest</code> </li>
			<li>password: &lt;blank&gt;</li>
			<li>repository:
			<a href="http://jira-dashboard.tigris.org/svn/jira-dashboard/trunk">
			http://jira-dashboard.tigris.org/svn/jira-dashboard/trunk</a></li>
		</ul>
		</li>
		<li>Check out the JIRA Dashboard Core features:<ul>
			<li>org.tigris.jira.core</li>
			<li>org.tigris.jira.core.soap</li>
			<li>org.tigris.jira.core-feature</li>
		</ul>
		</li>
		<li>Create a working set that excludes <i>org.tigris.jira</i> plug-ins 
		so that you have no warnings in the Problems list</li>
		<li>Note that the JIRA connector has it's own test suite: <i>
		org.eclipse.mylar.jira.tests.AllJiraTests</i></li>
	</ul>
	<hr>
	<h3><a name="building-trac">Trac Connector</a></h3>
	<ul>
		<li>Get the latest <a href="http://subclipse.tigris.org/download.html">
		Subclipse</a> plug-in, e.g. from the following update site: 
		subclipse.tigris.org/update_1.0.x</li>
		<li>Set up a Subversion repository for
		<a href="https://oss.steffenpingel.de/">
		oss.steffenpingel.de</a>:
		<ul>
			<li>repository:
			<a href="https://oss.steffenpingel.de/svn/mylar-trac-connector/trunk">
			https://oss.steffenpingel.de/svn/mylar-trac-connector/trunk</a></li>
		</ul>
		</li>
		<li>Check out the library which is required by the connector:<ul>
			<li>org.apache.xmlrpc</li>
		</ul>
		</li>
		<li>Note that the Trac connector has it's own test suite: <i>
		org.eclipse.mylar.trac.tests.AllTracTests</i></li>
	</ul>
	<hr>
<h3><a name="bootstrap">Working bootstrapped</a> </h3>
<p>Working bootstrapped (i.e. self-hosted) makes eating your own dog food easier 
and avoids having to update to dev builds:</p>
	<ul>
		<li>Set up a fresh workspace launched from an Eclipse that does not have 
		Mylar installed, and check out Mylar into 
		it.</li>
		<li>Create a new <i>Launch Configuration</i>, point it at your workspace, 
		and work in that.&nbsp; Note that the launching workspace will typically 
		consume very little memory.</li>
		<li>Whenever your changes make it into HEAD close your runtime 
		workspace, update from CVS, and then re-launch.&nbsp; It is possible to 
		run in debug mode so that the changes apply to the workspace immediately 
		after synch, but this can cause problems with the running workspace if 
		classes change or go missing.</li>
	</ul>
	<hr>
<h3><a name="contributing-patches">Contributing patches</a> </h3>
	<p>All contributions to Mylar including patches should be made by using 
	Mylar in order to ensure that we
	<a href="http://en.wikipedia.org/wiki/Eat_one's_own_dog_food">eat our our 
	own dog food</a>.&nbsp; A task context should be attached to each patch to 
	make applying and evolving it easier.</p>
	<ul>
		<li>Each patch should correspond to a single bug report, and a single 
		patch should be made for each set of changes to be reviewed.</li>
		<li>With few exceptions patches should be accompanied by a JUnit test, 
		and in general unit tests are one of the most valuable and long-lived 
		contributions.&nbsp; If you are having trouble writing a test (e.g. 
		trickiness verifying what happens in the UI) comment on the 
		corresponding bug report so that we can point you at similar test cases 
		or consider extending the test harness if needed. </li>
		<li>Minimize the amount of changes to existing code to make review 
		easier.&nbsp; </li>
		<li>Synchronize often to ensure you have the latest code.&nbsp; Once you 
		start modifying resources, put the Synchronize view in Outgoing mode and press 
		the Change Set button so that Mylar tracks the context for the patch.</li>
		<li>Before creating a new JUnit test class class check the components test 
		suite for similar test cases (e.g. 
		<tt>AllTasklistTests</tt>).</li>
		<li>Set the formatter by importing org.eclipse.mylar/developer/javaFormatterSettings.xml 
		into Window -&gt; Preferences -&gt; Java -&gt; Code Style -&gt; Formatter.&nbsp; 
		Format code using Eclipse's formatter (Ctrl+Shift+F) 
		and ensure that no&nbsp; have been added.</li>
		<li>Add an @author tag to each class that you create.</li>
		<li>Ensure that there is no console output.&nbsp; For logging errors use 
		<tt>MylarStatusHandler</tt>.</li>
	</ul>
	<p>To submit:</p>
	<ul>
		<li>Ensure there are no build errors, warnings, and that <tt>org.eclipse.mylar.tests.AllTests</tt> passes.</li>
		<li>Synchronize using Incoming mode and ensure that there are no 
		conflicts, and merge them locally if there are.</li>
		<li>Right click the task context change set (or the project containing 
		the patch--patches should be made for a project, not a file), press Team 
		-&gt; Create Patch, and make the file suffix &quot;.txt&quot;.</li>
		<li>Attach the patch to the bug report, and <i>indicate in the comment 
		what testing was done to validate it</i> (e.g. unit test coverage, 
		manual tests performed).</li>
		<li>Attach the task context to the bug report.</li>
	</ul>
	<hr>
<h3><a name=building-dist>Building a distribution</a></h3>
<ul>
	<li>Using PDE Build support to create a Mylar distribution from HEAD, using 
	a plain Eclipse 3.2<ul>
	<li>org.eclipse.mylar-feature/feature.xml -&gt; Overview -&gt; change version 
	number to current date (e.g. 0.4.7.v20060125-0800)<ul>
	<li>On Plug-ins tab -&gt; Versions... -&gt; Force feature version into plug-in and 
	fragment manifests</li>
	<li>Repeat above for org.eclipse.mylar-bugzilla-feature.xml</li>
</ul>
	</li>
	<li>org.eclipse.mylar-site/e3.2/site.xml<ul>
	<li>Delete old features (grayed out)</li>
	<li>Add new mylar-bugzilla and mylar features</li>
	<li>Hit Build All (if this fails restart Eclipse and try again)</li>
</ul>
	</li>
</ul>
	</li>
	<li>To install, add the path of org.eclipse.mylar-site/e3.2/site.xml as a 
	local update site</li>
	<li>Bugzilla support can be built independently of the Mylar UI by checking 
	out the following projects mylar.bugzilla.core, mylar.bugzilla.ui, 
	mylar.tasklist, mylar.core </li>
</ul>
	<p>Merging and building the 3.1 branch:</p>
	<ul>
		<li>Right-click the org.eclipse.mylar.java, mylar.ide, and mylar.xml 
		project, <i>Team</i> -&gt; <i>Switch to Another Branch...</i>, then <i>Refresh</i> the 
		<i>Branches</i> 
		and select <b>e_3_1 </b></li>
		<li>The list of files that should not be overwritten is in: 
		org.eclipse.mylar-site/merge.text</li>
	</ul>
	<p>Deploying:</p>
	<ul>
		<li>Instructions are in org.eclipse.mylar-site/release.txt</li>
	</ul>
	<hr>
<h3><a name=web-site-authoring>Web site authoring</a></h3>
<ul>
	<li>Create a new CVS location: dev.eclipse.org:/cvsroot/org.eclipse</li>
	<li>Check out www/mylar as a project</li>
	<li>To push documentation from org.eclipse.mylar.doc to the web site use the 
	targets in mylar/build.xml</li>
</ul>
	<p>&nbsp; </p>
</body></html>