keep in CVS:
* Clean up rules, sheriff, and status messages so they don't
automatically stick a break at the end of the text. Tinderbox page
admins should manage that directly. Also trim the text up to avoid
extra whitespace triggering inclusion of the text.
* In the who/guilty column, only pass the "above-build-time" in to
who_menu() when we're not in the first row. If we are in the first
row, then pass in undefined. Previously, we passed this value in
regardless and the top row of committers would end up with a non-
sensical commit range. This fixes that problem.
* Add build start, end, and elapsed time where possible. This is wrapped
in an always-true conditional in case we ever need to turn it off or
decide we want to trigger this behaviour through a config parameter.
* In who_menu, properly handle when an undefined value is passed in
for $maxdate. Assume that one won't be given and then append it to the
href string if it is given.
* Add the supporting JavaScript code for the start, end, and elapsed time
work.
* This code gracefully handles the case that no time_info or elapsed
time info is given by just not including that information in the
pop-up window.
* Some functions are included here for archive's sake. My earlier,
non-committed implementation did more work in the JS itself but I
later moved most of it into the Perl code to simplify things.
* I used this opportunity to do general clean-up on the blurb text
so that the two separate codepaths (based on the availability of
layers) are more unified.
* is_today() checks if a time_t value occurs on the same day as now.
* both_are_today() checks that two time_t values occur on the same day as
now (by calling is_today() for both).
* get_local_hms() parses a time_t value and returns either a string in
the format of "HH:MM" or "mm/DD HH:MM".
* get_time_difference() takes two time_t values and returns a human-
readable string describing the amount of time by which they differ.
* format_time_difference() does the string work necessary for
get_time_difference() and is called by that subroutine.