Class ObjectDirectory
- java.lang.Object
-
- org.eclipse.jgit.lib.ObjectDatabase
-
- org.eclipse.jgit.internal.storage.file.ObjectDirectory
-
- All Implemented Interfaces:
AutoCloseable
public class ObjectDirectory extends ObjectDatabase
Traditional file system basedObjectDatabase
.This is the classical object database representation for a Git repository, where objects are stored loose by hashing them into directories by their
ObjectId
, or are stored in compressed containers known asPack
s.Optionally an object database can reference one or more alternates; other ObjectDatabase instances that are searched in addition to the current database.
Databases are divided into two halves: a half that is considered to be fast to search (the
PackFile
s), and a half that is considered to be slow to search (loose objects). When alternates are present the fast half is fully searched (recursively through all alternates) before the slow half is considered.
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close()
Close any resources held by this database.void
create()
Initialize a new object database at this location.boolean
exists()
Does this database exist yet?File
fileFor(AnyObjectId objectId)
Compute the location of a loose object file.long
getApproximateObjectCount()
Get a quick, rough count of objects in this repository.File
getDirectory()
File
getPackDirectory()
Getter for the fieldpackDirectory
.Collection<Pack>
getPacks()
File
getPreservedDirectory()
Getter for the fieldpreservedDirectory
.Set<ObjectId>
getShallowCommits()
boolean
has(AnyObjectId objectId)
Does the requested object exist in this database?ObjectDatabase
newCachedDatabase()
Create a new cached database instance over this database.org.eclipse.jgit.internal.storage.file.ObjectDirectoryInserter
newInserter()
Create a newObjectInserter
to insert new objects.PackInserter
newPackInserter()
Create a new inserter that inserts all objects as pack files, not loose objects.ObjectReader
newReader()
Create a newObjectReader
to read existing objects.Pack
openPack(File pack)
void
setShallowCommits(Set<ObjectId> shallowCommits)
Update the shallow commits of the current repositoryString
toString()
-
Methods inherited from class org.eclipse.jgit.lib.ObjectDatabase
open, open
-
-
-
-
Constructor Detail
-
ObjectDirectory
public ObjectDirectory(Config cfg, File dir, File[] alternatePaths, FS fs, File shallowFile) throws IOException
Initialize a reference to an on-disk object directory.- Parameters:
cfg
- configuration this directory consults for write settings.dir
- the location of theobjects
directory.alternatePaths
- a list of alternate object directoriesfs
- the file system abstraction which will be necessary to perform certain file system operations.shallowFile
- file which contains IDs of shallow commits, null if shallow commits handling should be turned off- Throws:
IOException
- an alternate object cannot be opened.
-
-
Method Detail
-
getDirectory
public final File getDirectory()
-
getPackDirectory
public final File getPackDirectory()
Getter for the field
packDirectory
.- Returns:
- the location of the
pack
directory.
-
getPreservedDirectory
public final File getPreservedDirectory()
Getter for the field
preservedDirectory
.- Returns:
- the location of the
preserved
directory.
-
exists
public boolean exists()
Does this database exist yet?- Overrides:
exists
in classObjectDatabase
- Returns:
- true if this database is already created; false if the caller
should invoke
ObjectDatabase.create()
to create this database location.
-
create
public void create() throws IOException
Initialize a new object database at this location.- Overrides:
create
in classObjectDatabase
- Throws:
IOException
- the database could not be created.
-
newInserter
public org.eclipse.jgit.internal.storage.file.ObjectDirectoryInserter newInserter()
Create a newObjectInserter
to insert new objects.The returned inserter is not itself thread-safe, but multiple concurrent inserter instances created from the same
ObjectDatabase
must be thread-safe.- Returns:
- writer the caller can use to create objects in this database.
-
newPackInserter
public PackInserter newPackInserter()
Create a new inserter that inserts all objects as pack files, not loose objects.- Returns:
- new inserter.
-
close
public void close()
Close any resources held by this database.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in classObjectDatabase
-
getPacks
public Collection<Pack> getPacks()
-
getApproximateObjectCount
public long getApproximateObjectCount()
Get a quick, rough count of objects in this repository. Ignores loose objects. Returns-1
if an exception occurs.- Specified by:
getApproximateObjectCount
in classObjectDatabase
- Returns:
- quick, rough count of objects in this repository,
-1
if an exception occurs
-
openPack
public Pack openPack(File pack) throws IOException
Add a single existing pack to the list of available pack files.
- Throws:
IOException
-
has
public boolean has(AnyObjectId objectId)
Does the requested object exist in this database?This is a one-shot call interface which may be faster than allocating a
ObjectDatabase.newReader()
to perform the lookup.- Overrides:
has
in classObjectDatabase
- Parameters:
objectId
- identity of the object to test for existence of.- Returns:
- true if the specified object is stored in this database.
-
getShallowCommits
public Set<ObjectId> getShallowCommits() throws IOException
- Overrides:
getShallowCommits
in classObjectDatabase
- Returns:
- the shallow commits of the current repository
- Throws:
IOException
- the database could not be read
-
setShallowCommits
public void setShallowCommits(Set<ObjectId> shallowCommits) throws IOException
Description copied from class:ObjectDatabase
Update the shallow commits of the current repository- Overrides:
setShallowCommits
in classObjectDatabase
- Parameters:
shallowCommits
- the new shallow commits- Throws:
IOException
- the database could not be updated
-
fileFor
public File fileFor(AnyObjectId objectId)
Compute the location of a loose object file.
-
newCachedDatabase
public ObjectDatabase newCachedDatabase()
Create a new cached database instance over this database. This instance might optimize queries by caching some information about database. So some modifications done after instance creation might fail to be noticed.- Overrides:
newCachedDatabase
in classObjectDatabase
- Returns:
- new cached database instance
-
newReader
public ObjectReader newReader()
Create a newObjectReader
to read existing objects.The returned reader is not itself thread-safe, but multiple concurrent reader instances created from the same
ObjectDatabase
must be thread-safe.- Specified by:
newReader
in classObjectDatabase
- Returns:
- reader the caller can use to load objects from this database.
-
-