git-tfs/git-tfs — pull request #493 by wyand (2013-11-21 22:57:37+00:00)
Title: added optional verify-and-retry for fetch, clone, and quick-clone

the definition of a catch-22:
:rage: working over a crufty, unreliable VPN connection to overseas TFS
:smile: git-tfs
:confounded: cant initialize git-tfs because even pulling individual changesets frequently fails

solution:
* added `--verify-all` option causing all files pulled from TFS to be verified by size and hash value (available on clone, quick-clone, and fetch).
* added a retry for files that fail the verification with `IWorkspace.ForceGetFile`.
* added `--verify-max-retries` option to limit the retry attempts. if exceeded without success, the processing will continue as if `--verify-all` was not enabled.

plumbing:
* added read-only `HashValue` property to `IItem` to expose the TFS server's hash value.
* added `TfsDownloadVerifier` class to handle verification and dispatch necessary retries via delegate.
* update `ITfsWorkspace.Get(int)` to take in a list of expected items along with the snapshot changeset number; since the method won't necessarily be able to discover what items to validate, and the only call location already has the list (not super elegant).
* added `--verify-all` and `--verify-max-retries` options to `Fetch`, inherited by clone and quick clone.