log: fix log -f slow path to actually follow history

The revset created when -f was used with a slow path (for patterns and
directories) did not actually contain any logic to enforce follow. Instead it
was depending on the passed in subset to already be limited (which was limited
to :. but not ::.). This fixes it by adding a '& ::.' to any -f log revset.

hg log -f <file> is still broken, in that it can return results that aren't
actually ancestors of the current file, but fixing that has major perf
implications, so we'll deal with it later.
repoview: allow methods on the proxy class to be replaced

It doesn't seem to be a common idiom for repo instances, but the status() method
is replaced in largefiles' purge() override.  Since __setattr__ is implemented
in repoview to setattr() on the unfiltered repo, the replacement method wouldn't
get called unless it was invoked with the unfiltered repo, because the filtered
repo remains unchanged.

Since this doesn't seem to be commonly used, I didn't bother to filter out
methods that perhaps shouldn't be replaced, such as changelog().
largefiles: drop the unfiltered repo usage in overridepurge()

Now that repoview supports replacing methods, we don't need this hack.
log: fix log revset instability

The log/graphlog revset was not producing stable results since it was
iterating over a dict. Now we sort before iterating to guarantee a fixed order.

This fixes some potential flakiness in the tests.
tests: test coverage for empty graft

A future change will add a warning to the quiet rebase.
graft: show more useful status information while grafting

Show status messages with first line of commit description and names, like
  grafting 12:2647734878ef "fork" (tip)

This gives more context for the user when resolving conflicts.
graft: give helpful warning for empty grafts

It was just showing a status message with the internal revision number.
Instead, show a warning like

note: graft of 27:3aaa8b6725f0 "28" created no changes to commit

(message tweaked in-flight by mpm)
graft: show hashes in user-facing messages

Graft was in various places just showing the revision number in status
messges. Instead, also show the stable and more useful short hash.
graft: drop cset description from empty commit message

This is either already redundant in the output or too verbose in quiet
mode.
merge with stable
fncache: drop dedicated 'onclose' function in favor of  'tr.addfinalize'

Now that we have a shiny generic mechanism, we can use it.
fncache: document the fact fncache is outdate at hook run time

Using 'addfinalize' to generate 'fncache' means that no pending version of the
file will be generated for the hooks. We would have to use the
'addfilegenerator' method to get such result. However the 'fncachevfs' (who
decide that a write is necessary) have no access to the transaction to register
such file generation at add time. Having the transaction accessible to the 'vfs'
is too much trouble for no benefit. This outdated 'fncache' file at hook time is
not expected to be an issue.

The previous move from 'onclose' to 'addfinalize' had no impact on this timing.
I'm documenting it now because I looked at it.
transaction: remove the redundant 'onclose' mechanism

It is superseded by the 'addfinalize' function and all its user have been
migrated.
transaction: remove the 'onabort' mechanism

It has no known users. If someones needs similar functionality, a new 'addabort'
method similar to 'addfinalize' should be added.
test-graft: use strip extension instead of mq extension

It only needs strip, no reason to load all of mq.