Don't discard walker based fetch error information
If a protocol error happens that prevents us from obtaining an object
we need to report that to the end-user, so they can take action to fix
the problem. This is also the case of a local disk full error; if we
cannot write to the local repository's object database the user must
be informed so they can correct the problem.
Some parts of the WalkFetchConnection were ignoring IOException in the
hope that we could silently mask the error by fetching the same object
from another source, such as a pack file or an alternate repository. Not
all errors however will be correctable by looking at another location so
we need to collect them and report the problems we had if we could not
fetch the object locally.
Since multiple errors may be related to the fetch failure we need to
collect them up into a CompoundException, allowing the UI level get
that and report the complete list of errors to the end-user. This is
easily possible if we failed to not only read the object as a loose
object but also failed to obtain a pack file index to search for the
object within that pack.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>