Add UI hint about ability drag select commit range
Make sure Critic can be installed on systems with apache 2.4

Both Ubuntu 13.10 and Debian 8 (jessie) has apache 2.4
Don't crash when serving NoSuchReview error
Add TC for "Don't crash when serving NoSuchReview error"
Don't crash when trying to delete filter that doesn't exist

The error can be repro'd by using "Add Filter" in a review,
then keeping it open in 2 tabs and deleting the added filter
in both tabs.
Add TC for "Don't crash when trying to delete filter that doesn't exist"
Raise an error if invalid user IDs are passed to /addreviewfilters operation
Add TC for "Raise an error if invalid user IDs are passed to /addreviewfilters operation"
Improve hint about fixing repository/database unsync

When a branch in the Git repository is not where it ought to be
according to the database, we reject pushes to it unless the push
resets the Git repository back to where the database thinks it
ought to be.  When rejecting, we output a hint about how to
reset the Git repository using "git push".  The hint wasn't to do
"git push -f", meaning it would sometimes fail.
Read output from guest commands more carefully

It seems readline() doesn't work reliably when the underlying file is
non-blocking.

Note: This code does a lot of string concatenations and is thus far from
optimized.  This is not considered a problem; this is just the testing
framework, after all, and performance is unlikely to suffer that much
anyway.  (Besides, the old code did something quite similar.)
Synchronize host and guest clocks when starting VM instance

The guest clock is often way off (due to how it only runs occasionally and
is reset back to an earlier point all the time) and it's simple enough to
synchronize the clocks.  It also doesn't really matter that much if they
are out-of-sync, but timestamps in commit meta-data tends to be quite far
into the future.
Stop Apache and Critic services when testing has finished
Support pausing testing before and after test groups
Support measuring code coverage when running tests

Add new small module "coverage", which exports a function call() which is
used to call another function with arbitrary (positional and keyword)
arguments and return its return value, while also recording coverage.

Optionally (depending on system configuration) wrap the main WSGI entry
point (critic.main) as well as background service startup using this
call() function.

The coverage module also serves as a command-line script that merges the
results of multiple separate coverage recording sessions into a per-file
and per-context ("wsgi" or specific background service) information and
outputs in JSON form.

The testing framework enables coverage collection when given the new
argument "--coverage".  It then writes (only) the coverage JSON data to
stdout.  The regular testing framework is output to stderr instead in
this mode.  (Using "--quiet" is typically meaningful; when running in
coverage collection mode, actual test results are less interesting.)
Run 'adduser' with "--gecos ''" argument when adding users

This prevents it from prompting for input (full name, room number, et c.)
and from printing (non-fatal) error messages when it can't read from stdin
(which it can't since we run it using "ssh -n".)
Improve "Add Reviewer"/"Add Watcher" actions on /createreview

If a filter was first created for user X and path "", and then for
user X (i.e. same user) and path "/", submitting the review would
crash, due to filter duplication.  Fix this by normalizing empty
paths to "/".  Also add a placeholder text in the path input that
explains what empty means.

Also restructure the client-side code to make it easier to see
that it eliminates  duplicate or conflicting filters, by adding
all filters as properties of an object, where the property name is
made up of all the information that must be unique.

The UI is still rubbish, with no way to see what filters have been
added (other than through their effects on assignments) and no way
to remove previously added filters, but at least users will be
able to submit reviews without crashes.
Share "add filter" dialog code between {show,create}review.js

The dialogs were almost identical already.  The merged code has
class="sourcefont" on the input elements from showreview.js and
placeholder="..." from createreview.js.

The rest of the code was effectively identical, except for the
operation used to actually add the filters.
Call History.{push,replace}State with all three arguments

WebKit/Blink has the annoying bug that the third argument, if
omitted, defaults to the document's base URL instead of its
current URL.  And most Critic pages contain <base href="/">, so
whenever History.{push,replace}State is called with only two
argmuents, the resulting history entry has its URL set/changed
to /, which later on breaks history nagivation.
Add support for githook customization

The customization allows site-specific custom pre-receive hook
checks that can reject updates before they are processed by Critic.
Remove zombie file (background/githook.py)