<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="/projects/lists.php?list=byproject&amp;param=technology.dash"/>
  
  <!--
     - 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>