<project>
  <!--
     - This example is annotated to be instructive. In order to be instructive, the
     - example is a mish-mash of information from a variety of projects. Obviously, 
     - when you write the project-info.xml file for your project, the file will 
     - contain information only about your one project.
    -->
  <!--
     - Unless otherwise specified, all URLs are to be specified using rooted relative
     - paths. In other words:
     -    CORRECT: "/webtools/foo/bar.php"
     -    INCORRECT: "foo/bar.php"
     -    INCORRECT: "http://www.eclipse.org/webtools/foo/bar.php"
    -->
  
  <!--
     - Each Eclipse project as an official name, e.g., 
     - "AJDT - AspectJ Development Tools Project" and a foundation database 
     - key, e.g., "technology.ajdt". These are stored in an Eclipse Foundation
     - database; to change them, contact emo@eclipse.org.  Each project can
     - also have a short name to be used in HTML lists and other horizontally
     - challenged places.
    -->
  <short-name>Dash</short-name>
  
  <!--
     - Each Eclipse project has one or more Bugzilla products and components.
     - Some projects also have a separate web page describing how to submit
     - a bug, how bugs are prioritized, and other useful information.
     - The <bugzilla> collects this information.
     - 
     - <bugzilla url="..."> <product name="..."/> ... </bugzilla>
     - The url is optional; if absent, the url will default to the Bugzilla
     - page of the first product. Multiple <product>s are allowed.
    -->
  <bugzilla>
    <product name="Dash"/>
  </bugzilla>

  <!--
     - Committers and non-committer Contributors are the raison d'etre of 
     - an Eclipse project, thus each project should list and acknowledge these
     - developers. Some of the Committers are 'special' in the sense that
     - they are the project leaders.  The <committers>, <contributors> and
     - <leaders> elements contain the URLs of the project's pages listing 
     - these important people.
     -
    -->
  <team url="/dash/team.php"/>
  
  <!--
     - The source code of each Eclipse project is stored in CVS. Eclipse maintains
     - a number of CVS repositories, thus the <cvs> element specifies which
     - CVS repository and (if applicable) which root path stores this project's
     - source code.
     -
     - A top-level project typically specifies only the repository:
     -     <cvs repository="/cvsroot/tptp"/>
     - A sub-project includes the root path as well:
     -     <cvs repository="/cvsroot/technology/">
     -       <module path="org.eclipse.higgins" />
     -     </cvs>
    -->
  <cvs repository="/cvsroot/technology/">
    <module path="org.eclipse.dash" /> 
  </cvs>

  <!--
     - The description of an Eclipse project shows up in many places: the
     - project's home page, perhaps the /projects/ page listing all the
     - top-level projects, in the Roadmap, and so on. Some of the descriptions
     - are separate HTML files (such as those described in 
     - http://phoenix.eclipse.org/projects/dev_process/project-status-infrastructure.php).
     - It would be nice 
     - This <description> element contains two additional descriptions.
     -    1. The optional <description url="..."> points to a web page with a larger
     -       description of the entire project. 
     -    2. The required <description paragraph-url="..."> points to a file
     -       containing a couple of simple HTML paragraphs describing the project. 
     -       This file is often stored in the /project-info/ directory, thus the
     -       url would be something like "/tptp/project-info/description.html".
    -->
  <description url="/dash/index.php"
     paragraph-url="/dash/project-info/project-page-paragraph.html"/>
  
  <!--
     - In addition to the description, each Eclipse project is also required to
     - provide an up-to-date status summary. "Up to date" means revised at least
     - quarterly. 
     - The required <summary paragraph-url="..."> points to a file
     - containing a number of simple HTML paragraphs with an executive summary
     - of the project status.
     - This file is often stored in the /project-info/ directory, thus the
     - url would be something like "/technology/project-info/executive-summary.html".
    -->
  <summary paragraph-url="/dash/project-info/executive-summary.html"/>

  <!--
     - It is important to help new users get started with an Eclipse project
     - because most Eclipse projects are solving some difficult technical
     - problem and thus are somewhat complex. The <getting-started> element
     - points to a web page on the project's site that describes how to
     - get started using and extending the project's tools and frameworks.
    -->
  <getting-started url="/dash/monkey-help.php?key=installing"/>
  
  <!--
     - Each Eclipse project is required to maintain a current Project IP Log.
     - See http://www.eclipse.org/projects/dev_process/project-log.php
     - The <ip-log> contains the URL of that log.
     -
     - <ip-log url="..."/>
    -->
 <ip-log url="http://dev.eclipse.org/viewcvs/index.cgi/*checkout*/org.eclipse.dash/org.eclipse.eclipsemonkey.help/ip-log.csv?rev=HEAD&amp;cvsroot=Technology_Project&amp;content-type=text/plain"/>

  <!--
     - Each Eclipse project has one or more mailing lists.
     - Some projects also have a separate web page describing these lists
     - while others rely on the main Eclipse mailing lists page.
     - 
     - <mailing-lists url="..."> <list name="..."/> ... </mailing-lists>
     - The url is optional; if absent, the url will default to the Eclipse
     - mailing lists page. Multiple <lists>s are allowed.
     -
     - Note that currently mailing lists must be redundantly listed in
     - the separate project-info/maillist file as well.
    -->
  <mailing-lists>
    <list name="dash-dev"/>
  </mailing-lists>
  
  <!--
     - Each Eclipse project has one or more newsgroups.
     - Some projects also have a separate web page describing these lists
     - while others rely on the main Eclipse newsgroups page.
     - 
     - <newsgroups url="..."> <newsgroup name="..."/> ... </newsgroups>
     - The url is optional; if absent, the url will default to the Eclipse
     - newsgroups page. Multiple <newsgroups>s are allowed.
    -->
  <newsgroups>
    <newsgroup name="eclipse.technology.dash"/>
  </newsgroups>
  
  <!--
     - The dashboard attempts to measure the liveness of a project in many
     - ways including the traffic on the mailing lists and newsgroups. There
     - are other places where significant project-related traffic can occur
     - including blogs and articles. When listed here, the dashboard incorporates
     - them into the liveness measure (or rather, "will incorporate").
    -->
  <articles>
   </articles>
  
  <blogs>
    <blog rss="http://eclipse-projects.blogspot.com/atom.xml"/>
  </blogs>
  
  <!--
     - Each Eclipse project creates (optional) nightly builds and milestone builds,
     - but the important builds of a project are the releases. This section of the
     - status file records the completed (past) and scheduled (future) releases of
     - the project. 
     - The status, name, and date are required attributes. The download is optional
     - and only valid for completed releases; the plan is optional and valid for
     - all releases.  The three valid types of releases are, in order of ascending 
     - uncertainity: "completed", "scheduled", and "tentative".  Dates can be
     - specified as particular day DD/MM/YYYY (e.g., 22/03/2005) or a particular
     - month MM/YYYY (e.g., 10/2005), or a quarter NQYYYY (e.g., 3Q2005). Obviously
     - completed releases should include the exact day the release was completed.
     -
     - In the following example, we have three completed, two scheduled, and one 
     - tentative release.
    -->
  <releases>
  </releases>
</project>