This file describes the coverage tracking script and the coverage dashboard.

ABSTRACT:
The intention of this small tracking system is to track code coverage data
over time. Since code coverage is continuously recomputed on the build bots,
the track_coverage.py script is intended to run on the build bot as a cron job
and extract the data from there. The dashboard doesn't care how often this
script runs, but running each hour should be more than enough.

The track_coverage.py script uses OAuth to authenticate itself. In order to do
this, it needs two files: consumer.secret and access.token. The consumer secret
is known within the organization and is stored in a plain file on the bot 
running the scripts (we don't want to check in this secret in the code in the
public repository). The consumer secret is a plain file with a single line
containing the secret string.

The access.token file is generated by request_oauth_permission.py. It does this
by going through the three-legged OAuth authorization process. An administrator
of the dashboard must approve the request from the script. Once that is done,
access.token will be written and track_coverage.py will be able to report
results.

HOW TO RUN LOCALLY:
Follow the following instructions:
http://code.google.com/appengine/docs/python/gettingstartedpython27/devenvironment.html
The dashboard can be started on 127.0.0.1:8080 using the dev_appserver.py script 
as described in the above URL (and in the following 'hello world' page).

HOW TO DEPLOY:
Follow the following instructions:
http://code.google.com/appengine/docs/python/gettingstartedpython27/uploading.html