subtree: make "all" default target of Makefile

You should be able to run "make" in contrib/subtree with no
arguments and get the "all" target. This was broken by
8e2a5cc (contrib/subtree/Makefile: use GIT-VERSION-FILE,
2014-05-06), which put the rule for GIT-VERSION-FILE higher
in the file.

We can fix this by putting an empty "all::" target at the
top of the file. That fixes this instance and future-proofs
against it happening again.

Reported-by: Jack Nagel <jacknagel@gmail.com>
tree-diff: use pathspec tries

The tree-diff currently matches each pathspec against every
entry of the tree. For the common case of a handful of
pathspecs, this is not a big deal. However, if you have a
large number of pathspecs, it gets noticeably slow.

Now that we have the pathspec_trie optimization, we can do
much better (at least for simple cases without wildcards).
Here are numbers for running "git rev-list" with limiting
pathspecs of varying sizes, both before and after this
patch:

Test                 origin              HEAD
---------------------------------------------------------------
4001.2: size=1       0.12(0.11+0.00)     0.12(0.12+0.00) +0.0%
4001.3: size=2       0.17(0.16+0.00)     0.16(0.15+0.01) -5.9%
4001.4: size=4       0.17(0.17+0.00)     0.17(0.17+0.00) +0.0%
4001.5: size=8       0.21(0.20+0.00)     0.20(0.20+0.00) -4.8%
4001.6: size=16      0.25(0.24+0.00)     0.21(0.20+0.00) -16.0%
4001.7: size=32      0.31(0.31+0.00)     0.21(0.20+0.00) -32.3%
4001.8: size=64      0.43(0.41+0.01)     0.21(0.21+0.00) -51.2%
4001.9: size=128     0.73(0.72+0.00)     0.22(0.21+0.00) -69.9%
4001.10: size=256    2.02(2.02+0.00)     0.37(0.36+0.00) -81.7%
4001.11: size=512    6.78(6.78+0.00)     0.64(0.64+0.00) -90.6%
4001.12: size=1024   23.67(23.67+0.02)   1.22(1.20+0.01) -94.8%

For small pathspecs, we produce no real difference (which is
good; we know we are asymptotically better, but we have not
regressed our constant factor). Between 16 and 32 pathspecs we
start to see some small improvement, and the benefit keeps
growing with the number of pathspecs.

Obviously these large-pathspec cases are unusual. But you
might use them, for example, if the pathspecs were generated
programatically (e.g., if you want the history of all files
that are in Documentation/ _now_, not what was historically
ever there, you would expand the pathspec at the current
tree, and feed the result to rev-list).
blame-tree: narrow pathspec as we traverse

[WIP: this needs to be adjusted to handle the pathspec
      tries in drop_pathspec, and the timing numbers
      should be re-run]

As we find out the "last touched" for each path, we cease to
care about that path. However, we traditionally have not
told the revision-walking machinery about this, for two
reasons:

  1. Munging the pathspecs mid-traversal is not an
     officially supported thing to be doing. It does seem to
     work, though, and with Duy's recent pathspec
     refactoring, it's fairly straightforward.

  2. The pathspec machinery is slow. We know have to look at
     each pathspec to see if each tree entry is interesting.
     And since our cost to handle a diff_filepair is so
     cheap, it doesn't really help us much.

It turns out that (2) is not quite right, though. For the
diffs themselves, limiting the pathspec doesn't help at all.
But it does mean that we can simplify history more
aggressively, which may mean avoiding whole swaths of
history that don't touch interesting paths. This happens
especially near the end of the traversal, when we are only
interested in a few paths, and there are many side branches
that do not touch any of them.

And as of the last commit, the pathspec machinery is no
longer quadratic, so the cost to use it is easily worth
paying, even for large trees.

Here are runs of `git blame-tree --max-depth=0` for
torvalds/linux (a complex history with a small root tree)
and git/git (a flat hierarchy with a large root tree):

          torvalds/linux       git/git
          --------------    --------------
          before  after     before  after
    real  6.061s  0.519s    1.445s  0.566s
    user  5.920s  0.488s    1.440s  0.556s
    sys   0.144s  0.028s    0.004s  0.008s

Note that the output may change slightly in some cases due
to the history pruning. This should be acceptable, as either
output is correct in these cases (e.g., scenarios like a
cherry-picked commit on two parallel branches).
blame-tree: teach drop_pathspec about pathspec tries

WIP: All of drop_pathspec should really go into
     pathspec.[ch]. This commit should be combined with the
     drop_pathspec bits from the previous one, and be their
     own separate patch.
Merge branch 'jk/archive-reachability' into HEAD

* jk/archive-reachability:
  t5000: drop tag to supposedly unreachable object
  archive: ignore blob objects when checking reachability
  list-objects: optimize "revs->blob_objects = 0" case
  upload-archive: restrict remote objects with reachability check
Merge branch 'jk/author-info-leak' into HEAD

* jk/author-info-leak:
  determine_author_info: stop leaking name/email
  determine_author_info: reuse parsing functions
  use strbufs in date functions
  ident_split: store begin/end pairs in their own struct
  record_author_info: use find_commit_header
  record_author_info: fix memory leak on malformed commit
  commit: provide a function to find a header in a buffer
Merge branch 'jk/bitmap-reuse-delta' into HEAD

* jk/bitmap-reuse-delta:
  preferred base reuse wip
  pack-objects: reuse deltas for thin "have" objects
  pack-bitmap: save "have" bitmap from walk
  t/perf: add perf tests for fetches from a bitmapped server
  t/perf: add infrastructure for measuring sizes
  t/perf/aggregate: factor our percent calculations
  t/perf-lib: factor boilerplate out of test_perf
Merge branch 'jk/bitmap-shallow' into HEAD

* jk/bitmap-shallow:
  pack-objects: turn off bitmaps when we see --shallow lines
Merge branch 'jk/bitmaps' into HEAD

* jk/bitmaps:
  wip -- better protection against corruption
Merge branch 'jk/blame-tree' into HEAD

* jk/blame-tree:
  add blame-tree command
  combine-diff: zero memory used for callback filepairs
  teach tree-diff a max-depth parameter
  within_depth: fix return for empty path
Merge branch 'jk/check-alternate-connectedness' into HEAD

* jk/check-alternate-connectedness:
  check_everything_connected: assume alternate ref tips are valid
  check_everything_connected: use argv_array
Merge branch 'jk/child-cleanup' into HEAD

* jk/child-cleanup:
  send-pack: kill pack-objects helper on signal or exit
Merge branch 'jk/config-cmdline-null' into HEAD

* jk/config-cmdline-null:
  config: teach "git -c" to recognize an empty string
Merge branch 'jk/config-sources' into HEAD

* jk/config-sources:
  show sources of config options (WIP)
Merge branch 'jk/contains-merge-base' into HEAD

* jk/contains-merge-base:
  perf: add tests for tag --contains
  tag: use commit_contains
  commit: provide a fast multi-tip contains function
  add functions for memory-efficient bitmaps
  tag: factor out decision to stream tags
  tag: allow --sort with -n

Conflicts:
	Makefile
Merge branch 'jk/credential-interactive' into HEAD

* jk/credential-interactive:
  wip
Merge branch 'jk/diff-binary-fast' into HEAD

* jk/diff-binary-fast:
  enable diff-PEEKing
  diff_populate_filespec: add a PEEK option
  diff_populate_filespec: convert size_only arg to bitfield
  diff: only load binary files if we are going to diff them
  diff: compare hashes to determine identical binary files
Merge branch 'jk/dumpstat' into HEAD

* jk/dumpstat:
  zeromq dumpstat implementation
  dumpstat-ify upload-pack
  dumpstat to fd
  dumpstat
Merge branch 'jk/faster-blame-tree' into HEAD

* jk/faster-blame-tree:
  blame-tree: teach drop_pathspec about pathspec tries
  blame-tree: narrow pathspec as we traverse
  tree-diff: use pathspec tries
  pathspec: turn on tries when appropriate
  pathspec: add optional trie index
Merge branch 'jk/filter-branch-example' into HEAD

* jk/filter-branch-example:
  docs/filter-branch: clean up newsubdir example
  update-index: add --clear option