Allow PackFile to lazily load its PackIndex on first demand
commit7545f933f9da5fee7939600022c9271dfb705c26
authorShawn O. Pearce <spearce@spearce.org>
Thu, 12 Feb 2009 02:36:54 +0000 (11 18:36 -0800)
committerRobin Rosenberg <robin.rosenberg@dewire.com>
Wed, 18 Feb 2009 21:22:39 +0000 (18 22:22 +0100)
tree63c5297471dd171c0b653c3790f8cbc197ab807e
parentc438ba9797ac1f5b111a6a722bcdf9a1724d8f2e
Allow PackFile to lazily load its PackIndex on first demand

Repositories which contain several pack files may have a very large
historical pack holding the bulk of the project data, and a much
smaller more recent pack holding current data.  In such cases we
may be able to answer queries entirely by reading the recent pack
index, and never reading the larger historical index.  Since JGit
reads the entire index into memory, avoiding reading the larger
index can save some time on short uses of a Repository.

This change only sets up the lazy loading of the index.  Because
the packs aren't sorted by newest-to-oldest in Repository we are
still very likely to demand load packs we didn't need to examine.

This change also opens the door for potentially releasing one or
more PackIndex objects when memory gets low, but doesn't actually
implement any sort of soft reference semantics.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java
org.spearce.jgit/src/org/spearce/jgit/lib/PackedObjectLoader.java
org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java